This patch adds support to objdump for disassembly of NFP (Netronome Flow Processor...
authorFrancois H. Theron <francois.theron@netronome.com>
Mon, 30 Apr 2018 16:02:59 +0000 (17:02 +0100)
committerNick Clifton <nickc@redhat.com>
Mon, 30 Apr 2018 16:02:59 +0000 (17:02 +0100)
bfd * Makefile.am: Added NFP files to build.
* archures.c: Added bfd_arch_nfp
* config.bfd: Added NFP support.
* configure.ac: Added NFP support.
* cpu-nfp.c: New, for NFP support.
* elf-bfd.h: Added elf_section_info()
* elf64-nfp.c: New, for NFP support.
* po/SRC-POTFILES.in: Added NFP source files.
* targets.c: Added nfp_elf64_vec
* bfd-in2.h: Regenerate.
* Makefile.in: Regenerate.
* configure: Regenerate.

binutils* readelf.c: Very basic support for EM_NFP and its section types.
* testsuite/binutils-all/nfp: New directory.
* testsuite/binutils-all/nfp/objdump.exp: New file.  Run new
tests.
* testsuite/binutils-all/nfp/test2_ctx8.d: New file.
* testsuite/binutils-all/nfp/test2_no-pc_ctx4.d: New file.
* testsuite/binutils-all/nfp/test1.d: New file.
* testsuite/binutils-all/nfp/nfp6000.nffw: New file.
* testsuite/binutils-all/nfp/test2_nfp6000.nffw: New file.
* NEWS: Mention the new support.

include * dis-asm.h: Added print_nfp_disassembler_options prototype.
* elf/common.h: Added EM_NFP, officially assigned. See Google Group
Generic System V Application Binary Interface.
* elf/nfp.h: New, for NFP support.
* opcode/nfp.h: New, for NFP support.

opcodes Makefile.am: Added nfp-dis.c.
configure.ac: Added bfd_nfp_arch.
disassemble.h: Added print_insn_nfp prototype.
disassemble.c: Added ARCH_nfp and call to print_insn_nfp
nfp-dis.c: New, for NFP support.
po/POTFILES.in: Added nfp-dis.c to the list.
Makefile.in: Regenerate.
configure: Regenerate.

39 files changed:
bfd/ChangeLog
bfd/Makefile.am
bfd/Makefile.in
bfd/archures.c
bfd/bfd-in2.h
bfd/config.bfd
bfd/configure
bfd/configure.ac
bfd/cpu-nfp.c [new file with mode: 0644]
bfd/elf-bfd.h
bfd/elf64-nfp.c [new file with mode: 0755]
bfd/po/SRC-POTFILES.in
bfd/po/bfd.pot
bfd/targets.c
binutils/ChangeLog
binutils/NEWS
binutils/po/binutils.pot
binutils/readelf.c
binutils/testsuite/binutils-all/nfp/objdump.exp [new file with mode: 0644]
binutils/testsuite/binutils-all/nfp/test1.d [new file with mode: 0644]
binutils/testsuite/binutils-all/nfp/test1_nfp6000.nffw [new file with mode: 0644]
binutils/testsuite/binutils-all/nfp/test2_ctx8.d [new file with mode: 0644]
binutils/testsuite/binutils-all/nfp/test2_nfp6000.nffw [new file with mode: 0644]
binutils/testsuite/binutils-all/nfp/test2_no-pc_ctx4.d [new file with mode: 0644]
include/ChangeLog
include/dis-asm.h
include/elf/common.h
include/elf/nfp.h [new file with mode: 0755]
include/opcode/nfp.h [new file with mode: 0644]
opcodes/ChangeLog
opcodes/Makefile.am
opcodes/Makefile.in
opcodes/configure
opcodes/configure.ac
opcodes/disassemble.c
opcodes/disassemble.h
opcodes/nfp-dis.c [new file with mode: 0644]
opcodes/po/POTFILES.in
opcodes/po/opcodes.pot

index 2b7dfb454e9714d264cfbbf5e8f5677bc7c3c7c5..11baf5db578368039d4a5a3505111ae98688e426 100644 (file)
@@ -1,3 +1,18 @@
+2018-04-30  Francois H. Theron <francois.theron@netronome.com>
+
+       * Makefile.am: Added NFP files to build.
+       * archures.c: Added bfd_arch_nfp
+       * config.bfd: Added NFP support.
+       * configure.ac: Added NFP support.
+       * cpu-nfp.c: New, for NFP support.
+       * elf-bfd.h: Added elf_section_info()
+       * elf64-nfp.c: New, for NFP support.
+       * po/SRC-POTFILES.in: Added NFP source files.
+       * targets.c: Added nfp_elf64_vec
+       * bfd-in2.h: Regenerate.
+       * Makefile.in: Regenerate.
+       * configure: Regenerate.
+
 2018-04-27  Alan Modra  <amodra@gmail.com>
 
        * bfd-in2.h: Regenerate.
index 4f5610defe82a21e11436964525365df8da06f8a..8500a4fa74a9fc2f45812f5d08d43195e7cf120d 100644 (file)
@@ -135,6 +135,7 @@ ALL_MACHINES = \
        cpu-msp430.lo \
        cpu-mt.lo \
        cpu-nds32.lo \
+       cpu-nfp.lo \
        cpu-nios2.lo \
        cpu-ns32k.lo \
        cpu-or1k.lo \
@@ -218,6 +219,7 @@ ALL_MACHINES_CFILES = \
        cpu-msp430.c \
        cpu-mt.c \
        cpu-nds32.c \
+       cpu-nfp.c \
        cpu-ns32k.c \
        cpu-nios2.c \
        cpu-or1k.c \
@@ -555,6 +557,7 @@ BFD64_BACKENDS = \
        elf64-mips.lo \
        elfxx-mips.lo \
        elf64-mmix.lo \
+       elf64-nfp.lo \
        elf64-ppc.lo \
        elf32-riscv.lo \
        elf64-riscv.lo \
@@ -590,6 +593,7 @@ BFD64_BACKENDS_CFILES = \
        elf64-ia64-vms.c \
        elf64-mips.c \
        elf64-mmix.c \
+       elf64-nfp.c \
        elf64-ppc.c \
        elf64-s390.c \
        elf64-sparc.c \
index 3acbdaa216601da6ac59c4ab0d8c777a2819ffe7..ccd9ce1201b777ef2708d85e14dacad2a96abd29 100644 (file)
@@ -468,6 +468,7 @@ ALL_MACHINES = \
        cpu-msp430.lo \
        cpu-mt.lo \
        cpu-nds32.lo \
+       cpu-nfp.lo \
        cpu-nios2.lo \
        cpu-ns32k.lo \
        cpu-or1k.lo \
@@ -551,6 +552,7 @@ ALL_MACHINES_CFILES = \
        cpu-msp430.c \
        cpu-mt.c \
        cpu-nds32.c \
+       cpu-nfp.c \
        cpu-ns32k.c \
        cpu-nios2.c \
        cpu-or1k.c \
@@ -890,6 +892,7 @@ BFD64_BACKENDS = \
        elf64-mips.lo \
        elfxx-mips.lo \
        elf64-mmix.lo \
+       elf64-nfp.lo \
        elf64-ppc.lo \
        elf32-riscv.lo \
        elf64-riscv.lo \
@@ -925,6 +928,7 @@ BFD64_BACKENDS_CFILES = \
        elf64-ia64-vms.c \
        elf64-mips.c \
        elf64-mmix.c \
+       elf64-nfp.c \
        elf64-ppc.c \
        elf64-s390.c \
        elf64-sparc.c \
@@ -1259,6 +1263,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-msp430.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-mt.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-nds32.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-nfp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-nios2.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-ns32k.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cpu-or1k.Plo@am__quote@
@@ -1382,6 +1387,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-ia64.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-mips.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-mmix.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-nfp.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-ppc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-riscv.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elf64-s390.Plo@am__quote@
index 2536949fef574f873023842b3f9afd5f4b981080..4c206642571482c87d333eeb0d7466951065a0f6 100644 (file)
@@ -511,6 +511,9 @@ DESCRIPTION
 .#define bfd_mach_wasm32       1
 .  bfd_arch_pru,       {* PRU.  *}
 .#define bfd_mach_pru          0
+.  bfd_arch_nfp,       {* Netronome Flow Processor *}
+.#define bfd_mach_nfp3200      0x3200
+.#define bfd_mach_nfp6000      0x6000
 .  bfd_arch_last
 .  };
 */
@@ -601,6 +604,7 @@ extern const bfd_arch_info_type bfd_ft32_arch;
 extern const bfd_arch_info_type bfd_msp430_arch;
 extern const bfd_arch_info_type bfd_mt_arch;
 extern const bfd_arch_info_type bfd_nds32_arch;
+extern const bfd_arch_info_type bfd_nfp_arch;
 extern const bfd_arch_info_type bfd_nios2_arch;
 extern const bfd_arch_info_type bfd_ns32k_arch;
 extern const bfd_arch_info_type bfd_or1k_arch;
@@ -689,6 +693,7 @@ static const bfd_arch_info_type * const bfd_archures_list[] =
     &bfd_msp430_arch,
     &bfd_mt_arch,
     &bfd_nds32_arch,
+    &bfd_nfp_arch,
     &bfd_nios2_arch,
     &bfd_ns32k_arch,
     &bfd_or1k_arch,
index 40d33ea7289b8804b36cd97e44475cac906b32df..48226860c719d0e47c0802b6abff6a95eacb7bc3 100644 (file)
@@ -2381,6 +2381,9 @@ enum bfd_architecture
 #define bfd_mach_wasm32        1
   bfd_arch_pru,       /* PRU.  */
 #define bfd_mach_pru           0
+  bfd_arch_nfp,       /* Netronome Flow Processor */
+#define bfd_mach_nfp3200       0x3200
+#define bfd_mach_nfp6000       0x6000
   bfd_arch_last
   };
 
index 0b40636eb56bb37b995316e479d098b17977fd94..bbd41941539116271dbb1e5af9fca29bea48874a 100644 (file)
@@ -182,6 +182,7 @@ m68*)                targ_archs=bfd_m68k_arch ;;
 microblaze*)    targ_archs=bfd_microblaze_arch ;;
 mips*)          targ_archs=bfd_mips_arch ;;
 nds32*)                 targ_archs=bfd_nds32_arch ;;
+nfp)            targ_archs=bfd_nfp_arch ;;
 nios2*)          targ_archs=bfd_nios2_arch ;;
 or1k*|or1knd*)  targ_archs=bfd_or1k_arch ;;
 pdp11*)                 targ_archs=bfd_pdp11_arch ;;
@@ -992,6 +993,12 @@ case "${targ}" in
     targ_selvecs=nds32_elf32_le_vec
     ;;
 
+#ifdef BFD64
+  nfp-*-*)
+    targ_defvec=nfp_elf64_vec
+    ;;
+#endif
+
   ns32k-pc532-mach* | ns32k-pc532-ux*)
     targ_defvec=ns32k_aout_pc532mach_vec
     targ_underscore=yes
index ab9e8eef17d4341bba0682cdad67abf8ce7ebc89..5aca725edc42d4d83ac4542e2aee18099950ecda 100755 (executable)
@@ -14482,6 +14482,7 @@ do
     nds32_elf32_le_vec)                 tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
     nds32_elf32_linux_be_vec)   tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
     nds32_elf32_linux_le_vec)   tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
+    nfp_elf64_vec)              tb="$tb elf64-nfp.lo elf64.lo $elf" ;;
     nios2_elf32_be_vec)                 tb="$tb elf32-nios2.lo elf32.lo $elf" ;;
     nios2_elf32_le_vec)                 tb="$tb elf32-nios2.lo elf32.lo $elf" ;;
     ns32k_aout_pc532mach_vec)   tb="$tb pc532-mach.lo aout-ns32k.lo" ;;
index ae794618b743742a4a3f577239445c7f8de1dd5b..3cef5f9a9e72cbb1bb7c1ac55f95437f4c1bc1e0 100644 (file)
@@ -559,6 +559,7 @@ do
     nds32_elf32_le_vec)                 tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
     nds32_elf32_linux_be_vec)   tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
     nds32_elf32_linux_le_vec)   tb="$tb elf32-nds32.lo elf32.lo $elf" ;;
+    nfp_elf64_vec)              tb="$tb elf64-nfp.lo elf64.lo $elf" ;;
     nios2_elf32_be_vec)                 tb="$tb elf32-nios2.lo elf32.lo $elf" ;;
     nios2_elf32_le_vec)                 tb="$tb elf32-nios2.lo elf32.lo $elf" ;;
     ns32k_aout_pc532mach_vec)   tb="$tb pc532-mach.lo aout-ns32k.lo" ;;
diff --git a/bfd/cpu-nfp.c b/bfd/cpu-nfp.c
new file mode 100644 (file)
index 0000000..ef97f86
--- /dev/null
@@ -0,0 +1,62 @@
+/* BFD library support routines for the NFP.
+   Copyright (C) 2017 Free Software Foundation, Inc.
+   Contributed by Francois H. Theron <francois.theron@netronome.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"
+
+static const bfd_arch_info_type *
+bfd_nfp_compatible (const bfd_arch_info_type * a,
+                   const bfd_arch_info_type * b)
+{
+  if (a->arch != b->arch)
+    return NULL;
+
+  if (a->mach != b->mach)
+    return NULL;
+
+  return a;
+}
+
+#define N(machine, print, default, next)                       \
+{                                                              \
+  32,                                                          \
+  64,                                                          \
+  8,                                                           \
+  bfd_arch_nfp,                                                        \
+  machine,                                                     \
+  "nfp",                                                       \
+  print,                                                       \
+  3,                                                           \
+  default,                                                     \
+  bfd_nfp_compatible,                                          \
+  bfd_default_scan,                                            \
+  bfd_arch_default_fill,                                       \
+  next                                                         \
+}
+
+static const bfd_arch_info_type arch_info_struct[] =
+{
+  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[0]);
index 9c900b7656c8e68e9adcdd01a3f627f81c168d97..7b746900bad98a69e33414b167f20f73421ce44d 100644 (file)
@@ -1671,6 +1671,7 @@ struct bfd_elf_section_data
 #define elf_linked_to_section(sec) (elf_section_data(sec)->linked_to)
 #define elf_section_type(sec)  (elf_section_data(sec)->this_hdr.sh_type)
 #define elf_section_flags(sec) (elf_section_data(sec)->this_hdr.sh_flags)
+#define elf_section_info(sec)  (elf_section_data(sec)->this_hdr.sh_info)
 #define elf_group_name(sec)    (elf_section_data(sec)->group.name)
 #define elf_group_id(sec)      (elf_section_data(sec)->group.id)
 #define elf_next_in_group(sec) (elf_section_data(sec)->next_in_group)
diff --git a/bfd/elf64-nfp.c b/bfd/elf64-nfp.c
new file mode 100755 (executable)
index 0000000..3cdda3d
--- /dev/null
@@ -0,0 +1,276 @@
+/* NFP-specific support for 64-bit ELF
+   Copyright (C) 2017-2018 Free Software Foundation, Inc.
+   Contributed by Francois H. Theron <francois.theron@netronome.com>
+
+   This file is part of BFD, the Binary File Descriptor library.
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+#include "sysdep.h"
+#include "bfd.h"
+#include "libbfd.h"
+#include "elf-bfd.h"
+#include "elf/nfp.h"
+#include "bfd_stdint.h"
+
+
+static bfd_reloc_status_type
+elf64_nfp_reloc (bfd * abfd ATTRIBUTE_UNUSED,
+                arelent * reloc_entry,
+                asymbol * symbol,
+                void *data ATTRIBUTE_UNUSED,
+                asection * input_section,
+                bfd * output_bfd,
+                char **error_message ATTRIBUTE_UNUSED);
+
+/* We don't actually apply any relocations in this toolset
+   so we make them all do nothing, but at least display useful
+   names.
+   Most of these are mainly used by the NFP toolchain to resolve things
+   before the final ELF file is created.  */
+static reloc_howto_type elf_nfp_howto_table[] =
+{
+  HOWTO (R_NFP_NOTYPE,         /* Type.  */
+        0,                     /* Rightshift.  */
+        3,                     /* Size.  */
+        0,                     /* Bitsize.  */
+        FALSE,                 /* PC_relative.  */
+        0,                     /* Bitpos.  */
+        complain_overflow_dont,/* Complain_on_overflow.  */
+        elf64_nfp_reloc,       /* Special_function.  */
+        "R_NFP_NOTYPE",        /* Name.  */
+        FALSE,                 /* Partial_inplace.  */
+        0,                     /* Src_mask.  */
+        0,                     /* Dst_mask.  */
+        FALSE),                /* PCrel_offset.  */
+  HOWTO (R_NFP_W32LE, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_W32LE",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_SRC8_A, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_SRC8_A",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_SRC8_B, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_SRC8_B",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_IMMED8_I, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_IMMED8_I",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_SC, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_SC",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_IMMED_LO16_I_A, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_IMMED_LO16_I_A",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_IMMED_LO16_I_B, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_IMMED_LO16_I_B",
+        TRUE, 0, 0, FALSE),
+  HOWTO (R_NFP_SRC7_B, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_SRC7_B",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_SRC7_A, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_SRC7_A",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_SRC8_I_B, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_SRC8_I_B",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_SRC8_I_A, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_SRC8_I_A",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_IMMED_HI16_I_A, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_IMMED_HI16_I_A",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_IMMED_HI16_I_B, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_IMMED_HI16_I_B",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_W64LE, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_W64LE",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_SH_INFO, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_SH_INFO",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_W32BE, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_W32BE",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_W64BE, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_W64BE",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_W32_29_24, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_W32_29_24",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_W32LE_AND, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_W32LE_AND",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_W32BE_AND, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_W32BE_AND",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_W32LE_OR, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_W32LE_OR",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_W32BE_OR, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_W32BE_OR",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_W64LE_AND, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_W64LE_AND",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_W64BE_AND, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_W64BE_AND",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_W64LE_OR, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_W64LE_OR",
+        FALSE, 0, 0, FALSE),
+  HOWTO (R_NFP_W64BE_OR, 0, 3, 0, FALSE, 0,
+        complain_overflow_dont, elf64_nfp_reloc,
+        "R_NFP_W64BE_OR",
+        FALSE, 0, 0, FALSE)
+};
+
+static bfd_boolean
+elf64_nfp_object_p (bfd * abfd)
+{
+  /* If the e_machine value is one of the unofficial ones, we convert
+     it first and set e_flags accordingly for later consistency.  */
+  if (elf_elfheader (abfd)->e_machine == E_NFP_MACH_3200)
+    {
+      elf_elfheader (abfd)->e_machine = EM_NFP;
+      elf_elfheader (abfd)->e_flags &= ~EF_NFP_SET_MACH (~0);
+      elf_elfheader (abfd)->e_flags |= EF_NFP_SET_MACH (E_NFP_MACH_3200);
+    }
+  else if (elf_elfheader (abfd)->e_machine == E_NFP_MACH_6000)
+    {
+      elf_elfheader (abfd)->e_machine = EM_NFP;
+      elf_elfheader (abfd)->e_flags &= ~EF_NFP_SET_MACH (~0);
+      elf_elfheader (abfd)->e_flags |= EF_NFP_SET_MACH (E_NFP_MACH_6000);
+    }
+
+  if (elf_elfheader (abfd)->e_machine == EM_NFP)
+    {
+      int e_mach = EF_NFP_MACH (elf_elfheader (abfd)->e_flags);
+
+      switch (e_mach)
+       {
+       case E_NFP_MACH_3200:
+       case E_NFP_MACH_6000:
+         if (!bfd_default_set_arch_mach (abfd, bfd_arch_nfp, e_mach))
+           return FALSE;
+       default:
+         break;
+       }
+    }
+
+  return TRUE;
+}
+
+static bfd_boolean
+elf64_nfp_section_from_shdr (bfd * abfd,
+                            Elf_Internal_Shdr * hdr,
+                            const char *name, int shindex)
+{
+  switch (hdr->sh_type)
+    {
+    case SHT_NFP_INITREG:
+    case SHT_NFP_MECONFIG:
+    case SHT_NFP_UDEBUG:
+      return _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex);
+    default:
+      return FALSE;
+    }
+}
+
+bfd_reloc_status_type
+elf64_nfp_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 ATTRIBUTE_UNUSED,
+                char **error_message ATTRIBUTE_UNUSED)
+{
+  return bfd_reloc_ok;
+}
+
+static bfd_boolean
+elf64_nfp_info_to_howto (bfd * abfd ATTRIBUTE_UNUSED,
+                        arelent * cache_ptr, Elf_Internal_Rela * dst)
+{
+  unsigned int r_type;
+
+  r_type = ELF64_R_TYPE (dst->r_info);
+  if (r_type >= R_NFP_MAX)
+    {
+      /* xgettext:c-format */
+      _bfd_error_handler (_("%pB: unsupported relocation type %#x"),
+                         abfd, r_type);
+      bfd_set_error (bfd_error_bad_value);
+      return FALSE;
+    }
+  cache_ptr->howto = &elf_nfp_howto_table[r_type];
+  return TRUE;
+}
+
+static reloc_howto_type *
+elf64_nfp_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED,
+                            bfd_reloc_code_real_type code ATTRIBUTE_UNUSED)
+{
+  return NULL;
+}
+
+static reloc_howto_type *
+elf64_nfp_reloc_name_lookup (bfd * abfd ATTRIBUTE_UNUSED,
+                            const char *r_name ATTRIBUTE_UNUSED)
+{
+  return NULL;
+}
+
+#define ELF_ARCH               bfd_arch_nfp
+#define ELF_MACHINE_CODE       EM_NFP
+#define ELF_MACHINE_ALT1       E_NFP_MACH_6000
+#define ELF_MACHINE_ALT2       E_NFP_MACH_3200
+#define ELF_MAXPAGESIZE                1
+#define TARGET_LITTLE_NAME     "elf64-nfp"
+#define TARGET_LITTLE_SYM       nfp_elf64_vec
+
+#define elf_backend_object_p           elf64_nfp_object_p
+#define elf_backend_section_from_shdr   elf64_nfp_section_from_shdr
+#define elf_info_to_howto              elf64_nfp_info_to_howto
+#define bfd_elf64_bfd_reloc_type_lookup             elf64_nfp_reloc_type_lookup
+#define bfd_elf64_bfd_reloc_name_lookup      elf64_nfp_reloc_name_lookup
+
+#include "elf64-target.h"
index 27139e5562f3ac826eebdbc2738947b13c1d9aa2..7e82a33c1ef7aba3da1f1e6db37eac862920b407 100644 (file)
@@ -85,6 +85,7 @@ cpu-moxie.c
 cpu-msp430.c
 cpu-mt.c
 cpu-nds32.c
+cpu-nfp.c
 cpu-nios2.c
 cpu-ns32k.c
 cpu-or1k.c
@@ -209,6 +210,7 @@ elf64-hppa.h
 elf64-ia64-vms.c
 elf64-mips.c
 elf64-mmix.c
+elf64-nfp.c
 elf64-ppc.c
 elf64-s390.c
 elf64-sparc.c
index a6b2adb80132e9d5e847935cc46cbf60c09699e2..36e0e6721da00be80ada7cd1502e4abc07536162 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2018-04-24 11:57+0100\n"
+"POT-Creation-Date: 2018-04-30 11:54+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"
@@ -67,7 +67,7 @@ msgstr ""
 #: aoutx.h:4405 coff-alpha.c:601 coff-alpha.c:1514 coff-rs6000.c:2773
 #: coff-sh.c:504 coff-tic4x.c:184 coff-tic54x.c:279 elf-hppa.h:1040
 #: elf-hppa.h:1068 elf-m10200.c:226 elf-m10300.c:812 elf32-arc.c:519
-#: elf32-arm.c:1852 elf32-avr.c:959 elf32-bfin.c:1061 elf32-bfin.c:4698
+#: elf32-arm.c:1944 elf32-avr.c:959 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-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
@@ -88,11 +88,11 @@ msgstr ""
 #: elf32-xstormy16.c:395 elf32-xtensa.c:454 elf32-xtensa.c:488
 #: 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:3623
-#: elf64-mips.c:3639 elf64-mmix.c:1264 elf64-ppc.c:2281 elf64-ppc.c:2555
-#: elf64-ppc.c:2564 elf64-s390.c:328 elf64-s390.c:378 elf64-x86-64.c:285
-#: elfn32-mips.c:3451 elfxx-ia64.c:325 elfxx-riscv.c:955 elfxx-sparc.c:589
-#: elfxx-sparc.c:639 elfxx-sparc.c:661 elfxx-tilegx.c:912 elfxx-tilegx.c:952
-#: /work/sources/binutils/current/bfd/elfnn-aarch64.c:2126
+#: elf64-mips.c:3639 elf64-mmix.c:1264 elf64-nfp.c:239 elf64-ppc.c:2281
+#: elf64-ppc.c:2555 elf64-ppc.c:2564 elf64-s390.c:328 elf64-s390.c:378
+#: elf64-x86-64.c:285 elfn32-mips.c:3451 elfxx-ia64.c:325 elfxx-riscv.c:955
+#: elfxx-sparc.c:589 elfxx-sparc.c:639 elfxx-sparc.c:661 elfxx-tilegx.c:912
+#: elfxx-tilegx.c:952 /work/sources/binutils/current/bfd/elfnn-aarch64.c:2126
 #: /work/sources/binutils/current/bfd/elfnn-aarch64.c:2224 elf32-ia64.c:211
 #: elf32-ia64.c:3863 elf64-ia64.c:211 elf64-ia64.c:3863
 #, c-format
@@ -264,148 +264,12 @@ msgstr ""
 msgid "using multiple gp values"
 msgstr ""
 
-#: coff-alpha.c:1501 coff-alpha.c:1507 elf.c:8972 elf32-mcore.c:100
-#: elf32-mcore.c:455 elf32-ppc.c:8751 elf32-ppc.c:9883 elf64-ppc.c:14922
+#: coff-alpha.c:1501 coff-alpha.c:1507 elf.c:8979 elf32-mcore.c:100
+#: elf32-mcore.c:455 elf32-ppc.c:8751 elf32-ppc.c:9883 elf64-ppc.c:14932
 #, c-format
 msgid "%pB: %s unsupported"
 msgstr ""
 
-#: coff-arm.c:1037
-#, c-format
-msgid "%pB: unable to find THUMB glue '%s' for `%s'"
-msgstr ""
-
-#: coff-arm.c:1066
-#, c-format
-msgid "%pB: unable to find ARM glue '%s' for `%s'"
-msgstr ""
-
-#: coff-arm.c:1367
-#, c-format
-msgid ""
-"%pB(%s): warning: interworking not enabled; first occurrence: %pB: arm call "
-"to thumb"
-msgstr ""
-
-#: coff-arm.c:1457
-#, c-format
-msgid ""
-"%pB(%s): warning: interworking not enabled; first occurrence: %pB: thumb "
-"call to arm; consider relinking with --support-old-code enabled"
-msgstr ""
-
-#: coff-arm.c:1751 coff-tic80.c:672 cofflink.c:3127
-#, c-format
-msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
-msgstr ""
-
-#: coff-arm.c:2076
-#, c-format
-msgid "%pB: illegal symbol index in reloc: %ld"
-msgstr ""
-
-#: coff-arm.c:2208
-#, c-format
-msgid "error: %pB is compiled for APCS-%d, whereas %pB is compiled for APCS-%d"
-msgstr ""
-
-#: coff-arm.c:2221 elf32-arm.c:19614
-#, c-format
-msgid ""
-"error: %pB passes floats in float registers, whereas %pB passes them in "
-"integer registers"
-msgstr ""
-
-#: coff-arm.c:2226 elf32-arm.c:19618
-#, c-format
-msgid ""
-"error: %pB passes floats in integer registers, whereas %pB passes them in "
-"float registers"
-msgstr ""
-
-#: coff-arm.c:2238
-#, c-format
-msgid ""
-"error: %pB is compiled as position independent code, whereas target %pB is "
-"absolute position"
-msgstr ""
-
-#: coff-arm.c:2243
-#, c-format
-msgid ""
-"error: %pB is compiled as absolute position code, whereas target %pB is "
-"position independent"
-msgstr ""
-
-#: coff-arm.c:2270 elf32-arm.c:19683
-#, c-format
-msgid "warning: %pB supports interworking, whereas %pB does not"
-msgstr ""
-
-#: coff-arm.c:2275 elf32-arm.c:19689
-#, c-format
-msgid "warning: %pB does not support interworking, whereas %pB does"
-msgstr ""
-
-#: coff-arm.c:2298
-#, c-format
-msgid "private flags = %x:"
-msgstr ""
-
-#: coff-arm.c:2306 elf32-arm.c:14191
-#, c-format
-msgid " [floats passed in float registers]"
-msgstr ""
-
-#: coff-arm.c:2308
-#, c-format
-msgid " [floats passed in integer registers]"
-msgstr ""
-
-#: coff-arm.c:2311 elf32-arm.c:14194
-#, c-format
-msgid " [position independent]"
-msgstr ""
-
-#: coff-arm.c:2313
-#, c-format
-msgid " [absolute position]"
-msgstr ""
-
-#: coff-arm.c:2317
-#, c-format
-msgid " [interworking flag not initialised]"
-msgstr ""
-
-#: coff-arm.c:2319
-#, c-format
-msgid " [interworking supported]"
-msgstr ""
-
-#: coff-arm.c:2321
-#, c-format
-msgid " [interworking not supported]"
-msgstr ""
-
-#: coff-arm.c:2366 elf32-arm.c:13052
-#, c-format
-msgid ""
-"warning: not setting interworking flag of %pB since it has already been "
-"specified as non-interworking"
-msgstr ""
-
-#: coff-arm.c:2369 elf32-arm.c:13056
-#, c-format
-msgid "warning: clearing the interworking flag of %pB due to outside request"
-msgstr ""
-
-#: coff-arm.c:2426 elf32-arm.c:13101
-#, c-format
-msgid ""
-"warning: clearing the interworking flag of %pB because non-interworking code "
-"in %pB has been linked with it"
-msgstr ""
-
 #: coff-mips.c:640 elf32-mips.c:1742 elf32-score.c:430 elf32-score7.c:330
 #: elf64-mips.c:3131 elfn32-mips.c:2956
 msgid "GP relative relocation when _gp not defined"
@@ -481,6 +345,11 @@ msgstr ""
 msgid "unsupported relocation type %#x"
 msgstr ""
 
+#: coff-tic80.c:672 cofflink.c:3127
+#, c-format
+msgid "%pB: bad reloc address %#<PRIx64> in section `%pA'"
+msgstr ""
+
 #: coffcode.h:954
 #, c-format
 msgid "%pB: unable to load COMDAT section name"
@@ -1018,7 +887,7 @@ msgstr ""
 msgid "%pB: %s' accessed both as normal and thread local symbol"
 msgstr ""
 
-#: elf-m10300.c:2094 elf32-arm.c:12566 elf32-i386.c:3457 elf32-m32r.c:2539
+#: elf-m10300.c:2094 elf32-arm.c:13225 elf32-i386.c:3457 elf32-m32r.c:2539
 #: elf32-m68k.c:3899 elf32-s390.c:3208 elf32-sh.c:3796 elf32-tilepro.c:3409
 #: elf32-xtensa.c:2947 elf64-s390.c:3125 elf64-x86-64.c:3804 elfxx-sparc.c:3908
 #: elfxx-tilegx.c:3793 /work/sources/binutils/current/bfd/elfnn-aarch64.c:5258
@@ -1046,7 +915,7 @@ msgid "internal error: suspicious relocation type used in shared library"
 msgstr ""
 
 #: elf-m10300.c:2649 elf32-avr.c:2487 elf32-frv.c:5641 elf64-ia64-vms.c:364
-#: elfxx-sparc.c:2797 reloc.c:8078 reloc16.c:155 elf32-ia64.c:362
+#: elfxx-sparc.c:2797 reloc.c:8095 reloc16.c:155 elf32-ia64.c:362
 #: elf64-ia64.c:362
 msgid "%P%F: --relax and -r may not be used together\n"
 msgstr ""
@@ -1256,53 +1125,53 @@ msgstr ""
 msgid "%pB: sh_link of section `%pA' points to removed section `%pA' of `%pB'"
 msgstr ""
 
-#: elf.c:4394
+#: elf.c:4401
 #, c-format
 msgid "%pB: GNU_MBIN section `%pA' has invalid sh_info field: %d"
 msgstr ""
 
-#: elf.c:4940
+#: elf.c:4947
 #, c-format
 msgid "%pB: TLS sections are not adjacent:"
 msgstr ""
 
-#: elf.c:4947
+#: elf.c:4954
 #, c-format
 msgid "\t    TLS: %pA"
 msgstr ""
 
-#: elf.c:4951
+#: elf.c:4958
 #, c-format
 msgid "\tnon-TLS: %pA"
 msgstr ""
 
-#: elf.c:5447
+#: elf.c:5454
 #, c-format
 msgid ""
 "%pB: The first section in the PT_DYNAMIC segment is not the .dynamic section"
 msgstr ""
 
-#: elf.c:5475
+#: elf.c:5482
 #, c-format
 msgid "%pB: not enough room for program headers, try linking with -N"
 msgstr ""
 
-#: elf.c:5563
+#: elf.c:5570
 #, c-format
 msgid "%pB: section %pA lma %#<PRIx64> adjusted to %#<PRIx64>"
 msgstr ""
 
-#: elf.c:5700
+#: elf.c:5707
 #, c-format
 msgid "%pB: section `%pA' can't be allocated in segment %d"
 msgstr ""
 
-#: elf.c:5748
+#: elf.c:5755
 #, c-format
 msgid "%pB: warning: allocated section `%s' not in segment"
 msgstr ""
 
-#: elf.c:5981
+#: elf.c:5988
 #, c-format
 msgid ""
 "%pB: error: non-load segment %d includes file header and/or program header"
@@ -1311,47 +1180,47 @@ 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:6158
+#: elf.c:6165
 #, c-format
 msgid "%pB: error: PHDR segment not covered by LOAD segment"
 msgstr ""
 
-#: elf.c:6503
+#: elf.c:6510
 #, c-format
 msgid "%pB: symbol `%s' required but not present"
 msgstr ""
 
-#: elf.c:6847
+#: elf.c:6854
 #, c-format
 msgid ""
 "%pB: warning: empty loadable segment detected at vaddr=%#<PRIx64>, is this "
 "intentional?"
 msgstr ""
 
-#: elf.c:7461
+#: elf.c:7468
 #, c-format
 msgid "%pB: warning: segment alignment of %#<PRIx64> is too large"
 msgstr ""
 
-#: elf.c:7960
+#: elf.c:7967
 #, c-format
 msgid ""
 "unable to find equivalent output section for symbol '%s' from section '%s'"
 msgstr ""
 
-#: elf.c:8293
+#: elf.c:8300
 #, c-format
 msgid "%pB: .gnu.version_r invalid entry"
 msgstr ""
 
-#: elf.c:8420
+#: elf.c:8427
 #, c-format
 msgid "%pB: .gnu.version_d invalid entry"
 msgstr ""
 
 #: elf32-arc.c:442 elf32-frv.c:6630 elf32-iq2000.c:870 elf32-m32c.c:914
 #: elf32-mt.c:562 elf32-rl78.c:1261 elf32-rx.c:3200 elf32-visium.c:841
-#: elf64-ppc.c:6184
+#: elf64-ppc.c:6194
 #, c-format
 msgid "private flags = 0x%lx:"
 msgstr ""
@@ -1455,7 +1324,7 @@ msgstr ""
 msgid "%pB(%pA): internal error: unknown error"
 msgstr ""
 
-#: elf32-arc.c:1985 elf32-arm.c:14552 elf32-metag.c:2257 elfxx-mips.c:8905
+#: elf32-arc.c:1985 elf32-arm.c:15270 elf32-metag.c:2257 elfxx-mips.c:8905
 #: /work/sources/binutils/current/bfd/elfnn-aarch64.c:7394
 #: /work/sources/binutils/current/bfd/elfnn-riscv.c:474
 #, c-format
@@ -1474,7 +1343,7 @@ msgstr ""
 msgid "warning: %pB: unknown ARC object attribute %d"
 msgstr ""
 
-#: elf32-arm.c:4030 elf32-arm.c:4064 elf32-arm.c:4083 elf32-arm.c:4135
+#: elf32-arm.c:4294 elf32-arm.c:4328 elf32-arm.c:4347 elf32-arm.c:4399
 #, c-format
 msgid ""
 "%pB(%pA): warning: long branch veneers used in section with SHF_ARM_PURECODE "
@@ -1482,141 +1351,141 @@ msgid ""
 "movw instruction"
 msgstr ""
 
-#: elf32-arm.c:4095 elf32-arm.c:4149 elf32-arm.c:8813 elf32-arm.c:8903
+#: elf32-arm.c:4359 elf32-arm.c:4413 elf32-arm.c:9082 elf32-arm.c:9172
 #, c-format
 msgid ""
 "%pB(%s): warning: interworking not enabled; first occurrence: %pB: %s call "
 "to %s"
 msgstr ""
 
-#: elf32-arm.c:4423
+#: elf32-arm.c:4687
 #, c-format
 msgid "no address assigned to the veneers output section %s"
 msgstr ""
 
-#: elf32-arm.c:4498 elf32-arm.c:6634 elf32-hppa.c:577 elf32-m68hc1x.c:165
-#: elf32-metag.c:1186 elf32-nios2.c:2208 elf64-ppc.c:4737
+#: elf32-arm.c:4762 elf32-arm.c:6898 elf32-hppa.c:577 elf32-m68hc1x.c:165
+#: elf32-metag.c:1186 elf32-nios2.c:2208 elf64-ppc.c:4747
 #: /work/sources/binutils/current/bfd/elfnn-aarch64.c:3099
 #, c-format
 msgid "%pB: cannot create stub entry %s"
 msgstr ""
 
-#: elf32-arm.c:5683
+#: elf32-arm.c:5947
 #, c-format
 msgid "%pB: special symbol `%s' only allowed for ARMv8-M architecture or later"
 msgstr ""
 
-#: elf32-arm.c:5692
+#: elf32-arm.c:5956
 #, c-format
 msgid ""
 "%pB: invalid special symbol `%s'; it must be a global or weak function symbol"
 msgstr ""
 
-#: elf32-arm.c:5731
+#: elf32-arm.c:5995
 #, c-format
 msgid ""
 "%pB: invalid standard symbol `%s'; it must be a global or weak function "
 "symbol"
 msgstr ""
 
-#: elf32-arm.c:5737
+#: elf32-arm.c:6001
 #, c-format
 msgid "%pB: absent standard symbol `%s'"
 msgstr ""
 
-#: elf32-arm.c:5749
+#: elf32-arm.c:6013
 #, c-format
 msgid "%pB: `%s' and its special symbol are in different sections"
 msgstr ""
 
-#: elf32-arm.c:5761
+#: elf32-arm.c:6025
 #, c-format
 msgid "%pB: entry function `%s' not output"
 msgstr ""
 
-#: elf32-arm.c:5768
+#: elf32-arm.c:6032
 #, c-format
 msgid "%pB: entry function `%s' is empty"
 msgstr ""
 
-#: elf32-arm.c:5897
+#: elf32-arm.c:6161
 #, c-format
 msgid "%pB: --in-implib only supported for Secure Gateway import libraries"
 msgstr ""
 
-#: elf32-arm.c:5943
+#: elf32-arm.c:6207
 #, c-format
 msgid ""
 "%pB: invalid import library entry: `%s'; symbol should be absolute, global "
 "and refer to Thumb functions"
 msgstr ""
 
-#: elf32-arm.c:5965
+#: elf32-arm.c:6229
 #, c-format
 msgid "entry function `%s' disappeared from secure code"
 msgstr ""
 
-#: elf32-arm.c:5989
+#: elf32-arm.c:6253
 #, c-format
 msgid "`%s' refers to a non entry function"
 msgstr ""
 
-#: elf32-arm.c:6004
+#: elf32-arm.c:6268
 #, c-format
 msgid "%pB: visibility of symbol `%s' has changed"
 msgstr ""
 
-#: elf32-arm.c:6013
+#: elf32-arm.c:6277
 #, c-format
 msgid "%pB: incorrect size for symbol `%s'"
 msgstr ""
 
-#: elf32-arm.c:6032
+#: elf32-arm.c:6296
 #, c-format
 msgid "offset of veneer for entry function `%s' not a multiple of its size"
 msgstr ""
 
-#: elf32-arm.c:6052
+#: elf32-arm.c:6316
 msgid ""
 "new entry function(s) introduced but no output import library specified:"
 msgstr ""
 
-#: elf32-arm.c:6060
+#: elf32-arm.c:6324
 #, c-format
 msgid "start address of `%s' is different from previous link"
 msgstr ""
 
-#: elf32-arm.c:6767 elf32-arm.c:6803
+#: elf32-arm.c:7031 elf32-arm.c:7067
 #, c-format
 msgid "unable to find %s glue '%s' for '%s'"
 msgstr ""
 
-#: elf32-arm.c:7518
+#: elf32-arm.c:7782
 #, 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:7749
+#: elf32-arm.c:8013
 #, c-format
 msgid ""
 "%pB: warning: selected VFP11 erratum workaround is not necessary for target "
 "architecture"
 msgstr ""
 
-#: elf32-arm.c:7776
+#: elf32-arm.c:8040
 #, c-format
 msgid ""
 "%pB: warning: selected STM32L4XX erratum workaround is not necessary for "
 "target architecture"
 msgstr ""
 
-#: elf32-arm.c:8313 elf32-arm.c:8333 elf32-arm.c:8399 elf32-arm.c:8418
+#: elf32-arm.c:8577 elf32-arm.c:8597 elf32-arm.c:8663 elf32-arm.c:8682
 #, c-format
 msgid "%pB: unable to find %s veneer `%s'"
 msgstr ""
 
-#: elf32-arm.c:8625
+#: elf32-arm.c:8889
 #, c-format
 msgid ""
 "%pB(%pA+%#x): error: multiple load detected in non-last IT block "
@@ -1624,182 +1493,201 @@ msgid ""
 "it to generate only one instruction per IT block"
 msgstr ""
 
-#: elf32-arm.c:8723
+#: elf32-arm.c:8989
 #, c-format
 msgid "invalid TARGET2 relocation type '%s'"
 msgstr ""
 
 #. FIXME: We ought to be able to generate thumb-1 PLT
 #. instructions...
-#: elf32-arm.c:9465
+#: elf32-arm.c:9791
 #, c-format
 msgid "%pB: warning: thumb-1 mode PLT generation not currently supported"
 msgstr ""
 
-#: elf32-arm.c:9730 elf32-arm.c:9772
+#: elf32-arm.c:10095 elf32-arm.c:10137
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' in TLS trampoline"
 msgstr ""
 
-#: elf32-arm.c:10114
+#: elf32-arm.c:10481
 msgid "shared object"
 msgstr ""
 
-#: elf32-arm.c:10117
+#: elf32-arm.c:10484
 msgid "PIE executable"
 msgstr ""
 
-#: elf32-arm.c:10120
+#: elf32-arm.c:10487
 #, 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:10251 elf32-arm.c:10678
+#: elf32-arm.c:10624 elf32-arm.c:11051
 #, c-format
 msgid "%pB: warning: %s BLX instruction targets %s function '%s'"
 msgstr ""
 
-#: elf32-arm.c:11547 elf32-arm.c:11573
+#: elf32-arm.c:11954 elf32-arm.c:11980
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): unexpected %s instruction '%#lx' referenced by "
 "TLS_GOTDESC"
 msgstr ""
 
-#: elf32-arm.c:11605 elf32-m68k.c:3703 elf32-metag.c:1919 elf32-nios2.c:4366
+#: elf32-arm.c:12026 elf32-m68k.c:3703 elf32-metag.c:1919 elf32-nios2.c:4366
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation not permitted in shared object"
 msgstr ""
 
-#: elf32-arm.c:11819
+#: elf32-arm.c:12240
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): only ADD or SUB instructions are allowed for ALU group "
 "relocations"
 msgstr ""
 
-#: elf32-arm.c:11860 elf32-arm.c:11952 elf32-arm.c:12040 elf32-arm.c:12130
+#: elf32-arm.c:12281 elf32-arm.c:12373 elf32-arm.c:12461 elf32-arm.c:12551
 #, c-format
 msgid ""
 "%pB(%pA+%#<PRIx64>): overflow whilst splitting %#<PRIx64> for group "
 "relocation %s"
 msgstr ""
 
-#: elf32-arm.c:12398 elf32-sh.c:3685
+#: elf32-arm.c:13057 elf32-sh.c:3685
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s relocation against SEC_MERGE section"
 msgstr ""
 
-#: elf32-arm.c:12511 elf32-m68k.c:3936 elf32-xtensa.c:2689
+#: elf32-arm.c:13170 elf32-m68k.c:3936 elf32-xtensa.c:2689
 #: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6466
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s used with TLS symbol %s"
 msgstr ""
 
-#: elf32-arm.c:12513 elf32-m68k.c:3938 elf32-xtensa.c:2691
+#: elf32-arm.c:13172 elf32-m68k.c:3938 elf32-xtensa.c:2691
 #: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6468
 #, c-format
 msgid "%pB(%pA+%#<PRIx64>): %s used with non-TLS symbol %s"
 msgstr ""
 
-#: elf32-arm.c:12596 elf32-tic6x.c:2708
+#: elf32-arm.c:13255 elf32-tic6x.c:2708
 #: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6802
 msgid "out of range"
 msgstr ""
 
-#: elf32-arm.c:12600 elf32-nios2.c:4500 elf32-pru.c:835 elf32-tic6x.c:2712
+#: elf32-arm.c:13259 elf32-nios2.c:4500 elf32-pru.c:835 elf32-tic6x.c:2712
 #: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6806
 msgid "unsupported relocation"
 msgstr ""
 
-#: elf32-arm.c:12608 elf32-nios2.c:4510 elf32-pru.c:845 elf32-tic6x.c:2720
+#: elf32-arm.c:13267 elf32-nios2.c:4510 elf32-pru.c:845 elf32-tic6x.c:2720
 #: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6814
 msgid "unknown error"
 msgstr ""
 
-#: elf32-arm.c:13188
+#: elf32-arm.c:13711
+#, c-format
+msgid ""
+"warning: not setting interworking flag of %pB since it has already been "
+"specified as non-interworking"
+msgstr ""
+
+#: elf32-arm.c:13715
+#, c-format
+msgid "warning: clearing the interworking flag of %pB due to outside request"
+msgstr ""
+
+#: elf32-arm.c:13760
+#, 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:13847
 #, c-format
 msgid "%pB: unknown mandatory EABI object attribute %d"
 msgstr ""
 
-#: elf32-arm.c:13196
+#: elf32-arm.c:13855
 #, c-format
 msgid "warning: %pB: unknown EABI object attribute %d"
 msgstr ""
 
-#: elf32-arm.c:13463
+#: elf32-arm.c:14122
 #, c-format
 msgid "error: %pB: unknown CPU architecture"
 msgstr ""
 
-#: elf32-arm.c:13501 elf32-nios2.c:2946
+#: elf32-arm.c:14160 elf32-nios2.c:2946
 #, c-format
 msgid "error: %pB: conflicting CPU architectures %d/%d"
 msgstr ""
 
-#: elf32-arm.c:13598
+#: elf32-arm.c:14257
 #, c-format
 msgid ""
 "Error: %pB has both the current and legacy Tag_MPextension_use attributes"
 msgstr ""
 
-#: elf32-arm.c:13627
+#: elf32-arm.c:14286
 #, c-format
 msgid "error: %pB uses VFP register arguments, %pB does not"
 msgstr ""
 
-#: elf32-arm.c:13785
+#: elf32-arm.c:14444
 #, c-format
 msgid "error: %pB: unable to merge virtualization attributes with %pB"
 msgstr ""
 
-#: elf32-arm.c:13811
+#: elf32-arm.c:14470
 #, c-format
 msgid "error: %pB: conflicting architecture profiles %c/%c"
 msgstr ""
 
-#: elf32-arm.c:13950
+#: elf32-arm.c:14609
 #, c-format
 msgid "warning: %pB: conflicting platform configuration"
 msgstr ""
 
-#: elf32-arm.c:13959
+#: elf32-arm.c:14618
 #, c-format
 msgid "error: %pB: conflicting use of R9"
 msgstr ""
 
-#: elf32-arm.c:13971
+#: elf32-arm.c:14630
 #, c-format
 msgid "error: %pB: SB relative addressing conflicts with use of R9"
 msgstr ""
 
-#: elf32-arm.c:13984
+#: elf32-arm.c:14643
 #, 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:14015
+#: elf32-arm.c:14674
 #, 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:14027
+#: elf32-arm.c:14686
 #, c-format
 msgid "error: %pB uses iWMMXt register arguments, %pB does not"
 msgstr ""
 
-#: elf32-arm.c:14044
+#: elf32-arm.c:14703
 #, c-format
 msgid "error: fp16 format mismatch between %pB and %pB"
 msgstr ""
 
-#: elf32-arm.c:14080
+#: elf32-arm.c:14739
 #, c-format
 msgid "%pB has both the current and legacy Tag_MPextension_use attributes"
 msgstr ""
@@ -1809,7 +1697,7 @@ msgstr ""
 #. Ignore init flag - it may not be set, despite the flags field containing valid data.
 #. Ignore init flag - it may not be set, despite the flags field
 #. containing valid data.
-#: elf32-arm.c:14167 elf32-bfin.c:4740 elf32-cris.c:3908 elf32-m68hc1x.c:1410
+#: elf32-arm.c:14826 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:672 elfxx-mips.c:15792
 #: /work/sources/binutils/current/bfd/elfnn-aarch64.c:6968
@@ -1817,122 +1705,137 @@ msgstr ""
 msgid "private flags = %lx:"
 msgstr ""
 
-#: elf32-arm.c:14176
+#: elf32-arm.c:14835
 #, c-format
 msgid " [interworking enabled]"
 msgstr ""
 
-#: elf32-arm.c:14184
+#: elf32-arm.c:14843
 #, c-format
 msgid " [VFP float format]"
 msgstr ""
 
-#: elf32-arm.c:14186
+#: elf32-arm.c:14845
 #, c-format
 msgid " [Maverick float format]"
 msgstr ""
 
-#: elf32-arm.c:14188
+#: elf32-arm.c:14847
 #, c-format
 msgid " [FPA float format]"
 msgstr ""
 
-#: elf32-arm.c:14197
+#: elf32-arm.c:14850
+#, c-format
+msgid " [floats passed in float registers]"
+msgstr ""
+
+#: elf32-arm.c:14853 elf32-arm.c:14939
+#, c-format
+msgid " [position independent]"
+msgstr ""
+
+#: elf32-arm.c:14856
 #, c-format
 msgid " [new ABI]"
 msgstr ""
 
-#: elf32-arm.c:14200
+#: elf32-arm.c:14859
 #, c-format
 msgid " [old ABI]"
 msgstr ""
 
-#: elf32-arm.c:14203
+#: elf32-arm.c:14862
 #, c-format
 msgid " [software FP]"
 msgstr ""
 
-#: elf32-arm.c:14212
+#: elf32-arm.c:14871
 #, c-format
 msgid " [Version1 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14215 elf32-arm.c:14226
+#: elf32-arm.c:14874 elf32-arm.c:14885
 #, c-format
 msgid " [sorted symbol table]"
 msgstr ""
 
-#: elf32-arm.c:14217 elf32-arm.c:14228
+#: elf32-arm.c:14876 elf32-arm.c:14887
 #, c-format
 msgid " [unsorted symbol table]"
 msgstr ""
 
-#: elf32-arm.c:14223
+#: elf32-arm.c:14882
 #, c-format
 msgid " [Version2 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14231
+#: elf32-arm.c:14890
 #, c-format
 msgid " [dynamic symbols use segment index]"
 msgstr ""
 
-#: elf32-arm.c:14234
+#: elf32-arm.c:14893
 #, c-format
 msgid " [mapping symbols precede others]"
 msgstr ""
 
-#: elf32-arm.c:14241
+#: elf32-arm.c:14900
 #, c-format
 msgid " [Version3 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14245
+#: elf32-arm.c:14904
 #, c-format
 msgid " [Version4 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14249
+#: elf32-arm.c:14908
 #, c-format
 msgid " [Version5 EABI]"
 msgstr ""
 
-#: elf32-arm.c:14252
+#: elf32-arm.c:14911
 #, c-format
 msgid " [soft-float ABI]"
 msgstr ""
 
-#: elf32-arm.c:14255
+#: elf32-arm.c:14914
 #, c-format
 msgid " [hard-float ABI]"
 msgstr ""
 
-#: elf32-arm.c:14261
+#: elf32-arm.c:14920
 #, c-format
 msgid " [BE8]"
 msgstr ""
 
-#: elf32-arm.c:14264
+#: elf32-arm.c:14923
 #, c-format
 msgid " [LE8]"
 msgstr ""
 
-#: elf32-arm.c:14270
+#: elf32-arm.c:14929
 #, c-format
 msgid " <EABI version unrecognised>"
 msgstr ""
 
-#: elf32-arm.c:14277
+#: elf32-arm.c:14936
 #, c-format
 msgid " [relocatable executable]"
 msgstr ""
 
-#: elf32-arm.c:14282 /work/sources/binutils/current/bfd/elfnn-aarch64.c:6971
+#: elf32-arm.c:14942
+#, c-format
+msgid " [FDPIC ABI supplement]"
+msgstr ""
+
+#: elf32-arm.c:14947 /work/sources/binutils/current/bfd/elfnn-aarch64.c:6971
 #, c-format
 msgid "<Unrecognised flag bits set>"
 msgstr ""
 
-#: elf32-arm.c:14399 elf32-i386.c:1517 elf32-s390.c:960 elf32-tic6x.c:2783
+#: elf32-arm.c:15064 elf32-i386.c:1517 elf32-s390.c:960 elf32-tic6x.c:2783
 #: elf32-tilepro.c:1479 elf32-xtensa.c:1024 elf64-s390.c:882
 #: elf64-x86-64.c:1826 elfxx-sparc.c:1424 elfxx-tilegx.c:1700
 #: /work/sources/binutils/current/bfd/elfnn-aarch64.c:7260
@@ -1941,92 +1844,122 @@ msgstr ""
 msgid "%pB: bad symbol index: %d"
 msgstr ""
 
-#: elf32-arm.c:15667 elf32-hppa.c:2088 elf32-lm32.c:1998 elf32-m32r.c:2110
+#: elf32-arm.c:15455
+#, c-format
+msgid ""
+"FDPIC does not yet support %s relocation to become dynamic for executable"
+msgstr ""
+
+#: elf32-arm.c:16505 elf32-hppa.c:2088 elf32-lm32.c:1998 elf32-m32r.c:2110
 #: elf32-metag.c:2797 elf32-nds32.c:3840 elf32-or1k.c:2285 elf32-ppc.c:6550
 #: elf32-s390.c:1855 elf32-sh.c:2975 elf32-tic6x.c:3239 elf32-tilepro.c:2245
-#: elf64-ppc.c:10249 elf64-s390.c:1792 elfxx-sparc.c:2437 elfxx-tilegx.c:2491
+#: elf64-ppc.c:10259 elf64-s390.c:1792 elfxx-sparc.c:2437 elfxx-tilegx.c:2491
 #: elfxx-x86.c:571 /work/sources/binutils/current/bfd/elfnn-aarch64.c:8610
 #: /work/sources/binutils/current/bfd/elfnn-riscv.c:1117
 #, c-format
 msgid "%pB: dynamic relocation against `%pT' in read-only section `%pA'\n"
 msgstr ""
 
-#: elf32-arm.c:15912
+#: elf32-arm.c:16801
 #, c-format
 msgid "errors encountered processing file %pB"
 msgstr ""
 
-#: elf32-arm.c:16349 elflink.c:12416 elflink.c:12463
+#: elf32-arm.c:17248 elflink.c:12416 elflink.c:12463
 #, c-format
 msgid "could not find section %s"
 msgstr ""
 
-#: elf32-arm.c:17525
+#: elf32-arm.c:18459
 #, 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:17552
+#: elf32-arm.c:18486
 #, c-format
 msgid "%pB: error: Cortex-A8 erratum stub out of range (input file too large)"
 msgstr ""
 
-#: elf32-arm.c:18379 elf32-arm.c:18401
+#: elf32-arm.c:19313 elf32-arm.c:19335
 #, c-format
 msgid "%pB: error: VFP11 veneer out of range"
 msgstr ""
 
-#: elf32-arm.c:18452
+#: elf32-arm.c:19386
 #, 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:18491
+#: elf32-arm.c:19425
 #, c-format
 msgid "%pB: error: cannot create STM32L4XX veneer"
 msgstr ""
 
-#: elf32-arm.c:19513
+#: elf32-arm.c:20519
 #, c-format
 msgid "error: %pB is already in final BE8 format"
 msgstr ""
 
-#: elf32-arm.c:19589
+#: elf32-arm.c:20595
 #, c-format
 msgid ""
 "error: source object %pB has EABI version %d, but target %pB has EABI "
 "version %d"
 msgstr ""
 
-#: elf32-arm.c:19604
+#: elf32-arm.c:20610
 #, c-format
 msgid "error: %pB is compiled for APCS-%d, whereas target %pB uses APCS-%d"
 msgstr ""
 
-#: elf32-arm.c:19628 elf32-arm.c:19632 elf32-arm.c:19642
+#: elf32-arm.c:20620
+#, c-format
+msgid ""
+"error: %pB passes floats in float registers, whereas %pB passes them in "
+"integer registers"
+msgstr ""
+
+#: elf32-arm.c:20624
+#, c-format
+msgid ""
+"error: %pB passes floats in integer registers, whereas %pB passes them in "
+"float registers"
+msgstr ""
+
+#: elf32-arm.c:20634 elf32-arm.c:20638 elf32-arm.c:20648
 #, c-format
 msgid "error: %pB uses %s instructions, whereas %pB does not"
 msgstr ""
 
-#: elf32-arm.c:19646
+#: elf32-arm.c:20652
 #, c-format
 msgid "error: %pB does not use %s instructions, whereas %pB does"
 msgstr ""
 
-#: elf32-arm.c:19665
+#: elf32-arm.c:20671
 #, c-format
 msgid "error: %pB uses software FP, whereas %pB uses hardware FP"
 msgstr ""
 
-#: elf32-arm.c:19669
+#: elf32-arm.c:20675
 #, c-format
 msgid "error: %pB uses hardware FP, whereas %pB uses software FP"
 msgstr ""
 
+#: elf32-arm.c:20689
+#, c-format
+msgid "warning: %pB supports interworking, whereas %pB does not"
+msgstr ""
+
+#: elf32-arm.c:20695
+#, c-format
+msgid "warning: %pB does not support interworking, whereas %pB does"
+msgstr ""
+
 #: elf32-avr.c:1513 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
@@ -2873,7 +2806,7 @@ msgstr ""
 msgid "%pB: unmatched OMIT_FP in %pA"
 msgstr ""
 
-#: elf32-nds32.c:12642 reloc.c:8292
+#: elf32-nds32.c:12642 reloc.c:8309
 #, c-format
 msgid "%X%P: %pB(%pA): relocation \"%pR\" goes out of range\n"
 msgstr ""
@@ -3033,7 +2966,7 @@ msgstr ""
 #. could just mark this symbol to exclude it
 #. from tls optimization but it's safer to skip
 #. the entire optimization.
-#: elf32-ppc.c:5687 elf64-ppc.c:8949
+#: elf32-ppc.c:5687 elf64-ppc.c:8959
 #, c-format
 msgid "%H arg lost __tls_get_addr, TLS optimization disabled\n"
 msgstr ""
@@ -3062,7 +2995,7 @@ msgstr ""
 msgid "%X%H: unsupported bss-plt -fPIC ifunc %s\n"
 msgstr ""
 
-#: elf32-ppc.c:8727 elf64-ppc.c:15724
+#: elf32-ppc.c:8727 elf64-ppc.c:15734
 msgid "%H: warning: %s unexpected insn %#x.\n"
 msgstr ""
 
@@ -3114,13 +3047,13 @@ msgstr ""
 msgid "%H: %s reloc against `%s': error %d\n"
 msgstr ""
 
-#: elf32-ppc.c:11013 elf64-ppc.c:16216
+#: elf32-ppc.c:11013 elf64-ppc.c:16226
 msgid ""
 "%X%P: text relocations and GNU indirect functions will result in a segfault "
 "at runtime\n"
 msgstr ""
 
-#: elf32-ppc.c:11017 elf64-ppc.c:16220
+#: elf32-ppc.c:11017 elf64-ppc.c:16230
 msgid ""
 "%P: warning: text relocations and GNU indirect functions may result in a "
 "segfault at runtime\n"
@@ -3415,7 +3348,7 @@ msgstr ""
 msgid "overlay stub relocation overflow"
 msgstr ""
 
-#: elf32-spu.c:1984 elf64-ppc.c:13805
+#: elf32-spu.c:1984 elf64-ppc.c:13815
 msgid "stubs don't match calculated size"
 msgstr ""
 
@@ -4164,134 +4097,134 @@ msgid ""
 "internal inconsistency: remaining %lu != max %lu; please report this bug"
 msgstr ""
 
-#: elf64-ppc.c:5068
+#: elf64-ppc.c:5078
 #, c-format
 msgid "symbol '%s' has invalid st_other for ABI version 1"
 msgstr ""
 
-#: elf64-ppc.c:5243
+#: elf64-ppc.c:5253
 #, c-format
 msgid "%pB .opd not allowed in ABI version %d"
 msgstr ""
 
-#: elf64-ppc.c:5757
+#: elf64-ppc.c:5767
 #, c-format
 msgid "%H: %s reloc unsupported in shared libraries and PIEs\n"
 msgstr ""
 
-#: elf64-ppc.c:6152
+#: elf64-ppc.c:6162
 #, c-format
 msgid "%pB uses unknown e_flags 0x%lx"
 msgstr ""
 
-#: elf64-ppc.c:6160
+#: elf64-ppc.c:6170
 #, c-format
 msgid "%pB: ABI version %ld is not compatible with ABI version %ld output"
 msgstr ""
 
-#: elf64-ppc.c:6188
+#: elf64-ppc.c:6198
 #, c-format
 msgid " [abiv%ld]"
 msgstr ""
 
-#: elf64-ppc.c:7376
+#: elf64-ppc.c:7386
 msgid ""
 "%P: copy reloc against `%pT' requires lazy plt linking; avoid setting "
 "LD_BIND_NOW=1 or upgrade gcc\n"
 msgstr ""
 
-#: elf64-ppc.c:7645
+#: elf64-ppc.c:7655
 #, c-format
 msgid "%pB: undefined symbol on R_PPC64_TOCSAVE relocation"
 msgstr ""
 
-#: elf64-ppc.c:7872
+#: elf64-ppc.c:7882
 #, c-format
 msgid "dynreloc miscount for %pB, section %pA"
 msgstr ""
 
-#: elf64-ppc.c:7961
+#: elf64-ppc.c:7971
 #, c-format
 msgid "%pB: .opd is not a regular array of opd entries"
 msgstr ""
 
-#: elf64-ppc.c:7971
+#: elf64-ppc.c:7981
 #, c-format
 msgid "%pB: unexpected reloc type %u in .opd section"
 msgstr ""
 
-#: elf64-ppc.c:7993
+#: elf64-ppc.c:8003
 #, c-format
 msgid "%pB: undefined sym `%s' in .opd section"
 msgstr ""
 
-#: elf64-ppc.c:8477
+#: elf64-ppc.c:8487
 msgid ""
 "warning: --plt-localentry is especially dangerous without ld.so support to "
 "detect ABI violations"
 msgstr ""
 
-#: elf64-ppc.c:8726
+#: elf64-ppc.c:8736
 msgid "%H __tls_get_addr lost arg, TLS optimization disabled\n"
 msgstr ""
 
-#: elf64-ppc.c:9101 elf64-ppc.c:9738
+#: elf64-ppc.c:9111 elf64-ppc.c:9748
 #, c-format
 msgid "%s defined on removed toc entry"
 msgstr ""
 
-#: elf64-ppc.c:9466
+#: elf64-ppc.c:9476
 #, c-format
 msgid "%H: toc optimization is not supported for %s instruction\n"
 msgstr ""
 
-#: elf64-ppc.c:9695
+#: elf64-ppc.c:9705
 #, c-format
 msgid "%H: %s references optimized away TOC entry\n"
 msgstr ""
 
-#: elf64-ppc.c:10526
+#: elf64-ppc.c:10536
 #, c-format
 msgid "warning: discarding dynamic section %s"
 msgstr ""
 
-#: elf64-ppc.c:11113
+#: elf64-ppc.c:11123
 msgid "%P: cannot find opd entry toc for `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:11201
+#: elf64-ppc.c:11211
 #, c-format
 msgid "long branch stub `%s' offset overflow"
 msgstr ""
 
-#: elf64-ppc.c:11260
+#: elf64-ppc.c:11270
 #, c-format
 msgid "can't find branch stub `%s'"
 msgstr ""
 
-#: elf64-ppc.c:11324 elf64-ppc.c:11452 elf64-ppc.c:13421
+#: elf64-ppc.c:11334 elf64-ppc.c:11462 elf64-ppc.c:13431
 #, c-format
 msgid "%P: linkage table error against `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:11675
+#: elf64-ppc.c:11685
 #, c-format
 msgid "can't build branch stub `%s'"
 msgstr ""
 
-#: elf64-ppc.c:12451
+#: elf64-ppc.c:12461
 #, c-format
 msgid "%pB section %pA exceeds stub group size"
 msgstr ""
 
-#: elf64-ppc.c:13819
+#: elf64-ppc.c:13829
 #, c-format
 msgid "linker stubs in %u group\n"
 msgid_plural "linker stubs in %u groups\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: elf64-ppc.c:13823
+#: elf64-ppc.c:13833
 #, c-format
 msgid ""
 "  branch       %lu\n"
@@ -4303,54 +4236,54 @@ msgid ""
 "  global entry %lu"
 msgstr ""
 
-#: elf64-ppc.c:14142
+#: elf64-ppc.c:14152
 #, c-format
 msgid "%H: %s used with TLS symbol `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:14144
+#: elf64-ppc.c:14154
 #, c-format
 msgid "%H: %s used with non-TLS symbol `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:14788
+#: elf64-ppc.c:14798
 #, c-format
 msgid "%H: call to `%pT' lacks nop, can't restore toc; recompile with -fPIC\n"
 msgstr ""
 
-#: elf64-ppc.c:14794
+#: elf64-ppc.c:14804
 #, c-format
 msgid ""
 "%H: call to `%pT' lacks nop, can't restore toc; (-mcmodel=small toc adjust "
 "stub)\n"
 msgstr ""
 
-#: elf64-ppc.c:15489
+#: elf64-ppc.c:15499
 #, c-format
 msgid "%H: %s for indirect function `%pT' unsupported\n"
 msgstr ""
 
-#: elf64-ppc.c:15601
+#: elf64-ppc.c:15611
 #, c-format
 msgid "%P: %pB: %s is not supported for `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:15827
+#: elf64-ppc.c:15837
 #, c-format
 msgid "%H: error: %s not a multiple of %u\n"
 msgstr ""
 
-#: elf64-ppc.c:15850
+#: elf64-ppc.c:15860
 #, c-format
 msgid "%H: unresolvable %s against `%pT'\n"
 msgstr ""
 
-#: elf64-ppc.c:15947
+#: elf64-ppc.c:15957
 #, c-format
 msgid "%H: %s against `%pT': error %d\n"
 msgstr ""
 
-#: elf64-ppc.c:16293 elf64-ppc.c:16312
+#: elf64-ppc.c:16303 elf64-ppc.c:16322
 #, c-format
 msgid "%s offset too large for .eh_frame sdata4 encoding"
 msgstr ""
@@ -5679,32 +5612,32 @@ msgstr ""
 msgid "Partition[%d] length = 0x%.8lx (%ld)\n"
 msgstr ""
 
-#: reloc.c:8125
+#: reloc.c:8142
 msgid "INPUT_SECTION_FLAGS are not supported"
 msgstr ""
 
-#: reloc.c:8226
+#: reloc.c:8243
 #, c-format
 msgid "%X%P: %pB(%pA): error: relocation for offset %V has no value\n"
 msgstr ""
 
-#: reloc.c:8302
+#: reloc.c:8319
 #, c-format
 msgid "%X%P: %pB(%pA): relocation \"%pR\" is not supported\n"
 msgstr ""
 
-#: reloc.c:8311
+#: reloc.c:8328
 #, c-format
 msgid "%X%P: %pB(%pA): relocation \"%pR\" returns an unrecognized value %x\n"
 msgstr ""
 
-#: reloc.c:8373
+#: reloc.c:8390
 #, c-format
 msgid "%pB: unrecognized relocation type %#x in section `%pA'"
 msgstr ""
 
 #. PR 21803: Suggest the most likely cause of this error.
-#: reloc.c:8377
+#: reloc.c:8394
 #, c-format
 msgid "is this version of the linker - %s - out of date ?"
 msgstr ""
@@ -8449,86 +8382,91 @@ msgid ""
 "%pB: Data Directory size (%lx) exceeds space left in section (%<PRIx64>)"
 msgstr ""
 
-#: peigen.c:3021 pepigen.c:3021 pex64igen.c:3021
+#: peigen.c:3001 pepigen.c:3001 pex64igen.c:3001
+#, c-format
+msgid "%pB: Data Directory size (%#lx) is negative"
+msgstr ""
+
+#: peigen.c:3030 pepigen.c:3030 pex64igen.c:3030
 msgid "failed to update file offsets in debug directory"
 msgstr ""
 
-#: peigen.c:3027 pepigen.c:3027 pex64igen.c:3027
+#: peigen.c:3036 pepigen.c:3036 pex64igen.c:3036
 #, c-format
 msgid "%pB: failed to read debug data section"
 msgstr ""
 
-#: peigen.c:3843 pepigen.c:3843 pex64igen.c:3843
+#: peigen.c:3852 pepigen.c:3852 pex64igen.c:3852
 #, c-format
 msgid ".rsrc merge failure: duplicate string resource: %d"
 msgstr ""
 
-#: peigen.c:3978 pepigen.c:3978 pex64igen.c:3978
+#: peigen.c:3987 pepigen.c:3987 pex64igen.c:3987
 msgid ".rsrc merge failure: multiple non-default manifests"
 msgstr ""
 
-#: peigen.c:3996 pepigen.c:3996 pex64igen.c:3996
+#: peigen.c:4005 pepigen.c:4005 pex64igen.c:4005
 msgid ".rsrc merge failure: a directory matches a leaf"
 msgstr ""
 
-#: peigen.c:4038 pepigen.c:4038 pex64igen.c:4038
+#: peigen.c:4047 pepigen.c:4047 pex64igen.c:4047
 msgid ".rsrc merge failure: duplicate leaf"
 msgstr ""
 
-#: peigen.c:4040 pepigen.c:4040 pex64igen.c:4040
+#: peigen.c:4049 pepigen.c:4049 pex64igen.c:4049
 #, c-format
 msgid ".rsrc merge failure: duplicate leaf: %s"
 msgstr ""
 
-#: peigen.c:4106 pepigen.c:4106 pex64igen.c:4106
+#: peigen.c:4115 pepigen.c:4115 pex64igen.c:4115
 msgid ".rsrc merge failure: dirs with differing characteristics"
 msgstr ""
 
-#: peigen.c:4113 pepigen.c:4113 pex64igen.c:4113
+#: peigen.c:4122 pepigen.c:4122 pex64igen.c:4122
 msgid ".rsrc merge failure: differing directory versions"
 msgstr ""
 
 #. Corrupted .rsrc section - cannot merge.
-#: peigen.c:4230 pepigen.c:4230 pex64igen.c:4230
+#: peigen.c:4239 pepigen.c:4239 pex64igen.c:4239
 #, c-format
 msgid "%pB: .rsrc merge failure: corrupt .rsrc section"
 msgstr ""
 
-#: peigen.c:4238 pepigen.c:4238 pex64igen.c:4238
+#: peigen.c:4247 pepigen.c:4247 pex64igen.c:4247
 #, c-format
 msgid "%pB: .rsrc merge failure: unexpected .rsrc size"
 msgstr ""
 
-#: peigen.c:4377 pepigen.c:4377 pex64igen.c:4377
+#: peigen.c:4386 pepigen.c:4386 pex64igen.c:4386
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[1] because .idata$2 is missing"
 msgstr ""
 
-#: peigen.c:4397 pepigen.c:4397 pex64igen.c:4397
+#: peigen.c:4406 pepigen.c:4406 pex64igen.c:4406
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[1] because .idata$4 is missing"
 msgstr ""
 
-#: peigen.c:4418 pepigen.c:4418 pex64igen.c:4418
+#: peigen.c:4427 pepigen.c:4427 pex64igen.c:4427
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[12] because .idata$5 is missing"
 msgstr ""
 
-#: peigen.c:4438 pepigen.c:4438 pex64igen.c:4438
+#: peigen.c:4447 pepigen.c:4447 pex64igen.c:4447
 #, c-format
 msgid ""
 "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE (12)] because ."
 "idata$6 is missing"
 msgstr ""
 
-#: peigen.c:4480 pepigen.c:4480 pex64igen.c:4480
+#: peigen.c:4489 pepigen.c:4489 pex64igen.c:4489
 #, c-format
 msgid ""
 "%pB: unable to fill in DataDictionary[PE_IMPORT_ADDRESS_TABLE(12)] because ."
 "idata$6 is missing"
 msgstr ""
 
-#: peigen.c:4505 pepigen.c:4505 pex64igen.c:4505
+#: peigen.c:4514 pepigen.c:4514 pex64igen.c:4514
 #, c-format
 msgid "%pB: unable to fill in DataDictionary[9] because __tls_used is missing"
 msgstr ""
index e490f5f81d68dc43541bde51312cc979302c5b43..230048a2a7459fe5c673a539cce59aa800c7d865 100644 (file)
@@ -734,6 +734,7 @@ extern const bfd_target nds32_elf32_be_vec;
 extern const bfd_target nds32_elf32_le_vec;
 extern const bfd_target nds32_elf32_linux_be_vec;
 extern const bfd_target nds32_elf32_linux_le_vec;
+extern const bfd_target nfp_elf64_vec;
 extern const bfd_target nios2_elf32_be_vec;
 extern const bfd_target nios2_elf32_le_vec;
 extern const bfd_target ns32k_aout_pc532mach_vec;
@@ -1107,6 +1108,8 @@ static const bfd_target * const _bfd_target_vector[] =
        &nds32_elf32_linux_be_vec,
        &nds32_elf32_linux_le_vec,
 
+       &nfp_elf64_vec,
+
        &nios2_elf32_be_vec,
        &nios2_elf32_le_vec,
 
index ec97a0d987aaff9c87dd9cd775800329d95badd5..61bbd2f6295a19acb2f81c640646859d4960268a 100644 (file)
@@ -1,3 +1,16 @@
+2018-04-30  Francois H. Theron <francois.theron@netronome.com>
+
+       * readelf.c: Very basic support for EM_NFP and its section types.
+       * testsuite/binutils-all/nfp: New directory.
+       * testsuite/binutils-all/nfp/objdump.exp: New file.  Run new
+       tests.
+       * testsuite/binutils-all/nfp/test2_ctx8.d: New file.
+       * testsuite/binutils-all/nfp/test2_no-pc_ctx4.d: New file.
+       * testsuite/binutils-all/nfp/test1.d: New file.
+       * testsuite/binutils-all/nfp/nfp6000.nffw: New file.
+       * testsuite/binutils-all/nfp/test2_nfp6000.nffw: New file.
+       * NEWS: Mention the new support.
+
 2018-04-27  Maciej W. Rozycki  <macro@mips.com>
 
        * testsuite/lib/binutils-common.exp (match_target): New procedure.
index c0fa05f25e2c7ce10b922e0b66fbf5964f7fcd57..da841de5568754ee538e19306bda5dc68a310a51 100644 (file)
@@ -1,5 +1,7 @@
 -*- text -*-
 
+* Add support for disassembling netronome Flow Processor (NFP) firmware files.
+
 Changes in 2.30:
 
 * Add --debug-dump=links option to readelf and --dwarf=links option to objdump
index 29e3c92205ac1b4e29f9af7c36900063d841c7e1..de74776e75648a2cee273584e9d662975f60dd57 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2018-01-13 13:43+0000\n"
+"POT-Creation-Date: 2018-04-30 11:22+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"
@@ -54,10 +54,10 @@ msgid ""
 "\n"
 msgstr ""
 
-#: addr2line.c:100 ar.c:336 ar.c:373 coffdump.c:473 dlltool.c:4006
-#: dllwrap.c:518 elfedit.c:677 nlmconv.c:1112 objcopy.c:658 objcopy.c:711
-#: readelf.c:4385 size.c:97 srconv.c:1706 strings.c:668 sysdump.c:648
-#: windmc.c:227 windres.c:688
+#: addr2line.c:100 ar.c:336 ar.c:373 coffdump.c:473 dlltool.c:3989
+#: dllwrap.c:518 elfedit.c:677 objcopy.c:658 objcopy.c:711 readelf.c:4440
+#: size.c:97 srconv.c:1706 strings.c:668 sysdump.c:648 windmc.c:227
+#: windres.c:688
 #, c-format
 msgid "Report bugs to %s\n"
 msgstr ""
@@ -93,7 +93,7 @@ msgstr ""
 msgid "%s: cannot find section %s"
 msgstr ""
 
-#: addr2line.c:465 nm.c:1683 objdump.c:3856
+#: addr2line.c:465 nm.c:1683 objdump.c:3886
 #, c-format
 msgid "unknown demangling style `%s'"
 msgstr ""
@@ -394,7 +394,7 @@ msgstr ""
 msgid "Cannot convert existing thin library %s to normal format"
 msgstr ""
 
-#: ar.c:1000 ar.c:1064 ar.c:1394 objcopy.c:3288
+#: ar.c:1000 ar.c:1064 ar.c:1394 objcopy.c:3297
 #, c-format
 msgid "internal stat error on %s"
 msgstr ""
@@ -404,7 +404,7 @@ msgstr ""
 msgid "%s is not a valid archive"
 msgstr ""
 
-#: ar.c:1056 objcopy.c:3252
+#: ar.c:1056 objcopy.c:3261
 #, c-format
 msgid "illegal pathname found in archive member: %s"
 msgstr ""
@@ -688,7 +688,7 @@ msgstr ""
 msgid "Symbol  %s, tag %d, number %d"
 msgstr ""
 
-#: coffdump.c:345 readelf.c:16221 readelf.c:16309
+#: coffdump.c:345 readelf.c:16292 readelf.c:16380
 #, c-format
 msgid "Type"
 msgstr ""
@@ -1008,484 +1008,484 @@ msgstr ""
 msgid "debug_write_type: illegal type encountered"
 msgstr ""
 
-#: dlltool.c:916 dlltool.c:942 dlltool.c:973
+#: dlltool.c:901 dlltool.c:926 dlltool.c:956
 #, c-format
 msgid "Internal error: Unknown machine type: %d"
 msgstr ""
 
-#: dlltool.c:1014
+#: dlltool.c:997
 #, c-format
 msgid "Can't open def file: %s"
 msgstr ""
 
-#: dlltool.c:1019
+#: dlltool.c:1002
 #, c-format
 msgid "Processing def file: %s"
 msgstr ""
 
-#: dlltool.c:1023
+#: dlltool.c:1006
 msgid "Processed def file"
 msgstr ""
 
-#: dlltool.c:1047
+#: dlltool.c:1030
 #, c-format
 msgid "Syntax error in def file %s:%d"
 msgstr ""
 
-#: dlltool.c:1084
+#: dlltool.c:1067
 #, c-format
 msgid "%s: Path components stripped from image name, '%s'."
 msgstr ""
 
-#: dlltool.c:1102
+#: dlltool.c:1085
 #, c-format
 msgid "NAME: %s base: %x"
 msgstr ""
 
-#: dlltool.c:1105 dlltool.c:1126
+#: dlltool.c:1088 dlltool.c:1109
 msgid "Can't have LIBRARY and NAME"
 msgstr ""
 
-#: dlltool.c:1123
+#: dlltool.c:1106
 #, c-format
 msgid "LIBRARY: %s base: %x"
 msgstr ""
 
-#: dlltool.c:1279
+#: dlltool.c:1262
 #, c-format
 msgid "VERSION %d.%d\n"
 msgstr ""
 
-#: dlltool.c:1327
+#: dlltool.c:1310
 #, c-format
 msgid "run: %s %s"
 msgstr ""
 
-#: dlltool.c:1368 resrc.c:288
+#: dlltool.c:1351 resrc.c:288
 #, c-format
 msgid "wait: %s"
 msgstr ""
 
-#: dlltool.c:1373 dllwrap.c:416 resrc.c:293
+#: dlltool.c:1356 dllwrap.c:416 resrc.c:293
 #, c-format
 msgid "subprocess got fatal signal %d"
 msgstr ""
 
-#: dlltool.c:1379 dllwrap.c:423 resrc.c:300
+#: dlltool.c:1362 dllwrap.c:423 resrc.c:300
 #, c-format
 msgid "%s exited with status %d"
 msgstr ""
 
-#: dlltool.c:1410
+#: dlltool.c:1393
 #, c-format
 msgid "Sucking in info from %s section in %s"
 msgstr ""
 
-#: dlltool.c:1550
+#: dlltool.c:1533
 #, c-format
 msgid "Excluding symbol: %s"
 msgstr ""
 
-#: dlltool.c:1639 dlltool.c:1650 nm.c:1108 nm.c:1118 nm.c:1127
+#: dlltool.c:1622 dlltool.c:1633 nm.c:1108 nm.c:1118 nm.c:1127
 #, c-format
 msgid "%s: no symbols"
 msgstr ""
 
 #. FIXME: we ought to read in and block out the base relocations.
-#: dlltool.c:1676
+#: dlltool.c:1659
 #, c-format
 msgid "Done reading %s"
 msgstr ""
 
-#: dlltool.c:1686
+#: dlltool.c:1669
 #, c-format
 msgid "Unable to open object file: %s: %s"
 msgstr ""
 
-#: dlltool.c:1689
+#: dlltool.c:1672
 #, c-format
 msgid "Scanning object file %s"
 msgstr ""
 
-#: dlltool.c:1709
+#: dlltool.c:1692
 #, c-format
 msgid "Cannot produce mcore-elf dll from archive file: %s"
 msgstr ""
 
-#: dlltool.c:1811
+#: dlltool.c:1794
 msgid "Adding exports to output file"
 msgstr ""
 
-#: dlltool.c:1863
+#: dlltool.c:1846
 msgid "Added exports to output file"
 msgstr ""
 
-#: dlltool.c:2031
+#: dlltool.c:2014
 #, c-format
 msgid "Generating export file: %s"
 msgstr ""
 
-#: dlltool.c:2036
+#: dlltool.c:2019
 #, c-format
 msgid "Unable to open temporary assembler file: %s"
 msgstr ""
 
-#: dlltool.c:2041
+#: dlltool.c:2024
 #, c-format
 msgid "Opened temporary file: %s"
 msgstr ""
 
-#: dlltool.c:2217
+#: dlltool.c:2200
 msgid "failed to read the number of entries from base file"
 msgstr ""
 
-#: dlltool.c:2268
+#: dlltool.c:2251
 msgid "Generated exports file"
 msgstr ""
 
-#: dlltool.c:2478
+#: dlltool.c:2461
 #, c-format
 msgid "bfd_open failed open stub file: %s: %s"
 msgstr ""
 
-#: dlltool.c:2482
+#: dlltool.c:2465
 #, c-format
 msgid "Creating stub file: %s"
 msgstr ""
 
-#: dlltool.c:2953
+#: dlltool.c:2936
 #, c-format
 msgid "bfd_open failed reopen stub file: %s: %s"
 msgstr ""
 
-#: dlltool.c:2967 dlltool.c:3046
+#: dlltool.c:2950 dlltool.c:3029
 #, c-format
 msgid "failed to open temporary head file: %s"
 msgstr ""
 
-#: dlltool.c:3031 dlltool.c:3117
+#: dlltool.c:3014 dlltool.c:3100
 #, c-format
 msgid "failed to open temporary head file: %s: %s"
 msgstr ""
 
-#: dlltool.c:3132
+#: dlltool.c:3115
 #, c-format
 msgid "failed to open temporary tail file: %s"
 msgstr ""
 
-#: dlltool.c:3191
+#: dlltool.c:3174
 #, c-format
 msgid "failed to open temporary tail file: %s: %s"
 msgstr ""
 
-#: dlltool.c:3214
+#: dlltool.c:3197
 #, c-format
 msgid "Can't create .lib file: %s: %s"
 msgstr ""
 
-#: dlltool.c:3218
+#: dlltool.c:3201
 #, c-format
 msgid "Creating library file: %s"
 msgstr ""
 
-#: dlltool.c:3305 dlltool.c:3311
+#: dlltool.c:3288 dlltool.c:3294
 #, c-format
 msgid "cannot delete %s: %s"
 msgstr ""
 
-#: dlltool.c:3317
+#: dlltool.c:3300
 msgid "Created lib file"
 msgstr ""
 
-#: dlltool.c:3529
+#: dlltool.c:3512
 #, c-format
 msgid "Can't open .lib file: %s: %s"
 msgstr ""
 
-#: dlltool.c:3537 dlltool.c:3559
+#: dlltool.c:3520 dlltool.c:3542
 #, c-format
 msgid "%s is not a library"
 msgstr ""
 
-#: dlltool.c:3577
+#: dlltool.c:3560
 #, c-format
 msgid "Import library `%s' specifies two or more dlls"
 msgstr ""
 
-#: dlltool.c:3588
+#: dlltool.c:3571
 #, c-format
 msgid "Unable to determine dll name for `%s' (not an import library?)"
 msgstr ""
 
-#: dlltool.c:3820
+#: dlltool.c:3803
 #, c-format
 msgid "Warning, ignoring duplicate EXPORT %s %d,%d"
 msgstr ""
 
-#: dlltool.c:3826
+#: dlltool.c:3809
 #, c-format
 msgid "Error, duplicate EXPORT with ordinals: %s"
 msgstr ""
 
-#: dlltool.c:3929
+#: dlltool.c:3912
 msgid "Processing definitions"
 msgstr ""
 
-#: dlltool.c:3956
+#: dlltool.c:3939
 msgid "Processed definitions"
 msgstr ""
 
 #. xgetext:c-format
-#: dlltool.c:3963 dllwrap.c:477
+#: dlltool.c:3946 dllwrap.c:477
 #, c-format
 msgid "Usage %s <option(s)> <object-file(s)>\n"
 msgstr ""
 
 #. xgetext:c-format
-#: dlltool.c:3965
+#: dlltool.c:3948
 #, c-format
 msgid ""
 "   -m --machine <machine>    Create as DLL for <machine>.  [default: %s]\n"
 msgstr ""
 
-#: dlltool.c:3966
+#: dlltool.c:3949
 #, c-format
 msgid ""
 "        possible <machine>: arm[_interwork], i386, mcore[-elf]{-le|-be}, "
 "ppc, thumb\n"
 msgstr ""
 
-#: dlltool.c:3967
+#: dlltool.c:3950
 #, c-format
 msgid "   -e --output-exp <outname> Generate an export file.\n"
 msgstr ""
 
-#: dlltool.c:3968
+#: dlltool.c:3951
 #, c-format
 msgid "   -l --output-lib <outname> Generate an interface library.\n"
 msgstr ""
 
-#: dlltool.c:3969
+#: dlltool.c:3952
 #, c-format
 msgid "   -y --output-delaylib <outname> Create a delay-import library.\n"
 msgstr ""
 
-#: dlltool.c:3970
+#: dlltool.c:3953
 #, c-format
 msgid "   -a --add-indirect         Add dll indirects to export file.\n"
 msgstr ""
 
-#: dlltool.c:3971
+#: dlltool.c:3954
 #, c-format
 msgid ""
 "   -D --dllname <name>       Name of input dll to put into interface lib.\n"
 msgstr ""
 
-#: dlltool.c:3972
+#: dlltool.c:3955
 #, c-format
 msgid "   -d --input-def <deffile>  Name of .def file to be read in.\n"
 msgstr ""
 
-#: dlltool.c:3973
+#: dlltool.c:3956
 #, c-format
 msgid "   -z --output-def <deffile> Name of .def file to be created.\n"
 msgstr ""
 
-#: dlltool.c:3974
+#: dlltool.c:3957
 #, c-format
 msgid "      --export-all-symbols   Export all symbols to .def\n"
 msgstr ""
 
-#: dlltool.c:3975
+#: dlltool.c:3958
 #, c-format
 msgid "      --no-export-all-symbols  Only export listed symbols\n"
 msgstr ""
 
-#: dlltool.c:3976
+#: dlltool.c:3959
 #, c-format
 msgid "      --exclude-symbols <list> Don't export <list>\n"
 msgstr ""
 
-#: dlltool.c:3977
+#: dlltool.c:3960
 #, c-format
 msgid "      --no-default-excludes  Clear default exclude symbols\n"
 msgstr ""
 
-#: dlltool.c:3978
+#: dlltool.c:3961
 #, c-format
 msgid "   -b --base-file <basefile> Read linker generated base file.\n"
 msgstr ""
 
-#: dlltool.c:3979
+#: dlltool.c:3962
 #, c-format
 msgid "   -x --no-idata4            Don't generate idata$4 section.\n"
 msgstr ""
 
-#: dlltool.c:3980
+#: dlltool.c:3963
 #, c-format
 msgid "   -c --no-idata5            Don't generate idata$5 section.\n"
 msgstr ""
 
-#: dlltool.c:3981
+#: dlltool.c:3964
 #, c-format
 msgid ""
 "      --use-nul-prefixed-import-tables Use zero prefixed idata$4 and idata"
 "$5.\n"
 msgstr ""
 
-#: dlltool.c:3982
+#: dlltool.c:3965
 #, c-format
 msgid ""
 "   -U --add-underscore       Add underscores to all symbols in interface "
 "library.\n"
 msgstr ""
 
-#: dlltool.c:3983
+#: dlltool.c:3966
 #, c-format
 msgid ""
 "      --add-stdcall-underscore Add underscores to stdcall symbols in "
 "interface library.\n"
 msgstr ""
 
-#: dlltool.c:3984
+#: dlltool.c:3967
 #, c-format
 msgid ""
 "      --no-leading-underscore All symbols shouldn't be prefixed by an "
 "underscore.\n"
 msgstr ""
 
-#: dlltool.c:3985
+#: dlltool.c:3968
 #, c-format
 msgid ""
 "      --leading-underscore   All symbols should be prefixed by an "
 "underscore.\n"
 msgstr ""
 
-#: dlltool.c:3986
+#: dlltool.c:3969
 #, c-format
 msgid "   -k --kill-at              Kill @<n> from exported names.\n"
 msgstr ""
 
-#: dlltool.c:3987
+#: dlltool.c:3970
 #, c-format
 msgid "   -A --add-stdcall-alias    Add aliases without @<n>.\n"
 msgstr ""
 
-#: dlltool.c:3988
+#: dlltool.c:3971
 #, c-format
 msgid "   -p --ext-prefix-alias <prefix> Add aliases with <prefix>.\n"
 msgstr ""
 
-#: dlltool.c:3989
+#: dlltool.c:3972
 #, c-format
 msgid "   -S --as <name>            Use <name> for assembler.\n"
 msgstr ""
 
-#: dlltool.c:3990
+#: dlltool.c:3973
 #, c-format
 msgid "   -f --as-flags <flags>     Pass <flags> to the assembler.\n"
 msgstr ""
 
-#: dlltool.c:3991
+#: dlltool.c:3974
 #, c-format
 msgid ""
 "   -C --compat-implib        Create backward compatible import library.\n"
 msgstr ""
 
-#: dlltool.c:3992
+#: dlltool.c:3975
 #, c-format
 msgid ""
 "   -n --no-delete            Keep temp files (repeat for extra "
 "preservation).\n"
 msgstr ""
 
-#: dlltool.c:3993
+#: dlltool.c:3976
 #, c-format
 msgid ""
 "   -t --temp-prefix <prefix> Use <prefix> to construct temp file names.\n"
 msgstr ""
 
-#: dlltool.c:3994
+#: dlltool.c:3977
 #, c-format
 msgid ""
 "   -I --identify <implib>    Report the name of the DLL associated with "
 "<implib>.\n"
 msgstr ""
 
-#: dlltool.c:3995
+#: dlltool.c:3978
 #, c-format
 msgid ""
 "      --identify-strict      Causes --identify to report error when multiple "
 "DLLs.\n"
 msgstr ""
 
-#: dlltool.c:3996
+#: dlltool.c:3979
 #, c-format
 msgid "   -v --verbose              Be verbose.\n"
 msgstr ""
 
-#: dlltool.c:3997
+#: dlltool.c:3980
 #, c-format
 msgid "   -V --version              Display the program version.\n"
 msgstr ""
 
-#: dlltool.c:3998
+#: dlltool.c:3981
 #, c-format
 msgid "   -h --help                 Display this information.\n"
 msgstr ""
 
-#: dlltool.c:3999
+#: dlltool.c:3982
 #, c-format
 msgid "   @<file>                   Read options from <file>.\n"
 msgstr ""
 
-#: dlltool.c:4001
+#: dlltool.c:3984
 #, c-format
 msgid ""
 "   -M --mcore-elf <outname>  Process mcore-elf object files into <outname>.\n"
 msgstr ""
 
-#: dlltool.c:4002
+#: dlltool.c:3985
 #, c-format
 msgid "   -L --linker <name>        Use <name> as the linker.\n"
 msgstr ""
 
-#: dlltool.c:4003
+#: dlltool.c:3986
 #, c-format
 msgid "   -F --linker-flags <flags> Pass <flags> to the linker.\n"
 msgstr ""
 
-#: dlltool.c:4149
+#: dlltool.c:4132
 #, c-format
 msgid "Unable to open def-file: %s"
 msgstr ""
 
-#: dlltool.c:4154
+#: dlltool.c:4137
 #, c-format
 msgid "Path components stripped from dllname, '%s'."
 msgstr ""
 
-#: dlltool.c:4202
+#: dlltool.c:4185
 #, c-format
 msgid "Unable to open base-file: %s"
 msgstr ""
 
-#: dlltool.c:4237
+#: dlltool.c:4220
 #, c-format
 msgid "Machine '%s' not supported"
 msgstr ""
 
-#: dlltool.c:4317
+#: dlltool.c:4300
 #, c-format
 msgid "Warning, machine type (%d) not supported for delayimport."
 msgstr ""
 
-#: dlltool.c:4385 dllwrap.c:206
+#: dlltool.c:4368 dllwrap.c:206
 #, c-format
 msgid "Tried file: %s"
 msgstr ""
 
-#: dlltool.c:4392 dllwrap.c:213
+#: dlltool.c:4375 dllwrap.c:213
 #, c-format
 msgid "Using file: %s"
 msgstr ""
@@ -1764,7 +1764,10 @@ msgid ""
 "Internal error: %s:%d: LEB value (%s) too large for containing variable\n"
 msgstr ""
 
-#: dwarf.c:396
+#. Read AMOUNT bytes from PTR and store them in VAL as an unsigned value.
+#. Checks to make sure that the read will not reach or pass END
+#. and that VAL is big enough to hold AMOUNT bytes.
+#: dwarf.c:399
 #, c-format
 msgid "internal error: attempt to read %d byte of data in to %d sized variable"
 msgid_plural ""
@@ -1772,52 +1775,52 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: dwarf.c:519 dwarf.c:4362
+#: dwarf.c:525 dwarf.c:4387
 msgid "Badly formed extended line op encountered!\n"
 msgstr ""
 
-#: dwarf.c:526
+#: dwarf.c:532
 #, c-format
 msgid "  Extended opcode %d: "
 msgstr ""
 
-#: dwarf.c:531
+#: dwarf.c:537
 #, c-format
 msgid ""
 "End of Sequence\n"
 "\n"
 msgstr ""
 
-#: dwarf.c:539
+#: dwarf.c:545
 #, c-format
 msgid "Length (%d) of DW_LNE_set_address op is too long\n"
 msgstr ""
 
-#: dwarf.c:545
+#: dwarf.c:551
 #, c-format
 msgid "set Address to 0x%s\n"
 msgstr ""
 
-#: dwarf.c:552
+#: dwarf.c:558
 #, c-format
 msgid "define new File Table entry\n"
 msgstr ""
 
-#: dwarf.c:553 dwarf.c:3651
+#: dwarf.c:559 dwarf.c:3676
 #, c-format
 msgid "  Entry\tDir\tTime\tSize\tName\n"
 msgstr ""
 
-#: dwarf.c:572
+#: dwarf.c:578
 msgid "DW_LNE_define_file: Bad opcode length\n"
 msgstr ""
 
-#: dwarf.c:576
+#: dwarf.c:582
 #, c-format
 msgid "set Discriminator to %s\n"
 msgstr ""
 
-#: dwarf.c:651
+#: dwarf.c:657
 #, c-format
 msgid "    UNKNOWN DW_LNE_HP_SFC opcode (%u)\n"
 msgstr ""
@@ -1826,1364 +1829,1372 @@ msgstr ""
 #. the limited range of the unsigned char data type used
 #. for op_code.
 #. && op_code <= DW_LNE_hi_user
-#: dwarf.c:668
+#: dwarf.c:674
 #, c-format
 msgid "user defined: "
 msgstr ""
 
-#: dwarf.c:670
+#: dwarf.c:676
 #, c-format
 msgid "UNKNOWN: "
 msgstr ""
 
-#: dwarf.c:671
+#: dwarf.c:677
 #, c-format
 msgid "length %d ["
 msgstr ""
 
-#: dwarf.c:689 dwarf.c:765 dwarf.c:1703
+#: dwarf.c:695 dwarf.c:771 dwarf.c:1709
 msgid "<no .debug_str section>"
 msgstr ""
 
-#: dwarf.c:693
+#: dwarf.c:699
 #, c-format
 msgid "DW_FORM_strp offset too big: %s\n"
 msgstr ""
 
-#: dwarf.c:695 dwarf.c:723 dwarf.c:1708
+#: dwarf.c:701 dwarf.c:729 dwarf.c:1714
 msgid "<offset is too big>"
 msgstr ""
 
-#: dwarf.c:705 dwarf.c:1717
+#: dwarf.c:711 dwarf.c:1723
 msgid "<no NUL byte at end of .debug_str section>"
 msgstr ""
 
-#: dwarf.c:717
+#: dwarf.c:723
 msgid "<no .debug_line_str section>"
 msgstr ""
 
-#: dwarf.c:721
+#: dwarf.c:727
 #, c-format
 msgid "DW_FORM_line_strp offset too big: %s\n"
 msgstr ""
 
-#: dwarf.c:733
+#: dwarf.c:739
 msgid "<no NUL byte at end of .debug_line_str section>"
 msgstr ""
 
-#: dwarf.c:751
+#: dwarf.c:757
 msgid "<no .debug_str_offsets.dwo section>"
 msgstr ""
 
-#: dwarf.c:752
+#: dwarf.c:758
 msgid "<no .debug_str_offsets section>"
 msgstr ""
 
-#: dwarf.c:758
+#: dwarf.c:764
 #, c-format
 msgid "DW_FORM_GNU_str_index offset too big: %s\n"
 msgstr ""
 
-#: dwarf.c:760
+#: dwarf.c:766
 msgid "<index offset is too big>"
 msgstr ""
 
-#: dwarf.c:764
+#: dwarf.c:770
 msgid "<no .debug_str.dwo section>"
 msgstr ""
 
-#: dwarf.c:771
+#: dwarf.c:777
 #, c-format
 msgid "DW_FORM_GNU_str_index indirect offset too big: %s\n"
 msgstr ""
 
-#: dwarf.c:773
+#: dwarf.c:779
 msgid "<indirect index offset is too big>"
 msgstr ""
 
-#: dwarf.c:782
+#: dwarf.c:788
 msgid "<no NUL byte at end of section>"
 msgstr ""
 
-#: dwarf.c:793
+#: dwarf.c:799
 msgid "<no .debug_addr section>"
 msgstr ""
 
-#: dwarf.c:797
+#: dwarf.c:803
 #, c-format
 msgid "Offset into section %s too big: %s\n"
 msgstr ""
 
 #. Report the missing single zero which ends the section.
-#: dwarf.c:975
+#: dwarf.c:981
 msgid ".debug_abbrev section not zero terminated\n"
 msgstr ""
 
-#: dwarf.c:990
+#: dwarf.c:996
 #, c-format
 msgid "User TAG value: %#lx"
 msgstr ""
 
-#: dwarf.c:992
+#: dwarf.c:998
 #, c-format
 msgid "Unknown TAG value: %#lx"
 msgstr ""
 
-#: dwarf.c:1012
+#: dwarf.c:1018
 #, c-format
 msgid "Unknown FORM value: %lx"
 msgstr ""
 
-#: dwarf.c:1028
+#: dwarf.c:1034
 #, c-format
 msgid "Unknown IDX value: %lx"
 msgstr ""
 
-#: dwarf.c:1042
+#: dwarf.c:1048
 #, c-format
 msgid "%c%s byte block: "
 msgstr ""
 
-#: dwarf.c:1396
+#: dwarf.c:1402
 #, c-format
 msgid "(DW_OP_call_ref in frame info)"
 msgstr ""
 
-#: dwarf.c:1418
+#: dwarf.c:1424
 #, c-format
 msgid "size: %s "
 msgstr ""
 
-#: dwarf.c:1421
+#: dwarf.c:1427
 #, c-format
 msgid "offset: %s "
 msgstr ""
 
-#: dwarf.c:1440
+#: dwarf.c:1446
 #, c-format
 msgid "DW_OP_GNU_push_tls_address or DW_OP_HP_unknown"
 msgstr ""
 
-#: dwarf.c:1465
+#: dwarf.c:1471
 #, c-format
 msgid "(%s in frame info)"
 msgstr ""
 
-#: dwarf.c:1611
+#: dwarf.c:1617
 #, c-format
 msgid "(User defined location op 0x%x)"
 msgstr ""
 
-#: dwarf.c:1613
+#: dwarf.c:1619
 #, c-format
 msgid "(Unknown location op 0x%x)"
 msgstr ""
 
-#: dwarf.c:1696
+#: dwarf.c:1702
 msgid "<following link not possible>"
 msgstr ""
 
-#: dwarf.c:1699
+#: dwarf.c:1705
 msgid "<could not load separate string section>"
 msgstr ""
 
-#: dwarf.c:1707
+#: dwarf.c:1713
 #, c-format
 msgid "DW_FORM_GNU_strp_alt offset too big: %s\n"
 msgstr ""
 
-#: dwarf.c:1740
+#: dwarf.c:1746
 #, c-format
 msgid "Unknown AT value: %lx"
 msgstr ""
 
-#: dwarf.c:1771
+#: dwarf.c:1777
 msgid "Corrupt attribute\n"
 msgstr ""
 
-#: dwarf.c:1786
+#: dwarf.c:1792
 msgid "Internal error: DWARF version is not 2, 3 or 4.\n"
 msgstr ""
 
-#: dwarf.c:1924
+#: dwarf.c:1930
 msgid "DW_FORM_data8 is unsupported when sizeof (dwarf_vma) != 8\n"
 msgstr ""
 
-#: dwarf.c:1968 dwarf.c:1993 dwarf.c:2014 dwarf.c:2036
+#: dwarf.c:1974 dwarf.c:1999 dwarf.c:2020 dwarf.c:2042
 msgid "Block ends prematurely\n"
 msgstr ""
 
-#: dwarf.c:1979 dwarf.c:2000 dwarf.c:2021 dwarf.c:2045
+#: dwarf.c:1985 dwarf.c:2006 dwarf.c:2027 dwarf.c:2051
 #, c-format
 msgid "Corrupt attribute block length: %lx\n"
 msgstr ""
 
-#: dwarf.c:2056
+#: dwarf.c:2062
 #, c-format
 msgid "%c(indirect string, offset: 0x%s): %s"
 msgstr ""
 
-#: dwarf.c:2063
+#: dwarf.c:2069
 #, c-format
 msgid "%c(indirect line string, offset: 0x%s): %s"
 msgstr ""
 
-#: dwarf.c:2074
+#: dwarf.c:2080
 #, c-format
 msgid "%c(indexed string: 0x%s): %s"
 msgstr ""
 
-#: dwarf.c:2083
+#: dwarf.c:2089
 #, c-format
 msgid "%c(alt indirect string, offset: 0x%s) %s"
 msgstr ""
 
-#: dwarf.c:2108
+#: dwarf.c:2114
 #, c-format
 msgid "%c(addr_index: 0x%s): %s"
 msgstr ""
 
-#: dwarf.c:2114
+#: dwarf.c:2120
 #, c-format
 msgid "Unrecognized form: %lu\n"
 msgstr ""
 
-#: dwarf.c:2238 dwarf.c:2263 dwarf.c:2279
+#: dwarf.c:2181
+msgid "More location offset attributes than DW_AT_GNU_locview attributes\n"
+msgstr ""
+
+#: dwarf.c:2193
+msgid "More DW_AT_GNU_locview attributes than location offset attributes\n"
+msgstr ""
+
+#: dwarf.c:2253 dwarf.c:2278 dwarf.c:2294
 #, c-format
 msgid "Unsupported form (%s) for attribute %s\n"
 msgstr ""
 
-#: dwarf.c:2240 dwarf.c:2265 dwarf.c:4284 dwarf.c:4594 readelf.c:5738
-#: readelf.c:5813 readelf.c:5831 readelf.c:5849 readelf.c:10236 readelf.c:10868
-#: readelf.c:15349 readelf.c:15381
+#: dwarf.c:2255 dwarf.c:2280 dwarf.c:4309 dwarf.c:4619 readelf.c:5793
+#: readelf.c:5868 readelf.c:5886 readelf.c:5904 readelf.c:10306 readelf.c:10938
+#: readelf.c:15420 readelf.c:15452
 msgid "<unknown>"
 msgstr ""
 
-#: dwarf.c:2302
+#: dwarf.c:2317
 #, c-format
 msgid "(not inlined)"
 msgstr ""
 
-#: dwarf.c:2305
+#: dwarf.c:2320
 #, c-format
 msgid "(inlined)"
 msgstr ""
 
-#: dwarf.c:2308
+#: dwarf.c:2323
 #, c-format
 msgid "(declared as inline but ignored)"
 msgstr ""
 
-#: dwarf.c:2311
+#: dwarf.c:2326
 #, c-format
 msgid "(declared as inline and inlined)"
 msgstr ""
 
-#: dwarf.c:2314
+#: dwarf.c:2329
 #, c-format
 msgid "  (Unknown inline attribute value: %s)"
 msgstr ""
 
-#: dwarf.c:2361
+#: dwarf.c:2386
 #, c-format
 msgid "(implementation defined: %s)"
 msgstr ""
 
-#: dwarf.c:2364
+#: dwarf.c:2389
 #, c-format
 msgid "(Unknown: %s)"
 msgstr ""
 
-#: dwarf.c:2409
+#: dwarf.c:2434
 #, c-format
 msgid "(user defined type)"
 msgstr ""
 
-#: dwarf.c:2411
+#: dwarf.c:2436
 #, c-format
 msgid "(unknown type)"
 msgstr ""
 
-#: dwarf.c:2424
+#: dwarf.c:2449
 #, c-format
 msgid "(unknown accessibility)"
 msgstr ""
 
-#: dwarf.c:2436
+#: dwarf.c:2461
 #, c-format
 msgid "(unknown visibility)"
 msgstr ""
 
-#: dwarf.c:2449
+#: dwarf.c:2474
 #, c-format
 msgid "(user specified)"
 msgstr ""
 
-#: dwarf.c:2451
+#: dwarf.c:2476
 #, c-format
 msgid "(unknown endianity)"
 msgstr ""
 
-#: dwarf.c:2463
+#: dwarf.c:2488
 #, c-format
 msgid "(unknown virtuality)"
 msgstr ""
 
-#: dwarf.c:2475
+#: dwarf.c:2500
 #, c-format
 msgid "(unknown case)"
 msgstr ""
 
-#: dwarf.c:2493
+#: dwarf.c:2518
 #, c-format
 msgid "(user defined)"
 msgstr ""
 
-#: dwarf.c:2495
+#: dwarf.c:2520
 #, c-format
 msgid "(unknown convention)"
 msgstr ""
 
-#: dwarf.c:2504
+#: dwarf.c:2529
 #, c-format
 msgid "(undefined)"
 msgstr ""
 
-#: dwarf.c:2514
+#: dwarf.c:2539
 #, c-format
 msgid "(unsigned)"
 msgstr ""
 
-#: dwarf.c:2515
+#: dwarf.c:2540
 #, c-format
 msgid "(leading overpunch)"
 msgstr ""
 
-#: dwarf.c:2516
+#: dwarf.c:2541
 #, c-format
 msgid "(trailing overpunch)"
 msgstr ""
 
-#: dwarf.c:2517
+#: dwarf.c:2542
 #, c-format
 msgid "(leading separate)"
 msgstr ""
 
-#: dwarf.c:2518
+#: dwarf.c:2543
 #, c-format
 msgid "(trailing separate)"
 msgstr ""
 
-#: dwarf.c:2519 dwarf.c:2530 dwarf.c:2540
+#: dwarf.c:2544 dwarf.c:2555 dwarf.c:2565
 #, c-format
 msgid "(unrecognised)"
 msgstr ""
 
-#: dwarf.c:2527
+#: dwarf.c:2552
 #, c-format
 msgid "(no)"
 msgstr ""
 
-#: dwarf.c:2528
+#: dwarf.c:2553
 #, c-format
 msgid "(in class)"
 msgstr ""
 
-#: dwarf.c:2529
+#: dwarf.c:2554
 #, c-format
 msgid "(out of class)"
 msgstr ""
 
-#: dwarf.c:2538
+#: dwarf.c:2563
 #, c-format
 msgid "(label)"
 msgstr ""
 
-#: dwarf.c:2539
+#: dwarf.c:2564
 #, c-format
 msgid "(range)"
 msgstr ""
 
-#: dwarf.c:2566
+#: dwarf.c:2591
 #, c-format
 msgid " (location list)"
 msgstr ""
 
-#: dwarf.c:2587 dwarf.c:5551 dwarf.c:5708 dwarf.c:5890
+#: dwarf.c:2612 dwarf.c:5576 dwarf.c:5733 dwarf.c:5915
 #, c-format
 msgid " [without DW_AT_frame_base]"
 msgstr ""
 
-#: dwarf.c:2620
+#: dwarf.c:2645
 #, c-format
 msgid ""
 "Offset %s used as value for DW_AT_import attribute of DIE at offset 0x%lx is "
 "too big.\n"
 msgstr ""
 
-#: dwarf.c:2630
+#: dwarf.c:2655
 #, c-format
 msgid "\t[Abbrev Number: %ld"
 msgstr ""
 
-#: dwarf.c:2715
+#: dwarf.c:2740
 #, c-format
 msgid ""
 "Raw dump of debug contents of section %s (loaded from %s):\n"
 "\n"
 msgstr ""
 
-#: dwarf.c:2718
+#: dwarf.c:2743
 #, c-format
 msgid ""
 "Raw dump of debug contents of section %s:\n"
 "\n"
 msgstr ""
 
-#: dwarf.c:2723
+#: dwarf.c:2748
 #, c-format
 msgid ""
 "Contents of the %s section (loaded from %s):\n"
 "\n"
 msgstr ""
 
-#: dwarf.c:2726
+#: dwarf.c:2751
 #, c-format
 msgid ""
 "Contents of the %s section:\n"
 "\n"
 msgstr ""
 
-#: dwarf.c:2775
+#: dwarf.c:2800
 #, c-format
 msgid "Reserved length value (0x%s) found in section %s\n"
 msgstr ""
 
-#: dwarf.c:2787
+#: dwarf.c:2812
 #, c-format
 msgid "Corrupt unit length (0x%s) found in section %s\n"
 msgstr ""
 
-#: dwarf.c:2795
+#: dwarf.c:2820
 #, c-format
 msgid "No comp units in %s section ?\n"
 msgstr ""
 
-#: dwarf.c:2804
+#: dwarf.c:2829
 #, c-format
 msgid "Not enough memory for a debug info array of %u entries\n"
 msgstr ""
 
-#: dwarf.c:2833
+#: dwarf.c:2858
 #, c-format
 msgid "Unable to locate %s section!\n"
 msgstr ""
 
-#: dwarf.c:2913
+#: dwarf.c:2938
 #, c-format
 msgid "Invalid pointer size (%d) in compunit header, using %d instead\n"
 msgstr ""
 
-#: dwarf.c:2956
+#: dwarf.c:2981
 #, c-format
 msgid "  Compilation Unit @ offset 0x%s:\n"
 msgstr ""
 
-#: dwarf.c:2958
+#: dwarf.c:2983
 #, c-format
 msgid "   Length:        0x%s (%s)\n"
 msgstr ""
 
-#: dwarf.c:2961
+#: dwarf.c:2986
 #, c-format
 msgid "   Version:       %d\n"
 msgstr ""
 
-#: dwarf.c:2962
+#: dwarf.c:2987
 #, c-format
 msgid "   Abbrev Offset: 0x%s\n"
 msgstr ""
 
-#: dwarf.c:2964
+#: dwarf.c:2989
 #, c-format
 msgid "   Pointer Size:  %d\n"
 msgstr ""
 
-#: dwarf.c:2969
+#: dwarf.c:2994
 #, c-format
 msgid "   Signature:     0x%s\n"
 msgstr ""
 
-#: dwarf.c:2972
+#: dwarf.c:2997
 #, c-format
 msgid "   Type Offset:   0x%s\n"
 msgstr ""
 
-#: dwarf.c:2980
+#: dwarf.c:3005
 #, c-format
 msgid "   Section contributions:\n"
 msgstr ""
 
-#: dwarf.c:2981
+#: dwarf.c:3006
 #, c-format
 msgid "    .debug_abbrev.dwo:       0x%s  0x%s\n"
 msgstr ""
 
-#: dwarf.c:2984
+#: dwarf.c:3009
 #, c-format
 msgid "    .debug_line.dwo:         0x%s  0x%s\n"
 msgstr ""
 
-#: dwarf.c:2987
+#: dwarf.c:3012
 #, c-format
 msgid "    .debug_loc.dwo:          0x%s  0x%s\n"
 msgstr ""
 
-#: dwarf.c:2990
+#: dwarf.c:3015
 #, c-format
 msgid "    .debug_str_offsets.dwo:  0x%s  0x%s\n"
 msgstr ""
 
-#: dwarf.c:3000 dwarf.c:4768 dwarf.c:6316 dwarf.c:8348
+#: dwarf.c:3025 dwarf.c:4793 dwarf.c:6341 dwarf.c:8407
 #, c-format
 msgid "Debug info is corrupted, %s header at %#lx has length %s\n"
 msgstr ""
 
-#: dwarf.c:3013
+#: dwarf.c:3038
 #, c-format
 msgid "CU at offset %s contains corrupt or unsupported version number: %d.\n"
 msgstr ""
 
-#: dwarf.c:3022
+#: dwarf.c:3047
 #, c-format
 msgid "CU at offset %s contains corrupt or unsupported unit type: %d.\n"
 msgstr ""
 
-#: dwarf.c:3032
+#: dwarf.c:3057
 #, c-format
 msgid ""
 "Debug info is corrupted, abbrev offset (%lx) is larger than abbrev section "
 "size (%lx)\n"
 msgstr ""
 
-#: dwarf.c:3038
+#: dwarf.c:3063
 #, c-format
 msgid ""
 "Debug info is corrupted, abbrev size (%lx) is larger than abbrev section "
 "size (%lx)\n"
 msgstr ""
 
-#: dwarf.c:3084
+#: dwarf.c:3109
 #, c-format
 msgid " <%d><%lx>: Abbrev Number: 0\n"
 msgstr ""
 
-#: dwarf.c:3094
+#: dwarf.c:3119
 #, c-format
 msgid "Bogus end-of-siblings marker detected at offset %lx in %s section\n"
 msgstr ""
 
-#: dwarf.c:3098
+#: dwarf.c:3123
 msgid "Further warnings about bogus end-of-sibling markers suppressed\n"
 msgstr ""
 
-#: dwarf.c:3117
+#: dwarf.c:3142
 #, c-format
 msgid " <%d><%lx>: Abbrev Number: %lu"
 msgstr ""
 
-#: dwarf.c:3121
+#: dwarf.c:3146
 #, c-format
 msgid " <%d><%lx>: ...\n"
 msgstr ""
 
-#: dwarf.c:3140
+#: dwarf.c:3165
 #, c-format
 msgid ""
 "DIE at offset 0x%lx refers to abbreviation number %lu which does not exist\n"
 msgstr ""
 
-#: dwarf.c:3213
+#: dwarf.c:3238
 msgid "DIE has locviews without loclist\n"
 msgstr ""
 
-#: dwarf.c:3328
+#: dwarf.c:3353
 #, c-format
 msgid ""
 "The length field (0x%lx) in the debug_line header is wrong - the section is "
 "too small\n"
 msgstr ""
 
-#: dwarf.c:3342
+#: dwarf.c:3367
 msgid "Only DWARF version 2, 3, 4 and 5 line info is currently supported.\n"
 msgstr ""
 
-#: dwarf.c:3354 dwarf.c:5983 dwarf.c:6728
+#: dwarf.c:3379 dwarf.c:6008 dwarf.c:6754
 #, c-format
 msgid "The %s section contains unsupported segment selector size: %d.\n"
 msgstr ""
 
-#: dwarf.c:3371
+#: dwarf.c:3396
 msgid "Invalid maximum operations per insn.\n"
 msgstr ""
 
-#: dwarf.c:3387
+#: dwarf.c:3412
 #, c-format
 msgid "Line length %s extends beyond end of section\n"
 msgstr ""
 
-#: dwarf.c:3418
+#: dwarf.c:3443
 #, c-format
 msgid "Corrupt %s format table entry\n"
 msgstr ""
 
-#: dwarf.c:3427
+#: dwarf.c:3452
 #, c-format
 msgid "Corrupt %s list\n"
 msgstr ""
 
-#: dwarf.c:3433
+#: dwarf.c:3458
 #, c-format
 msgid ""
 "\n"
 " The %s Table is empty.\n"
 msgstr ""
 
-#: dwarf.c:3437
+#: dwarf.c:3462
 #, c-format
 msgid ""
 "\n"
 " The %s Table (offset 0x%lx):\n"
 msgstr ""
 
-#: dwarf.c:3440
+#: dwarf.c:3465
 #, c-format
 msgid "  Entry"
 msgstr ""
 
-#: dwarf.c:3455
+#: dwarf.c:3480
 #, c-format
 msgid "\tName"
 msgstr ""
 
-#: dwarf.c:3458
+#: dwarf.c:3483
 #, c-format
 msgid "\tDir"
 msgstr ""
 
-#: dwarf.c:3461
+#: dwarf.c:3486
 #, c-format
 msgid "\tTime"
 msgstr ""
 
-#: dwarf.c:3464
+#: dwarf.c:3489
 #, c-format
 msgid "\tSize"
 msgstr ""
 
-#: dwarf.c:3467
+#: dwarf.c:3492
 #, c-format
 msgid "\tMD5"
 msgstr ""
 
-#: dwarf.c:3470
+#: dwarf.c:3495
 #, c-format
 msgid "\t(Unknown format content type %s)"
 msgstr ""
 
-#: dwarf.c:3506
+#: dwarf.c:3531
 #, c-format
 msgid "Corrupt %s entries list\n"
 msgstr ""
 
-#: dwarf.c:3554 dwarf.c:3970
+#: dwarf.c:3579 dwarf.c:3995
 msgid ""
 "Partial .debug_line. section encountered without a prior full .debug_line "
 "section\n"
 msgstr ""
 
-#: dwarf.c:3567 dwarf.c:5086
+#: dwarf.c:3592 dwarf.c:5111
 #, c-format
 msgid "  Offset:                      0x%lx\n"
 msgstr ""
 
-#: dwarf.c:3568
+#: dwarf.c:3593
 #, c-format
 msgid "  Length:                      %ld\n"
 msgstr ""
 
-#: dwarf.c:3569
+#: dwarf.c:3594
 #, c-format
 msgid "  DWARF Version:               %d\n"
 msgstr ""
 
-#: dwarf.c:3570
+#: dwarf.c:3595
 #, c-format
 msgid "  Prologue Length:             %d\n"
 msgstr ""
 
-#: dwarf.c:3571
+#: dwarf.c:3596
 #, c-format
 msgid "  Minimum Instruction Length:  %d\n"
 msgstr ""
 
-#: dwarf.c:3573
+#: dwarf.c:3598
 #, c-format
 msgid "  Maximum Ops per Instruction: %d\n"
 msgstr ""
 
-#: dwarf.c:3574
+#: dwarf.c:3599
 #, c-format
 msgid "  Initial value of 'is_stmt':  %d\n"
 msgstr ""
 
-#: dwarf.c:3575
+#: dwarf.c:3600
 #, c-format
 msgid "  Line Base:                   %d\n"
 msgstr ""
 
-#: dwarf.c:3576
+#: dwarf.c:3601
 #, c-format
 msgid "  Line Range:                  %d\n"
 msgstr ""
 
-#: dwarf.c:3577
+#: dwarf.c:3602
 #, c-format
 msgid "  Opcode Base:                 %d\n"
 msgstr ""
 
-#: dwarf.c:3582 dwarf.c:3986
+#: dwarf.c:3607 dwarf.c:4011
 msgid "Line range of 0 is invalid, using 1 instead\n"
 msgstr ""
 
-#: dwarf.c:3594
+#: dwarf.c:3619
 msgid "Line Base extends beyond end of section\n"
 msgstr ""
 
-#: dwarf.c:3598
+#: dwarf.c:3623
 #, c-format
 msgid ""
 "\n"
 " Opcodes:\n"
 msgstr ""
 
-#: dwarf.c:3601
+#: dwarf.c:3626
 #, c-format
 msgid "  Opcode %d has %d arg\n"
 msgid_plural "  Opcode %d has %d args\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: dwarf.c:3614
+#: dwarf.c:3639
 msgid "Directory"
 msgstr ""
 
-#: dwarf.c:3616
+#: dwarf.c:3641
 msgid "File name"
 msgstr ""
 
-#: dwarf.c:3621
+#: dwarf.c:3646
 #, c-format
 msgid ""
 "\n"
 " The Directory Table is empty.\n"
 msgstr ""
 
-#: dwarf.c:3626
+#: dwarf.c:3651
 #, c-format
 msgid ""
 "\n"
 " The Directory Table (offset 0x%lx):\n"
 msgstr ""
 
-#: dwarf.c:3646
+#: dwarf.c:3671
 #, c-format
 msgid ""
 "\n"
 " The File Name Table is empty.\n"
 msgstr ""
 
-#: dwarf.c:3649
+#: dwarf.c:3674
 #, c-format
 msgid ""
 "\n"
 " The File Name Table (offset 0x%lx):\n"
 msgstr ""
 
-#: dwarf.c:3675
+#: dwarf.c:3700
 msgid "Corrupt file name table entry\n"
 msgstr ""
 
-#: dwarf.c:3691
+#: dwarf.c:3716
 #, c-format
 msgid " No Line Number Statements.\n"
 msgstr ""
 
-#: dwarf.c:3694
+#: dwarf.c:3719
 #, c-format
 msgid " Line Number Statements:\n"
 msgstr ""
 
-#: dwarf.c:3717
+#: dwarf.c:3742
 #, c-format
 msgid "  Special opcode %d: advance Address by %s to 0x%s%s"
 msgstr ""
 
-#: dwarf.c:3722 dwarf.c:3743 dwarf.c:3783 dwarf.c:3803 dwarf.c:3856
-#: dwarf.c:3876
+#: dwarf.c:3747 dwarf.c:3768 dwarf.c:3808 dwarf.c:3828 dwarf.c:3881
+#: dwarf.c:3901
 msgid " (reset view)"
 msgstr ""
 
-#: dwarf.c:3737
+#: dwarf.c:3762
 #, c-format
 msgid "  Special opcode %d: advance Address by %s to 0x%s[%d]%s"
 msgstr ""
 
-#: dwarf.c:3747
+#: dwarf.c:3772
 #, c-format
 msgid " and Line by %s to %d"
 msgstr ""
 
-#: dwarf.c:3750 dwarf.c:3764
+#: dwarf.c:3775 dwarf.c:3789
 #, c-format
 msgid " (view %u)\n"
 msgstr ""
 
-#: dwarf.c:3762
+#: dwarf.c:3787
 #, c-format
 msgid "  Copy"
 msgstr ""
 
-#: dwarf.c:3779
+#: dwarf.c:3804
 #, c-format
 msgid "  Advance PC by %s to 0x%s%s\n"
 msgstr ""
 
-#: dwarf.c:3798
+#: dwarf.c:3823
 #, c-format
 msgid "  Advance PC by %s to 0x%s[%d]%s\n"
 msgstr ""
 
-#: dwarf.c:3811
+#: dwarf.c:3836
 #, c-format
 msgid "  Advance Line by %s to %d\n"
 msgstr ""
 
-#: dwarf.c:3819
+#: dwarf.c:3844
 #, c-format
 msgid "  Set File Name to entry %s in the File Name Table\n"
 msgstr ""
 
-#: dwarf.c:3827
+#: dwarf.c:3852
 #, c-format
 msgid "  Set column to %s\n"
 msgstr ""
 
-#: dwarf.c:3835
+#: dwarf.c:3860
 #, c-format
 msgid "  Set is_stmt to %s\n"
 msgstr ""
 
-#: dwarf.c:3840
+#: dwarf.c:3865
 #, c-format
 msgid "  Set basic block\n"
 msgstr ""
 
-#: dwarf.c:3852
+#: dwarf.c:3877
 #, c-format
 msgid "  Advance PC by constant %s to 0x%s%s\n"
 msgstr ""
 
-#: dwarf.c:3871
+#: dwarf.c:3896
 #, c-format
 msgid "  Advance PC by constant %s to 0x%s[%d]%s\n"
 msgstr ""
 
-#: dwarf.c:3884
+#: dwarf.c:3909
 #, c-format
 msgid "  Advance PC by fixed size amount %s to 0x%s\n"
 msgstr ""
 
-#: dwarf.c:3891
+#: dwarf.c:3916
 #, c-format
 msgid "  Set prologue_end to true\n"
 msgstr ""
 
-#: dwarf.c:3895
+#: dwarf.c:3920
 #, c-format
 msgid "  Set epilogue_begin to true\n"
 msgstr ""
 
-#: dwarf.c:3901
+#: dwarf.c:3926
 #, c-format
 msgid "  Set ISA to %s\n"
 msgstr ""
 
-#: dwarf.c:3905 dwarf.c:4557
+#: dwarf.c:3930 dwarf.c:4582
 #, c-format
 msgid "  Unknown opcode %d with operands: "
 msgstr ""
 
-#: dwarf.c:3999
+#: dwarf.c:4024
 #, c-format
 msgid "opcode base of %d extends beyond end of section\n"
 msgstr ""
 
-#: dwarf.c:4027 dwarf.c:4050 dwarf.c:4080
+#: dwarf.c:4052 dwarf.c:4075 dwarf.c:4105
 msgid "Corrupt directories list\n"
 msgstr ""
 
-#: dwarf.c:4100 dwarf.c:4123 dwarf.c:4170
+#: dwarf.c:4125 dwarf.c:4148 dwarf.c:4195
 msgid "Corrupt file name list\n"
 msgstr ""
 
-#: dwarf.c:4190
+#: dwarf.c:4215
 msgid "directory table ends unexpectedly\n"
 msgstr ""
 
-#: dwarf.c:4235
+#: dwarf.c:4260
 msgid "file table ends unexpectedly\n"
 msgstr ""
 
-#: dwarf.c:4274
+#: dwarf.c:4299
 #, c-format
 msgid "CU: %s:\n"
 msgstr ""
 
-#: dwarf.c:4287 dwarf.c:4485
+#: dwarf.c:4312 dwarf.c:4510
 #, c-format
 msgid "directory index %u > number of directories %s\n"
 msgstr ""
 
-#: dwarf.c:4289 dwarf.c:4588 elfcomm.c:891 readelf.c:306 readelf.c:646
-#: readelf.c:6732 readelf.c:7283 readelf.c:9247 readelf.c:11252 readelf.c:11319
-#: readelf.c:11662 readelf.c:14287 readelf.c:14382 readelf.c:14964
-#: readelf.c:14983 readelf.c:15107 readelf.c:15358 readelf.c:16464
-#: readelf.c:16467
+#: dwarf.c:4314 dwarf.c:4613 elfcomm.c:891 readelf.c:307 readelf.c:648
+#: readelf.c:6787 readelf.c:7338 readelf.c:9302 readelf.c:11322 readelf.c:11389
+#: readelf.c:11732 readelf.c:14358 readelf.c:14453 readelf.c:15035
+#: readelf.c:15054 readelf.c:15178 readelf.c:15429 readelf.c:16535
+#: readelf.c:16538
 #, c-format
 msgid "<corrupt>"
 msgstr ""
 
-#: dwarf.c:4295
+#: dwarf.c:4320
 #, c-format
 msgid "CU: %s/%s:\n"
 msgstr ""
 
-#: dwarf.c:4300
+#: dwarf.c:4325
 #, c-format
 msgid ""
 "File name                            Line number    Starting address    "
 "View\n"
 msgstr ""
 
-#: dwarf.c:4416
+#: dwarf.c:4441
 #, c-format
 msgid "UNKNOWN (%u): length %d\n"
 msgstr ""
 
-#: dwarf.c:4469
+#: dwarf.c:4494
 #, c-format
 msgid ""
 "\n"
 " [Use file table entry %d]\n"
 msgstr ""
 
-#: dwarf.c:4473
+#: dwarf.c:4498
 #, c-format
 msgid "file index %u > number of files %u\n"
 msgstr ""
 
-#: dwarf.c:4474
+#: dwarf.c:4499
 #, c-format
 msgid ""
 "\n"
 " <over large file table index %u>"
 msgstr ""
 
-#: dwarf.c:4480
+#: dwarf.c:4505
 #, c-format
 msgid ""
 "\n"
 " [Use file %s in directory table entry %d]\n"
 msgstr ""
 
-#: dwarf.c:4487
+#: dwarf.c:4512
 #, c-format
 msgid ""
 "\n"
 " <over large directory table entry %u>\n"
 msgstr ""
 
-#: dwarf.c:4553
+#: dwarf.c:4578
 #, c-format
 msgid "  Set ISA to %lu\n"
 msgstr ""
 
-#: dwarf.c:4587
+#: dwarf.c:4612
 #, c-format
 msgid "corrupt file index %u encountered\n"
 msgstr ""
 
-#: dwarf.c:4717
+#: dwarf.c:4742
 msgid "no info"
 msgstr ""
 
-#: dwarf.c:4718
+#: dwarf.c:4743
 msgid "type"
 msgstr ""
 
-#: dwarf.c:4719
+#: dwarf.c:4744
 msgid "variable"
 msgstr ""
 
-#: dwarf.c:4720
+#: dwarf.c:4745
 msgid "function"
 msgstr ""
 
-#: dwarf.c:4721
+#: dwarf.c:4746
 msgid "other"
 msgstr ""
 
-#: dwarf.c:4722
+#: dwarf.c:4747
 msgid "unused5"
 msgstr ""
 
-#: dwarf.c:4723
+#: dwarf.c:4748
 msgid "unused6"
 msgstr ""
 
-#: dwarf.c:4724
+#: dwarf.c:4749
 msgid "unused7"
 msgstr ""
 
-#: dwarf.c:4784 dwarf.c:6329
+#: dwarf.c:4809 dwarf.c:6354
 #, c-format
 msgid ""
 ".debug_info offset of 0x%lx in %s section does not point to a CU header.\n"
 msgstr ""
 
-#: dwarf.c:4789
+#: dwarf.c:4814
 #, c-format
 msgid "  Length:                              %ld\n"
 msgstr ""
 
-#: dwarf.c:4791
+#: dwarf.c:4816
 #, c-format
 msgid "  Version:                             %d\n"
 msgstr ""
 
-#: dwarf.c:4793
+#: dwarf.c:4818
 #, c-format
 msgid "  Offset into .debug_info section:     0x%lx\n"
 msgstr ""
 
-#: dwarf.c:4795
+#: dwarf.c:4820
 #, c-format
 msgid "  Size of area in .debug_info section: %ld\n"
 msgstr ""
 
-#: dwarf.c:4804
+#: dwarf.c:4829
 msgid "Only DWARF 2 and 3 pubnames are currently supported\n"
 msgstr ""
 
-#: dwarf.c:4812
+#: dwarf.c:4837
 #, c-format
 msgid ""
 "\n"
 "    Offset  Kind          Name\n"
 msgstr ""
 
-#: dwarf.c:4814
+#: dwarf.c:4839
 #, c-format
 msgid ""
 "\n"
 "    Offset\tName\n"
 msgstr ""
 
-#: dwarf.c:4850
+#: dwarf.c:4875
 msgid "s"
 msgstr ""
 
-#: dwarf.c:4850
+#: dwarf.c:4875
 msgid "g"
 msgstr ""
 
-#: dwarf.c:4910
+#: dwarf.c:4935
 #, c-format
 msgid " DW_MACINFO_start_file - lineno: %d filenum: %d\n"
 msgstr ""
 
-#: dwarf.c:4916
+#: dwarf.c:4941
 #, c-format
 msgid " DW_MACINFO_end_file\n"
 msgstr ""
 
-#: dwarf.c:4924
+#: dwarf.c:4949
 #, c-format
 msgid " DW_MACINFO_define - lineno : %d macro : %s\n"
 msgstr ""
 
-#: dwarf.c:4933
+#: dwarf.c:4958
 #, c-format
 msgid " DW_MACINFO_undef - lineno : %d macro : %s\n"
 msgstr ""
 
-#: dwarf.c:4945
+#: dwarf.c:4970
 #, c-format
 msgid " DW_MACINFO_vendor_ext - constant : %d string : %s\n"
 msgstr ""
 
-#: dwarf.c:5078
+#: dwarf.c:5103
 #, c-format
 msgid "Only GNU extension to DWARF 4 or 5 of %s is currently supported.\n"
 msgstr ""
 
-#: dwarf.c:5088
+#: dwarf.c:5113
 #, c-format
 msgid "  Version:                     %d\n"
 msgstr ""
 
-#: dwarf.c:5089
+#: dwarf.c:5114
 #, c-format
 msgid "  Offset size:                 %d\n"
 msgstr ""
 
-#: dwarf.c:5093
+#: dwarf.c:5118
 #, c-format
 msgid "  Offset into .debug_line:     0x%lx\n"
 msgstr ""
 
-#: dwarf.c:5107
+#: dwarf.c:5132
 #, c-format
 msgid "  Extension opcode arguments:\n"
 msgstr ""
 
-#: dwarf.c:5115
+#: dwarf.c:5140
 #, c-format
 msgid "    DW_MACRO_%02x has no arguments\n"
 msgstr ""
 
-#: dwarf.c:5118
+#: dwarf.c:5143
 #, c-format
 msgid "    DW_MACRO_%02x arguments: "
 msgstr ""
 
-#: dwarf.c:5144
+#: dwarf.c:5169
 #, c-format
 msgid "Invalid extension opcode form %s\n"
 msgstr ""
 
-#: dwarf.c:5161
+#: dwarf.c:5186
 msgid ".debug_macro section not zero terminated\n"
 msgstr ""
 
-#: dwarf.c:5182
+#: dwarf.c:5207
 msgid "DW_MACRO_start_file used, but no .debug_line offset provided.\n"
 msgstr ""
 
-#: dwarf.c:5188
+#: dwarf.c:5213
 #, c-format
 msgid " DW_MACRO_start_file - lineno: %d filenum: %d\n"
 msgstr ""
 
-#: dwarf.c:5191
+#: dwarf.c:5216
 #, c-format
 msgid " DW_MACRO_start_file - lineno: %d filenum: %d filename: %s%s%s\n"
 msgstr ""
 
-#: dwarf.c:5199
+#: dwarf.c:5224
 #, c-format
 msgid " DW_MACRO_end_file\n"
 msgstr ""
 
-#: dwarf.c:5207
+#: dwarf.c:5232
 #, c-format
 msgid " DW_MACRO_define - lineno : %d macro : %s\n"
 msgstr ""
 
-#: dwarf.c:5216
+#: dwarf.c:5241
 #, c-format
 msgid " DW_MACRO_undef - lineno : %d macro : %s\n"
 msgstr ""
 
-#: dwarf.c:5225
+#: dwarf.c:5250
 #, c-format
 msgid " DW_MACRO_define_strp - lineno : %d macro : %s\n"
 msgstr ""
 
-#: dwarf.c:5234
+#: dwarf.c:5259
 #, c-format
 msgid " DW_MACRO_undef_strp - lineno : %d macro : %s\n"
 msgstr ""
 
-#: dwarf.c:5240
+#: dwarf.c:5265
 #, c-format
 msgid " DW_MACRO_import - offset : 0x%lx\n"
 msgstr ""
 
-#: dwarf.c:5248
+#: dwarf.c:5273
 #, c-format
 msgid " DW_MACRO_define_sup - lineno : %d macro offset : 0x%lx\n"
 msgstr ""
 
-#: dwarf.c:5256
+#: dwarf.c:5281
 #, c-format
 msgid " DW_MACRO_undef_sup - lineno : %d macro offset : 0x%lx\n"
 msgstr ""
 
-#: dwarf.c:5262
+#: dwarf.c:5287
 #, c-format
 msgid " DW_MACRO_import_sup - offset : 0x%lx\n"
 msgstr ""
 
-#: dwarf.c:5269
+#: dwarf.c:5294
 #, c-format
 msgid " Unknown macro opcode %02x seen\n"
 msgstr ""
 
-#: dwarf.c:5281
+#: dwarf.c:5306
 #, c-format
 msgid " DW_MACRO_%02x\n"
 msgstr ""
 
-#: dwarf.c:5284
+#: dwarf.c:5309
 #, c-format
 msgid " DW_MACRO_%02x -"
 msgstr ""
 
-#: dwarf.c:5333
+#: dwarf.c:5358
 #, c-format
 msgid "  Number TAG (0x%lx)\n"
 msgstr ""
 
-#: dwarf.c:5342
+#: dwarf.c:5367
 msgid "has children"
 msgstr ""
 
-#: dwarf.c:5342
+#: dwarf.c:5367
 msgid "no children"
 msgstr ""
 
-#: dwarf.c:5411
+#: dwarf.c:5436
 #, c-format
 msgid "location view pair\n"
 msgstr ""
 
-#: dwarf.c:5443
+#: dwarf.c:5468
 #, c-format
 msgid "No debug information available for loc lists of entry: %u\n"
 msgstr ""
 
-#: dwarf.c:5455 dwarf.c:5607 dwarf.c:5777
+#: dwarf.c:5480 dwarf.c:5632 dwarf.c:5802
 #, c-format
 msgid "Invalid pointer size (%d) in debug info for entry %d\n"
 msgstr ""
 
-#: dwarf.c:5467 dwarf.c:5524 dwarf.c:5533 dwarf.c:5619 dwarf.c:5687
-#: dwarf.c:5788 dwarf.c:5867 dwarf.c:5875
+#: dwarf.c:5492 dwarf.c:5549 dwarf.c:5558 dwarf.c:5644 dwarf.c:5712
+#: dwarf.c:5813 dwarf.c:5892 dwarf.c:5900
 #, c-format
 msgid "Location list starting at offset 0x%lx is not terminated.\n"
 msgstr ""
 
-#: dwarf.c:5488 dwarf.c:5647 dwarf.c:5828 dwarf.c:6550 dwarf.c:6606
+#: dwarf.c:5513 dwarf.c:5672 dwarf.c:5853 dwarf.c:6576 dwarf.c:6632
 #, c-format
 msgid "<End of list>\n"
 msgstr ""
 
-#: dwarf.c:5500 dwarf.c:5659 dwarf.c:6611
+#: dwarf.c:5525 dwarf.c:5684 dwarf.c:6637
 #, c-format
 msgid "(base address)\n"
 msgstr ""
 
-#: dwarf.c:5518 dwarf.c:5640 dwarf.c:5816
+#: dwarf.c:5543 dwarf.c:5665 dwarf.c:5841
 #, c-format
 msgid ""
 "views at %8.8lx for:\n"
 "    %*s "
 msgstr ""
 
-#: dwarf.c:5554 dwarf.c:5711
+#: dwarf.c:5579 dwarf.c:5736
 msgid " (start == end)"
 msgstr ""
 
-#: dwarf.c:5556 dwarf.c:5713
+#: dwarf.c:5581 dwarf.c:5738
 msgid " (start > end)"
 msgstr ""
 
-#: dwarf.c:5594
+#: dwarf.c:5619
 #, c-format
 msgid "No debug information available for loclists lists of entry: %u\n"
 msgstr ""
 
-#: dwarf.c:5664
+#: dwarf.c:5689
 #, c-format
 msgid "View pair entry in loclist with locviews attribute\n"
 msgstr ""
 
-#: dwarf.c:5673
+#: dwarf.c:5698
 #, c-format
 msgid "views for:\n"
 msgstr ""
 
-#: dwarf.c:5677
+#: dwarf.c:5702
 #, c-format
 msgid "Invalid location list entry type %d\n"
 msgstr ""
 
-#: dwarf.c:5722
+#: dwarf.c:5747
 #, c-format
 msgid "Trailing view pair not used in a range"
 msgstr ""
 
-#: dwarf.c:5765
+#: dwarf.c:5790
 #, c-format
 msgid "No debug information for loc lists of entry: %u\n"
 msgstr ""
 
-#: dwarf.c:5835
+#: dwarf.c:5860
 #, c-format
 msgid "(base address selection entry)\n"
 msgstr ""
 
-#: dwarf.c:5859
+#: dwarf.c:5884
 #, c-format
 msgid "Unknown location list entry type 0x%x.\n"
 msgstr ""
 
-#: dwarf.c:5952 dwarf.c:6205 dwarf.c:6426 dwarf.c:6498 dwarf.c:6668
+#: dwarf.c:5977 dwarf.c:6230 dwarf.c:6451 dwarf.c:6523 dwarf.c:6694
 #, c-format
 msgid ""
 "\n"
 "The %s section is empty.\n"
 msgstr ""
 
-#: dwarf.c:5972
+#: dwarf.c:5997
 #, c-format
 msgid "The %s section contains corrupt or unsupported version number: %d.\n"
 msgstr ""
 
-#: dwarf.c:5992
+#: dwarf.c:6017
 #, c-format
 msgid "The %s section contains unsupported offset entry count: %d.\n"
 msgstr ""
 
-#: dwarf.c:6003 dwarf.c:6432 dwarf.c:6746
+#: dwarf.c:6028 dwarf.c:6457 dwarf.c:6772
 #, c-format
 msgid ""
 "Unable to load/parse the .debug_info section, so cannot interpret the %s "
 "section.\n"
 msgstr ""
 
-#: dwarf.c:6051
+#: dwarf.c:6076
 msgid "No location lists in .debug_info section!\n"
 msgstr ""
 
-#: dwarf.c:6056
+#: dwarf.c:6081
 #, c-format
 msgid "Location lists in %s section start at 0x%s\n"
 msgstr ""
 
-#: dwarf.c:6066
+#: dwarf.c:6091
 #, c-format
 msgid ""
 " Warning: This section has relocations - addresses seen here may not be "
@@ -3191,761 +3202,771 @@ msgid ""
 "\n"
 msgstr ""
 
-#: dwarf.c:6068
+#: dwarf.c:6093
 #, c-format
 msgid "    Offset   Begin            End              Expression\n"
 msgstr ""
 
-#: dwarf.c:6123
+#: dwarf.c:6148
 #, c-format
 msgid "There is a hole [0x%lx - 0x%lx] in .debug_loc section.\n"
 msgstr ""
 
-#: dwarf.c:6127
+#: dwarf.c:6152
 #, c-format
 msgid "There is an overlap [0x%lx - 0x%lx] in .debug_loc section.\n"
 msgstr ""
 
-#: dwarf.c:6136
+#: dwarf.c:6161
 #, c-format
 msgid "Offset 0x%lx is bigger than .debug_loc section size.\n"
 msgstr ""
 
-#: dwarf.c:6143
+#: dwarf.c:6168
 #, c-format
 msgid "View Offset 0x%lx is bigger than .debug_loc section size.\n"
 msgstr ""
 
-#: dwarf.c:6160
+#: dwarf.c:6185
 msgid "DWO is not yet supported.\n"
 msgstr ""
 
-#: dwarf.c:6177
+#: dwarf.c:6202
 msgid "Hole and overlap detection requires adjacent view lists and loclists.\n"
 msgstr ""
 
-#: dwarf.c:6186
+#: dwarf.c:6211
 #, c-format
 msgid "There is %ld unused byte at the end of section %s\n"
 msgid_plural "There are %ld unused bytes at the end of section %s\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: dwarf.c:6342
+#: dwarf.c:6367
 msgid "Only DWARF 2 and 3 aranges are currently supported.\n"
 msgstr ""
 
-#: dwarf.c:6346
+#: dwarf.c:6371
 #, c-format
 msgid "  Length:                   %ld\n"
 msgstr ""
 
-#: dwarf.c:6348
+#: dwarf.c:6373
 #, c-format
 msgid "  Version:                  %d\n"
 msgstr ""
 
-#: dwarf.c:6349
+#: dwarf.c:6374
 #, c-format
 msgid "  Offset into .debug_info:  0x%lx\n"
 msgstr ""
 
-#: dwarf.c:6351
+#: dwarf.c:6376
 #, c-format
 msgid "  Pointer Size:             %d\n"
 msgstr ""
 
-#: dwarf.c:6352
+#: dwarf.c:6377
 #, c-format
 msgid "  Segment Size:             %d\n"
 msgstr ""
 
-#: dwarf.c:6359
+#: dwarf.c:6384
 #, c-format
 msgid "Invalid address size in %s section!\n"
 msgstr ""
 
-#: dwarf.c:6369
+#: dwarf.c:6394
 msgid "Pointer size + Segment size is not a power of two.\n"
 msgstr ""
 
-#: dwarf.c:6374
+#: dwarf.c:6399
 #, c-format
 msgid ""
 "\n"
 "    Address            Length\n"
 msgstr ""
 
-#: dwarf.c:6376
+#: dwarf.c:6401
 #, c-format
 msgid ""
 "\n"
 "    Address    Length\n"
 msgstr ""
 
-#: dwarf.c:6452
+#: dwarf.c:6477
 #, c-format
 msgid "Corrupt address base (%lx) found in debug section %u\n"
 msgstr ""
 
-#: dwarf.c:6468
+#: dwarf.c:6493
 #, c-format
 msgid "  For compilation unit at offset 0x%s:\n"
 msgstr ""
 
-#: dwarf.c:6471
+#: dwarf.c:6496
 #, c-format
 msgid "\tIndex\tAddress\n"
 msgstr ""
 
-#: dwarf.c:6478
+#: dwarf.c:6503
 #, c-format
 msgid "\t%d:\t"
 msgstr ""
 
-#: dwarf.c:6569 dwarf.c:6643
+#: dwarf.c:6595 dwarf.c:6669
 msgid "(start == end)"
 msgstr ""
 
-#: dwarf.c:6571 dwarf.c:6645
+#: dwarf.c:6597 dwarf.c:6671
 msgid "(start > end)"
 msgstr ""
 
-#: dwarf.c:6594
+#: dwarf.c:6620
 #, c-format
 msgid "Range list starting at offset 0x%lx is not terminated.\n"
 msgstr ""
 
-#: dwarf.c:6630
+#: dwarf.c:6656
 #, c-format
 msgid "Invalid range list entry type %d\n"
 msgstr ""
 
-#: dwarf.c:6707
+#: dwarf.c:6733
 #, c-format
 msgid ""
 "The length field (0x%lx) in the debug_rnglists header is wrong - the section "
 "is too small\n"
 msgstr ""
 
-#: dwarf.c:6718
+#: dwarf.c:6744
 msgid "Only DWARF version 5 debug_rnglists info is currently supported.\n"
 msgstr ""
 
-#: dwarf.c:6737
+#: dwarf.c:6763
 #, c-format
 msgid "The %s section contains unsupported offset entry count: %u.\n"
 msgstr ""
 
 #. This can happen when the file was compiled with -gsplit-debug
 #. which removes references to range lists from the primary .o file.
-#: dwarf.c:6759
+#: dwarf.c:6785
 #, c-format
 msgid "No range lists in .debug_info section.\n"
 msgstr ""
 
-#: dwarf.c:6784
+#: dwarf.c:6810
 #, c-format
 msgid "Range lists in %s section start at 0x%lx\n"
 msgstr ""
 
-#: dwarf.c:6789
+#: dwarf.c:6815
 #, c-format
 msgid "    Offset   Begin    End\n"
 msgstr ""
 
-#: dwarf.c:6808
+#: dwarf.c:6834
 #, c-format
 msgid "Corrupt pointer size (%d) in debug entry at offset %8.8lx\n"
 msgstr ""
 
-#: dwarf.c:6816
+#: dwarf.c:6841
+#, c-format
+msgid "Corrupt offset (%#8.8lx) in range entry %u\n"
+msgstr ""
+
+#: dwarf.c:6849
 #, c-format
 msgid "There is a hole [0x%lx - 0x%lx] in %s section.\n"
 msgstr ""
 
-#: dwarf.c:6823
+#: dwarf.c:6856
 #, c-format
 msgid "There is an overlap [0x%lx - 0x%lx] in %s section.\n"
 msgstr ""
 
-#: dwarf.c:6895
+#: dwarf.c:6929
 #, c-format
 msgid "Unfeasibly large register number: %u\n"
 msgstr ""
 
-#: dwarf.c:6908
+#: dwarf.c:6942
 #, c-format
 msgid "Out of memory allocating %u columns in dwarf frame arrays\n"
 msgstr ""
 
-#: dwarf.c:7226
+#: dwarf.c:7285
 msgid "No terminator for augmentation name\n"
 msgstr ""
 
-#: dwarf.c:7238
+#: dwarf.c:7297
 #, c-format
 msgid "Invalid pointer size (%d) in CIE data\n"
 msgstr ""
 
-#: dwarf.c:7246
+#: dwarf.c:7305
 #, c-format
 msgid "Invalid segment size (%d) in CIE data\n"
 msgstr ""
 
-#: dwarf.c:7275
+#: dwarf.c:7334
 #, c-format
 msgid "Augmentation data too long: 0x%s, expected at most %#lx\n"
 msgstr ""
 
-#: dwarf.c:7354
+#: dwarf.c:7413
 #, c-format
 msgid "  Augmentation data:    "
 msgstr ""
 
-#: dwarf.c:7371
+#: dwarf.c:7430
 msgid "bad register: "
 msgstr ""
 
-#: dwarf.c:7541
+#: dwarf.c:7600
 msgid "Failed to read CIE information\n"
 msgstr ""
 
-#: dwarf.c:7552 dwarf.c:7576 dwarf.c:7603
+#: dwarf.c:7611 dwarf.c:7635 dwarf.c:7662
 msgid "Invalid max register\n"
 msgstr ""
 
 #. PR 17512: file: 9e196b3e.
-#: dwarf.c:7618
+#: dwarf.c:7677
 #, c-format
 msgid "Probably corrupt segment size: %d - using 4 instead\n"
 msgstr ""
 
-#: dwarf.c:7642
+#: dwarf.c:7701
 #, c-format
 msgid "Corrupt augmentation data length: 0x%s\n"
 msgstr ""
 
-#: dwarf.c:7764
+#: dwarf.c:7823
 #, c-format
 msgid "Corrupt CFA_def expression value: %lu\n"
 msgstr ""
 
 #. PR 17512: file:306-192417-0.005.
-#: dwarf.c:7778
+#: dwarf.c:7837
 #, c-format
 msgid "Corrupt CFA expression value: %lu\n"
 msgstr ""
 
-#: dwarf.c:8081
+#: dwarf.c:8140
 msgid "Invalid column number in saved frame state\n"
 msgstr ""
 
-#: dwarf.c:8128
+#: dwarf.c:8187
 #, c-format
 msgid "  DW_CFA_def_cfa_expression: <corrupt len %lu>\n"
 msgstr ""
 
-#: dwarf.c:8152
+#: dwarf.c:8211
 #, c-format
 msgid "  DW_CFA_expression: <corrupt len %lu>\n"
 msgstr ""
 
-#: dwarf.c:8284
+#: dwarf.c:8343
 #, c-format
 msgid "  DW_CFA_??? (User defined call frame op: %#x)\n"
 msgstr ""
 
-#: dwarf.c:8286
+#: dwarf.c:8345
 #, c-format
 msgid "Unsupported or unknown Dwarf Call Frame Instruction number: %#x\n"
 msgstr ""
 
-#: dwarf.c:8357 dwarf.c:8754
+#: dwarf.c:8416 dwarf.c:8813
 #, c-format
 msgid "Version %ld\n"
 msgstr ""
 
-#: dwarf.c:8363
+#: dwarf.c:8422
 msgid "Only DWARF version 5 .debug_names is currently supported.\n"
 msgstr ""
 
-#: dwarf.c:8370
+#: dwarf.c:8429
 #, c-format
 msgid "Padding field of .debug_names must be 0 (found 0x%x)\n"
 msgstr ""
 
-#: dwarf.c:8375
+#: dwarf.c:8434
 msgid "Compilation unit count must be >= 1 in .debug_names\n"
 msgstr ""
 
-#: dwarf.c:8386
+#: dwarf.c:8445
 #, c-format
 msgid ""
 "Augmentation string length %u must be rounded up to a multiple of 4 in ."
 "debug_names.\n"
 msgstr ""
 
-#: dwarf.c:8391
+#: dwarf.c:8450
 #, c-format
 msgid "Augmentation string:"
 msgstr ""
 
-#: dwarf.c:8402
+#: dwarf.c:8461
 #, c-format
 msgid "CU table:\n"
 msgstr ""
 
-#: dwarf.c:8408 dwarf.c:8418
+#: dwarf.c:8467 dwarf.c:8477
 #, c-format
 msgid "[%3u] 0x%lx\n"
 msgstr ""
 
-#: dwarf.c:8412
+#: dwarf.c:8471
 #, c-format
 msgid "TU table:\n"
 msgstr ""
 
-#: dwarf.c:8422
+#: dwarf.c:8481
 #, c-format
 msgid "Foreign TU table:\n"
 msgstr ""
 
-#: dwarf.c:8428
+#: dwarf.c:8487
 #, c-format
 msgid "[%3u] "
 msgstr ""
 
-#: dwarf.c:8448
+#: dwarf.c:8507
 #, c-format
 msgid ""
 "Entry pool offset (0x%lx) exceeds unit size 0x%lx for unit 0x%lx in the "
 "debug_names\n"
 msgstr ""
 
-#: dwarf.c:8465
+#: dwarf.c:8524
 #, c-format
 msgid "Used %zu of %lu bucket.\n"
 msgid_plural "Used %zu of %lu buckets.\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: dwarf.c:8492
+#: dwarf.c:8551
 #, c-format
 msgid ""
 "Out of %lu items there are %zu bucket clashes (longest of %zu entries).\n"
 msgstr ""
 
-#: dwarf.c:8530
+#: dwarf.c:8589
 #, c-format
 msgid "Duplicate abbreviation tag %lu in unit 0x%lx in the debug_names\n"
 msgstr ""
 
-#: dwarf.c:8556 dwarf.c:8880
+#: dwarf.c:8615 dwarf.c:8939
 #, c-format
 msgid ""
 "\n"
 "Symbol table:\n"
 msgstr ""
 
-#: dwarf.c:8609
+#: dwarf.c:8668
 #, c-format
 msgid "Undefined abbreviation tag %lu in unit 0x%lx in the debug_names\n"
 msgstr ""
 
-#: dwarf.c:8645
+#: dwarf.c:8704
 #, c-format
 msgid " <no entries>"
 msgstr ""
 
-#: dwarf.c:8677
+#: dwarf.c:8736
 msgid "The debuglink filename is corrupt/missing\n"
 msgstr ""
 
-#: dwarf.c:8681
+#: dwarf.c:8740
 #, c-format
 msgid "  Separate debug info file: %s\n"
 msgstr ""
 
-#: dwarf.c:8692
+#: dwarf.c:8751
 msgid "CRC offset missing/truncated\n"
 msgstr ""
 
-#: dwarf.c:8698
+#: dwarf.c:8757
 #, c-format
 msgid "  CRC value: %#x\n"
 msgstr ""
 
-#: dwarf.c:8702
+#: dwarf.c:8761
 #, c-format
 msgid "There are %#lx extraneous bytes at the end of the section\n"
 msgstr ""
 
-#: dwarf.c:8716
+#: dwarf.c:8775
 #, c-format
 msgid "Build-ID is too short (%#lx bytes)\n"
 msgstr ""
 
-#: dwarf.c:8720
+#: dwarf.c:8779
 #, c-format
 msgid "  Build-ID (%#lx bytes):"
 msgstr ""
 
-#: dwarf.c:8749
+#: dwarf.c:8808
 #, c-format
 msgid "Truncated header in the %s section.\n"
 msgstr ""
 
-#: dwarf.c:8760
+#: dwarf.c:8819
 #, c-format
 msgid "Unsupported version %lu.\n"
 msgstr ""
 
-#: dwarf.c:8764
+#: dwarf.c:8823
 msgid "The address table data in version 3 may be wrong.\n"
 msgstr ""
 
-#: dwarf.c:8766
+#: dwarf.c:8825
 msgid "Version 4 does not support case insensitive lookups.\n"
 msgstr ""
 
-#: dwarf.c:8768
+#: dwarf.c:8827
 msgid "Version 5 does not include inlined functions.\n"
 msgstr ""
 
-#: dwarf.c:8770
+#: dwarf.c:8829
 msgid "Version 6 does not include symbol attributes.\n"
 msgstr ""
 
-#: dwarf.c:8788
+#: dwarf.c:8847
 #, c-format
 msgid "Corrupt header in the %s section.\n"
 msgstr ""
 
-#: dwarf.c:8795
+#: dwarf.c:8854
 #, c-format
 msgid "TU offset (%x) is less than CU offset (%x)\n"
 msgstr ""
 
-#: dwarf.c:8804
+#: dwarf.c:8863
 #, c-format
 msgid "Address table offset (%x) is less than TU offset (%x)\n"
 msgstr ""
 
-#: dwarf.c:8814
+#: dwarf.c:8873
 #, c-format
 msgid "Symbol table offset (%x) is less then Address table offset (%x)\n"
 msgstr ""
 
-#: dwarf.c:8823
+#: dwarf.c:8882
 #, c-format
 msgid "Constant pool offset (%x) is less than symbol table offset (%x)\n"
 msgstr ""
 
-#: dwarf.c:8838
+#: dwarf.c:8897
 msgid "Address table extends beyond end of section.\n"
 msgstr ""
 
-#: dwarf.c:8842
+#: dwarf.c:8901
 #, c-format
 msgid ""
 "\n"
 "CU table:\n"
 msgstr ""
 
-#: dwarf.c:8848
+#: dwarf.c:8907
 #, c-format
 msgid "[%3u] 0x%lx - 0x%lx\n"
 msgstr ""
 
-#: dwarf.c:8853
+#: dwarf.c:8912
 #, c-format
 msgid ""
 "\n"
 "TU table:\n"
 msgstr ""
 
-#: dwarf.c:8860
+#: dwarf.c:8919
 #, c-format
 msgid "[%3u] 0x%lx 0x%lx "
 msgstr ""
 
-#: dwarf.c:8867
+#: dwarf.c:8926
 #, c-format
 msgid ""
 "\n"
 "Address table:\n"
 msgstr ""
 
-#: dwarf.c:8877
+#: dwarf.c:8936
 #, c-format
 msgid "%lu\n"
 msgstr ""
 
-#: dwarf.c:8897
+#: dwarf.c:8956
 #, c-format
 msgid "[%3u] <corrupt offset: %x>"
 msgstr ""
 
-#: dwarf.c:8898
+#: dwarf.c:8957
 #, c-format
 msgid "Corrupt name offset of 0x%x found for symbol table slot %d\n"
 msgstr ""
 
-#: dwarf.c:8909
+#: dwarf.c:8968
 #, c-format
 msgid "<invalid CU vector offset: %x>\n"
 msgstr ""
 
-#: dwarf.c:8910
+#: dwarf.c:8969
 #, c-format
 msgid "Corrupt CU vector offset of 0x%x found for symbol table slot %d\n"
 msgstr ""
 
-#: dwarf.c:8923
+#: dwarf.c:8982
 #, c-format
 msgid "Invalid number of CUs (0x%x) for symbol table slot %d\n"
 msgstr ""
 
-#: dwarf.c:8948
+#: dwarf.c:9007
 msgid "static"
 msgstr ""
 
-#: dwarf.c:8948
+#: dwarf.c:9007
 msgid "global"
 msgstr ""
 
-#: dwarf.c:8986 dwarf.c:8997
+#: dwarf.c:9045 dwarf.c:9056
 msgid "Internal error: out of space in the shndx pool.\n"
 msgstr ""
 
-#: dwarf.c:9061
+#: dwarf.c:9120
 #, c-format
 msgid "Section %s is empty\n"
 msgstr ""
 
-#: dwarf.c:9067
+#: dwarf.c:9126
 #, c-format
 msgid "Section %s is too small to contain a CU/TU header\n"
 msgstr ""
 
-#: dwarf.c:9085
+#: dwarf.c:9144
 #, c-format
 msgid "Section %s is too small for %d slot\n"
 msgid_plural "Section %s is too small for %d slots\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: dwarf.c:9096
+#: dwarf.c:9155
 #, c-format
 msgid "  Version:                 %d\n"
 msgstr ""
 
-#: dwarf.c:9098
+#: dwarf.c:9157
 #, c-format
 msgid "  Number of columns:       %d\n"
 msgstr ""
 
-#: dwarf.c:9099
+#: dwarf.c:9158
 #, c-format
 msgid "  Number of used entries:  %d\n"
 msgstr ""
 
-#: dwarf.c:9100
+#: dwarf.c:9159
 #, c-format
 msgid ""
 "  Number of slots:         %d\n"
 "\n"
 msgstr ""
 
-#: dwarf.c:9105
+#: dwarf.c:9164
 #, c-format
 msgid "Section %s too small for %d hash table entries\n"
 msgstr ""
 
-#: dwarf.c:9127
+#: dwarf.c:9186
 msgid "Section index pool located before start of section\n"
 msgstr ""
 
-#: dwarf.c:9132
+#: dwarf.c:9191
 #, c-format
 msgid "  [%3d] Signature:  0x%s  Sections: "
 msgstr ""
 
-#: dwarf.c:9139
+#: dwarf.c:9198
 #, c-format
 msgid "Section %s too small for shndx pool\n"
 msgstr ""
 
-#: dwarf.c:9181
+#: dwarf.c:9240
 #, c-format
 msgid "Overlarge number of columns: %x\n"
 msgstr ""
 
-#: dwarf.c:9187
+#: dwarf.c:9246
 #, c-format
 msgid "Section %s too small for offset and size tables\n"
 msgstr ""
 
-#: dwarf.c:9194
+#: dwarf.c:9253
 #, c-format
 msgid "  Offset table\n"
 msgstr ""
 
-#: dwarf.c:9196 dwarf.c:9286
+#: dwarf.c:9255 dwarf.c:9356
 msgid "signature"
 msgstr ""
 
-#: dwarf.c:9196 dwarf.c:9286
+#: dwarf.c:9255 dwarf.c:9356
 msgid "dwo_id"
 msgstr ""
 
-#: dwarf.c:9234
+#: dwarf.c:9293
 #, c-format
 msgid "Row index (%u) is larger than number of used entries (%u)\n"
 msgstr ""
 
-#: dwarf.c:9246
+#: dwarf.c:9307
+#, c-format
+msgid "Signature (%p) extends beyond end of space in section\n"
+msgstr ""
+
+#: dwarf.c:9316
 #, c-format
 msgid "Row index (%u) * num columns (%u) > space remaining in section\n"
 msgstr ""
 
-#: dwarf.c:9252 dwarf.c:9309
+#: dwarf.c:9322 dwarf.c:9379
 #, c-format
 msgid "  [%3d] 0x%s"
 msgstr ""
 
-#: dwarf.c:9266 dwarf.c:9322
+#: dwarf.c:9336 dwarf.c:9392
 #, c-format
 msgid "Overlarge Dwarf section index detected: %u\n"
 msgstr ""
 
-#: dwarf.c:9284
+#: dwarf.c:9354
 #, c-format
 msgid "  Size table\n"
 msgstr ""
 
-#: dwarf.c:9337
+#: dwarf.c:9407
 #, c-format
 msgid "  Unsupported version (%d)\n"
 msgstr ""
 
-#: dwarf.c:9409
+#: dwarf.c:9479
 #, c-format
 msgid "Displaying the debug contents of section %s is not yet supported.\n"
 msgstr ""
 
-#: dwarf.c:9440
+#: dwarf.c:9510
 #, c-format
 msgid ""
 "Attempt to allocate an array with an excessive number of elements: 0x%lx\n"
 msgstr ""
 
-#: dwarf.c:9458
+#: dwarf.c:9528
 #, c-format
 msgid ""
 "Attempt to re-allocate an array with an excessive number of elements: 0x%lx\n"
 msgstr ""
 
-#: dwarf.c:9474
+#: dwarf.c:9544
 #, c-format
 msgid ""
 "Attempt to allocate a zero'ed array with an excessive number of elements: 0x"
 "%lx\n"
 msgstr ""
 
-#: dwarf.c:9572
+#: dwarf.c:9642
 #, c-format
 msgid "Unable to reopen separate debug info file: %s\n"
 msgstr ""
 
-#: dwarf.c:9584
+#: dwarf.c:9654
 #, c-format
 msgid "Separate debug info file %s found, but CRC does not match - ignoring\n"
 msgstr ""
 
-#: dwarf.c:9679
+#: dwarf.c:9749
 #, c-format
 msgid "Corrupt debuglink section: %s\n"
 msgstr ""
 
-#: dwarf.c:9717
+#: dwarf.c:9787
 msgid "Out of memory"
 msgstr ""
 
 #. Failed to find the file.
-#: dwarf.c:9766
+#: dwarf.c:9836
 #, c-format
 msgid "could not find separate debug file '%s'\n"
 msgstr ""
 
-#: dwarf.c:9767 dwarf.c:9771 dwarf.c:9776 dwarf.c:9780 dwarf.c:9783
-#: dwarf.c:9786 dwarf.c:9789
+#: dwarf.c:9837 dwarf.c:9841 dwarf.c:9846 dwarf.c:9850 dwarf.c:9853
+#: dwarf.c:9856 dwarf.c:9859
 #, c-format
 msgid "tried: %s\n"
 msgstr ""
 
-#: dwarf.c:9801
+#: dwarf.c:9871
 #, c-format
 msgid "failed to open separate debug file: %s\n"
 msgstr ""
 
 #. FIXME: We do not check to see if there are any other separate debug info
 #. files that would also match.
-#: dwarf.c:9809
+#: dwarf.c:9879
 #, c-format
 msgid ""
 "%s: Found separate debug info file: %s\n"
 "\n"
 msgstr ""
 
-#: dwarf.c:9828
+#: dwarf.c:9898
 msgid "Out of memory allocating dwo filename\n"
 msgstr ""
 
-#: dwarf.c:9834
+#: dwarf.c:9904
 #, c-format
 msgid "Unable to load dwo file: %s\n"
 msgstr ""
 
 #. FIXME: We should check the dwo_id.
-#: dwarf.c:9841
+#: dwarf.c:9911
 #, c-format
 msgid ""
 "%s: Found separate debug object file: %s\n"
 "\n"
 msgstr ""
 
-#: dwarf.c:9869
+#: dwarf.c:9943
 #, c-format
 msgid "The %s section contains a link to a dwo file:\n"
 msgstr ""
 
-#: dwarf.c:9871
+#: dwarf.c:9945
 #, c-format
 msgid "  Name:      %s\n"
 msgstr ""
 
-#: dwarf.c:9872
+#: dwarf.c:9946
 #, c-format
 msgid "  Directory: %s\n"
 msgstr ""
 
-#: dwarf.c:9872
+#: dwarf.c:9946
 msgid "<not-found>"
 msgstr ""
 
-#: dwarf.c:9874
+#: dwarf.c:9948
 #, c-format
 msgid "  ID:       "
 msgstr ""
 
-#: dwarf.c:9876
+#: dwarf.c:9950
 #, c-format
 msgid "  ID: <unknown>\n"
 msgstr ""
 
-#: dwarf.c:10033 dwarf.c:10075
+#: dwarf.c:10109 dwarf.c:10151
 #, c-format
 msgid "Unrecognized debug option '%s'\n"
 msgstr ""
@@ -4033,7 +4054,7 @@ msgstr ""
 msgid "%s: failed to seek to first archive header\n"
 msgstr ""
 
-#: elfcomm.c:640 elfcomm.c:867 elfedit.c:379 readelf.c:18888
+#: elfcomm.c:640 elfcomm.c:867 elfedit.c:379 readelf.c:18972
 #, c-format
 msgid "%s: failed to read archive header\n"
 msgstr ""
@@ -4080,7 +4101,7 @@ msgstr ""
 msgid "%s: failed to seek to next file name\n"
 msgstr ""
 
-#: elfcomm.c:872 elfedit.c:386 readelf.c:18894
+#: elfcomm.c:872 elfedit.c:386 readelf.c:18978
 #, c-format
 msgid "%s: did not find a valid archive header\n"
 msgstr ""
@@ -4146,12 +4167,12 @@ msgstr ""
 msgid "%s: Failed to seek to ELF header\n"
 msgstr ""
 
-#: elfedit.c:370 readelf.c:18880
+#: elfedit.c:370 readelf.c:18964
 #, c-format
 msgid "%s: failed to seek to next archive header\n"
 msgstr ""
 
-#: elfedit.c:401 elfedit.c:410 readelf.c:18908 readelf.c:18917
+#: elfedit.c:401 elfedit.c:410 readelf.c:18992 readelf.c:19001
 #, c-format
 msgid "%s: bad archive file name\n"
 msgstr ""
@@ -4166,22 +4187,22 @@ msgstr ""
 msgid "%s: failed to seek to archive member\n"
 msgstr ""
 
-#: elfedit.c:493 readelf.c:19026
+#: elfedit.c:493 readelf.c:19110
 #, c-format
 msgid "'%s': No such file\n"
 msgstr ""
 
-#: elfedit.c:495 readelf.c:19028
+#: elfedit.c:495 readelf.c:19112
 #, c-format
 msgid "Could not locate '%s'.  System error message: %s\n"
 msgstr ""
 
-#: elfedit.c:502 readelf.c:19035
+#: elfedit.c:502 readelf.c:19119
 #, c-format
 msgid "'%s' is not an ordinary file\n"
 msgstr ""
 
-#: elfedit.c:528 readelf.c:19057
+#: elfedit.c:528 readelf.c:19141
 #, c-format
 msgid "%s: Failed to read file's magic number\n"
 msgstr ""
@@ -4249,444 +4270,10 @@ msgstr ""
 msgid "  [-X32_64]    - accepts 32 and 64 bit objects\n"
 msgstr ""
 
-#: ieee.c:310
-msgid "unexpected end of debugging information"
-msgstr ""
-
-#: ieee.c:397
-msgid "invalid number"
-msgstr ""
-
-#: ieee.c:450
-msgid "invalid string length"
-msgstr ""
-
-#: ieee.c:505 ieee.c:546
-msgid "expression stack overflow"
-msgstr ""
-
-#: ieee.c:525
-msgid "unsupported IEEE expression operator"
-msgstr ""
-
-#: ieee.c:540
-msgid "unknown section"
-msgstr ""
-
-#: ieee.c:561
-msgid "expression stack underflow"
-msgstr ""
-
-#: ieee.c:575
-msgid "expression stack mismatch"
-msgstr ""
-
-#: ieee.c:612
-msgid "unknown builtin type"
-msgstr ""
-
-#: ieee.c:757
-msgid "BCD float type not supported"
-msgstr ""
-
-#: ieee.c:894
-msgid "unexpected number"
-msgstr ""
-
-#: ieee.c:901
-msgid "unexpected record type"
-msgstr ""
-
-#: ieee.c:934
-msgid "blocks left on stack at end"
-msgstr ""
-
-#: ieee.c:1207
-msgid "unknown BB type"
-msgstr ""
-
-#: ieee.c:1216
-msgid "stack overflow"
-msgstr ""
-
-#: ieee.c:1239
-msgid "stack underflow"
-msgstr ""
-
-#: ieee.c:1351 ieee.c:1421 ieee.c:2119
-msgid "illegal variable index"
-msgstr ""
-
-#: ieee.c:1399
-msgid "illegal type index"
-msgstr ""
-
-#: ieee.c:1409 ieee.c:1446
-msgid "unknown TY code"
-msgstr ""
-
-#: ieee.c:1428
-msgid "undefined variable in TY"
-msgstr ""
-
-#. Pascal file name.  FIXME.
-#: ieee.c:1840
-msgid "Pascal file name not supported"
-msgstr ""
-
-#: ieee.c:1888
-msgid "unsupported qualifier"
-msgstr ""
-
-#: ieee.c:2157
-msgid "undefined variable in ATN"
-msgstr ""
-
-#: ieee.c:2200
-msgid "unknown ATN type"
-msgstr ""
-
-#. Reserved for FORTRAN common.
-#: ieee.c:2322
-msgid "unsupported ATN11"
-msgstr ""
-
-#. We have no way to record this information.  FIXME.
-#: ieee.c:2349
-msgid "unsupported ATN12"
-msgstr ""
-
-#: ieee.c:2409
-msgid "unexpected string in C++ misc"
-msgstr ""
-
-#: ieee.c:2422
-msgid "bad misc record"
-msgstr ""
-
-#: ieee.c:2463
-msgid "unrecognized C++ misc record"
-msgstr ""
-
-#: ieee.c:2578
-msgid "undefined C++ object"
-msgstr ""
-
-#: ieee.c:2612
-msgid "unrecognized C++ object spec"
-msgstr ""
-
-#: ieee.c:2648
-msgid "unsupported C++ object type"
-msgstr ""
-
-#: ieee.c:2658
-msgid "C++ base class not defined"
-msgstr ""
-
-#: ieee.c:2670 ieee.c:2775
-msgid "C++ object has no fields"
-msgstr ""
-
-#: ieee.c:2689
-msgid "C++ base class not found in container"
-msgstr ""
-
-#: ieee.c:2796
-msgid "C++ data member not found in container"
-msgstr ""
-
-#: ieee.c:2837 ieee.c:2987
-msgid "unknown C++ visibility"
-msgstr ""
-
-#: ieee.c:2871
-msgid "bad C++ field bit pos or size"
-msgstr ""
-
-#: ieee.c:2963
-msgid "bad type for C++ method function"
-msgstr ""
-
-#: ieee.c:2973
-msgid "no type information for C++ method function"
-msgstr ""
-
-#: ieee.c:3012
-msgid "C++ static virtual method"
-msgstr ""
-
-#: ieee.c:3107
-msgid "unrecognized C++ object overhead spec"
-msgstr ""
-
-#: ieee.c:3146
-msgid "undefined C++ vtable"
-msgstr ""
-
-#: ieee.c:3215
-msgid "C++ default values not in a function"
-msgstr ""
-
-#: ieee.c:3255
-msgid "unrecognized C++ default type"
-msgstr ""
-
-#: ieee.c:3286
-msgid "reference parameter is not a pointer"
-msgstr ""
-
-#: ieee.c:3369
-msgid "unrecognized C++ reference type"
-msgstr ""
-
-#: ieee.c:3451
-msgid "C++ reference not found"
-msgstr ""
-
-#: ieee.c:3459
-msgid "C++ reference is not pointer"
-msgstr ""
-
-#: ieee.c:3485 ieee.c:3493
-msgid "missing required ASN"
-msgstr ""
-
-#: ieee.c:3520 ieee.c:3528
-msgid "missing required ATN65"
-msgstr ""
-
-#: ieee.c:3542
-msgid "bad ATN65 record"
-msgstr ""
-
-#: ieee.c:4170
-#, c-format
-msgid "IEEE numeric overflow: 0x"
-msgstr ""
-
-#: ieee.c:4214
-#, c-format
-msgid "IEEE string length overflow: %u\n"
-msgstr ""
-
-#: ieee.c:5212
-#, c-format
-msgid "IEEE unsupported integer type size %u\n"
-msgstr ""
-
-#: ieee.c:5246
-#, c-format
-msgid "IEEE unsupported float type size %u\n"
-msgstr ""
-
-#: ieee.c:5280
-#, c-format
-msgid "IEEE unsupported complex type size %u\n"
-msgstr ""
-
 #: mclex.c:240
 msgid "Duplicate symbol entered into keyword list."
 msgstr ""
 
-#: nlmconv.c:272 srconv.c:1788
-msgid "input and output files must be different"
-msgstr ""
-
-#: nlmconv.c:319
-msgid "input file named both on command line and with INPUT"
-msgstr ""
-
-#: nlmconv.c:328
-msgid "no input file"
-msgstr ""
-
-#: nlmconv.c:358
-msgid "no name for output file"
-msgstr ""
-
-#: nlmconv.c:372
-msgid "warning: input and output formats are not compatible"
-msgstr ""
-
-#: nlmconv.c:402
-msgid "make .bss section"
-msgstr ""
-
-#: nlmconv.c:412
-msgid "make .nlmsections section"
-msgstr ""
-
-#: nlmconv.c:440
-msgid "set .bss vma"
-msgstr ""
-
-#: nlmconv.c:447
-msgid "set .data size"
-msgstr ""
-
-#: nlmconv.c:627
-#, c-format
-msgid "warning: symbol %s imported but not in import list"
-msgstr ""
-
-#: nlmconv.c:647
-msgid "set start address"
-msgstr ""
-
-#: nlmconv.c:696
-#, c-format
-msgid "warning: START procedure %s not defined"
-msgstr ""
-
-#: nlmconv.c:698
-#, c-format
-msgid "warning: EXIT procedure %s not defined"
-msgstr ""
-
-#: nlmconv.c:700
-#, c-format
-msgid "warning: CHECK procedure %s not defined"
-msgstr ""
-
-#: nlmconv.c:720 nlmconv.c:906
-msgid "custom section"
-msgstr ""
-
-#: nlmconv.c:740 nlmconv.c:935
-msgid "help section"
-msgstr ""
-
-#: nlmconv.c:762 nlmconv.c:953
-msgid "message section"
-msgstr ""
-
-#: nlmconv.c:777 nlmconv.c:986
-msgid "module section"
-msgstr ""
-
-#: nlmconv.c:796 nlmconv.c:1002
-msgid "rpc section"
-msgstr ""
-
-#. There is no place to record this information.
-#: nlmconv.c:832
-#, c-format
-msgid "%s: warning: shared libraries can not have uninitialized data"
-msgstr ""
-
-#: nlmconv.c:853 nlmconv.c:1021
-msgid "shared section"
-msgstr ""
-
-#: nlmconv.c:861
-msgid "warning: No version number given"
-msgstr ""
-
-#: nlmconv.c:901 nlmconv.c:930 nlmconv.c:948 nlmconv.c:997 nlmconv.c:1016
-#, c-format
-msgid "%s: read: %s"
-msgstr ""
-
-#: nlmconv.c:923
-msgid "warning: FULLMAP is not supported; try ld -M"
-msgstr ""
-
-#: nlmconv.c:1099
-#, c-format
-msgid "Usage: %s [option(s)] [in-file [out-file]]\n"
-msgstr ""
-
-#: nlmconv.c:1100
-#, c-format
-msgid " Convert an object file into a NetWare Loadable Module\n"
-msgstr ""
-
-#: nlmconv.c:1101
-#, c-format
-msgid ""
-" The options are:\n"
-"  -I --input-target=<bfdname>   Set the input binary file format\n"
-"  -O --output-target=<bfdname>  Set the output binary file format\n"
-"  -T --header-file=<file>       Read <file> for NLM header information\n"
-"  -l --linker=<linker>          Use <linker> for any linking\n"
-"  -d --debug                    Display on stderr the linker command line\n"
-"  @<file>                       Read options from <file>.\n"
-"  -h --help                     Display this information\n"
-"  -v --version                  Display the program's version\n"
-msgstr ""
-
-#: nlmconv.c:1142
-#, c-format
-msgid "support not compiled in for %s"
-msgstr ""
-
-#: nlmconv.c:1179
-msgid "make section"
-msgstr ""
-
-#: nlmconv.c:1193
-msgid "set section size"
-msgstr ""
-
-#: nlmconv.c:1199
-msgid "set section alignment"
-msgstr ""
-
-#: nlmconv.c:1203
-msgid "set section flags"
-msgstr ""
-
-#: nlmconv.c:1214
-msgid "set .nlmsections size"
-msgstr ""
-
-#: nlmconv.c:1293 nlmconv.c:1301 nlmconv.c:1310 nlmconv.c:1315
-msgid "set .nlmsection contents"
-msgstr ""
-
-#: nlmconv.c:1795
-msgid "stub section sizes"
-msgstr ""
-
-#: nlmconv.c:1842
-msgid "writing stub"
-msgstr ""
-
-#: nlmconv.c:1876
-msgid "Unable to locate PPC_TOC16 reloc information"
-msgstr ""
-
-#: nlmconv.c:1930
-#, c-format
-msgid "unresolved PC relative reloc against %s"
-msgstr ""
-
-#: nlmconv.c:1938 nlmconv.c:1994 nlmconv.c:2017
-#, c-format
-msgid "Out of range relocation: %lx"
-msgstr ""
-
-#: nlmconv.c:2008
-#, c-format
-msgid "overflow when adjusting relocation against %s"
-msgstr ""
-
-#: nlmconv.c:2033
-#, c-format
-msgid "Unsupported relocation size: %d"
-msgstr ""
-
-#: nlmconv.c:2145
-#, c-format
-msgid "%s: execution of %s failed: "
-msgstr ""
-
-#: nlmconv.c:2160
-#, c-format
-msgid "Execution of %s failed"
-msgstr ""
-
 #: nm.c:237 size.c:76 strings.c:639
 #, c-format
 msgid "Usage: %s [option(s)] [file(s)]\n"
@@ -4762,17 +4349,17 @@ msgstr ""
 msgid "%s: invalid output format"
 msgstr ""
 
-#: nm.c:362 readelf.c:10785 readelf.c:10830
+#: nm.c:362 readelf.c:10855 readelf.c:10900
 #, c-format
 msgid "<processor specific>: %d"
 msgstr ""
 
-#: nm.c:364 readelf.c:10794 readelf.c:10849
+#: nm.c:364 readelf.c:10864 readelf.c:10919
 #, c-format
 msgid "<OS specific>: %d"
 msgstr ""
 
-#: nm.c:366 readelf.c:10797 readelf.c:10852
+#: nm.c:366 readelf.c:10867 readelf.c:10922
 #, c-format
 msgid "<unknown>: %d"
 msgstr ""
@@ -5139,7 +4726,7 @@ msgstr ""
 msgid "cannot open '%s': %s"
 msgstr ""
 
-#: objcopy.c:1058 objcopy.c:4667
+#: objcopy.c:1058 objcopy.c:4673
 #, c-format
 msgid "%s: fread failed"
 msgstr ""
@@ -5372,232 +4959,232 @@ msgstr ""
 msgid "can't add padding"
 msgstr ""
 
-#: objcopy.c:3090
+#: objcopy.c:3099
 msgid "error: failed to copy merged notes into output"
 msgstr ""
 
-#: objcopy.c:3095
+#: objcopy.c:3104
 msgid "could not find any mergeable note sections"
 msgstr ""
 
-#: objcopy.c:3107
+#: objcopy.c:3116
 #, c-format
 msgid "cannot fill debug link section `%s'"
 msgstr ""
 
-#: objcopy.c:3164
+#: objcopy.c:3173
 msgid "error copying private BFD data"
 msgstr ""
 
-#: objcopy.c:3175
+#: objcopy.c:3184
 #, c-format
 msgid "this target does not support %lu alternative machine codes"
 msgstr ""
 
-#: objcopy.c:3179
+#: objcopy.c:3188
 msgid "treating that number as an absolute e_machine value instead"
 msgstr ""
 
-#: objcopy.c:3183
+#: objcopy.c:3192
 msgid "ignoring the alternative value"
 msgstr ""
 
-#: objcopy.c:3215 objcopy.c:3268
+#: objcopy.c:3224 objcopy.c:3277
 #, c-format
 msgid "cannot create tempdir for archive copying (error: %s)"
 msgstr ""
 
-#: objcopy.c:3301
+#: objcopy.c:3310
 msgid "Unable to recognise the format of file"
 msgstr ""
 
-#: objcopy.c:3428
+#: objcopy.c:3437
 #, c-format
 msgid "error: the input file '%s' is empty"
 msgstr ""
 
-#: objcopy.c:3596
+#: objcopy.c:3605
 #, c-format
 msgid "Multiple renames of section %s"
 msgstr ""
 
-#: objcopy.c:3642
+#: objcopy.c:3651
 msgid "error in private header data"
 msgstr ""
 
-#: objcopy.c:3720
+#: objcopy.c:3729
 msgid "failed to create output section"
 msgstr ""
 
-#: objcopy.c:3735
+#: objcopy.c:3744
 msgid "failed to set size"
 msgstr ""
 
-#: objcopy.c:3754
+#: objcopy.c:3763
 msgid "failed to set vma"
 msgstr ""
 
-#: objcopy.c:3779
+#: objcopy.c:3788
 msgid "failed to set alignment"
 msgstr ""
 
-#: objcopy.c:3811
+#: objcopy.c:3820
 msgid "failed to copy private data"
 msgstr ""
 
-#: objcopy.c:3967
+#: objcopy.c:3976
 msgid "relocation count is negative"
 msgstr ""
 
 #. User must pad the section up in order to do this.
-#: objcopy.c:4064
+#: objcopy.c:4073
 #, c-format
 msgid ""
 "cannot reverse bytes: length of section %s must be evenly divisible by %d"
 msgstr ""
 
-#: objcopy.c:4272
+#: objcopy.c:4278
 msgid "can't create debugging section"
 msgstr ""
 
-#: objcopy.c:4285
+#: objcopy.c:4291
 msgid "can't set debugging section contents"
 msgstr ""
 
-#: objcopy.c:4293
+#: objcopy.c:4299
 #, c-format
 msgid "don't know how to write debugging information for %s"
 msgstr ""
 
-#: objcopy.c:4464
+#: objcopy.c:4470
 msgid "could not create temporary file to hold stripped copy"
 msgstr ""
 
-#: objcopy.c:4536
+#: objcopy.c:4542
 #, c-format
 msgid "%s: bad version in PE subsystem"
 msgstr ""
 
-#: objcopy.c:4566
+#: objcopy.c:4572
 #, c-format
 msgid "unknown PE subsystem: %s"
 msgstr ""
 
-#: objcopy.c:4620 objcopy.c:4882 objcopy.c:4962 objcopy.c:5103 objcopy.c:5135
-#: objcopy.c:5158 objcopy.c:5162 objcopy.c:5182
+#: objcopy.c:4626 objcopy.c:4888 objcopy.c:4968 objcopy.c:5109 objcopy.c:5141
+#: objcopy.c:5164 objcopy.c:5168 objcopy.c:5188
 #, c-format
 msgid "bad format for %s"
 msgstr ""
 
-#: objcopy.c:4649
+#: objcopy.c:4655
 #, c-format
 msgid "cannot open: %s: %s"
 msgstr ""
 
-#: objcopy.c:4700
+#: objcopy.c:4706
 msgid "byte number must be non-negative"
 msgstr ""
 
-#: objcopy.c:4706
+#: objcopy.c:4712
 #, c-format
 msgid "architecture %s unknown"
 msgstr ""
 
-#: objcopy.c:4714
+#: objcopy.c:4720
 msgid "interleave must be positive"
 msgstr ""
 
-#: objcopy.c:4723
+#: objcopy.c:4729
 msgid "interleave width must be positive"
 msgstr ""
 
-#: objcopy.c:5035
+#: objcopy.c:5041
 #, c-format
 msgid "unrecognized --compress-debug-sections type `%s'"
 msgstr ""
 
-#: objcopy.c:5056
+#: objcopy.c:5062
 #, c-format
 msgid "unrecognized --elf-stt-common= option `%s'"
 msgstr ""
 
-#: objcopy.c:5072
+#: objcopy.c:5078
 #, c-format
 msgid "Warning: truncating gap-fill from 0x%s to 0x%x"
 msgstr ""
 
-#: objcopy.c:5233
+#: objcopy.c:5239
 #, c-format
 msgid "unknown long section names option '%s'"
 msgstr ""
 
-#: objcopy.c:5251
+#: objcopy.c:5257
 msgid "unable to parse alternative machine code"
 msgstr ""
 
-#: objcopy.c:5300
+#: objcopy.c:5306
 msgid "number of bytes to reverse must be positive and even"
 msgstr ""
 
-#: objcopy.c:5303
+#: objcopy.c:5309
 #, c-format
 msgid "Warning: ignoring previous --reverse-bytes value of %d"
 msgstr ""
 
-#: objcopy.c:5318
+#: objcopy.c:5324
 #, c-format
 msgid "%s: invalid reserve value for --heap"
 msgstr ""
 
-#: objcopy.c:5324
+#: objcopy.c:5330
 #, c-format
 msgid "%s: invalid commit value for --heap"
 msgstr ""
 
-#: objcopy.c:5349
+#: objcopy.c:5355
 #, c-format
 msgid "%s: invalid reserve value for --stack"
 msgstr ""
 
-#: objcopy.c:5355
+#: objcopy.c:5361
 #, c-format
 msgid "%s: invalid commit value for --stack"
 msgstr ""
 
-#: objcopy.c:5384
+#: objcopy.c:5390
 msgid "interleave start byte must be set with --byte"
 msgstr ""
 
-#: objcopy.c:5387
+#: objcopy.c:5393
 msgid "byte number must be less than interleave"
 msgstr ""
 
-#: objcopy.c:5390
+#: objcopy.c:5396
 msgid "interleave width must be less than or equal to interleave - byte`"
 msgstr ""
 
-#: objcopy.c:5419
+#: objcopy.c:5425
 #, c-format
 msgid "unknown input EFI target: %s"
 msgstr ""
 
-#: objcopy.c:5450
+#: objcopy.c:5456
 #, c-format
 msgid "unknown output EFI target: %s"
 msgstr ""
 
-#: objcopy.c:5463
+#: objcopy.c:5469
 #, c-format
 msgid "warning: could not locate '%s'.  System error message: %s"
 msgstr ""
 
-#: objcopy.c:5475
+#: objcopy.c:5481
 #, c-format
 msgid ""
 "warning: could not create temporary file whilst copying '%s', (error: %s)"
 msgstr ""
 
-#: objcopy.c:5508 objcopy.c:5522
+#: objcopy.c:5514 objcopy.c:5528
 #, c-format
 msgid "%s %s%c0x%s never used"
 msgstr ""
@@ -5749,7 +5336,7 @@ msgstr ""
 msgid "failed to read symbol table from: %s"
 msgstr ""
 
-#: objdump.c:619 objdump.c:3453
+#: objdump.c:619 objdump.c:3483
 msgid "error message was"
 msgstr ""
 
@@ -5758,179 +5345,179 @@ msgstr ""
 msgid "%s: not a dynamic object"
 msgstr ""
 
-#: objdump.c:1165 objdump.c:1189
+#: objdump.c:1188 objdump.c:1212
 #, c-format
 msgid " (File Offset: 0x%lx)"
 msgstr ""
 
-#: objdump.c:1431
+#: objdump.c:1454
 #, c-format
 msgid "source file %s is more recent than object file\n"
 msgstr ""
 
-#: objdump.c:1883
+#: objdump.c:1906
 #, c-format
 msgid "disassemble_fn returned length %d"
 msgstr ""
 
-#: objdump.c:2189 objdump.c:3079
+#: objdump.c:2212 objdump.c:3109
 #, c-format
 msgid "Reading section %s failed because: %s"
 msgstr ""
 
-#: objdump.c:2206
+#: objdump.c:2229
 #, c-format
 msgid ""
 "\n"
 "Disassembly of section %s:\n"
 msgstr ""
 
-#: objdump.c:2383
+#: objdump.c:2406
 #, c-format
 msgid "can't use supplied machine %s"
 msgstr ""
 
-#: objdump.c:2404
+#: objdump.c:2427
 #, c-format
 msgid "can't disassemble for architecture %s\n"
 msgstr ""
 
-#: objdump.c:2489 objdump.c:2511
+#: objdump.c:2515 objdump.c:2537
 #, c-format
 msgid ""
 "\n"
 "Can't get contents for section '%s'.\n"
 msgstr ""
 
-#: objdump.c:2695
+#: objdump.c:2721
 #, c-format
 msgid "File %s does not contain any dwarf debug information\n"
 msgstr ""
 
-#: objdump.c:2758
+#: objdump.c:2788
 #, c-format
 msgid ""
 "No %s section present\n"
 "\n"
 msgstr ""
 
-#: objdump.c:2764
+#: objdump.c:2794
 #, c-format
 msgid "reading %s section of %s failed: %s"
 msgstr ""
 
-#: objdump.c:2808
+#: objdump.c:2838
 #, c-format
 msgid ""
 "Contents of %s section:\n"
 "\n"
 msgstr ""
 
-#: objdump.c:2941
+#: objdump.c:2971
 #, c-format
 msgid "architecture: %s, "
 msgstr ""
 
-#: objdump.c:2944
+#: objdump.c:2974
 #, c-format
 msgid "flags 0x%08x:\n"
 msgstr ""
 
-#: objdump.c:2957
+#: objdump.c:2987
 #, c-format
 msgid ""
 "\n"
 "start address 0x"
 msgstr ""
 
-#: objdump.c:2983
+#: objdump.c:3013
 msgid "option -P/--private not supported by this file"
 msgstr ""
 
-#: objdump.c:3007
+#: objdump.c:3037
 #, c-format
 msgid "target specific dump '%s' not supported"
 msgstr ""
 
-#: objdump.c:3071
+#: objdump.c:3101
 #, c-format
 msgid "Contents of section %s:"
 msgstr ""
 
-#: objdump.c:3073
+#: objdump.c:3103
 #, c-format
 msgid "  (Starting at file offset: 0x%lx)"
 msgstr ""
 
-#: objdump.c:3183
+#: objdump.c:3213
 #, c-format
 msgid "no symbols\n"
 msgstr ""
 
-#: objdump.c:3190
+#: objdump.c:3220
 #, c-format
 msgid "no information for symbol number %ld\n"
 msgstr ""
 
-#: objdump.c:3193
+#: objdump.c:3223
 #, c-format
 msgid "could not determine the type of symbol number %ld\n"
 msgstr ""
 
-#: objdump.c:3452
+#: objdump.c:3482
 #, c-format
 msgid "failed to read relocs in: %s"
 msgstr ""
 
-#: objdump.c:3552
+#: objdump.c:3582
 #, c-format
 msgid ""
 "\n"
 "%s:     file format %s\n"
 msgstr ""
 
-#: objdump.c:3614
+#: objdump.c:3644
 #, c-format
 msgid "%s: printing debugging information failed"
 msgstr ""
 
-#: objdump.c:3705
+#: objdump.c:3735
 #, c-format
 msgid "In archive %s:\n"
 msgstr ""
 
 #. Prevent corrupted files from spinning us into an
 #. infinite loop.  100 is an arbitrary heuristic.
-#: objdump.c:3710
+#: objdump.c:3740
 msgid "Archive nesting is too deep"
 msgstr ""
 
-#: objdump.c:3714
+#: objdump.c:3744
 #, c-format
 msgid "In nested archive %s:\n"
 msgstr ""
 
-#: objdump.c:3871
+#: objdump.c:3901
 msgid "error: the start address should be before the end address"
 msgstr ""
 
-#: objdump.c:3876
+#: objdump.c:3906
 msgid "error: the stop address should be after the start address"
 msgstr ""
 
-#: objdump.c:3888
+#: objdump.c:3918
 msgid "error: prefix strip must be non-negative"
 msgstr ""
 
-#: objdump.c:3893
+#: objdump.c:3923
 msgid "error: instruction width must be positive"
 msgstr ""
 
-#: objdump.c:3905
+#: objdump.c:3935
 msgid "unrecognized -E option"
 msgstr ""
 
-#: objdump.c:3916
+#: objdump.c:3946
 #, c-format
 msgid "unrecognized --endian type `%s'"
 msgstr ""
@@ -5953,225 +5540,225 @@ msgid ""
 "  dyld_info        Display dyld information\n"
 msgstr ""
 
-#: od-macho.c:298
+#: od-macho.c:297
 msgid "Mach-O header:\n"
 msgstr ""
 
-#: od-macho.c:299
+#: od-macho.c:298
 #, c-format
 msgid " magic     : %08lx\n"
 msgstr ""
 
-#: od-macho.c:300
+#: od-macho.c:299
 #, c-format
 msgid " cputype   : %08lx (%s)\n"
 msgstr ""
 
-#: od-macho.c:302
+#: od-macho.c:301
 #, c-format
 msgid " cpusubtype: %08lx\n"
 msgstr ""
 
-#: od-macho.c:303
+#: od-macho.c:302
 #, c-format
 msgid " filetype  : %08lx (%s)\n"
 msgstr ""
 
-#: od-macho.c:306
+#: od-macho.c:305
 #, c-format
 msgid " ncmds     : %08lx (%lu)\n"
 msgstr ""
 
-#: od-macho.c:307
+#: od-macho.c:306
 #, c-format
 msgid " sizeofcmds: %08lx (%lu)\n"
 msgstr ""
 
-#: od-macho.c:308
+#: od-macho.c:307
 #, c-format
 msgid " flags     : %08lx ("
 msgstr ""
 
-#: od-macho.c:310
+#: od-macho.c:309
 msgid ")\n"
 msgstr ""
 
-#: od-macho.c:311
+#: od-macho.c:310
 #, c-format
 msgid " reserved  : %08x\n"
 msgstr ""
 
-#: od-macho.c:330
+#: od-macho.c:329
 msgid "Segments and Sections:\n"
 msgstr ""
 
-#: od-macho.c:331
+#: od-macho.c:330
 msgid " #: Segment name     Section name     Address\n"
 msgstr ""
 
-#: od-macho.c:973
+#: od-macho.c:972
 msgid "cannot read rebase dyld info"
 msgstr ""
 
-#: od-macho.c:978
+#: od-macho.c:977
 msgid "cannot read bind dyld info"
 msgstr ""
 
-#: od-macho.c:983
+#: od-macho.c:982
 msgid "cannot read weak bind dyld info"
 msgstr ""
 
-#: od-macho.c:988
+#: od-macho.c:987
 msgid "cannot read lazy bind dyld info"
 msgstr ""
 
-#: od-macho.c:993
+#: od-macho.c:992
 msgid "cannot read export symbols dyld info"
 msgstr ""
 
-#: od-macho.c:1073 od-macho.c:1083 od-macho.c:1157 od-macho.c:1209
+#: od-macho.c:1072 od-macho.c:1082 od-macho.c:1156 od-macho.c:1208
 #, c-format
 msgid "  [bad block length]\n"
 msgstr ""
 
-#: od-macho.c:1077
+#: od-macho.c:1076
 #, c-format
 msgid "  %u index entry:\n"
 msgid_plural "  %u index entries:\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: od-macho.c:1093
+#: od-macho.c:1092
 #, c-format
 msgid "  index entry %u: type: %08x, offset: %08x\n"
 msgstr ""
 
-#: od-macho.c:1164
+#: od-macho.c:1163
 #, c-format
 msgid "  version:           %08x\n"
 msgstr ""
 
-#: od-macho.c:1165
+#: od-macho.c:1164
 #, c-format
 msgid "  flags:             %08x\n"
 msgstr ""
 
-#: od-macho.c:1166
+#: od-macho.c:1165
 #, c-format
 msgid "  hash offset:       %08x\n"
 msgstr ""
 
-#: od-macho.c:1168
+#: od-macho.c:1167
 #, c-format
 msgid "  ident offset:      %08x (- %08x)\n"
 msgstr ""
 
-#: od-macho.c:1170
+#: od-macho.c:1169
 #, c-format
 msgid "   identity: %s\n"
 msgstr ""
 
-#: od-macho.c:1171
+#: od-macho.c:1170
 #, c-format
 msgid "  nbr special slots: %08x (at offset %08x)\n"
 msgstr ""
 
-#: od-macho.c:1174
+#: od-macho.c:1173
 #, c-format
 msgid "  nbr code slots:    %08x\n"
 msgstr ""
 
-#: od-macho.c:1175
+#: od-macho.c:1174
 #, c-format
 msgid "  code limit:        %08x\n"
 msgstr ""
 
-#: od-macho.c:1176
+#: od-macho.c:1175
 #, c-format
 msgid "  hash size:         %02x\n"
 msgstr ""
 
-#: od-macho.c:1177
+#: od-macho.c:1176
 #, c-format
 msgid "  hash type:         %02x (%s)\n"
 msgstr ""
 
-#: od-macho.c:1180
+#: od-macho.c:1179
 #, c-format
 msgid "  spare1:            %02x\n"
 msgstr ""
 
-#: od-macho.c:1181
+#: od-macho.c:1180
 #, c-format
 msgid "  page size:         %02x\n"
 msgstr ""
 
-#: od-macho.c:1182
+#: od-macho.c:1181
 #, c-format
 msgid "  spare2:            %08x\n"
 msgstr ""
 
-#: od-macho.c:1184
+#: od-macho.c:1183
 #, c-format
 msgid "  scatter offset:    %08x\n"
 msgstr ""
 
-#: od-macho.c:1196
+#: od-macho.c:1195
 #, c-format
 msgid "  [truncated block]\n"
 msgstr ""
 
-#: od-macho.c:1204
+#: od-macho.c:1203
 #, c-format
 msgid " magic : %08x (%s)\n"
 msgstr ""
 
-#: od-macho.c:1206
+#: od-macho.c:1205
 #, c-format
 msgid " length: %08x\n"
 msgstr ""
 
-#: od-macho.c:1237
+#: od-macho.c:1236
 msgid "cannot read code signature data"
 msgstr ""
 
-#: od-macho.c:1265
+#: od-macho.c:1264
 msgid "cannot read segment split info"
 msgstr ""
 
-#: od-macho.c:1271
+#: od-macho.c:1270
 msgid "segment split info is not nul terminated"
 msgstr ""
 
-#: od-macho.c:1279
+#: od-macho.c:1278
 #, c-format
 msgid "  32 bit pointers:\n"
 msgstr ""
 
-#: od-macho.c:1282
+#: od-macho.c:1281
 #, c-format
 msgid "  64 bit pointers:\n"
 msgstr ""
 
-#: od-macho.c:1285
+#: od-macho.c:1284
 #, c-format
 msgid "  PPC hi-16:\n"
 msgstr ""
 
-#: od-macho.c:1288
+#: od-macho.c:1287
 #, c-format
 msgid "  Unhandled location type %u\n"
 msgstr ""
 
-#: od-macho.c:1312
+#: od-macho.c:1311
 msgid "cannot read function starts"
 msgstr ""
 
-#: od-macho.c:1376
+#: od-macho.c:1375
 msgid "cannot read data_in_code"
 msgstr ""
 
-#: od-macho.c:1414
+#: od-macho.c:1413
 msgid "cannot read twolevel hints"
 msgstr ""
 
@@ -6203,7 +5790,7 @@ msgstr ""
 msgid "  time and date: 0x%08x  - "
 msgstr ""
 
-#: od-xcoff.c:422 readelf.c:17081
+#: od-xcoff.c:422 readelf.c:17152
 #, c-format
 msgid "not set\n"
 msgstr ""
@@ -6646,311 +6233,311 @@ msgstr ""
 msgid "%ld: unexpected .ef\n"
 msgstr ""
 
-#: rddbg.c:87
+#: rddbg.c:80
 #, c-format
 msgid "%s: no recognized debugging information"
 msgstr ""
 
-#: rddbg.c:194
+#: rddbg.c:187
 #, c-format
 msgid "%s: %s: stab entry %ld is corrupt, strx = 0x%x, type = %d\n"
 msgstr ""
 
-#: rddbg.c:218
+#: rddbg.c:211
 #, c-format
 msgid "%s: %s: stab entry %ld is corrupt\n"
 msgstr ""
 
-#: rddbg.c:417
+#: rddbg.c:379
 #, c-format
 msgid "Last stabs entries before error:\n"
 msgstr ""
 
-#: readelf.c:304
+#: readelf.c:305
 msgid "<none>"
 msgstr ""
 
-#: readelf.c:305
+#: readelf.c:306
 msgid "<no-strings>"
 msgstr ""
 
-#: readelf.c:382
+#: readelf.c:383
 #, c-format
 msgid "Size truncation prevents reading %s elements of size %s for %s\n"
 msgstr ""
 
-#: readelf.c:392
+#: readelf.c:393
 #, c-format
 msgid "Size overflow prevents reading %s elements of size %s for %s\n"
 msgstr ""
 
-#: readelf.c:404
+#: readelf.c:405
 #, c-format
 msgid "Reading %s bytes extends past end of file for %s\n"
 msgstr ""
 
-#: readelf.c:412
+#: readelf.c:413
 #, c-format
 msgid "Unable to seek to 0x%lx for %s\n"
 msgstr ""
 
-#: readelf.c:428
+#: readelf.c:429
 #, c-format
 msgid "Out of memory allocating %s bytes for %s\n"
 msgstr ""
 
-#: readelf.c:439
+#: readelf.c:440
 #, c-format
 msgid "Unable to read in %s bytes of %s\n"
 msgstr ""
 
-#: readelf.c:868
+#: readelf.c:881
 msgid "Don't know about relocations on this machine architecture\n"
 msgstr ""
 
-#: readelf.c:895 readelf.c:1000
+#: readelf.c:908 readelf.c:1013
 msgid "32-bit relocation data"
 msgstr ""
 
-#: readelf.c:907 readelf.c:937 readelf.c:1011 readelf.c:1040
+#: readelf.c:920 readelf.c:950 readelf.c:1024 readelf.c:1053
 msgid "out of memory parsing relocs\n"
 msgstr ""
 
-#: readelf.c:925 readelf.c:1029
+#: readelf.c:938 readelf.c:1042
 msgid "64-bit relocation data"
 msgstr ""
 
-#: readelf.c:1159
+#: readelf.c:1172
 #, c-format
 msgid ""
 " Offset     Info    Type                Sym. Value  Symbol's Name + Addend\n"
 msgstr ""
 
-#: readelf.c:1161
+#: readelf.c:1174
 #, c-format
 msgid " Offset     Info    Type            Sym.Value  Sym. Name + Addend\n"
 msgstr ""
 
-#: readelf.c:1166
+#: readelf.c:1179
 #, c-format
 msgid " Offset     Info    Type                Sym. Value  Symbol's Name\n"
 msgstr ""
 
-#: readelf.c:1168
+#: readelf.c:1181
 #, c-format
 msgid " Offset     Info    Type            Sym.Value  Sym. Name\n"
 msgstr ""
 
-#: readelf.c:1176
+#: readelf.c:1189
 #, c-format
 msgid ""
 "    Offset             Info             Type               Symbol's Value  "
 "Symbol's Name + Addend\n"
 msgstr ""
 
-#: readelf.c:1178
+#: readelf.c:1191
 #, c-format
 msgid ""
 "  Offset          Info           Type           Sym. Value    Sym. Name + "
 "Addend\n"
 msgstr ""
 
-#: readelf.c:1183
+#: readelf.c:1196
 #, c-format
 msgid ""
 "    Offset             Info             Type               Symbol's Value  "
 "Symbol's Name\n"
 msgstr ""
 
-#: readelf.c:1185
+#: readelf.c:1198
 #, c-format
 msgid ""
 "  Offset          Info           Type           Sym. Value    Sym. Name\n"
 msgstr ""
 
-#: readelf.c:1555 readelf.c:1745 readelf.c:1753
+#: readelf.c:1575 readelf.c:1765 readelf.c:1773
 #, c-format
 msgid "unrecognized: %-7lx"
 msgstr ""
 
-#: readelf.c:1581
+#: readelf.c:1601
 #, c-format
 msgid "<unknown addend: %lx>"
 msgstr ""
 
-#: readelf.c:1590
+#: readelf.c:1610
 #, c-format
 msgid " bad symbol index: %08lx in reloc"
 msgstr ""
 
-#: readelf.c:1691
+#: readelf.c:1711
 #, c-format
 msgid "<string table index: %3ld>"
 msgstr ""
 
-#: readelf.c:1694
+#: readelf.c:1714
 #, c-format
 msgid "<corrupt string table index: %3ld>"
 msgstr ""
 
-#: readelf.c:2180
+#: readelf.c:2200
 #, c-format
 msgid "Processor Specific: %lx"
 msgstr ""
 
-#: readelf.c:2207
+#: readelf.c:2227
 #, c-format
 msgid "Operating System specific: %lx"
 msgstr ""
 
-#: readelf.c:2211 readelf.c:3947
+#: readelf.c:2231 readelf.c:3987
 #, c-format
 msgid "<unknown>: %lx"
 msgstr ""
 
-#: readelf.c:2224
+#: readelf.c:2244
 msgid "NONE (None)"
 msgstr ""
 
-#: readelf.c:2225
+#: readelf.c:2245
 msgid "REL (Relocatable file)"
 msgstr ""
 
-#: readelf.c:2226
+#: readelf.c:2246
 msgid "EXEC (Executable file)"
 msgstr ""
 
-#: readelf.c:2227
+#: readelf.c:2247
 msgid "DYN (Shared object file)"
 msgstr ""
 
-#: readelf.c:2228
+#: readelf.c:2248
 msgid "CORE (Core file)"
 msgstr ""
 
-#: readelf.c:2232
+#: readelf.c:2252
 #, c-format
 msgid "Processor Specific: (%x)"
 msgstr ""
 
-#: readelf.c:2234
+#: readelf.c:2254
 #, c-format
 msgid "OS Specific: (%x)"
 msgstr ""
 
-#: readelf.c:2236
+#: readelf.c:2256
 #, c-format
 msgid "<unknown>: %x"
 msgstr ""
 
 #. Please keep this switch table sorted by increasing EM_ value.
 #. 0
-#: readelf.c:2250 readelf.c:15426 readelf.c:15437
+#: readelf.c:2270 readelf.c:15497 readelf.c:15508
 msgid "None"
 msgstr ""
 
-#: readelf.c:2479
+#: readelf.c:2500
 #, c-format
 msgid "<unknown>: 0x%x"
 msgstr ""
 
-#: readelf.c:2759
+#: readelf.c:2786
 msgid ", <unknown>"
 msgstr ""
 
-#: readelf.c:3128 readelf.c:9543
+#: readelf.c:3155 readelf.c:9598
 msgid "unknown"
 msgstr ""
 
-#: readelf.c:3129
+#: readelf.c:3156
 msgid "unknown mac"
 msgstr ""
 
-#: readelf.c:3197
+#: readelf.c:3224
 msgid ", <unknown MeP cpu type>"
 msgstr ""
 
-#: readelf.c:3207
+#: readelf.c:3234
 msgid "<unknown MeP copro type>"
 msgstr ""
 
-#: readelf.c:3218
+#: readelf.c:3245
 #, c-format
 msgid ", unknown flags bits: %#x"
 msgstr ""
 
-#: readelf.c:3227
+#: readelf.c:3254
 msgid ", relocatable"
 msgstr ""
 
-#: readelf.c:3230
+#: readelf.c:3257
 msgid ", relocatable-lib"
 msgstr ""
 
-#: readelf.c:3312
+#: readelf.c:3339
 msgid ", unknown v850 architecture variant"
 msgstr ""
 
-#: readelf.c:3378
+#: readelf.c:3405
 msgid ", unknown CPU"
 msgstr ""
 
-#: readelf.c:3393
+#: readelf.c:3420
 msgid ", unknown ABI"
 msgstr ""
 
-#: readelf.c:3418 readelf.c:3474
+#: readelf.c:3445 readelf.c:3513
 msgid ", unknown ISA"
 msgstr ""
 
-#: readelf.c:3584
+#: readelf.c:3623
 #, c-format
 msgid "Unrecognised IA64 VMS Command Code: %x\n"
 msgstr ""
 
-#: readelf.c:3648
+#: readelf.c:3687
 msgid ": architecture variant: "
 msgstr ""
 
-#: readelf.c:3667
+#: readelf.c:3706
 msgid ": unknown"
 msgstr ""
 
-#: readelf.c:3671
+#: readelf.c:3710
 msgid ": unknown extra flag bits also present"
 msgstr ""
 
-#: readelf.c:3720
+#: readelf.c:3760
 msgid "Standalone App"
 msgstr ""
 
-#: readelf.c:3729
+#: readelf.c:3769
 msgid "Bare-metal C6000"
 msgstr ""
 
-#: readelf.c:3739 readelf.c:4644 readelf.c:4660 readelf.c:16757 readelf.c:16797
+#: readelf.c:3779 readelf.c:4699 readelf.c:4715 readelf.c:16828 readelf.c:16868
 #, c-format
 msgid "<unknown: %x>"
 msgstr ""
 
 #. This message is probably going to be displayed in a 15
 #. character wide field, so put the hex value first.
-#: readelf.c:4274
+#: readelf.c:4329
 #, c-format
 msgid "%08x: <unknown>"
 msgstr ""
 
-#: readelf.c:4332
+#: readelf.c:4387
 #, c-format
 msgid "Usage: readelf <option(s)> elf-file(s)\n"
 msgstr ""
 
-#: readelf.c:4333
+#: readelf.c:4388
 #, c-format
 msgid " Display information about the contents of ELF format files\n"
 msgstr ""
 
-#: readelf.c:4334
+#: readelf.c:4389
 #, c-format
 msgid ""
 " Options are:\n"
@@ -6994,7 +6581,7 @@ msgid ""
 "                         Display the contents of DWARF debug sections\n"
 msgstr ""
 
-#: readelf.c:4368
+#: readelf.c:4423
 #, c-format
 msgid ""
 "  --dwarf-depth=N        Do not display DIEs at depth N or greater\n"
@@ -7002,14 +6589,14 @@ msgid ""
 "                         or deeper\n"
 msgstr ""
 
-#: readelf.c:4373
+#: readelf.c:4428
 #, c-format
 msgid ""
 "  -i --instruction-dump=<number|name>\n"
 "                         Disassemble the contents of section <number|name>\n"
 msgstr ""
 
-#: readelf.c:4377
+#: readelf.c:4432
 #, c-format
 msgid ""
 "  -I --histogram         Display histogram of bucket list lengths\n"
@@ -7019,553 +6606,553 @@ msgid ""
 "  -v --version           Display the version number of readelf\n"
 msgstr ""
 
-#: readelf.c:4406 readelf.c:4437 readelf.c:4441
+#: readelf.c:4461 readelf.c:4492 readelf.c:4496
 msgid "Out of memory allocating dump request table.\n"
 msgstr ""
 
-#: readelf.c:4618
+#: readelf.c:4673
 #, c-format
 msgid "Invalid option '-%c'\n"
 msgstr ""
 
-#: readelf.c:4640 readelf.c:4656 readelf.c:10210
+#: readelf.c:4695 readelf.c:4711 readelf.c:10280
 msgid "none"
 msgstr ""
 
-#: readelf.c:4657
+#: readelf.c:4712
 msgid "2's complement, little endian"
 msgstr ""
 
-#: readelf.c:4658
+#: readelf.c:4713
 msgid "2's complement, big endian"
 msgstr ""
 
-#: readelf.c:4678
+#: readelf.c:4733
 msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
 msgstr ""
 
-#: readelf.c:4688
+#: readelf.c:4743
 #, c-format
 msgid "ELF Header:\n"
 msgstr ""
 
-#: readelf.c:4689
+#: readelf.c:4744
 #, c-format
 msgid "  Magic:   "
 msgstr ""
 
-#: readelf.c:4693
+#: readelf.c:4748
 #, c-format
 msgid "  Class:                             %s\n"
 msgstr ""
 
-#: readelf.c:4695
+#: readelf.c:4750
 #, c-format
 msgid "  Data:                              %s\n"
 msgstr ""
 
-#: readelf.c:4697
+#: readelf.c:4752
 #, c-format
 msgid "  Version:                           %d %s\n"
 msgstr ""
 
-#: readelf.c:4702
+#: readelf.c:4757
 #, c-format
 msgid "<unknown: %lx>"
 msgstr ""
 
-#: readelf.c:4704
+#: readelf.c:4759
 #, c-format
 msgid "  OS/ABI:                            %s\n"
 msgstr ""
 
-#: readelf.c:4706
+#: readelf.c:4761
 #, c-format
 msgid "  ABI Version:                       %d\n"
 msgstr ""
 
-#: readelf.c:4708
+#: readelf.c:4763
 #, c-format
 msgid "  Type:                              %s\n"
 msgstr ""
 
-#: readelf.c:4710
+#: readelf.c:4765
 #, c-format
 msgid "  Machine:                           %s\n"
 msgstr ""
 
-#: readelf.c:4712
+#: readelf.c:4767
 #, c-format
 msgid "  Version:                           0x%lx\n"
 msgstr ""
 
-#: readelf.c:4715
+#: readelf.c:4770
 #, c-format
 msgid "  Entry point address:               "
 msgstr ""
 
-#: readelf.c:4717
+#: readelf.c:4772
 #, c-format
 msgid ""
 "\n"
 "  Start of program headers:          "
 msgstr ""
 
-#: readelf.c:4719
+#: readelf.c:4774
 #, c-format
 msgid ""
 " (bytes into file)\n"
 "  Start of section headers:          "
 msgstr ""
 
-#: readelf.c:4721
+#: readelf.c:4776
 #, c-format
 msgid " (bytes into file)\n"
 msgstr ""
 
-#: readelf.c:4723
+#: readelf.c:4778
 #, c-format
 msgid "  Flags:                             0x%lx%s\n"
 msgstr ""
 
-#: readelf.c:4726
+#: readelf.c:4781
 #, c-format
 msgid "  Size of this header:               %ld (bytes)\n"
 msgstr ""
 
-#: readelf.c:4728
+#: readelf.c:4783
 #, c-format
 msgid "  Size of program headers:           %ld (bytes)\n"
 msgstr ""
 
-#: readelf.c:4730
+#: readelf.c:4785
 #, c-format
 msgid "  Number of program headers:         %ld"
 msgstr ""
 
-#: readelf.c:4737
+#: readelf.c:4792
 #, c-format
 msgid "  Size of section headers:           %ld (bytes)\n"
 msgstr ""
 
-#: readelf.c:4739
+#: readelf.c:4794
 #, c-format
 msgid "  Number of section headers:         %ld"
 msgstr ""
 
-#: readelf.c:4744
+#: readelf.c:4799
 #, c-format
 msgid "  Section header string table index: %ld"
 msgstr ""
 
-#: readelf.c:4751
+#: readelf.c:4806
 #, c-format
 msgid " <corrupt: out of range>"
 msgstr ""
 
-#: readelf.c:4791 readelf.c:4838
+#: readelf.c:4846 readelf.c:4893
 msgid ""
 "The e_phentsize field in the ELF header is less than the size of an ELF "
 "program header\n"
 msgstr ""
 
-#: readelf.c:4795 readelf.c:4842
+#: readelf.c:4850 readelf.c:4897
 msgid ""
 "The e_phentsize field in the ELF header is larger than the size of an ELF "
 "program header\n"
 msgstr ""
 
-#: readelf.c:4798 readelf.c:4845
+#: readelf.c:4853 readelf.c:4900
 msgid "program headers"
 msgstr ""
 
-#: readelf.c:4884
+#: readelf.c:4939
 #, c-format
 msgid "Too many program headers - %#x - the file is not that big\n"
 msgstr ""
 
-#: readelf.c:4893
+#: readelf.c:4948
 #, c-format
 msgid "Out of memory reading %u program headers\n"
 msgstr ""
 
-#: readelf.c:4924
+#: readelf.c:4979
 msgid ""
 "possibly corrupt ELF header - it has a non-zero program header offset, but "
 "no program headers\n"
 msgstr ""
 
-#: readelf.c:4929
+#: readelf.c:4984
 #, c-format
 msgid ""
 "\n"
 "There are no program headers in this file.\n"
 msgstr ""
 
-#: readelf.c:4935
+#: readelf.c:4990
 #, c-format
 msgid ""
 "\n"
 "Elf file type is %s\n"
 msgstr ""
 
-#: readelf.c:4936
+#: readelf.c:4991
 #, c-format
 msgid "Entry point 0x%s\n"
 msgstr ""
 
-#: readelf.c:4937
+#: readelf.c:4992
 #, c-format
 msgid "There is %d program header, starting at offset %s\n"
 msgid_plural "There are %d program headers, starting at offset %s\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:4950 readelf.c:4952
+#: readelf.c:5005 readelf.c:5007
 #, c-format
 msgid ""
 "\n"
 "Program Headers:\n"
 msgstr ""
 
-#: readelf.c:4956
+#: readelf.c:5011
 #, c-format
 msgid ""
 "  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align\n"
 msgstr ""
 
-#: readelf.c:4959
+#: readelf.c:5014
 #, c-format
 msgid ""
 "  Type           Offset   VirtAddr           PhysAddr           FileSiz  "
 "MemSiz   Flg Align\n"
 msgstr ""
 
-#: readelf.c:4963
+#: readelf.c:5018
 #, c-format
 msgid "  Type           Offset             VirtAddr           PhysAddr\n"
 msgstr ""
 
-#: readelf.c:4965
+#: readelf.c:5020
 #, c-format
 msgid "                 FileSiz            MemSiz              Flags  Align\n"
 msgstr ""
 
-#: readelf.c:5064
+#: readelf.c:5119
 msgid "LOAD segments must be sorted in order of increasing VirtAddr\n"
 msgstr ""
 
-#: readelf.c:5067
+#: readelf.c:5122
 msgid "the segment's file size is larger than its memory size\n"
 msgstr ""
 
-#: readelf.c:5074
+#: readelf.c:5129
 msgid "the PHDR segment must occur before any LOAD segment\n"
 msgstr ""
 
-#: readelf.c:5086
+#: readelf.c:5141
 msgid "the PHDR segment is not covered by a LOAD segment\n"
 msgstr ""
 
-#: readelf.c:5092
+#: readelf.c:5147
 msgid "more than one dynamic segment\n"
 msgstr ""
 
-#: readelf.c:5111
+#: readelf.c:5166
 msgid "no .dynamic section in the dynamic segment\n"
 msgstr ""
 
-#: readelf.c:5126
+#: readelf.c:5181
 msgid "the .dynamic section is not contained within the dynamic segment\n"
 msgstr ""
 
-#: readelf.c:5129
+#: readelf.c:5184
 msgid "the .dynamic section is not the first section in the dynamic segment.\n"
 msgstr ""
 
-#: readelf.c:5139
+#: readelf.c:5194
 msgid "the dynamic segment offset + size exceeds the size of the file\n"
 msgstr ""
 
-#: readelf.c:5147
+#: readelf.c:5202
 msgid "Unable to find program interpreter name\n"
 msgstr ""
 
-#: readelf.c:5154
+#: readelf.c:5209
 msgid ""
 "Internal error: failed to create format string to display program "
 "interpreter\n"
 msgstr ""
 
-#: readelf.c:5158
+#: readelf.c:5213
 msgid "Unable to read program interpreter name\n"
 msgstr ""
 
-#: readelf.c:5161
+#: readelf.c:5216
 #, c-format
 msgid "      [Requesting program interpreter: %s]\n"
 msgstr ""
 
-#: readelf.c:5172
+#: readelf.c:5227
 #, c-format
 msgid ""
 "\n"
 " Section to Segment mapping:\n"
 msgstr ""
 
-#: readelf.c:5173
+#: readelf.c:5228
 #, c-format
 msgid "  Segment Sections...\n"
 msgstr ""
 
-#: readelf.c:5209
+#: readelf.c:5264
 msgid "Cannot interpret virtual addresses without program headers.\n"
 msgstr ""
 
-#: readelf.c:5225
+#: readelf.c:5280
 #, c-format
 msgid "Virtual address 0x%lx not located in any PT_LOAD segment.\n"
 msgstr ""
 
-#: readelf.c:5250 readelf.c:5314
+#: readelf.c:5305 readelf.c:5369
 msgid ""
 "The e_shentsize field in the ELF header is less than the size of an ELF "
 "section header\n"
 msgstr ""
 
-#: readelf.c:5254 readelf.c:5319
+#: readelf.c:5309 readelf.c:5374
 msgid ""
 "The e_shentsize field in the ELF header is larger than the size of an ELF "
 "section header\n"
 msgstr ""
 
-#: readelf.c:5258 readelf.c:5324
+#: readelf.c:5313 readelf.c:5379
 msgid "section headers"
 msgstr ""
 
-#: readelf.c:5268 readelf.c:5334
+#: readelf.c:5323 readelf.c:5389
 #, c-format
 msgid "Out of memory reading %u section headers\n"
 msgstr ""
 
-#: readelf.c:5287 readelf.c:5353
+#: readelf.c:5342 readelf.c:5408
 #, c-format
 msgid "Section %u has an out of range sh_link value of %u\n"
 msgstr ""
 
-#: readelf.c:5289 readelf.c:5355
+#: readelf.c:5344 readelf.c:5410
 #, c-format
 msgid "Section %u has an out of range sh_info value of %u\n"
 msgstr ""
 
-#: readelf.c:5384 readelf.c:5497
+#: readelf.c:5439 readelf.c:5552
 #, c-format
 msgid "Section %s has an invalid sh_entsize of 0x%lx\n"
 msgstr ""
 
-#: readelf.c:5392 readelf.c:5505
+#: readelf.c:5447 readelf.c:5560
 #, c-format
 msgid "Section %s has an invalid sh_size of 0x%lx\n"
 msgstr ""
 
-#: readelf.c:5402 readelf.c:5515
+#: readelf.c:5457 readelf.c:5570
 #, c-format
 msgid ""
 "Size (0x%lx) of section %s is not a multiple of its sh_entsize (0x%lx)\n"
 msgstr ""
 
-#: readelf.c:5410 readelf.c:5523
+#: readelf.c:5465 readelf.c:5578
 msgid "symbols"
 msgstr ""
 
-#: readelf.c:5424 readelf.c:5537
+#: readelf.c:5479 readelf.c:5592
 msgid "symbol table section indicies"
 msgstr ""
 
-#: readelf.c:5430 readelf.c:5543
+#: readelf.c:5485 readelf.c:5598
 #, c-format
 msgid "Index section %s has an sh_size of 0x%lx - expected 0x%lx\n"
 msgstr ""
 
-#: readelf.c:5443 readelf.c:5556
+#: readelf.c:5498 readelf.c:5611
 #, c-format
 msgid "Out of memory reading %lu symbols\n"
 msgstr ""
 
-#: readelf.c:5737 readelf.c:5812 readelf.c:5830 readelf.c:5848
+#: readelf.c:5792 readelf.c:5867 readelf.c:5885 readelf.c:5903
 msgid "Internal error: not enough buffer room for section flag info"
 msgstr ""
 
-#: readelf.c:5855
+#: readelf.c:5910
 #, c-format
 msgid "UNKNOWN (%*.*lx)"
 msgstr ""
 
-#: readelf.c:5874 readelf.c:5889
+#: readelf.c:5929 readelf.c:5944
 msgid "Compressed section is too small even for a compression header\n"
 msgstr ""
 
-#: readelf.c:5913
+#: readelf.c:5968
 msgid ""
 "possibly corrupt ELF file header - it has a non-zero section header offset, "
 "but no section headers\n"
 msgstr ""
 
-#: readelf.c:5918
+#: readelf.c:5973
 #, c-format
 msgid ""
 "\n"
 "There are no sections in this file.\n"
 msgstr ""
 
-#: readelf.c:5924
+#: readelf.c:5979
 #, c-format
 msgid "There is %d section header, starting at offset 0x%lx:\n"
 msgid_plural "There are %d section headers, starting at offset 0x%lx:\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:5953 readelf.c:6728 readelf.c:7174 readelf.c:7583 readelf.c:8026
-#: readelf.c:9130 readelf.c:11631 readelf.c:13597 readelf.c:17458
+#: readelf.c:6008 readelf.c:6783 readelf.c:7229 readelf.c:7638 readelf.c:8081
+#: readelf.c:9185 readelf.c:11701 readelf.c:13668 readelf.c:17529
 msgid "string table"
 msgstr ""
 
 #. Note: coded this way so that there is a single string for        translation.
-#: readelf.c:6024
+#: readelf.c:6079
 #, c-format
 msgid "Section %d has invalid sh_entsize of %s\n"
 msgstr ""
 
-#: readelf.c:6025
+#: readelf.c:6080
 #, c-format
 msgid "(Using the expected size of %u for the rest of this dump)\n"
 msgstr ""
 
-#: readelf.c:6046
+#: readelf.c:6101
 msgid "File contains multiple dynamic symbol tables\n"
 msgstr ""
 
-#: readelf.c:6058
+#: readelf.c:6113
 msgid "File contains multiple dynamic string tables\n"
 msgstr ""
 
-#: readelf.c:6064
+#: readelf.c:6119
 msgid "dynamic strings"
 msgstr ""
 
-#: readelf.c:6154
+#: readelf.c:6209
 #, c-format
 msgid ""
 "\n"
 "Section Headers:\n"
 msgstr ""
 
-#: readelf.c:6156
+#: readelf.c:6211
 #, c-format
 msgid ""
 "\n"
 "Section Header:\n"
 msgstr ""
 
-#: readelf.c:6162 readelf.c:6173 readelf.c:6184
+#: readelf.c:6217 readelf.c:6228 readelf.c:6239
 #, c-format
 msgid "  [Nr] Name\n"
 msgstr ""
 
-#: readelf.c:6163
+#: readelf.c:6218
 #, c-format
 msgid "       Type            Addr     Off    Size   ES   Lk Inf Al\n"
 msgstr ""
 
-#: readelf.c:6167
+#: readelf.c:6222
 #, c-format
 msgid ""
 "  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk "
 "Inf Al\n"
 msgstr ""
 
-#: readelf.c:6174
+#: readelf.c:6229
 #, c-format
 msgid "       Type            Address          Off    Size   ES   Lk Inf Al\n"
 msgstr ""
 
-#: readelf.c:6178
+#: readelf.c:6233
 #, c-format
 msgid ""
 "  [Nr] Name              Type            Address          Off    Size   ES "
 "Flg Lk Inf Al\n"
 msgstr ""
 
-#: readelf.c:6185
+#: readelf.c:6240
 #, c-format
 msgid "       Type              Address          Offset            Link\n"
 msgstr ""
 
-#: readelf.c:6186
+#: readelf.c:6241
 #, c-format
 msgid "       Size              EntSize          Info              Align\n"
 msgstr ""
 
-#: readelf.c:6190
+#: readelf.c:6245
 #, c-format
 msgid "  [Nr] Name              Type             Address           Offset\n"
 msgstr ""
 
-#: readelf.c:6191
+#: readelf.c:6246
 #, c-format
 msgid "       Size              EntSize          Flags  Link  Info  Align\n"
 msgstr ""
 
-#: readelf.c:6196
+#: readelf.c:6251
 #, c-format
 msgid "       Flags\n"
 msgstr ""
 
-#: readelf.c:6218
+#: readelf.c:6273
 #, c-format
 msgid "[%2u]: Link field (%u) should index a symtab section.\n"
 msgstr ""
 
-#: readelf.c:6231
+#: readelf.c:6286
 #, c-format
 msgid "[%2u]: Link field (%u) should index a string section.\n"
 msgstr ""
 
-#: readelf.c:6239 readelf.c:6250
+#: readelf.c:6294 readelf.c:6305
 #, c-format
 msgid "[%2u]: Unexpected value (%u) in link field.\n"
 msgstr ""
 
-#: readelf.c:6281
+#: readelf.c:6336
 #, c-format
 msgid "[%2u]: Info field (%u) should index a relocatable section.\n"
 msgstr ""
 
-#: readelf.c:6293 readelf.c:6320
+#: readelf.c:6348 readelf.c:6375
 #, c-format
 msgid "[%2u]: Unexpected value (%u) in info field.\n"
 msgstr ""
 
-#: readelf.c:6315
+#: readelf.c:6370
 #, c-format
 msgid "[%2u]: Expected link to another section in info field"
 msgstr ""
 
-#: readelf.c:6330
+#: readelf.c:6385
 #, c-format
 msgid "Size of section %u is larger than the entire file!\n"
 msgstr ""
 
-#: readelf.c:6399
+#: readelf.c:6454
 #, c-format
 msgid "section %u: sh_link value of %u is larger than the number of sections\n"
 msgstr ""
 
-#: readelf.c:6501
+#: readelf.c:6556
 msgid "compression header"
 msgstr ""
 
-#: readelf.c:6510
+#: readelf.c:6565
 #, c-format
 msgid "       [<unknown>: 0x%x], "
 msgstr ""
@@ -7573,7 +7160,7 @@ msgstr ""
 #. The ordering of the letters shown here matches the ordering of the
 #. corresponding SHF_xxx values, and hence the order in which these
 #. letters will be displayed to the user.
-#: readelf.c:6524
+#: readelf.c:6579
 #, c-format
 msgid ""
 "Key to Flags:\n"
@@ -7583,276 +7170,276 @@ msgid ""
 "  "
 msgstr ""
 
-#: readelf.c:6531
+#: readelf.c:6586
 #, c-format
 msgid "l (large), "
 msgstr ""
 
-#: readelf.c:6533
+#: readelf.c:6588
 #, c-format
 msgid "y (purecode), "
 msgstr ""
 
-#: readelf.c:6535
+#: readelf.c:6590
 #, c-format
 msgid "v (VLE), "
 msgstr ""
 
-#: readelf.c:6552
+#: readelf.c:6607
 #, c-format
 msgid "[0x%x: "
 msgstr ""
 
-#: readelf.c:6594
+#: readelf.c:6649
 #, c-format
 msgid ""
 "\n"
 "There are no sections to group in this file.\n"
 msgstr ""
 
-#: readelf.c:6601
+#: readelf.c:6656
 msgid "Section headers are not available!\n"
 msgstr ""
 
-#: readelf.c:6611
+#: readelf.c:6666
 #, c-format
 msgid "Out of memory reading %u section group headers\n"
 msgstr ""
 
-#: readelf.c:6627
+#: readelf.c:6682
 #, c-format
 msgid ""
 "\n"
 "There are no section groups in this file.\n"
 msgstr ""
 
-#: readelf.c:6636
+#: readelf.c:6691
 #, c-format
 msgid "Out of memory reading %lu groups\n"
 msgstr ""
 
-#: readelf.c:6666
+#: readelf.c:6721
 #, c-format
 msgid "Bad sh_link in group section `%s'\n"
 msgstr ""
 
-#: readelf.c:6680
+#: readelf.c:6735
 #, c-format
 msgid "Corrupt header in group section `%s'\n"
 msgstr ""
 
-#: readelf.c:6686 readelf.c:6697
+#: readelf.c:6741 readelf.c:6752
 #, c-format
 msgid "Bad sh_info in group section `%s'\n"
 msgstr ""
 
-#: readelf.c:6738
+#: readelf.c:6793
 #, c-format
 msgid ""
 "Section %s has sh_entsize (0x%lx) which is larger than its size (0x%lx)\n"
 msgstr ""
 
-#: readelf.c:6747
+#: readelf.c:6802
 msgid "section data"
 msgstr ""
 
-#: readelf.c:6758
+#: readelf.c:6813
 #, c-format
 msgid ""
 "\n"
 "%sgroup section [%5u] `%s' [%s] contains %u sections:\n"
 msgstr ""
 
-#: readelf.c:6761
+#: readelf.c:6816
 #, c-format
 msgid "   [Index]    Name\n"
 msgstr ""
 
-#: readelf.c:6779
+#: readelf.c:6834
 #, c-format
 msgid "section [%5u] in group section [%5u] > maximum section [%5u]\n"
 msgstr ""
 
-#: readelf.c:6782
+#: readelf.c:6837
 msgid ""
 "Further error messages about overlarge group section indicies suppressed\n"
 msgstr ""
 
-#: readelf.c:6795
+#: readelf.c:6850
 #, c-format
 msgid "section [%5u] in group section [%5u] already in group section [%5u]\n"
 msgstr ""
 
-#: readelf.c:6799
+#: readelf.c:6854
 msgid ""
 "Further error messages about already contained group sections suppressed\n"
 msgstr ""
 
-#: readelf.c:6811
+#: readelf.c:6866
 #, c-format
 msgid "section 0 in group section [%5u]\n"
 msgstr ""
 
-#: readelf.c:6880
+#: readelf.c:6935
 msgid "dynamic section image fixups"
 msgstr ""
 
-#: readelf.c:6888
+#: readelf.c:6943
 #, c-format
 msgid "corrupt library name index of 0x%lx found in dynamic entry"
 msgstr ""
 
-#: readelf.c:6892
+#: readelf.c:6947
 #, c-format
 msgid ""
 "\n"
 "Image fixups for needed library #%d: %s - ident: %lx\n"
 msgstr ""
 
-#: readelf.c:6895
+#: readelf.c:6950
 #, c-format
 msgid "Seg Offset           Type                             SymVec DataType\n"
 msgstr ""
 
-#: readelf.c:6928
+#: readelf.c:6983
 msgid "dynamic section image relocations"
 msgstr ""
 
-#: readelf.c:6932
+#: readelf.c:6987
 #, c-format
 msgid ""
 "\n"
 "Image relocs\n"
 msgstr ""
 
-#: readelf.c:6934
+#: readelf.c:6989
 #, c-format
 msgid ""
 "Seg Offset   Type                            Addend            Seg Sym Off\n"
 msgstr ""
 
-#: readelf.c:6990
+#: readelf.c:7045
 msgid "dynamic string section"
 msgstr ""
 
-#: readelf.c:7091
+#: readelf.c:7146
 #, c-format
 msgid ""
 "\n"
 "'%s' relocation section at offset 0x%lx contains %ld bytes:\n"
 msgstr ""
 
-#: readelf.c:7108
+#: readelf.c:7163
 #, c-format
 msgid ""
 "\n"
 "There are no dynamic relocations in this file.\n"
 msgstr ""
 
-#: readelf.c:7133
+#: readelf.c:7188
 #, c-format
 msgid ""
 "\n"
 "Relocation section "
 msgstr ""
 
-#: readelf.c:7141
+#: readelf.c:7196
 #, c-format
 msgid " at offset 0x%lx contains %lu entry:\n"
 msgid_plural " at offset 0x%lx contains %lu entries:\n"
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:7202
+#: readelf.c:7257
 #, c-format
 msgid ""
 "\n"
 "There are no static relocations in this file."
 msgstr ""
 
-#: readelf.c:7203
+#: readelf.c:7258
 #, c-format
 msgid ""
 "\n"
 "To see the dynamic relocations add --use-dynamic to the command line.\n"
 msgstr ""
 
-#: readelf.c:7209
+#: readelf.c:7264
 #, c-format
 msgid ""
 "\n"
 "There are no relocations in this file.\n"
 msgstr ""
 
-#: readelf.c:7379
+#: readelf.c:7434
 #, c-format
 msgid "Invalid offset %lx in table entry %ld\n"
 msgstr ""
 
-#: readelf.c:7397
+#: readelf.c:7452
 #, c-format
 msgid "\tUnknown version.\n"
 msgstr ""
 
-#: readelf.c:7460 readelf.c:7884
+#: readelf.c:7515 readelf.c:7939
 msgid "unwind table"
 msgstr ""
 
-#: readelf.c:7510
+#: readelf.c:7565
 #, c-format
 msgid "Skipping unknown relocation type: %u\n"
 msgstr ""
 
-#: readelf.c:7517
+#: readelf.c:7572
 #, c-format
 msgid "Skipping unexpected relocation type: %s\n"
 msgstr ""
 
-#: readelf.c:7526
+#: readelf.c:7581
 #, c-format
 msgid "Skipping reloc with overlarge offset: %lx\n"
 msgstr ""
 
-#: readelf.c:7577 readelf.c:8020
+#: readelf.c:7632 readelf.c:8075
 msgid "Multiple auxillary string tables encountered\n"
 msgstr ""
 
-#: readelf.c:7591 readelf.c:8034 readelf.c:9138
+#: readelf.c:7646 readelf.c:8089 readelf.c:9193
 #, c-format
 msgid ""
 "\n"
 "There are no unwind sections in this file.\n"
 msgstr ""
 
-#: readelf.c:7665
+#: readelf.c:7720
 #, c-format
 msgid ""
 "\n"
 "Could not find unwind info section for "
 msgstr ""
 
-#: readelf.c:7677
+#: readelf.c:7732
 msgid "unwind info"
 msgstr ""
 
-#: readelf.c:7680
+#: readelf.c:7735
 #, c-format
 msgid ""
 "\n"
 "Unwind section "
 msgstr ""
 
-#: readelf.c:7687
+#: readelf.c:7742
 #, c-format
 msgid " at offset 0x%lx contains %lu entries:\n"
 msgstr ""
 
-#: readelf.c:7966
+#: readelf.c:8021
 #, c-format
 msgid "Skipping unexpected relocation type %s\n"
 msgstr ""
 
-#: readelf.c:8042 readelf.c:9145
+#: readelf.c:8097 readelf.c:9200
 #, c-format
 msgid ""
 "\n"
@@ -7863,188 +7450,188 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:8181
+#: readelf.c:8236
 msgid "unwind data"
 msgstr ""
 
-#: readelf.c:8254
+#: readelf.c:8309
 #, c-format
 msgid "Skipping unexpected relocation at offset 0x%lx\n"
 msgstr ""
 
-#: readelf.c:8276
+#: readelf.c:8331
 #, c-format
 msgid "Unknown section relocation type %d encountered\n"
 msgstr ""
 
-#: readelf.c:8284
+#: readelf.c:8339
 #, c-format
 msgid "Bad symbol index in unwind relocation (%lu > %lu)\n"
 msgstr ""
 
-#: readelf.c:8299
+#: readelf.c:8354
 #, c-format
 msgid "Skipping unknown ARM relocation type: %d\n"
 msgstr ""
 
-#: readelf.c:8309
+#: readelf.c:8364
 #, c-format
 msgid "Skipping unexpected ARM relocation type %s\n"
 msgstr ""
 
-#: readelf.c:8318
+#: readelf.c:8373
 #, c-format
 msgid "Skipping unknown C6000 relocation type: %d\n"
 msgstr ""
 
-#: readelf.c:8328
+#: readelf.c:8383
 #, c-format
 msgid "Skipping unexpected C6000 relocation type %s\n"
 msgstr ""
 
 #. This function currently only supports ARM and TI unwinders.
-#: readelf.c:8337
+#: readelf.c:8392
 msgid "Only TI and ARM unwinders are currently supported\n"
 msgstr ""
 
-#: readelf.c:8400
+#: readelf.c:8455
 #, c-format
 msgid "[Truncated opcode]\n"
 msgstr ""
 
-#: readelf.c:8448 readelf.c:8664
+#: readelf.c:8503 readelf.c:8719
 #, c-format
 msgid "Refuse to unwind"
 msgstr ""
 
-#: readelf.c:8471
+#: readelf.c:8526
 #, c-format
 msgid "     [Reserved]"
 msgstr ""
 
-#: readelf.c:8499
+#: readelf.c:8554
 #, c-format
 msgid "     finish"
 msgstr ""
 
-#: readelf.c:8504 readelf.c:8597
+#: readelf.c:8559 readelf.c:8652
 #, c-format
 msgid "[Spare]"
 msgstr ""
 
-#: readelf.c:8538
+#: readelf.c:8593
 msgid "corrupt change to vsp"
 msgstr ""
 
-#: readelf.c:8619 readelf.c:8769
+#: readelf.c:8674 readelf.c:8824
 #, c-format
 msgid "     [unsupported opcode]"
 msgstr ""
 
-#: readelf.c:8712
+#: readelf.c:8767
 #, c-format
 msgid "pop frame {"
 msgstr ""
 
-#: readelf.c:8723
+#: readelf.c:8778
 msgid "[pad]"
 msgstr ""
 
-#: readelf.c:8751
+#: readelf.c:8806
 msgid "Corrupt stack pointer adjustment detected\n"
 msgstr ""
 
-#: readelf.c:8758
+#: readelf.c:8813
 #, c-format
 msgid "sp = sp + %ld"
 msgstr ""
 
-#: readelf.c:8828
+#: readelf.c:8883
 #, c-format
 msgid "  Personality routine: "
 msgstr ""
 
-#: readelf.c:8860
+#: readelf.c:8915
 #, c-format
 msgid "  [Truncated data]\n"
 msgstr ""
 
-#: readelf.c:8884
+#: readelf.c:8939
 #, c-format
 msgid "Corrupt ARM compact model table entry: %x \n"
 msgstr ""
 
-#: readelf.c:8889
+#: readelf.c:8944
 #, c-format
 msgid "  Compact model index: %d\n"
 msgstr ""
 
-#: readelf.c:8915
+#: readelf.c:8970
 msgid "Unknown ARM compact model index encountered\n"
 msgstr ""
 
-#: readelf.c:8916
+#: readelf.c:8971
 #, c-format
 msgid "  [reserved]\n"
 msgstr ""
 
-#: readelf.c:8931
+#: readelf.c:8986
 #, c-format
 msgid "  Restore stack from frame pointer\n"
 msgstr ""
 
-#: readelf.c:8933
+#: readelf.c:8988
 #, c-format
 msgid "  Stack increment %d\n"
 msgstr ""
 
-#: readelf.c:8934
+#: readelf.c:8989
 #, c-format
 msgid "  Registers restored: "
 msgstr ""
 
-#: readelf.c:8939
+#: readelf.c:8994
 #, c-format
 msgid "  Return register: %s\n"
 msgstr ""
 
-#: readelf.c:8943
+#: readelf.c:8998
 #, c-format
 msgid "  [reserved (%d)]\n"
 msgstr ""
 
-#: readelf.c:8947
+#: readelf.c:9002
 #, c-format
 msgid ""
 "Unsupported architecture type %d encountered when decoding unwind table\n"
 msgstr ""
 
-#: readelf.c:9002
+#: readelf.c:9057
 #, c-format
 msgid "corrupt index table entry: %x\n"
 msgstr ""
 
-#: readelf.c:9042
+#: readelf.c:9097
 #, c-format
 msgid "Unwind entry contains corrupt offset (0x%lx) into section %s\n"
 msgstr ""
 
-#: readelf.c:9058
+#: readelf.c:9113
 #, c-format
 msgid "Could not locate .ARM.extab section containing 0x%lx.\n"
 msgstr ""
 
-#: readelf.c:9103
+#: readelf.c:9158
 #, c-format
 msgid ""
 "Unsupported architecture type %d encountered when processing unwind table\n"
 msgstr ""
 
-#: readelf.c:9125
+#: readelf.c:9180
 msgid "Multiple string tables found in file.\n"
 msgstr ""
 
-#: readelf.c:9191
+#: readelf.c:9246
 #, c-format
 msgid ""
 "\n"
@@ -8052,37 +7639,37 @@ msgid ""
 "supported.\n"
 msgstr ""
 
-#: readelf.c:9203
+#: readelf.c:9258
 #, c-format
 msgid "NONE"
 msgstr ""
 
-#: readelf.c:9228
+#: readelf.c:9283
 #, c-format
 msgid "Interface Version: %s"
 msgstr ""
 
 #. Note: coded this way so that there is a single string for translation.
-#: readelf.c:9234
+#: readelf.c:9289
 #, c-format
 msgid "<corrupt: %s>"
 msgstr ""
 
-#: readelf.c:9252
+#: readelf.c:9307
 #, c-format
 msgid "Time Stamp: %s"
 msgstr ""
 
-#: readelf.c:9430 readelf.c:9478
+#: readelf.c:9485 readelf.c:9533
 msgid "dynamic section"
 msgstr ""
 
-#: readelf.c:9450 readelf.c:9499
+#: readelf.c:9505 readelf.c:9554
 #, c-format
 msgid "Out of memory allocating space for %lu dynamic entries\n"
 msgstr ""
 
-#: readelf.c:9559
+#: readelf.c:9614
 #, c-format
 msgid ""
 "\n"
@@ -8090,38 +7677,38 @@ msgid ""
 msgstr ""
 
 #. See PR 21379 for a reproducer.
-#: readelf.c:9597
+#: readelf.c:9652
 #, c-format
 msgid "Invalid DT_SYMTAB entry: %lx"
 msgstr ""
 
-#: readelf.c:9615
+#: readelf.c:9670
 msgid "Unable to determine the number of symbols to load\n"
 msgstr ""
 
-#: readelf.c:9651
+#: readelf.c:9706
 msgid "Unable to determine the length of the dynamic string table\n"
 msgstr ""
 
-#: readelf.c:9657
+#: readelf.c:9712
 msgid "dynamic string table"
 msgstr ""
 
-#: readelf.c:9679
+#: readelf.c:9734
 #, c-format
 msgid "Bad value (%d) for SYMINENT entry\n"
 msgstr ""
 
-#: readelf.c:9698
+#: readelf.c:9753
 msgid "symbol information"
 msgstr ""
 
-#: readelf.c:9705
+#: readelf.c:9760
 #, c-format
 msgid "Out of memory allocating %lu byte for dynamic symbol info\n"
 msgstr ""
 
-#: readelf.c:9724
+#: readelf.c:9779
 #, c-format
 msgid ""
 "\n"
@@ -8132,87 +7719,87 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:9731
+#: readelf.c:9786
 #, c-format
 msgid "  Tag        Type                         Name/Value\n"
 msgstr ""
 
-#: readelf.c:9765
+#: readelf.c:9820
 #, c-format
 msgid "Auxiliary library"
 msgstr ""
 
-#: readelf.c:9769
+#: readelf.c:9824
 #, c-format
 msgid "Filter library"
 msgstr ""
 
-#: readelf.c:9773
+#: readelf.c:9828
 #, c-format
 msgid "Configuration file"
 msgstr ""
 
-#: readelf.c:9777
+#: readelf.c:9832
 #, c-format
 msgid "Dependency audit library"
 msgstr ""
 
-#: readelf.c:9781
+#: readelf.c:9836
 #, c-format
 msgid "Audit library"
 msgstr ""
 
-#: readelf.c:9799 readelf.c:9827 readelf.c:9855
+#: readelf.c:9854 readelf.c:9882 readelf.c:9910
 #, c-format
 msgid "Flags:"
 msgstr ""
 
-#: readelf.c:9802 readelf.c:9830 readelf.c:9857
+#: readelf.c:9857 readelf.c:9885 readelf.c:9912
 #, c-format
 msgid " None\n"
 msgstr ""
 
-#: readelf.c:10048
+#: readelf.c:10118
 #, c-format
 msgid "Shared library: [%s]"
 msgstr ""
 
-#: readelf.c:10051
+#: readelf.c:10121
 #, c-format
 msgid " program interpreter"
 msgstr ""
 
-#: readelf.c:10055
+#: readelf.c:10125
 #, c-format
 msgid "Library soname: [%s]"
 msgstr ""
 
-#: readelf.c:10059
+#: readelf.c:10129
 #, c-format
 msgid "Library rpath: [%s]"
 msgstr ""
 
-#: readelf.c:10063
+#: readelf.c:10133
 #, c-format
 msgid "Library runpath: [%s]"
 msgstr ""
 
-#: readelf.c:10097
+#: readelf.c:10167
 #, c-format
 msgid " (bytes)\n"
 msgstr ""
 
-#: readelf.c:10127
+#: readelf.c:10197
 #, c-format
 msgid "Not needed object: [%s]\n"
 msgstr ""
 
-#: readelf.c:10152
+#: readelf.c:10222
 #, c-format
 msgid "<corrupt time val: %lx"
 msgstr ""
 
-#: readelf.c:10269
+#: readelf.c:10339
 #, c-format
 msgid ""
 "\n"
@@ -8223,71 +7810,71 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:10277
+#: readelf.c:10347
 #, c-format
 msgid "  Addr: 0x"
 msgstr ""
 
-#: readelf.c:10279 readelf.c:10415 readelf.c:10571
+#: readelf.c:10349 readelf.c:10485 readelf.c:10641
 #, c-format
 msgid "  Offset: %#08lx  Link: %u (%s)\n"
 msgstr ""
 
-#: readelf.c:10285
+#: readelf.c:10355
 msgid "version definition section"
 msgstr ""
 
-#: readelf.c:10314
+#: readelf.c:10384
 #, c-format
 msgid "  %#06lx: Rev: %d  Flags: %s"
 msgstr ""
 
-#: readelf.c:10317
+#: readelf.c:10387
 #, c-format
 msgid "  Index: %d  Cnt: %d  "
 msgstr ""
 
-#: readelf.c:10334
+#: readelf.c:10404
 #, c-format
 msgid "Name: %s\n"
 msgstr ""
 
-#: readelf.c:10336
+#: readelf.c:10406
 #, c-format
 msgid "Name index: %ld\n"
 msgstr ""
 
-#: readelf.c:10345
+#: readelf.c:10415
 #, c-format
 msgid "Invalid vda_next field of %lx\n"
 msgstr ""
 
-#: readelf.c:10365
+#: readelf.c:10435
 #, c-format
 msgid "  %#06lx: Parent %d: %s\n"
 msgstr ""
 
-#: readelf.c:10368
+#: readelf.c:10438
 #, c-format
 msgid "  %#06lx: Parent %d, name index: %ld\n"
 msgstr ""
 
-#: readelf.c:10373
+#: readelf.c:10443
 #, c-format
 msgid "  Version def aux past end of section\n"
 msgstr ""
 
-#: readelf.c:10380
+#: readelf.c:10450
 #, c-format
 msgid "Invalid vd_next field of %lx\n"
 msgstr ""
 
-#: readelf.c:10391
+#: readelf.c:10461
 #, c-format
 msgid "  Version definition past end of section\n"
 msgstr ""
 
-#: readelf.c:10406
+#: readelf.c:10476
 #, c-format
 msgid ""
 "\n"
@@ -8298,73 +7885,73 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:10413
+#: readelf.c:10483
 #, c-format
 msgid " Addr: 0x"
 msgstr ""
 
-#: readelf.c:10422
+#: readelf.c:10492
 msgid "Version Needs section"
 msgstr ""
 
-#: readelf.c:10447
+#: readelf.c:10517
 #, c-format
 msgid "  %#06lx: Version: %d"
 msgstr ""
 
-#: readelf.c:10450
+#: readelf.c:10520
 #, c-format
 msgid "  File: %s"
 msgstr ""
 
-#: readelf.c:10452
+#: readelf.c:10522
 #, c-format
 msgid "  File: %lx"
 msgstr ""
 
-#: readelf.c:10454
+#: readelf.c:10524
 #, c-format
 msgid "  Cnt: %d\n"
 msgstr ""
 
-#: readelf.c:10477
+#: readelf.c:10547
 #, c-format
 msgid "  %#06lx:   Name: %s"
 msgstr ""
 
-#: readelf.c:10480
+#: readelf.c:10550
 #, c-format
 msgid "  %#06lx:   Name index: %lx"
 msgstr ""
 
-#: readelf.c:10483
+#: readelf.c:10553
 #, c-format
 msgid "  Flags: %s  Version: %d\n"
 msgstr ""
 
-#: readelf.c:10489
+#: readelf.c:10559
 #, c-format
 msgid "Invalid vna_next field of %lx\n"
 msgstr ""
 
-#: readelf.c:10502
+#: readelf.c:10572
 msgid "Missing Version Needs auxillary information\n"
 msgstr ""
 
-#: readelf.c:10507
+#: readelf.c:10577
 #, c-format
 msgid "Invalid vn_next field of %lx\n"
 msgstr ""
 
-#: readelf.c:10517
+#: readelf.c:10587
 msgid "Missing Version Needs information\n"
 msgstr ""
 
-#: readelf.c:10555
+#: readelf.c:10625
 msgid "version string table"
 msgstr ""
 
-#: readelf.c:10562
+#: readelf.c:10632
 #, c-format
 msgid ""
 "\n"
@@ -8375,184 +7962,184 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:10569
+#: readelf.c:10639
 #, c-format
 msgid " Addr: "
 msgstr ""
 
-#: readelf.c:10580
+#: readelf.c:10650
 msgid "version symbol data"
 msgstr ""
 
-#: readelf.c:10600
+#: readelf.c:10670
 msgid "*invalid*"
 msgstr ""
 
-#: readelf.c:10608
+#: readelf.c:10678
 msgid "   0 (*local*)    "
 msgstr ""
 
-#: readelf.c:10612
+#: readelf.c:10682
 msgid "   1 (*global*)   "
 msgstr ""
 
-#: readelf.c:10623
+#: readelf.c:10693
 msgid "invalid index into symbol array\n"
 msgstr ""
 
-#: readelf.c:10645 readelf.c:11272
+#: readelf.c:10715 readelf.c:11342
 msgid "version need"
 msgstr ""
 
-#: readelf.c:10656
+#: readelf.c:10726
 msgid "version need aux (2)"
 msgstr ""
 
-#: readelf.c:10702 readelf.c:11220
+#: readelf.c:10772 readelf.c:11290
 msgid "version def"
 msgstr ""
 
-#: readelf.c:10730 readelf.c:11243
+#: readelf.c:10800 readelf.c:11313
 msgid "version def aux"
 msgstr ""
 
-#: readelf.c:10738
+#: readelf.c:10808
 msgid "*both*"
 msgstr ""
 
-#: readelf.c:10768
+#: readelf.c:10838
 #, c-format
 msgid ""
 "\n"
 "No version information found in this file.\n"
 msgstr ""
 
-#: readelf.c:10867
+#: readelf.c:10937
 #, c-format
 msgid "Unrecognized visibility value: %u"
 msgstr ""
 
-#: readelf.c:10928
+#: readelf.c:10998
 #, c-format
 msgid "Unrecognized IA64 VMS ST Function type: %d\n"
 msgstr ""
 
-#: readelf.c:10952
+#: readelf.c:11022
 #, c-format
 msgid "Unrecognized IA64 VMS ST Linkage: %d\n"
 msgstr ""
 
-#: readelf.c:10972
+#: readelf.c:11042
 #, c-format
 msgid "<localentry>: %d"
 msgstr ""
 
-#: readelf.c:11007
+#: readelf.c:11077
 #, c-format
 msgid "<other>: %x"
 msgstr ""
 
-#: readelf.c:11046
+#: readelf.c:11116
 #, c-format
 msgid "bad section index[%3d]"
 msgstr ""
 
-#: readelf.c:11067
+#: readelf.c:11137
 #, c-format
 msgid "Size truncation prevents reading %s elements of size %u\n"
 msgstr ""
 
-#: readelf.c:11076
+#: readelf.c:11146
 #, c-format
 msgid "Invalid number of dynamic entries: %s\n"
 msgstr ""
 
-#: readelf.c:11084
+#: readelf.c:11154
 #, c-format
 msgid "Out of memory reading %s dynamic entries\n"
 msgstr ""
 
-#: readelf.c:11091
+#: readelf.c:11161
 #, c-format
 msgid "Unable to read in %s bytes of dynamic data\n"
 msgstr ""
 
-#: readelf.c:11100
+#: readelf.c:11170
 #, c-format
 msgid "Out of memory allocating space for %s dynamic entries\n"
 msgstr ""
 
-#: readelf.c:11127
+#: readelf.c:11197
 #, c-format
 msgid "<No info available for dynamic symbol number %lu>\n"
 msgstr ""
 
-#: readelf.c:11159
+#: readelf.c:11229
 #, c-format
 msgid " <corrupt: %14ld>"
 msgstr ""
 
-#: readelf.c:11185
+#: readelf.c:11255
 msgid "version data"
 msgstr ""
 
-#: readelf.c:11290
+#: readelf.c:11360
 msgid "version need aux (3)"
 msgstr ""
 
-#: readelf.c:11365 readelf.c:11417 readelf.c:11441 readelf.c:11471
-#: readelf.c:11495
+#: readelf.c:11435 readelf.c:11487 readelf.c:11511 readelf.c:11541
+#: readelf.c:11565
 msgid "Unable to seek to start of dynamic information\n"
 msgstr ""
 
-#: readelf.c:11371 readelf.c:11423
+#: readelf.c:11441 readelf.c:11493
 msgid "Failed to read in number of buckets\n"
 msgstr ""
 
-#: readelf.c:11377
+#: readelf.c:11447
 msgid "Failed to read in number of chains\n"
 msgstr ""
 
-#: readelf.c:11479
+#: readelf.c:11549
 msgid "Failed to determine last chain length\n"
 msgstr ""
 
-#: readelf.c:11526
+#: readelf.c:11596
 #, c-format
 msgid ""
 "\n"
 "Symbol table for image:\n"
 msgstr ""
 
-#: readelf.c:11528 readelf.c:11554
+#: readelf.c:11598 readelf.c:11624
 #, c-format
 msgid "  Num Buc:    Value  Size   Type   Bind Vis      Ndx Name\n"
 msgstr ""
 
-#: readelf.c:11530 readelf.c:11556
+#: readelf.c:11600 readelf.c:11626
 #, c-format
 msgid "  Num Buc:    Value          Size   Type   Bind Vis      Ndx Name\n"
 msgstr ""
 
-#: readelf.c:11541 readelf.c:11737
+#: readelf.c:11611 readelf.c:11807
 msgid "histogram chain is corrupt\n"
 msgstr ""
 
-#: readelf.c:11552
+#: readelf.c:11622
 #, c-format
 msgid ""
 "\n"
 "Symbol table of `.gnu.hash' for image:\n"
 msgstr ""
 
-#: readelf.c:11597
+#: readelf.c:11667
 #, c-format
 msgid ""
 "\n"
 "Symbol table '%s' has a sh_entsize of zero!\n"
 msgstr ""
 
-#: readelf.c:11603
+#: readelf.c:11673
 #, c-format
 msgid ""
 "\n"
@@ -8563,29 +8150,29 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:11610
+#: readelf.c:11680
 #, c-format
 msgid "   Num:    Value  Size Type    Bind   Vis      Ndx Name\n"
 msgstr ""
 
-#: readelf.c:11612
+#: readelf.c:11682
 #, c-format
 msgid "   Num:    Value          Size Type    Bind   Vis      Ndx Name\n"
 msgstr ""
 
-#: readelf.c:11687
+#: readelf.c:11757
 #, c-format
 msgid "local symbol %u found at index >= %s's sh_info value of %u\n"
 msgstr ""
 
-#: readelf.c:11698
+#: readelf.c:11768
 #, c-format
 msgid ""
 "\n"
 "Dynamic symbol information is not available for displaying symbols.\n"
 msgstr ""
 
-#: readelf.c:11711
+#: readelf.c:11781
 #, c-format
 msgid ""
 "\n"
@@ -8596,20 +8183,20 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:11721
+#: readelf.c:11791
 msgid "Out of memory allocating space for histogram buckets\n"
 msgstr ""
 
-#: readelf.c:11727 readelf.c:11803
+#: readelf.c:11797 readelf.c:11873
 #, c-format
 msgid " Length  Number     %% of total  Coverage\n"
 msgstr ""
 
-#: readelf.c:11749
+#: readelf.c:11819
 msgid "Out of memory allocating space for histogram counts\n"
 msgstr ""
 
-#: readelf.c:11789
+#: readelf.c:11859
 #, c-format
 msgid ""
 "\n"
@@ -8620,15 +8207,15 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:11799
+#: readelf.c:11869
 msgid "Out of memory allocating space for gnu histogram buckets\n"
 msgstr ""
 
-#: readelf.c:11825
+#: readelf.c:11895
 msgid "Out of memory allocating space for gnu histogram counts\n"
 msgstr ""
 
-#: readelf.c:11870
+#: readelf.c:11940
 #, c-format
 msgid ""
 "\n"
@@ -8639,178 +8226,178 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:11877
+#: readelf.c:11947
 #, c-format
 msgid " Num: Name                           BoundTo     Flags\n"
 msgstr ""
 
-#: readelf.c:11884
+#: readelf.c:11954
 #, c-format
 msgid "<corrupt index>"
 msgstr ""
 
-#: readelf.c:11888
+#: readelf.c:11958
 #, c-format
 msgid "<corrupt: %19ld>"
 msgstr ""
 
-#: readelf.c:11977
+#: readelf.c:12047
 #, c-format
 msgid "MSP430 SYM_DIFF reloc contains invalid symbol index %lu\n"
 msgstr ""
 
-#: readelf.c:12006
+#: readelf.c:12076
 #, c-format
 msgid "MSP430 reloc contains invalid symbol index %lu\n"
 msgstr ""
 
 #. PR 21137
-#: readelf.c:12017
+#: readelf.c:12087
 #, c-format
 msgid "MSP430 sym diff reloc contains invalid offset: 0x%lx\n"
 msgstr ""
 
-#: readelf.c:12028
+#: readelf.c:12098
 msgid "Unhandled MSP430 reloc type found after SYM_DIFF reloc\n"
 msgstr ""
 
-#: readelf.c:12051
+#: readelf.c:12121
 #, c-format
 msgid "MN10300_SYM_DIFF reloc contains invalid symbol index %lu\n"
 msgstr ""
 
-#: readelf.c:12065
+#: readelf.c:12135
 #, c-format
 msgid "MN10300 reloc contains invalid symbol index %lu\n"
 msgstr ""
 
-#: readelf.c:12075
+#: readelf.c:12145
 #, c-format
 msgid "MN10300 sym diff reloc contains invalid offset: 0x%lx\n"
 msgstr ""
 
-#: readelf.c:12085
+#: readelf.c:12155
 msgid "Unhandled MN10300 reloc type found after SYM_DIFF reloc\n"
 msgstr ""
 
-#: readelf.c:12108
+#: readelf.c:12178
 #, c-format
 msgid "RL78_SYM reloc contains invalid symbol index %lu\n"
 msgstr ""
 
-#: readelf.c:12127 readelf.c:12136
+#: readelf.c:12197 readelf.c:12206
 #, c-format
 msgid "RL78 sym diff reloc contains invalid offset: 0x%lx\n"
 msgstr ""
 
-#: readelf.c:12345
+#: readelf.c:12416
 #, c-format
 msgid ""
 "Missing knowledge of 32-bit reloc types used in DWARF sections of machine "
 "number %d\n"
 msgstr ""
 
-#: readelf.c:12955
+#: readelf.c:13026
 #, c-format
 msgid "unable to apply unsupported reloc type %d to section %s\n"
 msgstr ""
 
-#: readelf.c:12965
+#: readelf.c:13036
 #, c-format
 msgid "skipping invalid relocation offset 0x%lx in section %s\n"
 msgstr ""
 
-#: readelf.c:12975
+#: readelf.c:13046
 #, c-format
 msgid "skipping invalid relocation symbol index 0x%lx in section %s\n"
 msgstr ""
 
-#: readelf.c:12999
+#: readelf.c:13070
 #, c-format
 msgid "skipping unexpected symbol type %s in section %s relocation %ld\n"
 msgstr ""
 
-#: readelf.c:13062
+#: readelf.c:13133
 #, c-format
 msgid ""
 "\n"
 "Assembly dump of section %s\n"
 msgstr ""
 
-#: readelf.c:13080
+#: readelf.c:13151
 #, c-format
 msgid "Section '%s' has no data to dump.\n"
 msgstr ""
 
-#: readelf.c:13086
+#: readelf.c:13157
 msgid "section contents"
 msgstr ""
 
-#: readelf.c:13161
+#: readelf.c:13232
 #, c-format
 msgid ""
 "\n"
 "String dump of section '%s':\n"
 msgstr ""
 
-#: readelf.c:13177 readelf.c:13324 readelf.c:13499
+#: readelf.c:13248 readelf.c:13395 readelf.c:13570
 #, c-format
 msgid "section '%s' has unsupported compress type: %d\n"
 msgstr ""
 
-#: readelf.c:13183 readelf.c:13330 readelf.c:13505
+#: readelf.c:13254 readelf.c:13401 readelf.c:13576
 #, c-format
 msgid "compressed section '%s' is corrupted\n"
 msgstr ""
 
-#: readelf.c:13215 readelf.c:13364 readelf.c:13542
+#: readelf.c:13286 readelf.c:13435 readelf.c:13613
 #, c-format
 msgid "Unable to decompress section %s\n"
 msgstr ""
 
-#: readelf.c:13240
+#: readelf.c:13311
 #, c-format
 msgid ""
 "  Note: This section has relocations against it, but these have NOT been "
 "applied to this dump.\n"
 msgstr ""
 
-#: readelf.c:13273 readelf.c:14368 readelf.c:14411 readelf.c:14459
-#: readelf.c:14491
+#: readelf.c:13344 readelf.c:14439 readelf.c:14482 readelf.c:14530
+#: readelf.c:14562
 #, c-format
 msgid "<corrupt>\n"
 msgstr ""
 
-#: readelf.c:13281
+#: readelf.c:13352
 #, c-format
 msgid "  No strings found in this section."
 msgstr ""
 
-#: readelf.c:13309
+#: readelf.c:13380
 #, c-format
 msgid ""
 "\n"
 "Hex dump of section '%s':\n"
 msgstr ""
 
-#: readelf.c:13397
+#: readelf.c:13468
 #, c-format
 msgid ""
 " NOTE: This section has relocations against it, but these have NOT been "
 "applied to this dump.\n"
 msgstr ""
 
-#: readelf.c:13466
+#: readelf.c:13537
 #, c-format
 msgid "%s section data"
 msgstr ""
 
-#: readelf.c:13490
+#: readelf.c:13561
 #, c-format
 msgid "compressed section %s is too small to contain a compression header"
 msgstr ""
 
-#: readelf.c:13652
+#: readelf.c:13723
 #, c-format
 msgid ""
 "\n"
@@ -8821,503 +8408,503 @@ msgstr ""
 #. which has the NOBITS type - the bits in the file will be random.
 #. This can happen when a file containing a .eh_frame section is
 #. stripped with the --only-keep-debug command line option.
-#: readelf.c:13661
+#: readelf.c:13732
 #, c-format
 msgid "section '%s' has the NOBITS type - its contents are unreliable.\n"
 msgstr ""
 
-#: readelf.c:13711
+#: readelf.c:13782
 #, c-format
 msgid "Unrecognized debug section: %s\n"
 msgstr ""
 
-#: readelf.c:13739
+#: readelf.c:13810
 #, c-format
 msgid "Section '%s' was not dumped because it does not exist!\n"
 msgstr ""
 
-#: readelf.c:13800
+#: readelf.c:13871
 #, c-format
 msgid "Section %d was not dumped because it does not exist!\n"
 msgstr ""
 
-#: readelf.c:13857
+#: readelf.c:13928
 msgid "<corrupt tag>\n"
 msgstr ""
 
-#: readelf.c:13872
+#: readelf.c:13943
 #, c-format
 msgid "<corrupt string tag>"
 msgstr ""
 
-#: readelf.c:13912
+#: readelf.c:13983
 #, c-format
 msgid "Absent/Non standard\n"
 msgstr ""
 
-#: readelf.c:13915
+#: readelf.c:13986
 #, c-format
 msgid "Bare metal/mwdt\n"
 msgstr ""
 
-#: readelf.c:13918
+#: readelf.c:13989
 #, c-format
 msgid "Bare metal/newlib\n"
 msgstr ""
 
-#: readelf.c:13921
+#: readelf.c:13992
 #, c-format
 msgid "Linux/uclibc\n"
 msgstr ""
 
-#: readelf.c:13924
+#: readelf.c:13995
 #, c-format
 msgid "Linux/glibc\n"
 msgstr ""
 
-#: readelf.c:13927 readelf.c:14011
+#: readelf.c:13998 readelf.c:14082
 #, c-format
 msgid "Unknown\n"
 msgstr ""
 
-#: readelf.c:13940 readelf.c:13971 readelf.c:14002
+#: readelf.c:14011 readelf.c:14042 readelf.c:14073
 #, c-format
 msgid "Absent\n"
 msgstr ""
 
-#: readelf.c:13984
+#: readelf.c:14055
 msgid "yes"
 msgstr ""
 
-#: readelf.c:13984
+#: readelf.c:14055
 msgid "no"
 msgstr ""
 
-#: readelf.c:14025 readelf.c:14033
+#: readelf.c:14096 readelf.c:14104
 msgid "default"
 msgstr ""
 
-#: readelf.c:14026
+#: readelf.c:14097
 msgid "smallest"
 msgstr ""
 
-#: readelf.c:14032
+#: readelf.c:14103
 msgid "OPTFP"
 msgstr ""
 
-#: readelf.c:14226 readelf.c:14240 readelf.c:14259 readelf.c:14767
-#: readelf.c:15058 readelf.c:15071 readelf.c:15084
+#: readelf.c:14297 readelf.c:14311 readelf.c:14330 readelf.c:14838
+#: readelf.c:15129 readelf.c:15142 readelf.c:15155
 #, c-format
 msgid "None\n"
 msgstr ""
 
-#: readelf.c:14227
+#: readelf.c:14298
 #, c-format
 msgid "Application\n"
 msgstr ""
 
-#: readelf.c:14228
+#: readelf.c:14299
 #, c-format
 msgid "Realtime\n"
 msgstr ""
 
-#: readelf.c:14229
+#: readelf.c:14300
 #, c-format
 msgid "Microcontroller\n"
 msgstr ""
 
-#: readelf.c:14230
+#: readelf.c:14301
 #, c-format
 msgid "Application or Realtime\n"
 msgstr ""
 
-#: readelf.c:14241 readelf.c:14261 readelf.c:14821 readelf.c:14839
-#: readelf.c:14914 readelf.c:14935 readelf.c:17091
+#: readelf.c:14312 readelf.c:14332 readelf.c:14892 readelf.c:14910
+#: readelf.c:14985 readelf.c:15006 readelf.c:17162
 #, c-format
 msgid "8-byte\n"
 msgstr ""
 
-#: readelf.c:14242 readelf.c:14917 readelf.c:14938 readelf.c:17090
+#: readelf.c:14313 readelf.c:14988 readelf.c:15009 readelf.c:17161
 #, c-format
 msgid "4-byte\n"
 msgstr ""
 
-#: readelf.c:14246 readelf.c:14265
+#: readelf.c:14317 readelf.c:14336
 #, c-format
 msgid "8-byte and up to %d-byte extended\n"
 msgstr ""
 
-#: readelf.c:14260
+#: readelf.c:14331
 #, c-format
 msgid "8-byte, except leaf SP\n"
 msgstr ""
 
-#: readelf.c:14277 readelf.c:14365 readelf.c:14954
+#: readelf.c:14348 readelf.c:14436 readelf.c:15025
 #, c-format
 msgid "flag = %d, vendor = "
 msgstr ""
 
-#: readelf.c:14298
+#: readelf.c:14369
 #, c-format
 msgid "True\n"
 msgstr ""
 
-#: readelf.c:14320
+#: readelf.c:14391
 #, c-format
 msgid "<unknown: %d>\n"
 msgstr ""
 
-#: readelf.c:14369
+#: readelf.c:14440
 msgid "corrupt vendor attribute\n"
 msgstr ""
 
-#: readelf.c:14421
+#: readelf.c:14492
 #, c-format
 msgid "unspecified hard/soft float, "
 msgstr ""
 
-#: readelf.c:14424
+#: readelf.c:14495
 #, c-format
 msgid "hard float, "
 msgstr ""
 
-#: readelf.c:14427
+#: readelf.c:14498
 #, c-format
 msgid "soft float, "
 msgstr ""
 
-#: readelf.c:14430
+#: readelf.c:14501
 #, c-format
 msgid "single-precision hard float, "
 msgstr ""
 
-#: readelf.c:14437
+#: readelf.c:14508
 #, c-format
 msgid "unspecified long double\n"
 msgstr ""
 
-#: readelf.c:14440
+#: readelf.c:14511
 #, c-format
 msgid "128-bit IBM long double\n"
 msgstr ""
 
-#: readelf.c:14443
+#: readelf.c:14514
 #, c-format
 msgid "64-bit long double\n"
 msgstr ""
 
-#: readelf.c:14446
+#: readelf.c:14517
 #, c-format
 msgid "128-bit IEEE long double\n"
 msgstr ""
 
-#: readelf.c:14469 readelf.c:14501
+#: readelf.c:14540 readelf.c:14572
 #, c-format
 msgid "unspecified\n"
 msgstr ""
 
-#: readelf.c:14472
+#: readelf.c:14543
 #, c-format
 msgid "generic\n"
 msgstr ""
 
-#: readelf.c:14507
+#: readelf.c:14578
 #, c-format
 msgid "memory\n"
 msgstr ""
 
-#: readelf.c:14536
+#: readelf.c:14607
 #, c-format
 msgid "any\n"
 msgstr ""
 
-#: readelf.c:14539
+#: readelf.c:14610
 #, c-format
 msgid "software\n"
 msgstr ""
 
-#: readelf.c:14542
+#: readelf.c:14613
 #, c-format
 msgid "hardware\n"
 msgstr ""
 
-#: readelf.c:14668
+#: readelf.c:14739
 #, c-format
 msgid "Hard or soft float\n"
 msgstr ""
 
-#: readelf.c:14671
+#: readelf.c:14742
 #, c-format
 msgid "Hard float (double precision)\n"
 msgstr ""
 
-#: readelf.c:14674
+#: readelf.c:14745
 #, c-format
 msgid "Hard float (single precision)\n"
 msgstr ""
 
-#: readelf.c:14677
+#: readelf.c:14748
 #, c-format
 msgid "Soft float\n"
 msgstr ""
 
-#: readelf.c:14680
+#: readelf.c:14751
 #, c-format
 msgid "Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"
 msgstr ""
 
-#: readelf.c:14683
+#: readelf.c:14754
 #, c-format
 msgid "Hard float (32-bit CPU, Any FPU)\n"
 msgstr ""
 
-#: readelf.c:14686
+#: readelf.c:14757
 #, c-format
 msgid "Hard float (32-bit CPU, 64-bit FPU)\n"
 msgstr ""
 
-#: readelf.c:14689
+#: readelf.c:14760
 #, c-format
 msgid "Hard float compat (32-bit CPU, 64-bit FPU)\n"
 msgstr ""
 
-#: readelf.c:14692
+#: readelf.c:14763
 #, c-format
 msgid "NaN 2008 compatibility\n"
 msgstr ""
 
-#: readelf.c:14731
+#: readelf.c:14802
 #, c-format
 msgid "Any MSA or not\n"
 msgstr ""
 
-#: readelf.c:14734
+#: readelf.c:14805
 #, c-format
 msgid "128-bit MSA\n"
 msgstr ""
 
-#: readelf.c:14800
+#: readelf.c:14871
 #, c-format
 msgid "Not used\n"
 msgstr ""
 
-#: readelf.c:14803
+#: readelf.c:14874
 #, c-format
 msgid "2 bytes\n"
 msgstr ""
 
-#: readelf.c:14806
+#: readelf.c:14877
 #, c-format
 msgid "4 bytes\n"
 msgstr ""
 
-#: readelf.c:14824 readelf.c:14842 readelf.c:14920 readelf.c:14941
+#: readelf.c:14895 readelf.c:14913 readelf.c:14991 readelf.c:15012
 #, c-format
 msgid "16-byte\n"
 msgstr ""
 
-#: readelf.c:14857
+#: readelf.c:14928
 #, c-format
 msgid "DSBT addressing not used\n"
 msgstr ""
 
-#: readelf.c:14860
+#: readelf.c:14931
 #, c-format
 msgid "DSBT addressing used\n"
 msgstr ""
 
-#: readelf.c:14875
+#: readelf.c:14946
 #, c-format
 msgid "Data addressing position-dependent\n"
 msgstr ""
 
-#: readelf.c:14878
+#: readelf.c:14949
 #, c-format
 msgid "Data addressing position-independent, GOT near DP\n"
 msgstr ""
 
-#: readelf.c:14881
+#: readelf.c:14952
 #, c-format
 msgid "Data addressing position-independent, GOT far from DP\n"
 msgstr ""
 
-#: readelf.c:14896
+#: readelf.c:14967
 #, c-format
 msgid "Code addressing position-dependent\n"
 msgstr ""
 
-#: readelf.c:14899
+#: readelf.c:14970
 #, c-format
 msgid "Code addressing position-independent\n"
 msgstr ""
 
-#: readelf.c:15059
+#: readelf.c:15130
 #, c-format
 msgid "MSP430\n"
 msgstr ""
 
-#: readelf.c:15060
+#: readelf.c:15131
 #, c-format
 msgid "MSP430X\n"
 msgstr ""
 
-#: readelf.c:15072 readelf.c:15085
+#: readelf.c:15143 readelf.c:15156
 #, c-format
 msgid "Small\n"
 msgstr ""
 
-#: readelf.c:15073 readelf.c:15086
+#: readelf.c:15144 readelf.c:15157
 #, c-format
 msgid "Large\n"
 msgstr ""
 
-#: readelf.c:15087
+#: readelf.c:15158
 #, c-format
 msgid "Restricted Large\n"
 msgstr ""
 
-#: readelf.c:15093
+#: readelf.c:15164
 #, c-format
 msgid "  <unknown tag %d>: "
 msgstr ""
 
-#: readelf.c:15148
+#: readelf.c:15219
 msgid "attributes"
 msgstr ""
 
-#: readelf.c:15160
+#: readelf.c:15231
 #, c-format
 msgid "Unknown attributes version '%c'(%d) - expecting 'A'\n"
 msgstr ""
 
-#: readelf.c:15179
+#: readelf.c:15250
 msgid "Tag section ends prematurely\n"
 msgstr ""
 
-#: readelf.c:15188
+#: readelf.c:15259
 #, c-format
 msgid "Bad attribute length (%u > %u)\n"
 msgstr ""
 
-#: readelf.c:15196
+#: readelf.c:15267
 #, c-format
 msgid "Attribute length of %u is too small\n"
 msgstr ""
 
-#: readelf.c:15207
+#: readelf.c:15278
 msgid "Corrupt attribute section name\n"
 msgstr ""
 
-#: readelf.c:15212
+#: readelf.c:15283
 #, c-format
 msgid "Attribute Section: "
 msgstr ""
 
-#: readelf.c:15239
+#: readelf.c:15310
 msgid "Unused bytes at end of section\n"
 msgstr ""
 
-#: readelf.c:15249
+#: readelf.c:15320
 #, c-format
 msgid "Bad subsection length (%u > %u)\n"
 msgstr ""
 
-#: readelf.c:15257
+#: readelf.c:15328
 #, c-format
 msgid "Bad subsection length (%u < 6)\n"
 msgstr ""
 
-#: readelf.c:15272
+#: readelf.c:15343
 #, c-format
 msgid "File Attributes\n"
 msgstr ""
 
-#: readelf.c:15275
+#: readelf.c:15346
 #, c-format
 msgid "Section Attributes:"
 msgstr ""
 
-#: readelf.c:15278
+#: readelf.c:15349
 #, c-format
 msgid "Symbol Attributes:"
 msgstr ""
 
-#: readelf.c:15294
+#: readelf.c:15365
 #, c-format
 msgid "Unknown tag: %d\n"
 msgstr ""
 
-#: readelf.c:15315
+#: readelf.c:15386
 #, c-format
 msgid "  Unknown attribute:\n"
 msgstr ""
 
-#: readelf.c:15357
+#: readelf.c:15428
 msgid "MIPS GOT entry extends beyond the end of available data\n"
 msgstr ""
 
-#: readelf.c:15428 readelf.c:15500
+#: readelf.c:15499 readelf.c:15571
 msgid "Unknown"
 msgstr ""
 
-#: readelf.c:15547
+#: readelf.c:15618
 msgid "Corrupt MIPS ABI Flags section.\n"
 msgstr ""
 
-#: readelf.c:15553
+#: readelf.c:15624
 msgid "MIPS ABI Flags section"
 msgstr ""
 
-#: readelf.c:15612 readelf.c:16160
+#: readelf.c:15683 readelf.c:16231
 msgid "Global Offset Table data"
 msgstr ""
 
-#: readelf.c:15616
+#: readelf.c:15687
 #, c-format
 msgid ""
 "\n"
 "Static GOT:\n"
 msgstr ""
 
-#: readelf.c:15617 readelf.c:16165
+#: readelf.c:15688 readelf.c:16236
 #, c-format
 msgid " Canonical gp value: "
 msgstr ""
 
-#: readelf.c:15631 readelf.c:16169 readelf.c:16296
+#: readelf.c:15702 readelf.c:16240 readelf.c:16367
 #, c-format
 msgid " Reserved entries:\n"
 msgstr ""
 
-#: readelf.c:15632
+#: readelf.c:15703
 #, c-format
 msgid "  %*s %10s %*s\n"
 msgstr ""
 
-#: readelf.c:15633 readelf.c:15663 readelf.c:16171 readelf.c:16199
-#: readelf.c:16217 readelf.c:16298 readelf.c:16307
+#: readelf.c:15704 readelf.c:15734 readelf.c:16242 readelf.c:16270
+#: readelf.c:16288 readelf.c:16369 readelf.c:16378
 msgid "Address"
 msgstr ""
 
-#: readelf.c:15633 readelf.c:15663 readelf.c:16171 readelf.c:16199
-#: readelf.c:16218
+#: readelf.c:15704 readelf.c:15734 readelf.c:16242 readelf.c:16270
+#: readelf.c:16289
 msgid "Access"
 msgstr ""
 
-#: readelf.c:15634 readelf.c:15664
+#: readelf.c:15705 readelf.c:15735
 msgid "Value"
 msgstr ""
 
-#: readelf.c:15661 readelf.c:16197
+#: readelf.c:15732 readelf.c:16268
 #, c-format
 msgid " Local entries:\n"
 msgstr ""
 
-#: readelf.c:15743 readelf.c:16410
+#: readelf.c:15814 readelf.c:16481
 msgid "liblist section data"
 msgstr ""
 
-#: readelf.c:15746
+#: readelf.c:15817
 #, c-format
 msgid ""
 "\n"
@@ -9328,38 +8915,38 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:15750
+#: readelf.c:15821
 msgid ""
 "     Library              Time Stamp          Checksum   Version Flags\n"
 msgstr ""
 
-#: readelf.c:15776
+#: readelf.c:15847
 #, c-format
 msgid "<corrupt: %9ld>"
 msgstr ""
 
-#: readelf.c:15781
+#: readelf.c:15852
 msgid " NONE"
 msgstr ""
 
-#: readelf.c:15834
+#: readelf.c:15905
 msgid "No MIPS_OPTIONS header found\n"
 msgstr ""
 
-#: readelf.c:15839
+#: readelf.c:15910
 msgid "options"
 msgstr ""
 
-#: readelf.c:15846
+#: readelf.c:15917
 msgid "Out of memory allocating space for MIPS options\n"
 msgstr ""
 
-#: readelf.c:15868
+#: readelf.c:15939
 #, c-format
 msgid "Invalid size (%u) for MIPS option\n"
 msgstr ""
 
-#: readelf.c:15877
+#: readelf.c:15948
 #, c-format
 msgid ""
 "\n"
@@ -9370,24 +8957,24 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:16048
+#: readelf.c:16119
 msgid "conflict list found without a dynamic symbol table\n"
 msgstr ""
 
-#: readelf.c:16056
+#: readelf.c:16127
 #, c-format
 msgid "Overlarge number of conflicts detected: %lx\n"
 msgstr ""
 
-#: readelf.c:16064
+#: readelf.c:16135
 msgid "Out of memory allocating space for dynamic conflicts\n"
 msgstr ""
 
-#: readelf.c:16074 readelf.c:16089
+#: readelf.c:16145 readelf.c:16160
 msgid "conflict"
 msgstr ""
 
-#: readelf.c:16099
+#: readelf.c:16170
 #, c-format
 msgid ""
 "\n"
@@ -9398,124 +8985,124 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:16103
+#: readelf.c:16174
 msgid "  Num:    Index       Value  Name"
 msgstr ""
 
-#: readelf.c:16110
+#: readelf.c:16181
 #, c-format
 msgid "<corrupt symbol index>"
 msgstr ""
 
-#: readelf.c:16121 readelf.c:16246 readelf.c:16331
+#: readelf.c:16192 readelf.c:16317 readelf.c:16402
 #, c-format
 msgid "<corrupt: %14ld>"
 msgstr ""
 
-#: readelf.c:16144
+#: readelf.c:16215
 #, c-format
 msgid ""
 "The GOT symbol offset (%lu) is greater than the symbol table size (%lu)\n"
 msgstr ""
 
-#: readelf.c:16153
+#: readelf.c:16224
 #, c-format
 msgid "Too many GOT symbols: %lu\n"
 msgstr ""
 
-#: readelf.c:16164
+#: readelf.c:16235
 #, c-format
 msgid ""
 "\n"
 "Primary GOT:\n"
 msgstr ""
 
-#: readelf.c:16170
+#: readelf.c:16241
 #, c-format
 msgid "  %*s %10s %*s Purpose\n"
 msgstr ""
 
-#: readelf.c:16172 readelf.c:16200 readelf.c:16219 readelf.c:16298
-#: readelf.c:16308
+#: readelf.c:16243 readelf.c:16271 readelf.c:16290 readelf.c:16369
+#: readelf.c:16379
 msgid "Initial"
 msgstr ""
 
-#: readelf.c:16174
+#: readelf.c:16245
 #, c-format
 msgid " Lazy resolver\n"
 msgstr ""
 
-#: readelf.c:16189
+#: readelf.c:16260
 #, c-format
 msgid " Module pointer (GNU extension)\n"
 msgstr ""
 
-#: readelf.c:16215
+#: readelf.c:16286
 #, c-format
 msgid " Global entries:\n"
 msgstr ""
 
-#: readelf.c:16220 readelf.c:16309
+#: readelf.c:16291 readelf.c:16380
 msgid "Sym.Val."
 msgstr ""
 
 #. Note for translators: "Ndx" = abbreviated form of "Index".
-#: readelf.c:16223 readelf.c:16309
+#: readelf.c:16294 readelf.c:16380
 msgid "Ndx"
 msgstr ""
 
-#: readelf.c:16223 readelf.c:16309
+#: readelf.c:16294 readelf.c:16380
 msgid "Name"
 msgstr ""
 
-#: readelf.c:16233
+#: readelf.c:16304
 #, c-format
 msgid "<no dynamic symbols>"
 msgstr ""
 
-#: readelf.c:16249
+#: readelf.c:16320
 #, c-format
 msgid "<symbol index %lu exceeds number of dynamic symbols>"
 msgstr ""
 
-#: readelf.c:16291
+#: readelf.c:16362
 msgid "Procedure Linkage Table data"
 msgstr ""
 
-#: readelf.c:16297
+#: readelf.c:16368
 #, c-format
 msgid "  %*s %*s Purpose\n"
 msgstr ""
 
-#: readelf.c:16300
+#: readelf.c:16371
 #, c-format
 msgid " PLT lazy resolver\n"
 msgstr ""
 
-#: readelf.c:16302
+#: readelf.c:16373
 #, c-format
 msgid " Module pointer\n"
 msgstr ""
 
-#: readelf.c:16305
+#: readelf.c:16376
 #, c-format
 msgid " Entries:\n"
 msgstr ""
 
-#: readelf.c:16319
+#: readelf.c:16390
 #, c-format
 msgid "<corrupt symbol index: %lu>"
 msgstr ""
 
-#: readelf.c:16357
+#: readelf.c:16428
 msgid "NDS32 elf flags section"
 msgstr ""
 
-#: readelf.c:16421
+#: readelf.c:16492
 msgid "liblist string table"
 msgstr ""
 
-#: readelf.c:16433
+#: readelf.c:16504
 #, c-format
 msgid ""
 "\n"
@@ -9526,361 +9113,361 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:16439
+#: readelf.c:16510
 msgid "     Library              Time Stamp          Checksum   Version Flags"
 msgstr ""
 
-#: readelf.c:16489
+#: readelf.c:16560
 msgid "NT_AUXV (auxiliary vector)"
 msgstr ""
 
-#: readelf.c:16491
+#: readelf.c:16562
 msgid "NT_PRSTATUS (prstatus structure)"
 msgstr ""
 
-#: readelf.c:16493
+#: readelf.c:16564
 msgid "NT_FPREGSET (floating point registers)"
 msgstr ""
 
-#: readelf.c:16495
+#: readelf.c:16566
 msgid "NT_PRPSINFO (prpsinfo structure)"
 msgstr ""
 
-#: readelf.c:16497
+#: readelf.c:16568
 msgid "NT_TASKSTRUCT (task structure)"
 msgstr ""
 
-#: readelf.c:16499
+#: readelf.c:16570
 msgid "NT_PRXFPREG (user_xfpregs structure)"
 msgstr ""
 
-#: readelf.c:16501
+#: readelf.c:16572
 msgid "NT_PPC_VMX (ppc Altivec registers)"
 msgstr ""
 
-#: readelf.c:16503
+#: readelf.c:16574
 msgid "NT_PPC_VSX (ppc VSX registers)"
 msgstr ""
 
-#: readelf.c:16505
+#: readelf.c:16576
 msgid "NT_PPC_TAR (ppc TAR register)"
 msgstr ""
 
-#: readelf.c:16507
+#: readelf.c:16578
 msgid "NT_PPC_PPR (ppc PPR register)"
 msgstr ""
 
-#: readelf.c:16509
+#: readelf.c:16580
 msgid "NT_PPC_DSCR (ppc DSCR register)"
 msgstr ""
 
-#: readelf.c:16511
+#: readelf.c:16582
 msgid "NT_PPC_EBB (ppc EBB registers)"
 msgstr ""
 
-#: readelf.c:16513
+#: readelf.c:16584
 msgid "NT_PPC_PMU (ppc PMU registers)"
 msgstr ""
 
-#: readelf.c:16515
+#: readelf.c:16586
 msgid "NT_PPC_TM_CGPR (ppc checkpointed GPR registers)"
 msgstr ""
 
-#: readelf.c:16517
+#: readelf.c:16588
 msgid "NT_PPC_TM_CFPR (ppc checkpointed floating point registers)"
 msgstr ""
 
-#: readelf.c:16519
+#: readelf.c:16590
 msgid "NT_PPC_TM_CVMX (ppc checkpointed Altivec registers)"
 msgstr ""
 
-#: readelf.c:16521
+#: readelf.c:16592
 msgid "NT_PPC_TM_VSX (ppc checkpointed VSX registers)"
 msgstr ""
 
-#: readelf.c:16523
+#: readelf.c:16594
 msgid "NT_PPC_TM_SPR (ppc TM special purpose registers)"
 msgstr ""
 
-#: readelf.c:16525
+#: readelf.c:16596
 msgid "NT_PPC_TM_CTAR (ppc checkpointed TAR register)"
 msgstr ""
 
-#: readelf.c:16527
+#: readelf.c:16598
 msgid "NT_PPC_TM_CPPR (ppc checkpointed PPR register)"
 msgstr ""
 
-#: readelf.c:16529
+#: readelf.c:16600
 msgid "NT_PPC_TM_CDSCR (ppc checkpointed DSCR register)"
 msgstr ""
 
-#: readelf.c:16531
+#: readelf.c:16602
 msgid "NT_386_TLS (x86 TLS information)"
 msgstr ""
 
-#: readelf.c:16533
+#: readelf.c:16604
 msgid "NT_386_IOPERM (x86 I/O permissions)"
 msgstr ""
 
-#: readelf.c:16535
+#: readelf.c:16606
 msgid "NT_X86_XSTATE (x86 XSAVE extended state)"
 msgstr ""
 
-#: readelf.c:16537
+#: readelf.c:16608
 msgid "NT_S390_HIGH_GPRS (s390 upper register halves)"
 msgstr ""
 
-#: readelf.c:16539
+#: readelf.c:16610
 msgid "NT_S390_TIMER (s390 timer register)"
 msgstr ""
 
-#: readelf.c:16541
+#: readelf.c:16612
 msgid "NT_S390_TODCMP (s390 TOD comparator register)"
 msgstr ""
 
-#: readelf.c:16543
+#: readelf.c:16614
 msgid "NT_S390_TODPREG (s390 TOD programmable register)"
 msgstr ""
 
-#: readelf.c:16545
+#: readelf.c:16616
 msgid "NT_S390_CTRS (s390 control registers)"
 msgstr ""
 
-#: readelf.c:16547
+#: readelf.c:16618
 msgid "NT_S390_PREFIX (s390 prefix register)"
 msgstr ""
 
-#: readelf.c:16549
+#: readelf.c:16620
 msgid "NT_S390_LAST_BREAK (s390 last breaking event address)"
 msgstr ""
 
-#: readelf.c:16551
+#: readelf.c:16622
 msgid "NT_S390_SYSTEM_CALL (s390 system call restart data)"
 msgstr ""
 
-#: readelf.c:16553
+#: readelf.c:16624
 msgid "NT_S390_TDB (s390 transaction diagnostic block)"
 msgstr ""
 
-#: readelf.c:16555
+#: readelf.c:16626
 msgid "NT_S390_VXRS_LOW (s390 vector registers 0-15 upper half)"
 msgstr ""
 
-#: readelf.c:16557
+#: readelf.c:16628
 msgid "NT_S390_VXRS_HIGH (s390 vector registers 16-31)"
 msgstr ""
 
-#: readelf.c:16559
+#: readelf.c:16630
 msgid "NT_S390_GS_CB (s390 guarded-storage registers)"
 msgstr ""
 
-#: readelf.c:16561
+#: readelf.c:16632
 msgid "NT_S390_GS_BC (s390 guarded-storage broadcast control)"
 msgstr ""
 
-#: readelf.c:16563
+#: readelf.c:16634
 msgid "NT_ARM_VFP (arm VFP registers)"
 msgstr ""
 
-#: readelf.c:16565
+#: readelf.c:16636
 msgid "NT_ARM_TLS (AArch TLS registers)"
 msgstr ""
 
-#: readelf.c:16567
+#: readelf.c:16638
 msgid "NT_ARM_HW_BREAK (AArch hardware breakpoint registers)"
 msgstr ""
 
-#: readelf.c:16569
+#: readelf.c:16640
 msgid "NT_ARM_HW_WATCH (AArch hardware watchpoint registers)"
 msgstr ""
 
-#: readelf.c:16571
+#: readelf.c:16642
 msgid "NT_PSTATUS (pstatus structure)"
 msgstr ""
 
-#: readelf.c:16573
+#: readelf.c:16644
 msgid "NT_FPREGS (floating point registers)"
 msgstr ""
 
-#: readelf.c:16575
+#: readelf.c:16646
 msgid "NT_PSINFO (psinfo structure)"
 msgstr ""
 
-#: readelf.c:16577
+#: readelf.c:16648
 msgid "NT_LWPSTATUS (lwpstatus_t structure)"
 msgstr ""
 
-#: readelf.c:16579
+#: readelf.c:16650
 msgid "NT_LWPSINFO (lwpsinfo_t structure)"
 msgstr ""
 
-#: readelf.c:16581
+#: readelf.c:16652
 msgid "NT_WIN32PSTATUS (win32_pstatus structure)"
 msgstr ""
 
-#: readelf.c:16583
+#: readelf.c:16654
 msgid "NT_SIGINFO (siginfo_t data)"
 msgstr ""
 
-#: readelf.c:16585
+#: readelf.c:16656
 msgid "NT_FILE (mapped files)"
 msgstr ""
 
-#: readelf.c:16593
+#: readelf.c:16664
 msgid "NT_VERSION (version)"
 msgstr ""
 
-#: readelf.c:16595
+#: readelf.c:16666
 msgid "NT_ARCH (architecture)"
 msgstr ""
 
-#: readelf.c:16597
+#: readelf.c:16668
 msgid "OPEN"
 msgstr ""
 
-#: readelf.c:16599
+#: readelf.c:16670
 msgid "func"
 msgstr ""
 
-#: readelf.c:16604 readelf.c:16723 readelf.c:17064 readelf.c:17208
-#: readelf.c:17266 readelf.c:17343
+#: readelf.c:16675 readelf.c:16794 readelf.c:17135 readelf.c:17279
+#: readelf.c:17337 readelf.c:17414
 #, c-format
 msgid "Unknown note type: (0x%08x)"
 msgstr ""
 
-#: readelf.c:16625
+#: readelf.c:16696
 #, c-format
 msgid "    Cannot decode 64-bit note in 32-bit build\n"
 msgstr ""
 
-#: readelf.c:16633
+#: readelf.c:16704
 msgid "    Malformed note - too short for header\n"
 msgstr ""
 
-#: readelf.c:16642
+#: readelf.c:16713
 msgid "    Malformed note - does not end with \\0\n"
 msgstr ""
 
-#: readelf.c:16655
+#: readelf.c:16726
 msgid "    Malformed note - too short for supplied file count\n"
 msgstr ""
 
-#: readelf.c:16659
+#: readelf.c:16730
 #, c-format
 msgid "    Page size: "
 msgstr ""
 
-#: readelf.c:16663
+#: readelf.c:16734
 #, c-format
 msgid "    %*s%*s%*s\n"
 msgstr ""
 
-#: readelf.c:16664
+#: readelf.c:16735
 msgid "Start"
 msgstr ""
 
-#: readelf.c:16665
+#: readelf.c:16736
 msgid "End"
 msgstr ""
 
-#: readelf.c:16666
+#: readelf.c:16737
 msgid "Page Offset"
 msgstr ""
 
-#: readelf.c:16674
+#: readelf.c:16745
 msgid "    Malformed note - filenames end too early\n"
 msgstr ""
 
-#: readelf.c:16706
+#: readelf.c:16777
 msgid "NT_GNU_ABI_TAG (ABI version tag)"
 msgstr ""
 
-#: readelf.c:16708
+#: readelf.c:16779
 msgid "NT_GNU_HWCAP (DSO-supplied software HWCAP info)"
 msgstr ""
 
-#: readelf.c:16710
+#: readelf.c:16781
 msgid "NT_GNU_BUILD_ID (unique build ID bitstring)"
 msgstr ""
 
-#: readelf.c:16712
+#: readelf.c:16783
 msgid "NT_GNU_GOLD_VERSION (gold version)"
 msgstr ""
 
-#: readelf.c:16714
+#: readelf.c:16785
 msgid "NT_GNU_PROPERTY_TYPE_0"
 msgstr ""
 
-#: readelf.c:16716
+#: readelf.c:16787
 msgid "NT_GNU_BUILD_ATTRIBUTE_OPEN"
 msgstr ""
 
-#: readelf.c:16718
+#: readelf.c:16789
 msgid "NT_GNU_BUILD_ATTRIBUTE_FUNC"
 msgstr ""
 
-#: readelf.c:16812
+#: readelf.c:16883
 #, c-format
 msgid "      Properties: "
 msgstr ""
 
-#: readelf.c:16816
+#: readelf.c:16887
 #, c-format
 msgid "<corrupt GNU_PROPERTY_TYPE, size = %#lx>\n"
 msgstr ""
 
-#: readelf.c:16828
+#: readelf.c:16899
 #, c-format
 msgid "<corrupt descsz: %#lx>\n"
 msgstr ""
 
-#: readelf.c:16839
+#: readelf.c:16910
 #, c-format
 msgid "<corrupt type (%#x) datasz: %#x>\n"
 msgstr ""
 
-#: readelf.c:16855 readelf.c:16863 readelf.c:16871 readelf.c:16888
-#: readelf.c:16896
+#: readelf.c:16926 readelf.c:16934 readelf.c:16942 readelf.c:16959
+#: readelf.c:16967
 #, c-format
 msgid "<corrupt length: %#x> "
 msgstr ""
 
-#: readelf.c:16886
+#: readelf.c:16957
 #, c-format
 msgid "stack size: "
 msgstr ""
 
-#: readelf.c:16905
+#: readelf.c:16976
 #, c-format
 msgid "<unknown type %#x data: "
 msgstr ""
 
-#: readelf.c:16907
+#: readelf.c:16978
 #, c-format
 msgid "<procesor-specific type %#x data: "
 msgstr ""
 
-#: readelf.c:16909
+#: readelf.c:16980
 #, c-format
 msgid "<application-specific type %#x data: "
 msgstr ""
 
-#: readelf.c:16938
+#: readelf.c:17009
 #, c-format
 msgid "    Build ID: "
 msgstr ""
 
-#: readelf.c:16953
+#: readelf.c:17024
 #, c-format
 msgid "    <corrupt GNU_ABI_TAG>\n"
 msgstr ""
 
-#: readelf.c:16990
+#: readelf.c:17061
 #, c-format
 msgid "    OS: %s, ABI: %ld.%ld.%ld\n"
 msgstr ""
 
-#: readelf.c:16999
+#: readelf.c:17070
 #, c-format
 msgid "    Version: "
 msgstr ""
@@ -9890,458 +9477,458 @@ msgstr ""
 #. is a series of entries, where each entry is a single byte followed
 #. by a nul terminated string.  The byte gives the bit number to test
 #. if enabled in the bitmask.
-#: readelf.c:17015
+#: readelf.c:17086
 #, c-format
 msgid "      Hardware Capabilities: "
 msgstr ""
 
-#: readelf.c:17018
+#: readelf.c:17089
 msgid "<corrupt GNU_HWCAP>\n"
 msgstr ""
 
-#: readelf.c:17023
+#: readelf.c:17094
 #, c-format
 msgid "num entries: %ld, enabled mask: %lx\n"
 msgstr ""
 
-#: readelf.c:17039
+#: readelf.c:17110
 #, c-format
 msgid "    Description data: "
 msgstr ""
 
-#: readelf.c:17057
+#: readelf.c:17128
 msgid "Alignment of 8-byte objects"
 msgstr ""
 
-#: readelf.c:17058
+#: readelf.c:17129
 msgid "Sizeof double and long double"
 msgstr ""
 
-#: readelf.c:17059
+#: readelf.c:17130
 msgid "Type of FPU support needed"
 msgstr ""
 
-#: readelf.c:17060
+#: readelf.c:17131
 msgid "Use of SIMD instructions"
 msgstr ""
 
-#: readelf.c:17061
+#: readelf.c:17132
 msgid "Use of cache"
 msgstr ""
 
-#: readelf.c:17062
+#: readelf.c:17133
 msgid "Use of MMU"
 msgstr ""
 
-#: readelf.c:17098
+#: readelf.c:17169
 #, c-format
 msgid "4-bytes\n"
 msgstr ""
 
-#: readelf.c:17099
+#: readelf.c:17170
 #, c-format
 msgid "8-bytes\n"
 msgstr ""
 
-#: readelf.c:17106
+#: readelf.c:17177
 #, c-format
 msgid "FPU-2.0\n"
 msgstr ""
 
-#: readelf.c:17107
+#: readelf.c:17178
 #, c-format
 msgid "FPU-3.0\n"
 msgstr ""
 
-#: readelf.c:17116
+#: readelf.c:17187
 #, c-format
 msgid "yes\n"
 msgstr ""
 
-#: readelf.c:17126
+#: readelf.c:17197
 #, c-format
 msgid "unknown value: %x\n"
 msgstr ""
 
-#: readelf.c:17168
+#: readelf.c:17239
 msgid "NT_THRMISC (thrmisc structure)"
 msgstr ""
 
-#: readelf.c:17170
+#: readelf.c:17241
 msgid "NT_PROCSTAT_PROC (proc data)"
 msgstr ""
 
-#: readelf.c:17172
+#: readelf.c:17243
 msgid "NT_PROCSTAT_FILES (files data)"
 msgstr ""
 
-#: readelf.c:17174
+#: readelf.c:17245
 msgid "NT_PROCSTAT_VMMAP (vmmap data)"
 msgstr ""
 
-#: readelf.c:17176
+#: readelf.c:17247
 msgid "NT_PROCSTAT_GROUPS (groups data)"
 msgstr ""
 
-#: readelf.c:17178
+#: readelf.c:17249
 msgid "NT_PROCSTAT_UMASK (umask data)"
 msgstr ""
 
-#: readelf.c:17180
+#: readelf.c:17251
 msgid "NT_PROCSTAT_RLIMIT (rlimit data)"
 msgstr ""
 
-#: readelf.c:17182
+#: readelf.c:17253
 msgid "NT_PROCSTAT_OSREL (osreldate data)"
 msgstr ""
 
-#: readelf.c:17184
+#: readelf.c:17255
 msgid "NT_PROCSTAT_PSSTRINGS (ps_strings data)"
 msgstr ""
 
-#: readelf.c:17186
+#: readelf.c:17257
 msgid "NT_PROCSTAT_AUXV (auxv data)"
 msgstr ""
 
-#: readelf.c:17188
+#: readelf.c:17259
 msgid "NT_PTLWPINFO (ptrace_lwpinfo structure)"
 msgstr ""
 
-#: readelf.c:17199
+#: readelf.c:17270
 msgid "NetBSD procinfo structure"
 msgstr ""
 
-#: readelf.c:17225 readelf.c:17239
+#: readelf.c:17296 readelf.c:17310
 msgid "PT_GETREGS (reg structure)"
 msgstr ""
 
-#: readelf.c:17227 readelf.c:17241
+#: readelf.c:17298 readelf.c:17312
 msgid "PT_GETFPREGS (fpreg structure)"
 msgstr ""
 
-#: readelf.c:17260
+#: readelf.c:17331
 msgid "NT_STAPSDT (SystemTap probe descriptors)"
 msgstr ""
 
-#: readelf.c:17293
+#: readelf.c:17364
 #, c-format
 msgid "    Provider: %s\n"
 msgstr ""
 
-#: readelf.c:17294
+#: readelf.c:17365
 #, c-format
 msgid "    Name: %s\n"
 msgstr ""
 
-#: readelf.c:17295
+#: readelf.c:17366
 #, c-format
 msgid "    Location: "
 msgstr ""
 
-#: readelf.c:17297
+#: readelf.c:17368
 #, c-format
 msgid ", Base: "
 msgstr ""
 
-#: readelf.c:17299
+#: readelf.c:17370
 #, c-format
 msgid ", Semaphore: "
 msgstr ""
 
-#: readelf.c:17302
+#: readelf.c:17373
 #, c-format
 msgid "    Arguments: %s\n"
 msgstr ""
 
-#: readelf.c:17315
+#: readelf.c:17386
 msgid "NT_VMS_MHD (module header)"
 msgstr ""
 
-#: readelf.c:17317
+#: readelf.c:17388
 msgid "NT_VMS_LNM (language name)"
 msgstr ""
 
-#: readelf.c:17319
+#: readelf.c:17390
 msgid "NT_VMS_SRC (source files)"
 msgstr ""
 
-#: readelf.c:17323
+#: readelf.c:17394
 msgid "NT_VMS_EIDC (consistency check)"
 msgstr ""
 
-#: readelf.c:17325
+#: readelf.c:17396
 msgid "NT_VMS_FPMODE (FP mode)"
 msgstr ""
 
-#: readelf.c:17329
+#: readelf.c:17400
 msgid "NT_VMS_IMGNAM (image name)"
 msgstr ""
 
-#: readelf.c:17331
+#: readelf.c:17402
 msgid "NT_VMS_IMGID (image id)"
 msgstr ""
 
-#: readelf.c:17333
+#: readelf.c:17404
 msgid "NT_VMS_LINKID (link id)"
 msgstr ""
 
-#: readelf.c:17335
+#: readelf.c:17406
 msgid "NT_VMS_IMGBID (build id)"
 msgstr ""
 
-#: readelf.c:17337
+#: readelf.c:17408
 msgid "NT_VMS_GSTNAM (sym table name)"
 msgstr ""
 
-#: readelf.c:17357
+#: readelf.c:17428
 #, c-format
 msgid "    Creation date  : %.17s\n"
 msgstr ""
 
-#: readelf.c:17358
+#: readelf.c:17429
 #, c-format
 msgid "    Last patch date: %.17s\n"
 msgstr ""
 
-#: readelf.c:17359
+#: readelf.c:17430
 #, c-format
 msgid "    Module name    : %s\n"
 msgstr ""
 
-#: readelf.c:17360
+#: readelf.c:17431
 #, c-format
 msgid "    Module version : %s\n"
 msgstr ""
 
-#: readelf.c:17363
+#: readelf.c:17434
 #, c-format
 msgid "    Invalid size\n"
 msgstr ""
 
-#: readelf.c:17366
+#: readelf.c:17437
 #, c-format
 msgid "   Language: %s\n"
 msgstr ""
 
-#: readelf.c:17370
+#: readelf.c:17441
 #, c-format
 msgid "   Floating Point mode: "
 msgstr ""
 
-#: readelf.c:17375
+#: readelf.c:17446
 #, c-format
 msgid "   Link time: "
 msgstr ""
 
-#: readelf.c:17381
+#: readelf.c:17452
 #, c-format
 msgid "   Patch time: "
 msgstr ""
 
-#: readelf.c:17387
+#: readelf.c:17458
 #, c-format
 msgid "   Major id: %u,  minor id: %u\n"
 msgstr ""
 
-#: readelf.c:17390
+#: readelf.c:17461
 #, c-format
 msgid "   Last modified  : "
 msgstr ""
 
-#: readelf.c:17393
+#: readelf.c:17464
 #, c-format
 msgid ""
 "\n"
 "   Link flags  : "
 msgstr ""
 
-#: readelf.c:17396
+#: readelf.c:17467
 #, c-format
 msgid "   Header flags: 0x%08x\n"
 msgstr ""
 
-#: readelf.c:17398
+#: readelf.c:17469
 #, c-format
 msgid "   Image id    : %s\n"
 msgstr ""
 
-#: readelf.c:17402
+#: readelf.c:17473
 #, c-format
 msgid "    Image name: %s\n"
 msgstr ""
 
-#: readelf.c:17405
+#: readelf.c:17476
 #, c-format
 msgid "    Global symbol table name: %s\n"
 msgstr ""
 
-#: readelf.c:17408
+#: readelf.c:17479
 #, c-format
 msgid "    Image id: %s\n"
 msgstr ""
 
-#: readelf.c:17411
+#: readelf.c:17482
 #, c-format
 msgid "    Linker id: %s\n"
 msgstr ""
 
-#: readelf.c:17562 readelf.c:17570
+#: readelf.c:17640 readelf.c:17648
 #, c-format
 msgid "    Applies to region from %#lx to %#lx\n"
 msgstr ""
 
-#: readelf.c:17565 readelf.c:17572
+#: readelf.c:17643 readelf.c:17650
 #, c-format
 msgid "    Applies to region from %#lx\n"
 msgstr ""
 
-#: readelf.c:17601
+#: readelf.c:17679
 #, c-format
 msgid "    <invalid description size: %lx>\n"
 msgstr ""
 
-#: readelf.c:17602
+#: readelf.c:17680
 #, c-format
 msgid "    <invalid descsz>"
 msgstr ""
 
-#: readelf.c:17616
+#: readelf.c:17700
 #, c-format
 msgid "Gap in build notes detected from %#lx to %#lx\n"
 msgstr ""
 
-#: readelf.c:17619 readelf.c:17630
+#: readelf.c:17703 readelf.c:17714
 #, c-format
 msgid "    Applies to region from %#lx"
 msgstr ""
 
-#: readelf.c:17624 readelf.c:17635
+#: readelf.c:17708 readelf.c:17719
 #, c-format
 msgid " to %#lx"
 msgstr ""
 
-#: readelf.c:17641
+#: readelf.c:17725
 #, c-format
 msgid " (%s)"
 msgstr ""
 
-#: readelf.c:17662 readelf.c:17677
+#: readelf.c:17746 readelf.c:17761
 #, c-format
 msgid "corrupt name field in GNU build attribute note: size = %ld\n"
 msgstr ""
 
-#: readelf.c:17663 readelf.c:17678
+#: readelf.c:17747 readelf.c:17762
 msgid "  <corrupt name>"
 msgstr ""
 
-#: readelf.c:17697
+#: readelf.c:17781
 #, c-format
 msgid "unrecognised attribute type in name field: %d\n"
 msgstr ""
 
-#: readelf.c:17698
+#: readelf.c:17782
 msgid "<unknown name type>"
 msgstr ""
 
-#: readelf.c:17708
+#: readelf.c:17792
 msgid "<version>"
 msgstr ""
 
-#: readelf.c:17713
+#: readelf.c:17797
 msgid "<stack prot>"
 msgstr ""
 
-#: readelf.c:17718
+#: readelf.c:17802
 msgid "<relro>"
 msgstr ""
 
-#: readelf.c:17723
+#: readelf.c:17807
 msgid "<stack size>"
 msgstr ""
 
-#: readelf.c:17728
+#: readelf.c:17812
 msgid "<tool>"
 msgstr ""
 
-#: readelf.c:17733
+#: readelf.c:17817
 msgid "<ABI>"
 msgstr ""
 
-#: readelf.c:17738
+#: readelf.c:17822
 msgid "<PIC>"
 msgstr ""
 
-#: readelf.c:17743
+#: readelf.c:17827
 msgid "<short enum>"
 msgstr ""
 
-#: readelf.c:17762
+#: readelf.c:17846
 #, c-format
 msgid "unrecognised byte in name field: %d\n"
 msgstr ""
 
-#: readelf.c:17763
+#: readelf.c:17847
 #, c-format
 msgid "<unknown:_%d>"
 msgstr ""
 
-#: readelf.c:17775
+#: readelf.c:17859
 #, c-format
 msgid "attribute does not have an expected type (%c)\n"
 msgstr ""
 
-#: readelf.c:17779
+#: readelf.c:17863
 #, c-format
 msgid "corrupt name field: namesz: %lu but parsing gets to %ld\n"
 msgstr ""
 
-#: readelf.c:17806
+#: readelf.c:17890
 #, c-format
 msgid "corrupt numeric name field: too many bytes in the value: %x\n"
 msgstr ""
 
-#: readelf.c:17974
+#: readelf.c:18058
 #, c-format
 msgid "   description data: "
 msgstr ""
 
-#: readelf.c:18013
+#: readelf.c:18097
 msgid "notes"
 msgstr ""
 
-#: readelf.c:18021
+#: readelf.c:18105
 #, c-format
 msgid ""
 "\n"
 "Displaying notes found in: %s\n"
 msgstr ""
 
-#: readelf.c:18023
+#: readelf.c:18107
 #, c-format
 msgid ""
 "\n"
 "Displaying notes found at file offset 0x%08lx with length 0x%08lx:\n"
 msgstr ""
 
-#: readelf.c:18035
+#: readelf.c:18119
 #, c-format
 msgid "Corrupt note: alignment %ld, expecting 4 or 8\n"
 msgstr ""
 
-#: readelf.c:18040
+#: readelf.c:18124
 #, c-format
 msgid "  %-20s %10s\tDescription\n"
 msgstr ""
 
-#: readelf.c:18040
+#: readelf.c:18124
 msgid "Owner"
 msgstr ""
 
-#: readelf.c:18040
+#: readelf.c:18124
 msgid "Data size"
 msgstr ""
 
-#: readelf.c:18058 readelf.c:18087
+#: readelf.c:18142 readelf.c:18171
 #, c-format
 msgid "Corrupt note: only %ld byte remains, not enough for a full note\n"
 msgid_plural ""
@@ -10349,25 +9936,25 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:18115
+#: readelf.c:18199
 #, c-format
 msgid "note with invalid namesz and/or descsz found at offset 0x%lx\n"
 msgstr ""
 
-#: readelf.c:18117
+#: readelf.c:18201
 #, c-format
 msgid " type: 0x%lx, namesize: 0x%08lx, descsize: 0x%08lx, alignment: %u\n"
 msgstr ""
 
-#: readelf.c:18135
+#: readelf.c:18219
 msgid "Out of memory allocating space for inote name\n"
 msgstr ""
 
-#: readelf.c:18198
+#: readelf.c:18282
 msgid "v850 notes"
 msgstr ""
 
-#: readelf.c:18205
+#: readelf.c:18289
 #, c-format
 msgid ""
 "\n"
@@ -10375,75 +9962,75 @@ msgid ""
 "length 0x%lx:\n"
 msgstr ""
 
-#: readelf.c:18222
+#: readelf.c:18306
 #, c-format
 msgid "Corrupt note: name size is too big: %lx\n"
 msgstr ""
 
-#: readelf.c:18232
+#: readelf.c:18316
 #, c-format
 msgid "corrupt descsz found in note at offset 0x%lx\n"
 msgstr ""
 
-#: readelf.c:18234 readelf.c:18247
+#: readelf.c:18318 readelf.c:18331
 #, c-format
 msgid " type: 0x%lx, namesize: 0x%lx, descsize: 0x%lx\n"
 msgstr ""
 
-#: readelf.c:18245
+#: readelf.c:18329
 #, c-format
 msgid "corrupt namesz found in note at offset 0x%lx\n"
 msgstr ""
 
-#: readelf.c:18323
+#: readelf.c:18407
 #, c-format
 msgid "No note segments present in the core file.\n"
 msgstr ""
 
-#: readelf.c:18331
+#: readelf.c:18415
 #, c-format
 msgid "  Unknown GNU attribute: %s\n"
 msgstr ""
 
-#: readelf.c:18466
+#: readelf.c:18550
 msgid ""
 "This instance of readelf has been built without support for a\n"
 "64 bit data type and so it cannot read 64 bit ELF files.\n"
 msgstr ""
 
-#: readelf.c:18589
+#: readelf.c:18673
 #, c-format
 msgid "%s: Failed to read file header\n"
 msgstr ""
 
-#: readelf.c:18603
+#: readelf.c:18687
 #, c-format
 msgid ""
 "\n"
 "File: %s\n"
 msgstr ""
 
-#: readelf.c:18789
+#: readelf.c:18873
 #, c-format
 msgid "%s: unable to dump the index as none was found\n"
 msgstr ""
 
-#: readelf.c:18795
+#: readelf.c:18879
 #, c-format
 msgid "Index of archive %s: (%lu entries, 0x%lx bytes in the symbol table)\n"
 msgstr ""
 
-#: readelf.c:18814
+#: readelf.c:18898
 #, c-format
 msgid "Contents of binary %s at offset "
 msgstr ""
 
-#: readelf.c:18824
+#: readelf.c:18908
 #, c-format
 msgid "%s: end of the symbol table reached before the end of the index\n"
 msgstr ""
 
-#: readelf.c:18841
+#: readelf.c:18925
 #, c-format
 msgid ""
 "%s: %ld byte remains in the symbol table, but without corresponding entries "
@@ -10454,36 +10041,36 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: readelf.c:18854
+#: readelf.c:18938
 #, c-format
 msgid "%s: failed to seek back to start of object files in the archive\n"
 msgstr ""
 
-#: readelf.c:18938 readelf.c:19050
+#: readelf.c:19022 readelf.c:19134
 #, c-format
 msgid "Input file '%s' is not readable.\n"
 msgstr ""
 
-#: readelf.c:18962
+#: readelf.c:19046
 #, c-format
 msgid "%s: contains corrupt thin archive: %s\n"
 msgstr ""
 
-#: readelf.c:18975
+#: readelf.c:19059
 #, c-format
 msgid "%s: failed to seek to archive member.\n"
 msgstr ""
 
-#: readelf.c:19042
+#: readelf.c:19126
 msgid "Out of memory allocating file data structure\n"
 msgstr ""
 
-#: readelf.c:19078
+#: readelf.c:19162
 #, c-format
 msgid "File %s is not an archive so its index cannot be displayed.\n"
 msgstr ""
 
-#: readelf.c:19137
+#: readelf.c:19221
 msgid "Nothing to do.\n"
 msgstr ""
 
@@ -11008,140 +10595,144 @@ msgid ""
 "  -v --version     Print the program's version number\n"
 msgstr ""
 
+#: srconv.c:1788
+msgid "input and output files must be different"
+msgstr ""
+
 #: srconv.c:1844
 #, c-format
 msgid "unable to open output file %s"
 msgstr ""
 
-#: stabs.c:331 stabs.c:1726
+#: stabs.c:342 stabs.c:1770
 msgid "numeric overflow"
 msgstr ""
 
-#: stabs.c:341
+#: stabs.c:352
 #, c-format
 msgid "Bad stab: %s\n"
 msgstr ""
 
-#: stabs.c:349
+#: stabs.c:360
 #, c-format
 msgid "Warning: %s: %s\n"
 msgstr ""
 
-#: stabs.c:459
+#: stabs.c:472
 #, c-format
 msgid "N_LBRAC not within function\n"
 msgstr ""
 
-#: stabs.c:498
+#: stabs.c:511
 #, c-format
 msgid "Too many N_RBRACs\n"
 msgstr ""
 
-#: stabs.c:730
+#: stabs.c:744
 msgid "unknown C++ encoded name"
 msgstr ""
 
 #. Complain and keep going, so compilers can invent new
 #. cross-reference types.
-#: stabs.c:1271
+#: stabs.c:1305
 msgid "unrecognized cross reference type"
 msgstr ""
 
 #. Does this actually ever happen?  Is that why we are worrying
 #. about dealing with it rather than just calling error_type?
-#: stabs.c:1818
+#: stabs.c:1862
 msgid "missing index type"
 msgstr ""
 
-#: stabs.c:2146
+#: stabs.c:2214
 msgid "unknown virtual character for baseclass"
 msgstr ""
 
-#: stabs.c:2164
+#: stabs.c:2235
 msgid "unknown visibility character for baseclass"
 msgstr ""
 
-#: stabs.c:2354
+#: stabs.c:2440
 msgid "unnamed $vb type"
 msgstr ""
 
-#: stabs.c:2360
+#: stabs.c:2446
 msgid "unrecognized C++ abbreviation"
 msgstr ""
 
-#: stabs.c:2436
+#: stabs.c:2531
 msgid "unknown visibility character for field"
 msgstr ""
 
-#: stabs.c:2696
+#: stabs.c:2800
 msgid "const/volatile indicator missing"
 msgstr ""
 
-#: stabs.c:2938
+#: stabs.c:3043
 #, c-format
 msgid "No mangling for \"%s\"\n"
 msgstr ""
 
-#: stabs.c:3238
+#: stabs.c:3356
 msgid "Undefined N_EXCL"
 msgstr ""
 
-#: stabs.c:3318
+#: stabs.c:3436
 #, c-format
 msgid "Type file number %d out of range\n"
 msgstr ""
 
-#: stabs.c:3323
+#: stabs.c:3441
 #, c-format
 msgid "Type index number %d out of range\n"
 msgstr ""
 
-#: stabs.c:3402
+#: stabs.c:3520
 #, c-format
 msgid "Unrecognized XCOFF type %d\n"
 msgstr ""
 
-#: stabs.c:3695
+#: stabs.c:3813
 #, c-format
 msgid "bad mangled name `%s'\n"
 msgstr ""
 
-#: stabs.c:3790
+#: stabs.c:3908
 #, c-format
 msgid "no argument types in mangled string\n"
 msgstr ""
 
-#: stabs.c:5140
+#: stabs.c:5258
 #, c-format
 msgid "Demangled name is not a function\n"
 msgstr ""
 
-#: stabs.c:5182
+#: stabs.c:5300
 #, c-format
 msgid "Unexpected type in v3 arglist demangling\n"
 msgstr ""
 
-#: stabs.c:5254
+#: stabs.c:5372
 #, c-format
 msgid "Unrecognized demangle component %d\n"
 msgstr ""
 
-#: stabs.c:5306
+#: stabs.c:5424
 #, c-format
 msgid "Failed to print demangled template\n"
 msgstr ""
 
-#: stabs.c:5386
+#: stabs.c:5504
 #, c-format
 msgid "Couldn't get demangled builtin type\n"
 msgstr ""
 
-#: stabs.c:5435
+#: stabs.c:5553
 #, c-format
 msgid "Unexpected demangled varargs\n"
 msgstr ""
 
-#: stabs.c:5442
+#: stabs.c:5560
 #, c-format
 msgid "Unrecognized demangled builtin type\n"
 msgstr ""
index eecc05b3fa65246809004ca651e9799ba958ffd3..0c676f2b228510d31d5781265f1a0f8be82bb172 100644 (file)
 #include "elf/mt.h"
 #include "elf/msp430.h"
 #include "elf/nds32.h"
+#include "elf/nfp.h"
 #include "elf/nios2.h"
 #include "elf/or1k.h"
 #include "elf/pj.h"
@@ -776,6 +777,7 @@ guess_is_rela (unsigned int e_machine)
     case EM_CYGNUS_M32R:
     case EM_SCORE:
     case EM_XGATE:
+    case EM_NFP:
       return FALSE;
 
       /* Targets that use RELA relocations.  */
@@ -1560,6 +1562,13 @@ dump_relocations (Filedata *          filedata,
        case EM_TI_PRU:
          rtype = elf_pru_reloc_type (type);
          break;
+
+       case EM_NFP:
+         if (EF_NFP_MACH (filedata->file_header.e_flags) == E_NFP_MACH_3200)
+           rtype = elf_nfp3200_reloc_type (type);
+         else
+           rtype = elf_nfp_reloc_type (type);
+         break;
        }
 
       if (rtype == NULL)
@@ -2472,6 +2481,7 @@ get_machine_name (unsigned e_machine)
     case EM_RISCV:             return "RISC-V";
     case EM_LANAI:             return "Lanai 32-bit processor";
     case EM_BPF:               return "Linux BPF";
+    case EM_NFP:               return "Netronome Flow Processor";
 
       /* Large numbers...  */
     case EM_MT:                 return "Morpho Techologies MT processor";
@@ -3440,6 +3450,18 @@ get_machine_flags (Filedata * filedata, unsigned e_flags, unsigned e_machine)
          decode_NDS32_machine_flags (e_flags, buf, sizeof buf);
          break;
 
+       case EM_NFP:
+         switch (EF_NFP_MACH (e_flags))
+           {
+           case E_NFP_MACH_3200:
+             strcat (buf, ", NFP-32xx");
+             break;
+           case E_NFP_MACH_6000:
+             strcat (buf, ", NFP-6xxx");
+             break;
+           }
+         break;
+
        case EM_RISCV:
          if (e_flags & EF_RISCV_RVC)
            strcat (buf, ", RVC");
@@ -4135,6 +4157,18 @@ get_msp430x_section_type_name (unsigned int sh_type)
     }
 }
 
+static const char *
+get_nfp_section_type_name (unsigned int sh_type)
+{
+  switch (sh_type)
+    {
+    case SHT_NFP_MECONFIG:     return "NFP_MECONFIG";
+    case SHT_NFP_INITREG:      return "NFP_INITREG";
+    case SHT_NFP_UDEBUG:       return "NFP_UDEBUG";
+    default:                   return NULL;
+    }
+}
+
 static const char *
 get_v850_section_type_name (unsigned int sh_type)
 {
@@ -4221,6 +4255,9 @@ get_section_type_name (Filedata * filedata, unsigned int sh_type)
            case EM_MSP430:
              result = get_msp430x_section_type_name (sh_type);
              break;
+           case EM_NFP:
+             result = get_nfp_section_type_name (sh_type);
+             break;
            case EM_V800:
            case EM_V850:
            case EM_CYGNUS_V850:
diff --git a/binutils/testsuite/binutils-all/nfp/objdump.exp b/binutils/testsuite/binutils-all/nfp/objdump.exp
new file mode 100644 (file)
index 0000000..3762d90
--- /dev/null
@@ -0,0 +1,52 @@
+#   Copyright (C) 2004-2018 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
+
+if {![istarget nfp*-*-*]} {
+  return
+}
+
+if {![is_remote host] && [which $OBJDUMP] == 0} then {
+  perror "$OBJDUMP does not exist"
+  return
+}
+
+send_user "Version [binutil_version $OBJDUMP]"
+
+set outfile "tmpdir/dump.out"
+
+set testname "NFP dissasembler NFP-6xxx instructions"
+set dumpfile "$srcdir/$subdir/test1.d"
+remote_exec host "${OBJDUMP} -d $srcdir/$subdir/test1_nfp6000.nffw" "" "/dev/null" "$outfile"
+if { [regexp_diff "${outfile}" "${dumpfile}"] } then {
+  fail $testname
+  return
+}
+
+set testname "NFP dissasembler options: no-pc,ctx4"
+set dumpfile "$srcdir/$subdir/test2_no-pc_ctx4.d"
+remote_exec host "${OBJDUMP} -M no-pc,ctx4 -d $srcdir/$subdir/test2_nfp6000.nffw" "" "/dev/null" "$outfile"
+if { [regexp_diff "${outfile}" "${dumpfile}"] } then {
+  fail $testname
+  return
+}
+
+set testname "NFP dissasembler options: ctx8"
+set dumpfile "$srcdir/$subdir/test2_ctx8.d"
+remote_exec host "${OBJDUMP} -M ctx8 -d $srcdir/$subdir/test2_nfp6000.nffw" "" "/dev/null" "$outfile"
+if { [regexp_diff "${outfile}" "${dumpfile}"] } then {
+  fail $testname
+  return
+}
diff --git a/binutils/testsuite/binutils-all/nfp/test1.d b/binutils/testsuite/binutils-all/nfp/test1.d
new file mode 100644 (file)
index 0000000..3915ed1
--- /dev/null
@@ -0,0 +1,973 @@
+
+.*:     file format elf64-nfp
+
+
+Disassembly of section \.text\.i32\.me0:
+
+0000000000000000 <\.text\.i32\.me0>:
+   0:  000540f0012cd000          \.0  immed\[gprA_0, 0x1234\]
+   8:  0002c0f0012cd280          \.1  immed\[n\$reg_0, 0x1234\]
+  10:  000220f0012cd281          \.2  immed\[n\$reg_1, 0x1234\]
+  18:  000660f0012cd200          \.3  immed\[\*l\$index0, 0x1234\]
+  20:  0007c0f0012cd220          \.4  immed\[\*l\$index1, 0x1234\]
+  28:  000fa0f0012cd230          \.5  immed\[\*l\$index1\+\+, 0x1234\]
+  30:  000f40f0012cd231          \.6  immed\[\*l\$index1--, 0x1234\]
+  38:  0008c8f0012cd200          \.7  immed\[\*l\$index2, 0x1234\]
+  40:  0000a8f0012cd210          \.8  immed\[\*l\$index2\+\+, 0x1234\]
+  48:  000048f0012cd211          \.9  immed\[\*l\$index2--, 0x1234\]
+  50:  000968f0012cd220         \.10  immed\[\*l\$index3, 0x1234\]
+  58:  0007e0f0012cd203         \.11  immed\[\*l\$index0\[3\], 0x1234\]
+  60:  000540f0012cd225         \.12  immed\[\*l\$index1\[5\], 0x1234\]
+  68:  000b28f0012cd207         \.13  immed\[\*l\$index2\[7\], 0x1234\]
+  70:  000de8f0012cd229         \.14  immed\[\*l\$index3\[9\], 0x1234\]
+  78:  000000f00ff003ff         \.15  immed\[gprB_0, 0xffff\]
+  80:  000d60f220000bff         \.16  immed_b1\[gprB_2, 0xff\]
+  88:  000f60f6200007ff         \.17  immed_b3\[gprB_1, 0xff\]
+  90:  000080f080000f00         \.18  immed\[gprB_3, 0xffffffff\]
+  98:  000100f086600f77         \.19  immed\[gprB_3, 0xffff9988\]
+  a0:  000940f0012cd180         \.20  immed\[\$xfer_0, 0x1234\]
+  a8:  000a00f0043c8581         \.21  immed\[\$xfer_1, 0x4321\]
+  b0:  000180f0056de1ce         \.22  immed\[\$xfer_30, 0x5678\]
+  b8:  0007c0f0400e8401         \.23  immed_w0\[gprA_1, 0xa1\]
+  c0:  000440f4400e8802         \.24  immed_w1\[gprA_2, 0xa2\]
+  c8:  000d00f4000e8c03         \.25  immed\[gprA_3, 0xa3, <<16\]
+  d0:  000520f001200334         \.26  immed\[gprB_0, 0x1234\]
+  d8:  000fa0f0400007b1         \.27  immed_w0\[gprB_1, 0xb1\]
+  e0:  000c20f440000bb2         \.28  immed_w1\[gprB_2, 0xb2\]
+  e8:  000560f400000fb3         \.29  immed\[gprB_3, 0xb3, <<16\]
+  f0:  000660f200000fb3         \.30  immed\[gprB_3, 0xb3, <<8\]
+  f8:  0001b0f200000fb3         \.31  immed\[gprB_3, 0xb3, <<8\], predicate_cc
+ 100:  0001c2f200000fb3         \.32  immed\[gprB_3, 0xb3, <<8\], gpr_wrboth
+ 108:  000ba0a0300c2f00         \.33  alu\[--, --, B, 0xb\]
+ 110:  0005a081f200da00         \.34  alu_shf\[--, --, B, 0x16, <<1\]
+ 118:  000be081d2018600         \.35  alu_shf\[--, --, B, 0x21, <<3\]
+ 120:  000240801201b200         \.36  alu_shf\[--, --, B, 0x2c, <<31\]
+ 128:  000fa081f800da00         \.37  alu_shf\[\$xfer_0, --, B, 0x16, <<1\]
+ 130:  0009e081f840da00         \.38  alu_shf\[\$xfer_4, --, B, 0x16, <<1\]
+ 138:  00006081fc80da00         \.39  alu_shf\[\$xfer_24, --, B, 0x16, <<1\]
+ 140:  000a2081fcf0da00         \.40  alu_shf\[\$xfer_31, --, B, 0x16, <<1\]
+ 148:  0004a0a0280c2f00         \.41  alu\[n\$reg_0, --, B, 0xb\]
+ 150:  0001e0a0281c2f00         \.42  alu\[n\$reg_1, --, B, 0xb\]
+ 158:  000880a0a00c2400         \.43  alu\[\*l\$index0, gprA_0, \+, 0x9\]
+ 160:  000100a0a43c2400         \.44  alu\[\*n\$index\+\+, gprA_0, \+, 0x9\]
+ 168:  000b208bc500a600         \.45  alu_shf\[\*l\$index0, gprA_0, OR, 0x9, <<4\]
+ 170:  000b00a0a20c2400         \.46  alu\[\*l\$index1, gprA_0, \+, 0x9\]
+ 178:  000740a0a30c2400         \.47  alu\[\*l\$index1\+\+, gprA_0, \+, 0x9\]
+ 180:  000200a0a31c2400         \.48  alu\[\*l\$index1--, gprA_0, \+, 0x9\]
+ 188:  000628a0a00c2400         \.49  alu\[\*l\$index2, gprA_0, \+, 0x9\]
+ 190:  000988aa210c2400         \.50  alu\[\*l\$index2\+\+, gprA_0, OR, 0x9\]
+ 198:  000f28a0a11c2400         \.51  alu\[\*l\$index2--, gprA_0, \+, 0x9\]
+ 1a0:  0005a8a0a20c2400         \.52  alu\[\*l\$index3, gprA_0, \+, 0x9\]
+ 1a8:  000480a0a03c2400         \.53  alu\[\*l\$index0\[3\], gprA_0, \+, 0x9\]
+ 1b0:  000800a0a25c2400         \.54  alu\[\*l\$index1\[5\], gprA_0, \+, 0x9\]
+ 1b8:  000c68a0a07c2400         \.55  alu\[\*l\$index2\[7\], gprA_0, \+, 0x9\]
+ 1c0:  000aa8a0a29c2400         \.56  alu\[\*l\$index3\[9\], gprA_0, \+, 0x9\]
+ 1c8:  000cc4b0c008a400         \.57  alu\[gprB_0, \*l\$index3\[9\], \+, gprA_0\]
+ 1d0:  000fe4b0c008c000         \.58  alu\[gprB_0, \*l\$index3\+\+, \+, gprA_0\]
+ 1d8:  000ac4b0c008c400         \.59  alu\[gprB_0, \*l\$index3--, \+, gprA_0\]
+ 1e0:  000bc4b080000229         \.60  alu\[gprB_0, \*l\$index3\[9\], \+, gprB_0\]
+ 1e8:  000724b080000230         \.61  alu\[gprB_0, \*l\$index3\+\+, \+, gprB_0\]
+ 1f0:  0007c4b080000231         \.62  alu\[gprB_0, \*l\$index3--, \+, gprB_0\]
+ 1f8:  000664b080000211         \.63  alu\[gprB_0, \*l\$index2--, \+, gprB_0\]
+ 200:  000a60b080000231         \.64  alu\[gprB_0, \*l\$index1--, \+, gprB_0\]
+ 208:  000bc0b080000211         \.65  alu\[gprB_0, \*l\$index0--, \+, gprB_0\]
+ 210:  000340b080000200         \.66  alu\[gprB_0, \*l\$index0, \+, gprB_0\]
+ 218:  000ee4b080000200         \.67  alu\[gprB_0, \*l\$index2, \+, gprB_0\]
+ 220:  000100b080000241         \.68  alu\[gprB_0, \*n\$index, \+, gprB_0\]
+ 228:  0004809bf0000241         \.69  alu_shf\[gprB_0, \*n\$index, OR, gprB_0, <<1\]
+ 230:  000f20a0001fff00         \.70  alu\[gprA_1, --, B, 0xff\]
+ 238:  0005c0b0002fff00         \.71  alu\[gprB_2, --, B, 0xff\]
+ 240:  000940a0000d6f00         \.72  alu\[gprA_0, --, B, 0x5b\]
+ 248:  000440a2000d6f00         \.73  alu\[gprA_0, --, ~B, 0x5b\]
+ 250:  000de081f032f200         \.74  alu_shf\[gprA_3, --, B, 0x5c, <<1\]
+ 258:  000de091d012f600         \.75  alu_shf\[gprB_1, --, B, 0x5d, <<3\]
+ 260:  000d60901022fa00         \.76  alu_shf\[gprB_2, --, B, 0x5e, <<31\]
+ 268:  000e40a0c0000402         \.77  alu\[gprA_0, gprB_1, \+, gprA_2\]
+ 270:  000340a2c0000402         \.78  alu\[gprA_0, gprB_1, \+16, gprA_2\]
+ 278:  000040a4c0000402         \.79  alu\[gprA_0, gprB_1, \+8, gprA_2\]
+ 280:  0007a0a8c0000402         \.80  alu\[gprA_0, gprB_1, \+carry, gprA_2\]
+ 288:  000d40a6c0000402         \.81  alu\[gprA_0, gprB_1, -carry, gprA_2\]
+ 290:  000aa0aac0000402         \.82  alu\[gprA_0, gprB_1, -, gprA_2\]
+ 298:  0009a0acc0000402         \.83  alu\[gprA_0, gprB_1, B-A, gprA_2\]
+ 2a0:  000da0aa40000402         \.84  alu\[gprA_0, gprB_1, OR, gprA_2\]
+ 2a8:  000740a440000402         \.85  alu\[gprA_0, gprB_1, AND, gprA_2\]
+ 2b0:  000a40a640000402         \.86  alu\[gprA_0, gprB_1, ~AND, gprA_2\]
+ 2b8:  0000a0a840000402         \.87  alu\[gprA_0, gprB_1, AND~, gprA_2\]
+ 2c0:  000ea0ac40000402         \.88  alu\[gprA_0, gprB_1, XOR, gprA_2\]
+ 2c8:  000321a0c0000402         \.89  alu\[gprA_0, gprB_1, \+, gprA_2\], no_cc
+ 2d0:  000990a0c0000402         \.90  alu\[gprA_0, gprB_1, \+, gprA_2\], predicate_cc
+ 2d8:  0009e2a0c0000402         \.91  alu\[gprA_0, gprB_1, \+, gprA_2\], gpr_wrboth
+ 2e0:  000353a0c0000402         \.92  alu\[gprA_0, gprB_1, \+, gprA_2\], no_cc, gpr_wrboth, predicate_cc
+ 2e8:  000d418b70080602         \.93  alu_shf\[gprA_0, gprB_1, OR, gprA_2, <<9\], no_cc
+ 2f0:  0006708a90080502         \.94  alu_shf\[gprA_0, gprB_1, OR, gprA_2, >>9\], predicate_cc
+ 2f8:  000ea28a90080402         \.95  alu_shf\[gprA_0, gprB_1, OR, gprA_2, >>rot9\], gpr_wrboth
+ 300:  000e138b70080402         \.96  alu_shf\[gprA_0, gprB_1, OR, gprA_2, >>rot23\], no_cc, gpr_wrboth, predicate_cc
+ 308:  000ba08a00080602         \.97  alu_shf\[gprA_0, gprB_1, OR, gprA_2, <<indirect\]
+ 310:  0000208a00080502         \.98  alu_shf\[gprA_0, gprB_1, OR, gprA_2, >>indirect\]
+ 318:  000ba0a0300c2f00         \.99  alu\[--, --, B, 0xb\]
+ 320:  000ae09d40380101        \.100  asr\[gprB_3, gprA_1, >>20\]
+ 328:  000ba0a0300c2f00        \.101  alu\[--, --, B, 0xb\]
+ 330:  000ea09d40310500        \.102  asr\[gprB_3, \*n\$index, >>20\]
+ 338:  000ba0a0300c2f00        \.103  alu\[--, --, B, 0xb\]
+ 340:  0007a09d40314100        \.104  asr\[gprB_3, \*l\$index0, >>20\]
+ 348:  000ba0a0300c2f00        \.105  alu\[--, --, B, 0xb\]
+ 350:  0000249d40316100        \.106  asr\[gprB_3, \*l\$index3, >>20\]
+ 358:  000ba0a0300c2f00        \.107  alu\[--, --, B, 0xb\]
+ 360:  000a049d40314100        \.108  asr\[gprB_3, \*l\$index2, >>20\]
+ 368:  000ba0a0300c2f00        \.109  alu\[--, --, B, 0xb\]
+ 370:  0004a08d45010d00        \.110  asr\[\*l\$index0, \*n\$index\+\+, >>20\]
+ 378:  000ba0a0300c2f00        \.111  alu\[--, --, B, 0xb\]
+ 380:  000ee08d45810d00        \.112  asr\[\*l\$index1, \*n\$index\+\+, >>20\]
+ 388:  000ba0a0300c2f00        \.113  alu\[--, --, B, 0xb\]
+ 390:  000a088d45010d00        \.114  asr\[\*l\$index2, \*n\$index\+\+, >>20\]
+ 398:  000ba0a0300c2f00        \.115  alu\[--, --, B, 0xb\]
+ 3a0:  0007819d40380101        \.116  asr\[gprB_3, gprA_1, >>20\], no_cc
+ 3a8:  000ba0a0300c2f00        \.117  alu\[--, --, B, 0xb\]
+ 3b0:  000d309d40380101        \.118  asr\[gprB_3, gprA_1, >>20\], predicate_cc
+ 3b8:  000ba0a0300c2f00        \.119  alu\[--, --, B, 0xb\]
+ 3c0:  000ba28d40380101        \.120  asr\[gprA_3, gprA_1, >>20\], gpr_wrboth
+ 3c8:  0008c0d818c08120        \.121  beq\[\.99\]
+ 3d0:  000d00d877c08120        \.122  beq\[\.479\]
+ 3d8:  000440d877e08120        \.123  beq\[\.479\], defer\[2\]
+ 3e0:  000000f0000c0300        \.124  nop
+ 3e8:  000000f0000c0300        \.125  nop
+ 3f0:  000540d877c08021        \.126  bne\[\.479\]
+ 3f8:  0004c0d877c08022        \.127  bmi\[\.479\]
+ 400:  000420d877c08023        \.128  bpl\[\.479\]
+ 408:  0007c0d877c08024        \.129  bcs\[\.479\]
+ 410:  0007c0d877c08024        \.130  bcs\[\.479\]
+ 418:  000720d877c08025        \.131  bcc\[\.479\]
+ 420:  000720d877c08025        \.132  bcc\[\.479\]
+ 428:  0006a0d877c08026        \.133  bvs\[\.479\]
+ 430:  000640d877c08027        \.134  bvc\[\.479\]
+ 438:  0001c0d877c08028        \.135  bge\[\.479\]
+ 440:  000120d877c08029        \.136  blt\[\.479\]
+ 448:  000040d877c0802b        \.137  bgt\[\.479\]
+ 450:  0000a0d877c0802a        \.138  ble\[\.479\]
+ 458:  000c60d818c08038        \.139  br\[\.99\]
+ 460:  000920d818d08038        \.140  br\[\.99\], defer\[1\]
+ 468:  000000f0000c0300        \.141  nop
+ 470:  000bc0d077c09000        \.142  br_bclr\[gprA_0, 3, \.479\]
+ 478:  000980d077c0e004        \.143  br_bclr\[gprA_4, 23, \.479\]
+ 480:  0002a0d077c0082c        \.144  br_bclr\[gprB_2, 11, \.479\]
+ 488:  000300d077c02423        \.145  br_bclr\[gprB_9, 2, \.479\]
+ 490:  000260d077c02421        \.146  br_bclr\[gprB_9, 0, \.479\]
+ 498:  000280d077c02420        \.147  br_bclr\[gprB_9, 31, \.479\]
+ 4a0:  000f00d077f02423        \.148  br_bclr\[gprB_9, 2, \.479\], defer\[3\]
+ 4a8:  000000f0000c0300        \.149  nop
+ 4b0:  000000f0000c0300        \.150  nop
+ 4b8:  000000f0000c0300        \.151  nop
+ 4c0:  000680d077c42c2b        \.152  br_bset\[gprB_11, 10, \.479\]
+ 4c8:  0006e0d077c4ac0b        \.153  br_bset\[gprA_11, 10, \.479\]
+ 4d0:  0002a0c877d81020        \.154  br=byte\[gprB_4, 0, 0x0, \.479\], defer\[1\]
+ 4d8:  000000f0000c0300        \.155  nop
+ 4e0:  000a60c877c81520        \.156  br=byte\[gprB_5, 1, 0x0, \.479\]
+ 4e8:  0001e0c877c81620        \.157  br=byte\[gprB_5, 2, 0x0, \.479\]
+ 4f0:  0001a4c877c94220        \.158  br=byte\[\*l\$index2, 2, 0x0, \.479\]
+ 4f8:  000620c877c96220        \.159  br=byte\[\*l\$index1, 2, 0x0, \.479\]
+ 500:  000540c877c81b20        \.160  br=byte\[gprB_6, 3, 0x0, \.479\]
+ 508:  0000c0c877cc16ff        \.161  br=byte\[gprB_5, 2, 0xff, \.479\]
+ 510:  000420c877c816a2        \.162  br=byte\[gprB_5, 2, 0x42, \.479\]
+ 518:  000380c877c416ff        \.163  br!=byte\[gprB_5, 2, 0xff, \.479\]
+ 520:  0002a0c877c01620        \.164  br!=byte\[gprB_5, 2, 0x0, \.479\]
+ 528:  000c20d877c00236        \.165  br_cls_state\[cls_ring0_status, \.479\]
+ 530:  0001a0d877e20236        \.166  br_cls_state\[cls_ring8_status, \.479\], defer\[2\]
+ 538:  000000f0000c0300        \.167  nop
+ 540:  000000f0000c0300        \.168  nop
+ 548:  000be0d877c38236        \.169  br_cls_state\[cls_ring14_status, \.479\]
+ 550:  0007c0d877c3c236        \.170  br_cls_state\[cls_ring15_status, \.479\]
+ 558:  000720d877c3c237        \.171  br_!cls_state\[cls_ring15_status, \.479\]
+ 560:  000cc0d877c00237        \.172  br_!cls_state\[cls_ring0_status, \.479\]
+ 568:  000c00d877c00030        \.173  br=ctx\[0, \.479\]
+ 570:  000dc0d877c08030        \.174  br=ctx\[2, \.479\]
+ 578:  000f00d877c18030        \.175  br=ctx\[6, \.479\]
+ 580:  000a40d877d18030        \.176  br=ctx\[6, \.479\], defer\[1\]
+ 588:  000000f0000c0300        \.177  nop
+ 590:  000d40d877c00234        \.178  br_inp_state\[nn_empty, \.479\]
+ 598:  000160d877c04234        \.179  br_inp_state\[nn_full, \.479\]
+ 5a0:  000c80d877c08234        \.180  br_inp_state\[ctm_ring0_status, \.479\]
+ 5a8:  000100d877e28234        \.181  br_inp_state\[ctm_ring8_status, \.479\], defer\[2\]
+ 5b0:  000000f0000c0300        \.182  nop
+ 5b8:  000000f0000c0300        \.183  nop
+ 5c0:  000a80d877c38234        \.184  br_inp_state\[ctm_ring12_status, \.479\]
+ 5c8:  0006a0d877c3c234        \.185  br_inp_state\[ctm_ring13_status, \.479\]
+ 5d0:  000640d877c3c235        \.186  br_!inp_state\[ctm_ring13_status, \.479\]
+ 5d8:  000c60d877c08235        \.187  br_!inp_state\[ctm_ring0_status, \.479\]
+ 5e0:  000260d877c04232        \.188  br_signal\[1, \.479\]
+ 5e8:  000f80d877c08232        \.189  br_signal\[2, \.479\]
+ 5f0:  0005a0d877c3c232        \.190  br_signal\[15, \.479\]
+ 5f8:  000540d877c3c233        \.191  br_!signal\[15, \.479\]
+ 600:  000b60d877f2c232        \.192  br_signal\[11, \.479\], defer\[3\]
+ 608:  000000f0000c0300        \.193  nop
+ 610:  000000f0000c0300        \.194  nop
+ 618:  000000f0000c0300        \.195  nop
+ 620:  000e40a0c0000402        \.196  alu\[gprA_0, gprB_1, \+, gprA_2\]
+ 628:  0004408e02081200        \.197  byte_align_le\[--, gprB_4\]
+ 630:  0008c08e00981200        \.198  byte_align_le\[gprA_9, gprB_4\]
+ 638:  0004c08e00a81200        \.199  byte_align_le\[gprA_10, gprB_4\]
+ 640:  0001808e00b81200        \.200  byte_align_le\[gprA_11, gprB_4\]
+ 648:  000e40a0c0000402        \.201  alu\[gprA_0, gprB_1, \+, gprA_2\]
+ 650:  000c808e02001100        \.202  byte_align_be\[--, gprB_4\]
+ 658:  0000008e00901100        \.203  byte_align_be\[gprA_9, gprB_4\]
+ 660:  000c008e00a01100        \.204  byte_align_be\[gprA_10, gprB_4\]
+ 668:  0009408e00b01100        \.205  byte_align_be\[gprA_11, gprB_4\]
+ 670:  000d80a0300c0300        \.206  alu\[--, --, B, 0x0\]
+ 678:  000400a5b00c0000        \.207  cam_clear
+ 680:  000360bb80900007        \.208  cam_lookup\[gprB_9, gprA_7\]
+ 688:  0003a0bb80900200        \.209  cam_lookup\[gprB_9, \*l\$index0\]
+ 690:  000e04bb80900200        \.210  cam_lookup\[gprB_9, \*l\$index2\]
+ 698:  000f84bb80900203        \.211  cam_lookup\[gprB_9, \*l\$index2\[3\]\]
+ 6a0:  000bc0bb80900210        \.212  cam_lookup\[gprB_9, \*l\$index0\+\+\]
+ 6a8:  000280aba0000241        \.213  cam_lookup\[\*l\$index0, \*n\$index\]
+ 6b0:  000ec0aba1000241        \.214  cam_lookup\[\*l\$index0\+\+, \*n\$index\]
+ 6b8:  000288aba3000243        \.215  cam_lookup\[\*l\$index3\+\+, \*n\$index\+\+\]
+ 6c0:  000aa0aba0200243        \.216  cam_lookup\[\*l\$index0\[2\], \*n\$index\+\+\]
+ 6c8:  000060bb80901407        \.217  cam_lookup\[gprB_9, gprA_7\], lm_addr0\[1\]
+ 6d0:  000060bb80902807        \.218  cam_lookup\[gprB_9, gprA_7\], lm_addr1\[2\]
+ 6d8:  000660bb80907407        \.219  cam_lookup\[gprB_9, gprA_7\], lm_addr2\[3\]
+ 6e0:  000660bb80904807        \.220  cam_lookup\[gprB_9, gprA_7\], lm_addr3\[0\]
+ 6e8:  000222ab80900007        \.221  cam_lookup\[gprA_9, gprA_7\], gpr_wrboth
+ 6f0:  0004b0bb80900007        \.222  cam_lookup\[gprB_9, gprA_7\], predicate_cc
+ 6f8:  000a00a7809c0000        \.223  cam_read_tag\[gprA_9, 0x0\]
+ 700:  000da2a7809c0000        \.224  cam_read_tag\[gprA_9, 0x0\], gpr_wrboth
+ 708:  000dd0a7809c0000        \.225  cam_read_tag\[gprA_9, 0x0\], predicate_cc
+ 710:  000900a7809c2800        \.226  cam_read_tag\[gprA_9, 0xa\]
+ 718:  000a00a7809c3c00        \.227  cam_read_tag\[gprA_9, 0xf\]
+ 720:  0003e0af809c0000        \.228  cam_read_state\[gprA_9, 0x0\]
+ 728:  000442af809c0000        \.229  cam_read_state\[gprA_9, 0x0\], gpr_wrboth
+ 730:  000392af809c0000        \.230  cam_read_state\[gprA_9, 0x0\], gpr_wrboth, predicate_cc
+ 738:  0000e0af809c2800        \.231  cam_read_state\[gprA_9, 0xa\]
+ 740:  0003e0af809c3c00        \.232  cam_read_state\[gprA_9, 0xf\]
+ 748:  000920a9f0101700        \.233  cam_write\[0x0, gprB_5, 1\]
+ 750:  000da0a9f01a0300        \.234  cam_write\[0x0, n\$reg_0, 1\]
+ 758:  000e80a9f0190700        \.235  cam_write\[0x0, \*n\$index, 1\]
+ 760:  0004c4a9f0180300        \.236  cam_write\[0x0, \*l\$index2, 1\]
+ 768:  0008e4a9f0184300        \.237  cam_write\[0x0, \*l\$index2\+\+, 1\]
+ 770:  000dc4a9f0184700        \.238  cam_write\[0x0, \*l\$index2--, 1\]
+ 778:  000840a9f0b01704        \.239  cam_write\[0x4, gprB_5, 11\]
+ 780:  000be0a9f0f0170f        \.240  cam_write\[0xf, gprB_5, 15\]
+ 788:  0008a0adb01c0000        \.241  cam_write_state\[0x0, 1\]
+ 790:  000d80adb0bc1000        \.242  cam_write_state\[0x4, 11\]
+ 798:  000de0adb0fc3c00        \.243  cam_write_state\[0xf, 15\]
+ 7a0:  0000c0fc142c000d        \.244  local_csr_wr\[CRCRemainder, gprA_13\]
+ 7a8:  000d20a918060348        \.245  crc_le\[crc_ccitt, \$xfer_0, \$xfer_0\]
+ 7b0:  000000f0000c0300        \.246  nop
+ 7b8:  000d40a918160748        \.247  crc_le\[crc_ccitt, \$xfer_1, \$xfer_1\]
+ 7c0:  000000f0000c0300        \.248  nop
+ 7c8:  000d40a918260b48        \.249  crc_le\[crc_ccitt, \$xfer_2, \$xfer_2\]
+ 7d0:  000000f0000c0300        \.250  nop
+ 7d8:  000d20a918360f48        \.251  crc_le\[crc_ccitt, \$xfer_3, \$xfer_3\]
+ 7e0:  000000f0000c0300        \.252  nop
+ 7e8:  000000f0000c0300        \.253  nop
+ 7f0:  000000f0000c0300        \.254  nop
+ 7f8:  000000f0000c0300        \.255  nop
+ 800:  000000f0000c0300        \.256  nop
+ 808:  000f60fc140c0000        \.257  local_csr_rd\[CRCRemainder\]
+ 810:  000ce0f0000c000e        \.258  immed\[gprA_14, 0x0\]
+ 818:  000940a918060340        \.259  crc_be\[crc_ccitt, \$xfer_0, \$xfer_0\]
+ 820:  000000f0000c0300        \.260  nop
+ 828:  000920a918461340        \.261  crc_be\[crc_ccitt, \$xfer_4, \$xfer_4\]
+ 830:  000000f0000c0300        \.262  nop
+ 838:  000060a900061340        \.263  crc_be\[crc_ccitt, gprA_0, \$xfer_4\]
+ 840:  000000f0000c0300        \.264  nop
+ 848:  000c60a900001340        \.265  crc_be\[crc_ccitt, gprA_0, gprB_4\]
+ 850:  000000f0000c0300        \.266  nop
+ 858:  000000f0000c0300        \.267  nop
+ 860:  000000f0000c0300        \.268  nop
+ 868:  000000f0000c0300        \.269  nop
+ 870:  000000f0000c0300        \.270  nop
+ 878:  000600a918260380        \.271  crc_be\[crc_32, \$xfer_2, \$xfer_0\]
+ 880:  000000f0000c0300        \.272  nop
+ 888:  0004c0a9183613a0        \.273  crc_be\[crc_iscsi, \$xfer_3, \$xfer_4\]
+ 890:  000000f0000c0300        \.274  nop
+ 898:  0004c0a9000613c0        \.275  crc_be\[crc_10, gprA_0, \$xfer_4\]
+ 8a0:  000000f0000c0300        \.276  nop
+ 8a8:  000960a9000013e0        \.277  crc_be\[crc_5, gprA_0, gprB_4\]
+ 8b0:  000000f0000c0300        \.278  nop
+ 8b8:  000ea0a918862700        \.279  crc_be\[--, \$xfer_8, \$xfer_9\]
+ 8c0:  000000f0000c0300        \.280  nop
+ 8c8:  000240a918760784        \.281  crc_be\[crc_32, \$xfer_7, \$xfer_1\], bytes_0_2
+ 8d0:  000000f0000c0300        \.282  nop
+ 8d8:  0002a0a918760785        \.283  crc_be\[crc_32, \$xfer_7, \$xfer_1\], bytes_0_1
+ 8e0:  000000f0000c0300        \.284  nop
+ 8e8:  000320a918760786        \.285  crc_be\[crc_32, \$xfer_7, \$xfer_1\], byte_0
+ 8f0:  000000f0000c0300        \.286  nop
+ 8f8:  0000c0a918760781        \.287  crc_be\[crc_32, \$xfer_7, \$xfer_1\], bytes_1_3
+ 900:  000000f0000c0300        \.288  nop
+ 908:  000140a918760782        \.289  crc_be\[crc_32, \$xfer_7, \$xfer_1\], bytes_2_3
+ 910:  000000f0000c0300        \.290  nop
+ 918:  0001a0a918760783        \.291  crc_be\[crc_32, \$xfer_7, \$xfer_1\], byte_3
+ 920:  000000f0000c0300        \.292  nop
+ 928:  000782a900160780        \.293  crc_be\[crc_32, gprA_1, \$xfer_1\], gpr_wrboth
+ 930:  000000f0000c0300        \.294  nop
+ 938:  000ae3a900160780        \.295  crc_be\[crc_32, gprA_1, \$xfer_1\], no_cc, gpr_wrboth
+ 940:  000000f0000c0300        \.296  nop
+ 948:  000b73a900560780        \.297  crc_be\[crc_32, gprA_5, \$xfer_1\], no_cc, gpr_wrboth, predicate_cc
+ 950:  000000f0000c0300        \.298  nop
+ 958:  000122a900560781        \.299  crc_be\[crc_32, gprA_5, \$xfer_1\], bytes_1_3, gpr_wrboth
+ 960:  000000f0000c0300        \.300  nop
+ 968:  000000f0000c0300        \.301  nop
+ 970:  000000f0000c0300        \.302  nop
+ 978:  000000f0000c0300        \.303  nop
+ 980:  000000f0000c0300        \.304  nop
+ 988:  000000f0000c0300        \.305  nop
+ 990:  0005a0e000080000        \.306  ctx_arb\[--\]
+ 998:  000600e000000001        \.307  ctx_arb\[voluntary\]
+ 9a0:  000220e000020000        \.308  ctx_arb\[bpt\]
+ 9a8:  000460e000000220        \.309  ctx_arb\[sig5, sig9\]
+ 9b0:  000d20e000200220        \.310  ctx_arb\[sig5, sig9\], defer\[2\]
+ 9b8:  000180a0300c0f00        \.311  alu\[--, --, B, 0x3\]
+ 9c0:  0007a0a0300c1f00        \.312  alu\[--, --, B, 0x7\]
+ 9c8:  0006a0e000010220        \.313  ctx_arb\[sig5, sig9\], any
+ 9d0:  000a60e077c40220        \.314  ctx_arb\[sig5, sig9\], br\[\.479\]
+ 9d8:  0006409010500701        \.315  dbl_shf\[gprB_5, gprA_1, gprB_1, >>1\]
+ 9e0:  000d4090a0500701        \.316  dbl_shf\[gprB_5, gprA_1, gprB_1, >>10\]
+ 9e8:  000c4091f0500701        \.317  dbl_shf\[gprB_5, gprA_1, gprB_1, >>31\]
+ 9f0:  000740a440000402        \.318  alu\[gprA_0, gprB_1, AND, gprA_2\]
+ 9f8:  0000c09000500701        \.319  dbl_shf\[gprB_5, gprA_1, gprB_1, >>indirect\]
+ a00:  000b219010500701        \.320  dbl_shf\[gprB_5, gprA_1, gprB_1, >>1\], no_cc
+ a08:  000cf19010500701        \.321  dbl_shf\[gprB_5, gprA_1, gprB_1, >>1\], no_cc, predicate_cc
+ a10:  0000d28010500701        \.322  dbl_shf\[gprA_5, gprA_1, gprB_1, >>1\], gpr_wrboth, predicate_cc
+ a18:  000200a700f03f00        \.323  ffs\[gprA_15, gprB_15\]
+ a20:  000fe0b740fc000f        \.324  ffs\[gprB_15, gprA_15\]
+ a28:  000ec0b700f61300        \.325  ffs\[gprB_15, \$xfer_4\]
+ a30:  000660b700f88300        \.326  ffs\[gprB_15, \*l\$index1\]
+ a38:  0007e4b700f8c300        \.327  ffs\[gprB_15, \*l\$index3\+\+\]
+ a40:  0002c4b700f8c700        \.328  ffs\[gprB_15, \*l\$index3--\]
+ a48:  0004c4b700f8a700        \.329  ffs\[gprB_15, \*l\$index3\[9\]\]
+ a50:  000880a720000300        \.330  ffs\[\*l\$index0, gprB_0\]
+ a58:  000108a722090700        \.331  ffs\[\*l\$index3, \*n\$index\]
+ a60:  000128a723190f00        \.332  ffs\[\*l\$index3--, \*n\$index\+\+\]
+ a68:  0003c3a740fc000f        \.333  ffs\[gprA_15, gprA_15\], no_cc, gpr_wrboth
+ a70:  000972a740fc000f        \.334  ffs\[gprA_15, gprA_15\], gpr_wrboth, predicate_cc
+ a78:  000320f0000c0803        \.335  immed\[gprA_3, 0x2\]
+ a80:  000480e8004d4803        \.336  jump\[gprA_3, \.338\]
+ a88:  0006a0d854408038        \.337  br\[\.337\]
+ a90:  000460f000002701        \.338  immed\[gprB_9, 0x1\]
+ a98:  0006a0d854408038        \.339  br\[\.337\]
+ aa0:  0005e0f000002702        \.340  immed\[gprB_9, 0x2\]
+ aa8:  0006a0d854408038        \.341  br\[\.337\]
+ ab0:  000500f000002703        \.342  immed\[gprB_9, 0x3\]
+ ab8:  0006a0d854408038        \.343  br\[\.337\]
+ ac0:  000040c001000000        \.344  ld_field\[gprA_0, 0001, gprB_0\]
+ ac8:  0007e2c001000000        \.345  ld_field\[gprA_0, 0001, gprB_0\], gpr_wrboth
+ ad0:  000e40c401000000        \.346  ld_field\[gprA_0, 0001, gprB_0\], load_cc
+ ad8:  000790c001000000        \.347  ld_field\[gprA_0, 0001, gprB_0\], predicate_cc
+ ae0:  0005c0c005000000        \.348  ld_field\[gprA_0, 0101, gprB_0\]
+ ae8:  000080c005100000        \.349  ld_field_w_clr\[gprA_0, 0101, gprB_0\]
+ af0:  0002a2c001100000        \.350  ld_field_w_clr\[gprA_0, 0001, gprB_0\], gpr_wrboth
+ af8:  000b00c401100000        \.351  ld_field_w_clr\[gprA_0, 0001, gprB_0\], load_cc
+ b00:  0002d0c001100000        \.352  ld_field_w_clr\[gprA_0, 0001, gprB_0\], predicate_cc
+ b08:  000fc0c00f000000        \.353  ld_field\[gprA_0, 1111, gprB_0\]
+ b10:  0005e0c1fb000200        \.354  ld_field\[gprA_0, 1011, gprB_0, <<1\]
+ b18:  000460c01b000100        \.355  ld_field\[gprA_0, 1011, gprB_0, >>1\]
+ b20:  000e60c1fb000100        \.356  ld_field\[gprA_0, 1011, gprB_0, >>31\]
+ b28:  000bc0c09b000000        \.357  ld_field\[gprA_0, 1011, gprB_0, >>rot9\]
+ b30:  000e80c09b100000        \.358  ld_field_w_clr\[gprA_0, 1011, gprB_0, >>rot9\]
+ b38:  0001c0c17b000000        \.359  ld_field\[gprA_0, 1011, gprB_0, >>rot23\]
+ b40:  0002c0c41b000000        \.360  ld_field\[gprA_0, 1011, gprB_0, >>rot1\], load_cc
+ b48:  000780c41b100000        \.361  ld_field_w_clr\[gprA_0, 1011, gprB_0, >>rot1\], load_cc
+ b50:  000400f0001f7c01        \.362  immed\[gprA_1, 0x1df\]
+ b58:  000200f0001007df        \.363  immed\[gprB_1, 0x1df\]
+ b60:  0005a2f0001007df        \.364  immed\[gprB_1, 0x1df\], gpr_wrboth
+ b68:  0005d0f0001007df        \.365  immed\[gprB_1, 0x1df\], predicate_cc
+ b70:  000020fc010c0000        \.366  local_csr_rd\[ALUOut\]
+ b78:  000e60f0000c000b        \.367  immed\[gprA_11, 0x0\]
+ b80:  000ce0fc160c0000        \.368  local_csr_rd\[MiscControl\]
+ b88:  000e60f0000c000b        \.369  immed\[gprA_11, 0x0\]
+ b90:  000ae0fc076c0b02        \.370  local_csr_wr\[XferIndex, 0x2\]
+ b98:  0008a0fc076c0003        \.371  local_csr_wr\[XferIndex, gprA_3\]
+ ba0:  000520fc07600f00        \.372  local_csr_wr\[XferIndex, gprB_3\]
+ ba8:  000f20fc01a00f00        \.373  local_csr_wr\[CtxEnables, gprB_3\]
+ bb0:  000480f800000c02        \.374  mul_step\[gprA_2, gprB_3\], start
+ bb8:  000880f980000c02        \.375  mul_step\[gprA_2, gprB_3\], 32x32_step1
+ bc0:  000dc0f980100c02        \.376  mul_step\[gprA_2, gprB_3\], 32x32_step2
+ bc8:  0001c0f980200c02        \.377  mul_step\[gprA_2, gprB_3\], 32x32_step3
+ bd0:  000480f980300c02        \.378  mul_step\[gprA_2, gprB_3\], 32x32_step4
+ bd8:  000940f9804c0002        \.379  mul_step\[gprA_2, --\], 32x32_last
+ be0:  000ce0f9805c0003        \.380  mul_step\[gprA_3, --\], 32x32_last2
+ be8:  0001a0f800000802        \.381  mul_step\[gprA_2, gprB_2\], start
+ bf0:  000aa0f900000802        \.382  mul_step\[gprA_2, gprB_2\], 16x16_step1
+ bf8:  000fe0f900100802        \.383  mul_step\[gprA_2, gprB_2\], 16x16_step2
+ c00:  000f20f9004c0000        \.384  mul_step\[gprA_0, --\], 16x16_last
+ c08:  0001a0f800000802        \.385  mul_step\[gprA_2, gprB_2\], start
+ c10:  0006a0f880000802        \.386  mul_step\[gprA_2, gprB_2\], 24x8_step1
+ c18:  000320f8804c0000        \.387  mul_step\[gprA_0, --\], 24x8_last
+ c20:  0001a0f800000802        \.388  mul_step\[gprA_2, gprB_2\], start
+ c28:  0006a0f880000802        \.389  mul_step\[gprA_2, gprB_2\], 24x8_step1
+ c30:  0004f0f8804c0000        \.390  mul_step\[gprA_0, --\], 24x8_last, predicate_cc
+ c38:  0001a0f800000802        \.391  mul_step\[gprA_2, gprB_2\], start
+ c40:  0006a0f880000802        \.392  mul_step\[gprA_2, gprB_2\], 24x8_step1
+ c48:  0009e3f8804c0000        \.393  mul_step\[gprA_0, --\], 24x8_last, no_cc, gpr_wrboth
+ c50:  000b80a330000000        \.394  pop_count1\[gprB_0\]
+ c58:  000c80a3b0000000        \.395  pop_count2\[gprB_0\]
+ c60:  000d80a180000000        \.396  pop_count3\[gprA_0, gprB_0\]
+ c68:  000b80a330000000        \.397  pop_count1\[gprB_0\]
+ c70:  000c80a3b0000000        \.398  pop_count2\[gprB_0\]
+ c78:  000743a180000000        \.399  pop_count3\[gprA_0, gprB_0\], no_cc, gpr_wrboth
+ c80:  0004a4a330088000        \.400  pop_count1\[\*l\$index3\]
+ c88:  0003a4a3b0088000        \.401  pop_count2\[\*l\$index3\]
+ c90:  0000e5a1a438c000        \.402  pop_count3\[\*n\$index\+\+, \*l\$index3\+\+\], no_cc
+ c98:  000b80a330000000        \.403  pop_count1\[gprB_0\]
+ ca0:  000c80a3b0000000        \.404  pop_count2\[gprB_0\]
+ ca8:  000731a180000000        \.405  pop_count3\[gprA_0, gprB_0\], no_cc, predicate_cc
+ cb0:  000480e8000c0000        \.406  rtn\[gprA_0\]
+ cb8:  000620e8000a0700        \.407  rtn\[n\$reg_1\]
+ cc0:  000600e800088300        \.408  rtn\[\*l\$index1\]
+ cc8:  000a64e800080300        \.409  rtn\[\*l\$index2\]
+ cd0:  000dc0e800200300        \.410  rtn\[gprB_0\], defer\[2\]
+ cd8:  0008a0a0300c0700        \.411  alu\[--, --, B, 0x1\]
+ ce0:  0004a0a0300c0b00        \.412  alu\[--, --, B, 0x2\]
+ ce8:  000000f0000c0300        \.413  nop
+ cf0:  000000f0000c0300        \.414  nop
+ cf8:  000000f0000c0300        \.415  nop
+ d00:  000000f0000c0300        \.416  nop
+ d08:  0003501842300c09        \.417  arm\[read, \$xfer_3, gprA_9, gprB_3, 2\], ctx_swap\[sig4\]
+ d10:  0005501842302403        \.418  arm\[read, \$xfer_3, gprA_3, gprB_9, 2\], ctx_swap\[sig4\]
+ d18:  0004801842300c09        \.419  arm\[read, \$xfer_3, gprA_9, <<8, gprB_3, 2\], ctx_swap\[sig4\]
+ d20:  000f241842302403        \.420  arm\[read, \$xfer_3, gprB_9, <<8, gprA_3, 2\], ctx_swap\[sig4\]
+ d28:  0004a0a0300c0b00        \.421  alu\[--, --, B, 0x2\]
+ d30:  0008861842302403        \.422  arm\[read, \$xfer_3, gprB_9, <<8, gprA_3, 2\], indirect_ref, ctx_swap\[sig4\]
+ d38:  0004a0a0300c0b00        \.423  alu\[--, --, B, 0x2\]
+ d40:  000e8618e2302703        \.424  arm\[read, \$xfer_3, gprB_9, <<8, gprA_3, 2\], indirect_ref, sig_done\[sig14\]
+ d48:  0007841842302503        \.425  arm\[read, \$xfer_3, gprB_9, <<8, gprA_3, 2\], ctx_swap\[sig4\], defer\[1\]
+ d50:  0008a0a0300c0700        \.426  alu\[--, --, B, 0x1\]
+ d58:  000f101843c00c09        \.427  arm\[read, \$xfer_28, gprA_9, gprB_3, 2\], ctx_swap\[sig4\]
+ d60:  000910184e800c09        \.428  arm\[read, \$xfer_8, gprA_9, gprB_3, 8\], ctx_swap\[sig4\]
+ d68:  000a106440800c09        \.429  cls\[add, \$xfer_8, gprA_9, gprB_3, 1\], ctx_swap\[sig4\]
+ d70:  0000f0664080a009        \.430  cls\[sub, \$xfer_8, gprA_9, 0x8, 1\], ctx_swap\[sig4\]
+ d78:  000160644284a009        \.431  cls\[add64, \$xfer_8, gprA_9, <<8, 0x8, 2\], ctx_swap\[sig4\]
+ d80:  000404664284a408        \.432  cls\[sub64, \$xfer_8, 0x9, <<8, gprA_8, 2\], ctx_swap\[sig4\]
+ d88:  0008a0a0300c0700        \.433  alu\[--, --, B, 0x1\]
+ d90:  00032c650340a708        \.434  cls\[add_imm, 0x14, 0x9, <<8, gprA_8, 2\]
+ d98:  0007506040880c09        \.435  cls\[swap/test_compare_write, \$xfer_8, gprA_9, gprB_3, 1\], ctx_swap\[sig4\]
+ da0:  00023c6500007f9a        \.436  cls\[add_imm, 0x1f9a, --, 1\]
+ da8:  000038653c583f14        \.437  cls\[add_imm, 0xf14, 0xf16\]
+ db0:  000b54640013c30f        \.438  cls\[add, \$xfer_1, 0xf00f, 1\]
+ db8:  0002901c10a08000        \.439  ct\[xpb_read, \$xfer_10, gprA_0, 0x0, 1\], ctx_swap\[sig1\]
+ dc0:  0007501e10a48000        \.440  ct\[reflect_read_sig_init, \$xfer_10, gprA_0, 0x0, 1\], ctx_swap\[sig1\]
+ dc8:  000a501c10a48000        \.441  ct\[ring_get, \$xfer_10, gprA_0, 0x0, 1\], ctx_swap\[sig1\]
+ dd0:  000000f0000c0300        \.442  nop
+ dd8:  000cc0474a80a009        \.443  mem\[add64, \$xfer_8, gprA_9, <<8, 0x8, 6\], ctx_swap\[sig4\]
+ de0:  000d40404280a009        \.444  mem\[read, \$xfer_8, gprA_9, <<8, 0x8, 2\], ctx_swap\[sig4\]
+ de8:  000c405c4280a009        \.445  mem\[read32, \$xfer_8, gprA_9, <<8, 0x8, 2\], ctx_swap\[sig4\]
+ df0:  000ea0554280a009        \.446  mem\[ctm\.pe_dma_to_memory_indirect/emem\.get/imem\.lb_bucket_read_local, \$xfer_8, gprA_9, <<8, 0x8, 2\], ctx_swap\[sig4\]
+ df8:  0009204c408ca309        \.447  mem\[lock128/lock384, \$xfer_8, gprA_9, <<8, 0x8, 1\], sig_done\[sig4\]
+ e00:  000f20e000000030        \.448  ctx_arb\[sig4, sig5\]
+ e08:  0000a04c488ca309        \.449  mem\[lock256/lock512, \$xfer_8, gprA_9, <<8, 0x8, 5\], sig_done\[sig4\]
+ e10:  000f20e000000030        \.450  ctx_arb\[sig4, sig5\]
+ e18:  000ae04d4084a009        \.451  mem\[microq128_pop, \$xfer_8, gprA_9, <<8, 0x8, 1\], ctx_swap\[sig4\]
+ e20:  0002204d4080a009        \.452  mem\[microq128_get, \$xfer_8, gprA_9, <<8, 0x8, 1\], ctx_swap\[sig4\]
+ e28:  000ba04d4880a009        \.453  mem\[microq256_get, \$xfer_8, gprA_9, <<8, 0x8, 5\], ctx_swap\[sig4\]
+ e30:  0003805700028309        \.454  mem\[ctm\.pe_dma_from_memory_buffer/emem\.fast_journal/imem\.lb_push_stats_local, \$xfer_0, gprA_9, <<8, 0x40, 1\]
+ e38:  0005e04e4000a309        \.455  mem\[queue128_lock, \$xfer_0, gprA_9, <<8, 0x8, 1\], sig_done\[sig4\]
+ e40:  000f20e000000030        \.456  ctx_arb\[sig4, sig5\]
+ e48:  0001a04e0004a309        \.457  mem\[queue128_unlock, \$xfer_0, gprA_9, <<8, 0x8, 1\]
+ e50:  000c604e4800a309        \.458  mem\[queue256_lock, \$xfer_0, gprA_9, <<8, 0x8, 5\], sig_done\[sig4\]
+ e58:  000f20e000000030        \.459  ctx_arb\[sig4, sig5\]
+ e60:  0008204e0804a309        \.460  mem\[queue256_unlock, \$xfer_0, gprA_9, <<8, 0x8, 5\]
+ e68:  0008a05000001309        \.461  mem\[ctm\.packet_wait_packet_status/emem\.rd_qdesc/imem\.stats_log, \$xfer_0, gprA_9, <<8, gprB_4, 1\]
+ e70:  000b840092200c02        \.462  ila\[read, \$xfer_2, gprB_3, <<8, gprA_2, 2\], ctx_swap\[sig9\]
+ e78:  0005440182240f02        \.463  ila\[write_check_error, \$xfer_2, gprB_3, <<8, gprA_2, 2\], sig_done\[sig8\]
+ e80:  000d60e000000300        \.464  ctx_arb\[sig8, sig9\]
+ e88:  0007800410600000        \.465  nbi\[read, \$xfer_6, gprA_0, <<8, gprB_0, 1\], ctx_swap\[sig1\]
+ e90:  0002600c62000000        \.466  pcie\[read, \$xfer_0, gprA_0, <<8, gprB_0, 2\], ctx_swap\[sig6\]
+ e98:  0004c40d62000000        \.467  pcie\[write, \$xfer_0, gprB_0, <<8, gprA_0, 2\], ctx_swap\[sig6\]
+ ea0:  000d601462000000        \.468  crypto\[read, \$xfer_0, gprA_0, <<8, gprB_0, 2\], ctx_swap\[sig6\]
+ ea8:  0006601562000000        \.469  crypto\[write, \$xfer_0, gprA_0, <<8, gprB_0, 2\], ctx_swap\[sig6\]
+ eb0:  0000601662000000        \.470  crypto\[write_fifo, \$xfer_0, gprA_0, <<8, gprB_0, 2\], ctx_swap\[sig6\]
+ eb8:  000d840d60000050        \.471  pcie\[write, \$xfer_0, gprB_0, <<8, \*l\$index0, 1\], ctx_swap\[sig6\]
+ ec0:  0009e40d60000058        \.472  pcie\[write, \$xfer_0, gprB_0, <<8, \*l\$index1, 1\], ctx_swap\[sig6\]
+ ec8:  0009040d60000059        \.473  pcie\[write, \$xfer_0, gprB_0, <<8, \*l\$index1\[1\], 1\], ctx_swap\[sig6\]
+ ed0:  000000f0000c0300        \.474  nop
+ ed8:  000000f0000c0300        \.475  nop
+ ee0:  000000f0000c0300        \.476  nop
+ ee8:  000000f0000c0300        \.477  nop
+ ef0:  000000f0000c0300        \.478  nop
+ ef8:  000220e000020000        \.479  ctx_arb\[bpt\]
+ f00:  000420e000010000        \.480  ctx_arb\[kill\]
+
+Disassembly of section \.text\.i33\.me9:
+
+0000000000000000 <\.text\.i33\.me9>:
+   0:  000540f0012cd000          \.0  immed\[gprA_0, 0x1234\]
+   8:  0002c0f0012cd280          \.1  immed\[n\$reg_0, 0x1234\]
+  10:  000220f0012cd281          \.2  immed\[n\$reg_1, 0x1234\]
+  18:  000660f0012cd200          \.3  immed\[\*l\$index0, 0x1234\]
+  20:  0007c0f0012cd220          \.4  immed\[\*l\$index1, 0x1234\]
+  28:  000fa0f0012cd230          \.5  immed\[\*l\$index1\+\+, 0x1234\]
+  30:  000f40f0012cd231          \.6  immed\[\*l\$index1--, 0x1234\]
+  38:  0008c8f0012cd200          \.7  immed\[\*l\$index2, 0x1234\]
+  40:  0000a8f0012cd210          \.8  immed\[\*l\$index2\+\+, 0x1234\]
+  48:  000048f0012cd211          \.9  immed\[\*l\$index2--, 0x1234\]
+  50:  000968f0012cd220         \.10  immed\[\*l\$index3, 0x1234\]
+  58:  0007e0f0012cd203         \.11  immed\[\*l\$index0\[3\], 0x1234\]
+  60:  000540f0012cd225         \.12  immed\[\*l\$index1\[5\], 0x1234\]
+  68:  000b28f0012cd207         \.13  immed\[\*l\$index2\[7\], 0x1234\]
+  70:  000de8f0012cd229         \.14  immed\[\*l\$index3\[9\], 0x1234\]
+  78:  000000f00ff003ff         \.15  immed\[gprB_0, 0xffff\]
+  80:  000d60f220000bff         \.16  immed_b1\[gprB_2, 0xff\]
+  88:  000f60f6200007ff         \.17  immed_b3\[gprB_1, 0xff\]
+  90:  000080f080000f00         \.18  immed\[gprB_3, 0xffffffff\]
+  98:  000100f086600f77         \.19  immed\[gprB_3, 0xffff9988\]
+  a0:  000940f0012cd180         \.20  immed\[\$xfer_0, 0x1234\]
+  a8:  000a00f0043c8581         \.21  immed\[\$xfer_1, 0x4321\]
+  b0:  000b40f0056de19e         \.22  immed\[\$xfer_30, 0x5678\]
+  b8:  0007c0f0400e8401         \.23  immed_w0\[gprA_1, 0xa1\]
+  c0:  000440f4400e8802         \.24  immed_w1\[gprA_2, 0xa2\]
+  c8:  000d00f4000e8c03         \.25  immed\[gprA_3, 0xa3, <<16\]
+  d0:  000520f001200334         \.26  immed\[gprB_0, 0x1234\]
+  d8:  000fa0f0400007b1         \.27  immed_w0\[gprB_1, 0xb1\]
+  e0:  000c20f440000bb2         \.28  immed_w1\[gprB_2, 0xb2\]
+  e8:  000560f400000fb3         \.29  immed\[gprB_3, 0xb3, <<16\]
+  f0:  000660f200000fb3         \.30  immed\[gprB_3, 0xb3, <<8\]
+  f8:  0001b0f200000fb3         \.31  immed\[gprB_3, 0xb3, <<8\], predicate_cc
+ 100:  0001c2f200000fb3         \.32  immed\[gprB_3, 0xb3, <<8\], gpr_wrboth
+ 108:  000ba0a0300c2f00         \.33  alu\[--, --, B, 0xb\]
+ 110:  0005a081f200da00         \.34  alu_shf\[--, --, B, 0x16, <<1\]
+ 118:  000be081d2018600         \.35  alu_shf\[--, --, B, 0x21, <<3\]
+ 120:  000240801201b200         \.36  alu_shf\[--, --, B, 0x2c, <<31\]
+ 128:  000fa081f800da00         \.37  alu_shf\[\$xfer_0, --, B, 0x16, <<1\]
+ 130:  0009e081f840da00         \.38  alu_shf\[\$xfer_4, --, B, 0x16, <<1\]
+ 138:  0009a081f980da00         \.39  alu_shf\[\$xfer_24, --, B, 0x16, <<1\]
+ 140:  0003e081f9f0da00         \.40  alu_shf\[\$xfer_31, --, B, 0x16, <<1\]
+ 148:  0004a0a0280c2f00         \.41  alu\[n\$reg_0, --, B, 0xb\]
+ 150:  0001e0a0281c2f00         \.42  alu\[n\$reg_1, --, B, 0xb\]
+ 158:  000880a0a00c2400         \.43  alu\[\*l\$index0, gprA_0, \+, 0x9\]
+ 160:  000100a0a43c2400         \.44  alu\[\*n\$index\+\+, gprA_0, \+, 0x9\]
+ 168:  000b208bc500a600         \.45  alu_shf\[\*l\$index0, gprA_0, OR, 0x9, <<4\]
+ 170:  000b00a0a20c2400         \.46  alu\[\*l\$index1, gprA_0, \+, 0x9\]
+ 178:  000740a0a30c2400         \.47  alu\[\*l\$index1\+\+, gprA_0, \+, 0x9\]
+ 180:  000200a0a31c2400         \.48  alu\[\*l\$index1--, gprA_0, \+, 0x9\]
+ 188:  000628a0a00c2400         \.49  alu\[\*l\$index2, gprA_0, \+, 0x9\]
+ 190:  000988aa210c2400         \.50  alu\[\*l\$index2\+\+, gprA_0, OR, 0x9\]
+ 198:  000f28a0a11c2400         \.51  alu\[\*l\$index2--, gprA_0, \+, 0x9\]
+ 1a0:  0005a8a0a20c2400         \.52  alu\[\*l\$index3, gprA_0, \+, 0x9\]
+ 1a8:  000480a0a03c2400         \.53  alu\[\*l\$index0\[3\], gprA_0, \+, 0x9\]
+ 1b0:  000800a0a25c2400         \.54  alu\[\*l\$index1\[5\], gprA_0, \+, 0x9\]
+ 1b8:  000c68a0a07c2400         \.55  alu\[\*l\$index2\[7\], gprA_0, \+, 0x9\]
+ 1c0:  000aa8a0a29c2400         \.56  alu\[\*l\$index3\[9\], gprA_0, \+, 0x9\]
+ 1c8:  000cc4b0c008a400         \.57  alu\[gprB_0, \*l\$index3\[9\], \+, gprA_0\]
+ 1d0:  000fe4b0c008c000         \.58  alu\[gprB_0, \*l\$index3\+\+, \+, gprA_0\]
+ 1d8:  000ac4b0c008c400         \.59  alu\[gprB_0, \*l\$index3--, \+, gprA_0\]
+ 1e0:  000bc4b080000229         \.60  alu\[gprB_0, \*l\$index3\[9\], \+, gprB_0\]
+ 1e8:  000724b080000230         \.61  alu\[gprB_0, \*l\$index3\+\+, \+, gprB_0\]
+ 1f0:  0007c4b080000231         \.62  alu\[gprB_0, \*l\$index3--, \+, gprB_0\]
+ 1f8:  000664b080000211         \.63  alu\[gprB_0, \*l\$index2--, \+, gprB_0\]
+ 200:  000a60b080000231         \.64  alu\[gprB_0, \*l\$index1--, \+, gprB_0\]
+ 208:  000bc0b080000211         \.65  alu\[gprB_0, \*l\$index0--, \+, gprB_0\]
+ 210:  000340b080000200         \.66  alu\[gprB_0, \*l\$index0, \+, gprB_0\]
+ 218:  000ee4b080000200         \.67  alu\[gprB_0, \*l\$index2, \+, gprB_0\]
+ 220:  000100b080000241         \.68  alu\[gprB_0, \*n\$index, \+, gprB_0\]
+ 228:  0004809bf0000241         \.69  alu_shf\[gprB_0, \*n\$index, OR, gprB_0, <<1\]
+ 230:  000f20a0001fff00         \.70  alu\[gprA_1, --, B, 0xff\]
+ 238:  0005c0b0002fff00         \.71  alu\[gprB_2, --, B, 0xff\]
+ 240:  000940a0000d6f00         \.72  alu\[gprA_0, --, B, 0x5b\]
+ 248:  000440a2000d6f00         \.73  alu\[gprA_0, --, ~B, 0x5b\]
+ 250:  000de081f032f200         \.74  alu_shf\[gprA_3, --, B, 0x5c, <<1\]
+ 258:  000de091d012f600         \.75  alu_shf\[gprB_1, --, B, 0x5d, <<3\]
+ 260:  000d60901022fa00         \.76  alu_shf\[gprB_2, --, B, 0x5e, <<31\]
+ 268:  000e40a0c0000402         \.77  alu\[gprA_0, gprB_1, \+, gprA_2\]
+ 270:  000340a2c0000402         \.78  alu\[gprA_0, gprB_1, \+16, gprA_2\]
+ 278:  000040a4c0000402         \.79  alu\[gprA_0, gprB_1, \+8, gprA_2\]
+ 280:  0007a0a8c0000402         \.80  alu\[gprA_0, gprB_1, \+carry, gprA_2\]
+ 288:  000d40a6c0000402         \.81  alu\[gprA_0, gprB_1, -carry, gprA_2\]
+ 290:  000aa0aac0000402         \.82  alu\[gprA_0, gprB_1, -, gprA_2\]
+ 298:  0009a0acc0000402         \.83  alu\[gprA_0, gprB_1, B-A, gprA_2\]
+ 2a0:  000da0aa40000402         \.84  alu\[gprA_0, gprB_1, OR, gprA_2\]
+ 2a8:  000740a440000402         \.85  alu\[gprA_0, gprB_1, AND, gprA_2\]
+ 2b0:  000a40a640000402         \.86  alu\[gprA_0, gprB_1, ~AND, gprA_2\]
+ 2b8:  0000a0a840000402         \.87  alu\[gprA_0, gprB_1, AND~, gprA_2\]
+ 2c0:  000ea0ac40000402         \.88  alu\[gprA_0, gprB_1, XOR, gprA_2\]
+ 2c8:  000321a0c0000402         \.89  alu\[gprA_0, gprB_1, \+, gprA_2\], no_cc
+ 2d0:  000990a0c0000402         \.90  alu\[gprA_0, gprB_1, \+, gprA_2\], predicate_cc
+ 2d8:  0009e2a0c0000402         \.91  alu\[gprA_0, gprB_1, \+, gprA_2\], gpr_wrboth
+ 2e0:  000353a0c0000402         \.92  alu\[gprA_0, gprB_1, \+, gprA_2\], no_cc, gpr_wrboth, predicate_cc
+ 2e8:  000d418b70080602         \.93  alu_shf\[gprA_0, gprB_1, OR, gprA_2, <<9\], no_cc
+ 2f0:  0006708a90080502         \.94  alu_shf\[gprA_0, gprB_1, OR, gprA_2, >>9\], predicate_cc
+ 2f8:  000ea28a90080402         \.95  alu_shf\[gprA_0, gprB_1, OR, gprA_2, >>rot9\], gpr_wrboth
+ 300:  000e138b70080402         \.96  alu_shf\[gprA_0, gprB_1, OR, gprA_2, >>rot23\], no_cc, gpr_wrboth, predicate_cc
+ 308:  000ba08a00080602         \.97  alu_shf\[gprA_0, gprB_1, OR, gprA_2, <<indirect\]
+ 310:  0000208a00080502         \.98  alu_shf\[gprA_0, gprB_1, OR, gprA_2, >>indirect\]
+ 318:  000ba0a0300c2f00         \.99  alu\[--, --, B, 0xb\]
+ 320:  000ae09d40380101        \.100  asr\[gprB_3, gprA_1, >>20\]
+ 328:  000ba0a0300c2f00        \.101  alu\[--, --, B, 0xb\]
+ 330:  000ea09d40310500        \.102  asr\[gprB_3, \*n\$index, >>20\]
+ 338:  000ba0a0300c2f00        \.103  alu\[--, --, B, 0xb\]
+ 340:  0007a09d40314100        \.104  asr\[gprB_3, \*l\$index0, >>20\]
+ 348:  000ba0a0300c2f00        \.105  alu\[--, --, B, 0xb\]
+ 350:  0000249d40316100        \.106  asr\[gprB_3, \*l\$index3, >>20\]
+ 358:  000ba0a0300c2f00        \.107  alu\[--, --, B, 0xb\]
+ 360:  000a049d40314100        \.108  asr\[gprB_3, \*l\$index2, >>20\]
+ 368:  000ba0a0300c2f00        \.109  alu\[--, --, B, 0xb\]
+ 370:  0004a08d45010d00        \.110  asr\[\*l\$index0, \*n\$index\+\+, >>20\]
+ 378:  000ba0a0300c2f00        \.111  alu\[--, --, B, 0xb\]
+ 380:  000ee08d45810d00        \.112  asr\[\*l\$index1, \*n\$index\+\+, >>20\]
+ 388:  000ba0a0300c2f00        \.113  alu\[--, --, B, 0xb\]
+ 390:  000a088d45010d00        \.114  asr\[\*l\$index2, \*n\$index\+\+, >>20\]
+ 398:  000ba0a0300c2f00        \.115  alu\[--, --, B, 0xb\]
+ 3a0:  0007819d40380101        \.116  asr\[gprB_3, gprA_1, >>20\], no_cc
+ 3a8:  000ba0a0300c2f00        \.117  alu\[--, --, B, 0xb\]
+ 3b0:  000d309d40380101        \.118  asr\[gprB_3, gprA_1, >>20\], predicate_cc
+ 3b8:  000ba0a0300c2f00        \.119  alu\[--, --, B, 0xb\]
+ 3c0:  000ba28d40380101        \.120  asr\[gprA_3, gprA_1, >>20\], gpr_wrboth
+ 3c8:  0008c0d818c08120        \.121  beq\[\.99\]
+ 3d0:  000d00d877c08120        \.122  beq\[\.479\]
+ 3d8:  000440d877e08120        \.123  beq\[\.479\], defer\[2\]
+ 3e0:  000000f0000c0300        \.124  nop
+ 3e8:  000000f0000c0300        \.125  nop
+ 3f0:  000540d877c08021        \.126  bne\[\.479\]
+ 3f8:  0004c0d877c08022        \.127  bmi\[\.479\]
+ 400:  000420d877c08023        \.128  bpl\[\.479\]
+ 408:  0007c0d877c08024        \.129  bcs\[\.479\]
+ 410:  0007c0d877c08024        \.130  bcs\[\.479\]
+ 418:  000720d877c08025        \.131  bcc\[\.479\]
+ 420:  000720d877c08025        \.132  bcc\[\.479\]
+ 428:  0006a0d877c08026        \.133  bvs\[\.479\]
+ 430:  000640d877c08027        \.134  bvc\[\.479\]
+ 438:  0001c0d877c08028        \.135  bge\[\.479\]
+ 440:  000120d877c08029        \.136  blt\[\.479\]
+ 448:  000040d877c0802b        \.137  bgt\[\.479\]
+ 450:  0000a0d877c0802a        \.138  ble\[\.479\]
+ 458:  000c60d818c08038        \.139  br\[\.99\]
+ 460:  000920d818d08038        \.140  br\[\.99\], defer\[1\]
+ 468:  000000f0000c0300        \.141  nop
+ 470:  000bc0d077c09000        \.142  br_bclr\[gprA_0, 3, \.479\]
+ 478:  000980d077c0e004        \.143  br_bclr\[gprA_4, 23, \.479\]
+ 480:  0002a0d077c0082c        \.144  br_bclr\[gprB_2, 11, \.479\]
+ 488:  000300d077c02423        \.145  br_bclr\[gprB_9, 2, \.479\]
+ 490:  000260d077c02421        \.146  br_bclr\[gprB_9, 0, \.479\]
+ 498:  000280d077c02420        \.147  br_bclr\[gprB_9, 31, \.479\]
+ 4a0:  000f00d077f02423        \.148  br_bclr\[gprB_9, 2, \.479\], defer\[3\]
+ 4a8:  000000f0000c0300        \.149  nop
+ 4b0:  000000f0000c0300        \.150  nop
+ 4b8:  000000f0000c0300        \.151  nop
+ 4c0:  000680d077c42c2b        \.152  br_bset\[gprB_11, 10, \.479\]
+ 4c8:  0006e0d077c4ac0b        \.153  br_bset\[gprA_11, 10, \.479\]
+ 4d0:  0002a0c877d81020        \.154  br=byte\[gprB_4, 0, 0x0, \.479\], defer\[1\]
+ 4d8:  000000f0000c0300        \.155  nop
+ 4e0:  000a60c877c81520        \.156  br=byte\[gprB_5, 1, 0x0, \.479\]
+ 4e8:  0001e0c877c81620        \.157  br=byte\[gprB_5, 2, 0x0, \.479\]
+ 4f0:  0001a4c877c94220        \.158  br=byte\[\*l\$index2, 2, 0x0, \.479\]
+ 4f8:  000620c877c96220        \.159  br=byte\[\*l\$index1, 2, 0x0, \.479\]
+ 500:  000540c877c81b20        \.160  br=byte\[gprB_6, 3, 0x0, \.479\]
+ 508:  0000c0c877cc16ff        \.161  br=byte\[gprB_5, 2, 0xff, \.479\]
+ 510:  000420c877c816a2        \.162  br=byte\[gprB_5, 2, 0x42, \.479\]
+ 518:  000380c877c416ff        \.163  br!=byte\[gprB_5, 2, 0xff, \.479\]
+ 520:  0002a0c877c01620        \.164  br!=byte\[gprB_5, 2, 0x0, \.479\]
+ 528:  000c20d877c00236        \.165  br_cls_state\[cls_ring0_status, \.479\]
+ 530:  0001a0d877e20236        \.166  br_cls_state\[cls_ring8_status, \.479\], defer\[2\]
+ 538:  000000f0000c0300        \.167  nop
+ 540:  000000f0000c0300        \.168  nop
+ 548:  000be0d877c38236        \.169  br_cls_state\[cls_ring14_status, \.479\]
+ 550:  0007c0d877c3c236        \.170  br_cls_state\[cls_ring15_status, \.479\]
+ 558:  000720d877c3c237        \.171  br_!cls_state\[cls_ring15_status, \.479\]
+ 560:  000cc0d877c00237        \.172  br_!cls_state\[cls_ring0_status, \.479\]
+ 568:  000c00d877c00030        \.173  br=ctx\[0, \.479\]
+ 570:  000dc0d877c08030        \.174  br=ctx\[2, \.479\]
+ 578:  000f00d877c18030        \.175  br=ctx\[6, \.479\]
+ 580:  000a40d877d18030        \.176  br=ctx\[6, \.479\], defer\[1\]
+ 588:  000000f0000c0300        \.177  nop
+ 590:  000d40d877c00234        \.178  br_inp_state\[nn_empty, \.479\]
+ 598:  000160d877c04234        \.179  br_inp_state\[nn_full, \.479\]
+ 5a0:  000c80d877c08234        \.180  br_inp_state\[ctm_ring0_status, \.479\]
+ 5a8:  000100d877e28234        \.181  br_inp_state\[ctm_ring8_status, \.479\], defer\[2\]
+ 5b0:  000000f0000c0300        \.182  nop
+ 5b8:  000000f0000c0300        \.183  nop
+ 5c0:  000a80d877c38234        \.184  br_inp_state\[ctm_ring12_status, \.479\]
+ 5c8:  0006a0d877c3c234        \.185  br_inp_state\[ctm_ring13_status, \.479\]
+ 5d0:  000640d877c3c235        \.186  br_!inp_state\[ctm_ring13_status, \.479\]
+ 5d8:  000c60d877c08235        \.187  br_!inp_state\[ctm_ring0_status, \.479\]
+ 5e0:  000260d877c04232        \.188  br_signal\[1, \.479\]
+ 5e8:  000f80d877c08232        \.189  br_signal\[2, \.479\]
+ 5f0:  0005a0d877c3c232        \.190  br_signal\[15, \.479\]
+ 5f8:  000540d877c3c233        \.191  br_!signal\[15, \.479\]
+ 600:  000b60d877f2c232        \.192  br_signal\[11, \.479\], defer\[3\]
+ 608:  000000f0000c0300        \.193  nop
+ 610:  000000f0000c0300        \.194  nop
+ 618:  000000f0000c0300        \.195  nop
+ 620:  000e40a0c0000402        \.196  alu\[gprA_0, gprB_1, \+, gprA_2\]
+ 628:  0004408e02081200        \.197  byte_align_le\[--, gprB_4\]
+ 630:  0008c08e00981200        \.198  byte_align_le\[gprA_9, gprB_4\]
+ 638:  0004c08e00a81200        \.199  byte_align_le\[gprA_10, gprB_4\]
+ 640:  0001808e00b81200        \.200  byte_align_le\[gprA_11, gprB_4\]
+ 648:  000e40a0c0000402        \.201  alu\[gprA_0, gprB_1, \+, gprA_2\]
+ 650:  000c808e02001100        \.202  byte_align_be\[--, gprB_4\]
+ 658:  0000008e00901100        \.203  byte_align_be\[gprA_9, gprB_4\]
+ 660:  000c008e00a01100        \.204  byte_align_be\[gprA_10, gprB_4\]
+ 668:  0009408e00b01100        \.205  byte_align_be\[gprA_11, gprB_4\]
+ 670:  000d80a0300c0300        \.206  alu\[--, --, B, 0x0\]
+ 678:  000400a5b00c0000        \.207  cam_clear
+ 680:  000360bb80900007        \.208  cam_lookup\[gprB_9, gprA_7\]
+ 688:  0003a0bb80900200        \.209  cam_lookup\[gprB_9, \*l\$index0\]
+ 690:  000e04bb80900200        \.210  cam_lookup\[gprB_9, \*l\$index2\]
+ 698:  000f84bb80900203        \.211  cam_lookup\[gprB_9, \*l\$index2\[3\]\]
+ 6a0:  000bc0bb80900210        \.212  cam_lookup\[gprB_9, \*l\$index0\+\+\]
+ 6a8:  000280aba0000241        \.213  cam_lookup\[\*l\$index0, \*n\$index\]
+ 6b0:  000ec0aba1000241        \.214  cam_lookup\[\*l\$index0\+\+, \*n\$index\]
+ 6b8:  000288aba3000243        \.215  cam_lookup\[\*l\$index3\+\+, \*n\$index\+\+\]
+ 6c0:  000aa0aba0200243        \.216  cam_lookup\[\*l\$index0\[2\], \*n\$index\+\+\]
+ 6c8:  000060bb80901407        \.217  cam_lookup\[gprB_9, gprA_7\], lm_addr0\[1\]
+ 6d0:  000060bb80902807        \.218  cam_lookup\[gprB_9, gprA_7\], lm_addr1\[2\]
+ 6d8:  000660bb80907407        \.219  cam_lookup\[gprB_9, gprA_7\], lm_addr2\[3\]
+ 6e0:  000660bb80904807        \.220  cam_lookup\[gprB_9, gprA_7\], lm_addr3\[0\]
+ 6e8:  000222ab80900007        \.221  cam_lookup\[gprA_9, gprA_7\], gpr_wrboth
+ 6f0:  0004b0bb80900007        \.222  cam_lookup\[gprB_9, gprA_7\], predicate_cc
+ 6f8:  000a00a7809c0000        \.223  cam_read_tag\[gprA_9, 0x0\]
+ 700:  000da2a7809c0000        \.224  cam_read_tag\[gprA_9, 0x0\], gpr_wrboth
+ 708:  000dd0a7809c0000        \.225  cam_read_tag\[gprA_9, 0x0\], predicate_cc
+ 710:  000900a7809c2800        \.226  cam_read_tag\[gprA_9, 0xa\]
+ 718:  000a00a7809c3c00        \.227  cam_read_tag\[gprA_9, 0xf\]
+ 720:  0003e0af809c0000        \.228  cam_read_state\[gprA_9, 0x0\]
+ 728:  000442af809c0000        \.229  cam_read_state\[gprA_9, 0x0\], gpr_wrboth
+ 730:  000392af809c0000        \.230  cam_read_state\[gprA_9, 0x0\], gpr_wrboth, predicate_cc
+ 738:  0000e0af809c2800        \.231  cam_read_state\[gprA_9, 0xa\]
+ 740:  0003e0af809c3c00        \.232  cam_read_state\[gprA_9, 0xf\]
+ 748:  000920a9f0101700        \.233  cam_write\[0x0, gprB_5, 1\]
+ 750:  000da0a9f01a0300        \.234  cam_write\[0x0, n\$reg_0, 1\]
+ 758:  000e80a9f0190700        \.235  cam_write\[0x0, \*n\$index, 1\]
+ 760:  0004c4a9f0180300        \.236  cam_write\[0x0, \*l\$index2, 1\]
+ 768:  0008e4a9f0184300        \.237  cam_write\[0x0, \*l\$index2\+\+, 1\]
+ 770:  000dc4a9f0184700        \.238  cam_write\[0x0, \*l\$index2--, 1\]
+ 778:  000840a9f0b01704        \.239  cam_write\[0x4, gprB_5, 11\]
+ 780:  000be0a9f0f0170f        \.240  cam_write\[0xf, gprB_5, 15\]
+ 788:  0008a0adb01c0000        \.241  cam_write_state\[0x0, 1\]
+ 790:  000d80adb0bc1000        \.242  cam_write_state\[0x4, 11\]
+ 798:  000de0adb0fc3c00        \.243  cam_write_state\[0xf, 15\]
+ 7a0:  0000c0fc142c000d        \.244  local_csr_wr\[CRCRemainder, gprA_13\]
+ 7a8:  000d20a918060348        \.245  crc_le\[crc_ccitt, \$xfer_0, \$xfer_0\]
+ 7b0:  000000f0000c0300        \.246  nop
+ 7b8:  000d40a918160748        \.247  crc_le\[crc_ccitt, \$xfer_1, \$xfer_1\]
+ 7c0:  000000f0000c0300        \.248  nop
+ 7c8:  000d40a918260b48        \.249  crc_le\[crc_ccitt, \$xfer_2, \$xfer_2\]
+ 7d0:  000000f0000c0300        \.250  nop
+ 7d8:  000d20a918360f48        \.251  crc_le\[crc_ccitt, \$xfer_3, \$xfer_3\]
+ 7e0:  000000f0000c0300        \.252  nop
+ 7e8:  000000f0000c0300        \.253  nop
+ 7f0:  000000f0000c0300        \.254  nop
+ 7f8:  000000f0000c0300        \.255  nop
+ 800:  000000f0000c0300        \.256  nop
+ 808:  000f60fc140c0000        \.257  local_csr_rd\[CRCRemainder\]
+ 810:  000ce0f0000c000e        \.258  immed\[gprA_14, 0x0\]
+ 818:  000940a918060340        \.259  crc_be\[crc_ccitt, \$xfer_0, \$xfer_0\]
+ 820:  000000f0000c0300        \.260  nop
+ 828:  000920a918461340        \.261  crc_be\[crc_ccitt, \$xfer_4, \$xfer_4\]
+ 830:  000000f0000c0300        \.262  nop
+ 838:  000060a900061340        \.263  crc_be\[crc_ccitt, gprA_0, \$xfer_4\]
+ 840:  000000f0000c0300        \.264  nop
+ 848:  000c60a900001340        \.265  crc_be\[crc_ccitt, gprA_0, gprB_4\]
+ 850:  000000f0000c0300        \.266  nop
+ 858:  000000f0000c0300        \.267  nop
+ 860:  000000f0000c0300        \.268  nop
+ 868:  000000f0000c0300        \.269  nop
+ 870:  000000f0000c0300        \.270  nop
+ 878:  000600a918260380        \.271  crc_be\[crc_32, \$xfer_2, \$xfer_0\]
+ 880:  000000f0000c0300        \.272  nop
+ 888:  0004c0a9183613a0        \.273  crc_be\[crc_iscsi, \$xfer_3, \$xfer_4\]
+ 890:  000000f0000c0300        \.274  nop
+ 898:  0004c0a9000613c0        \.275  crc_be\[crc_10, gprA_0, \$xfer_4\]
+ 8a0:  000000f0000c0300        \.276  nop
+ 8a8:  000960a9000013e0        \.277  crc_be\[crc_5, gprA_0, gprB_4\]
+ 8b0:  000000f0000c0300        \.278  nop
+ 8b8:  000ea0a918862700        \.279  crc_be\[--, \$xfer_8, \$xfer_9\]
+ 8c0:  000000f0000c0300        \.280  nop
+ 8c8:  000240a918760784        \.281  crc_be\[crc_32, \$xfer_7, \$xfer_1\], bytes_0_2
+ 8d0:  000000f0000c0300        \.282  nop
+ 8d8:  0002a0a918760785        \.283  crc_be\[crc_32, \$xfer_7, \$xfer_1\], bytes_0_1
+ 8e0:  000000f0000c0300        \.284  nop
+ 8e8:  000320a918760786        \.285  crc_be\[crc_32, \$xfer_7, \$xfer_1\], byte_0
+ 8f0:  000000f0000c0300        \.286  nop
+ 8f8:  0000c0a918760781        \.287  crc_be\[crc_32, \$xfer_7, \$xfer_1\], bytes_1_3
+ 900:  000000f0000c0300        \.288  nop
+ 908:  000140a918760782        \.289  crc_be\[crc_32, \$xfer_7, \$xfer_1\], bytes_2_3
+ 910:  000000f0000c0300        \.290  nop
+ 918:  0001a0a918760783        \.291  crc_be\[crc_32, \$xfer_7, \$xfer_1\], byte_3
+ 920:  000000f0000c0300        \.292  nop
+ 928:  000782a900160780        \.293  crc_be\[crc_32, gprA_1, \$xfer_1\], gpr_wrboth
+ 930:  000000f0000c0300        \.294  nop
+ 938:  000ae3a900160780        \.295  crc_be\[crc_32, gprA_1, \$xfer_1\], no_cc, gpr_wrboth
+ 940:  000000f0000c0300        \.296  nop
+ 948:  000b73a900560780        \.297  crc_be\[crc_32, gprA_5, \$xfer_1\], no_cc, gpr_wrboth, predicate_cc
+ 950:  000000f0000c0300        \.298  nop
+ 958:  000122a900560781        \.299  crc_be\[crc_32, gprA_5, \$xfer_1\], bytes_1_3, gpr_wrboth
+ 960:  000000f0000c0300        \.300  nop
+ 968:  000000f0000c0300        \.301  nop
+ 970:  000000f0000c0300        \.302  nop
+ 978:  000000f0000c0300        \.303  nop
+ 980:  000000f0000c0300        \.304  nop
+ 988:  000000f0000c0300        \.305  nop
+ 990:  0005a0e000080000        \.306  ctx_arb\[--\]
+ 998:  000600e000000001        \.307  ctx_arb\[voluntary\]
+ 9a0:  000220e000020000        \.308  ctx_arb\[bpt\]
+ 9a8:  000460e000000220        \.309  ctx_arb\[sig5, sig9\]
+ 9b0:  000d20e000200220        \.310  ctx_arb\[sig5, sig9\], defer\[2\]
+ 9b8:  000180a0300c0f00        \.311  alu\[--, --, B, 0x3\]
+ 9c0:  0007a0a0300c1f00        \.312  alu\[--, --, B, 0x7\]
+ 9c8:  0006a0e000010220        \.313  ctx_arb\[sig5, sig9\], any
+ 9d0:  000a60e077c40220        \.314  ctx_arb\[sig5, sig9\], br\[\.479\]
+ 9d8:  0006409010500701        \.315  dbl_shf\[gprB_5, gprA_1, gprB_1, >>1\]
+ 9e0:  000d4090a0500701        \.316  dbl_shf\[gprB_5, gprA_1, gprB_1, >>10\]
+ 9e8:  000c4091f0500701        \.317  dbl_shf\[gprB_5, gprA_1, gprB_1, >>31\]
+ 9f0:  000740a440000402        \.318  alu\[gprA_0, gprB_1, AND, gprA_2\]
+ 9f8:  0000c09000500701        \.319  dbl_shf\[gprB_5, gprA_1, gprB_1, >>indirect\]
+ a00:  000b219010500701        \.320  dbl_shf\[gprB_5, gprA_1, gprB_1, >>1\], no_cc
+ a08:  000cf19010500701        \.321  dbl_shf\[gprB_5, gprA_1, gprB_1, >>1\], no_cc, predicate_cc
+ a10:  0000d28010500701        \.322  dbl_shf\[gprA_5, gprA_1, gprB_1, >>1\], gpr_wrboth, predicate_cc
+ a18:  000200a700f03f00        \.323  ffs\[gprA_15, gprB_15\]
+ a20:  000fe0b740fc000f        \.324  ffs\[gprB_15, gprA_15\]
+ a28:  000ec0b700f61300        \.325  ffs\[gprB_15, \$xfer_4\]
+ a30:  000660b700f88300        \.326  ffs\[gprB_15, \*l\$index1\]
+ a38:  0007e4b700f8c300        \.327  ffs\[gprB_15, \*l\$index3\+\+\]
+ a40:  0002c4b700f8c700        \.328  ffs\[gprB_15, \*l\$index3--\]
+ a48:  0004c4b700f8a700        \.329  ffs\[gprB_15, \*l\$index3\[9\]\]
+ a50:  000880a720000300        \.330  ffs\[\*l\$index0, gprB_0\]
+ a58:  000108a722090700        \.331  ffs\[\*l\$index3, \*n\$index\]
+ a60:  000128a723190f00        \.332  ffs\[\*l\$index3--, \*n\$index\+\+\]
+ a68:  0003c3a740fc000f        \.333  ffs\[gprA_15, gprA_15\], no_cc, gpr_wrboth
+ a70:  000972a740fc000f        \.334  ffs\[gprA_15, gprA_15\], gpr_wrboth, predicate_cc
+ a78:  000320f0000c0803        \.335  immed\[gprA_3, 0x2\]
+ a80:  000480e8004d4803        \.336  jump\[gprA_3, \.338\]
+ a88:  0006a0d854408038        \.337  br\[\.337\]
+ a90:  000460f000002701        \.338  immed\[gprB_9, 0x1\]
+ a98:  0006a0d854408038        \.339  br\[\.337\]
+ aa0:  0005e0f000002702        \.340  immed\[gprB_9, 0x2\]
+ aa8:  0006a0d854408038        \.341  br\[\.337\]
+ ab0:  000500f000002703        \.342  immed\[gprB_9, 0x3\]
+ ab8:  0006a0d854408038        \.343  br\[\.337\]
+ ac0:  000040c001000000        \.344  ld_field\[gprA_0, 0001, gprB_0\]
+ ac8:  0007e2c001000000        \.345  ld_field\[gprA_0, 0001, gprB_0\], gpr_wrboth
+ ad0:  000e40c401000000        \.346  ld_field\[gprA_0, 0001, gprB_0\], load_cc
+ ad8:  000790c001000000        \.347  ld_field\[gprA_0, 0001, gprB_0\], predicate_cc
+ ae0:  0005c0c005000000        \.348  ld_field\[gprA_0, 0101, gprB_0\]
+ ae8:  000080c005100000        \.349  ld_field_w_clr\[gprA_0, 0101, gprB_0\]
+ af0:  0002a2c001100000        \.350  ld_field_w_clr\[gprA_0, 0001, gprB_0\], gpr_wrboth
+ af8:  000b00c401100000        \.351  ld_field_w_clr\[gprA_0, 0001, gprB_0\], load_cc
+ b00:  0002d0c001100000        \.352  ld_field_w_clr\[gprA_0, 0001, gprB_0\], predicate_cc
+ b08:  000fc0c00f000000        \.353  ld_field\[gprA_0, 1111, gprB_0\]
+ b10:  0005e0c1fb000200        \.354  ld_field\[gprA_0, 1011, gprB_0, <<1\]
+ b18:  000460c01b000100        \.355  ld_field\[gprA_0, 1011, gprB_0, >>1\]
+ b20:  000e60c1fb000100        \.356  ld_field\[gprA_0, 1011, gprB_0, >>31\]
+ b28:  000bc0c09b000000        \.357  ld_field\[gprA_0, 1011, gprB_0, >>rot9\]
+ b30:  000e80c09b100000        \.358  ld_field_w_clr\[gprA_0, 1011, gprB_0, >>rot9\]
+ b38:  0001c0c17b000000        \.359  ld_field\[gprA_0, 1011, gprB_0, >>rot23\]
+ b40:  0002c0c41b000000        \.360  ld_field\[gprA_0, 1011, gprB_0, >>rot1\], load_cc
+ b48:  000780c41b100000        \.361  ld_field_w_clr\[gprA_0, 1011, gprB_0, >>rot1\], load_cc
+ b50:  000400f0001f7c01        \.362  immed\[gprA_1, 0x1df\]
+ b58:  000200f0001007df        \.363  immed\[gprB_1, 0x1df\]
+ b60:  0005a2f0001007df        \.364  immed\[gprB_1, 0x1df\], gpr_wrboth
+ b68:  0005d0f0001007df        \.365  immed\[gprB_1, 0x1df\], predicate_cc
+ b70:  000020fc010c0000        \.366  local_csr_rd\[ALUOut\]
+ b78:  000e60f0000c000b        \.367  immed\[gprA_11, 0x0\]
+ b80:  000ce0fc160c0000        \.368  local_csr_rd\[MiscControl\]
+ b88:  000e60f0000c000b        \.369  immed\[gprA_11, 0x0\]
+ b90:  000ae0fc076c0b02        \.370  local_csr_wr\[XferIndex, 0x2\]
+ b98:  0008a0fc076c0003        \.371  local_csr_wr\[XferIndex, gprA_3\]
+ ba0:  000520fc07600f00        \.372  local_csr_wr\[XferIndex, gprB_3\]
+ ba8:  000f20fc01a00f00        \.373  local_csr_wr\[CtxEnables, gprB_3\]
+ bb0:  000480f800000c02        \.374  mul_step\[gprA_2, gprB_3\], start
+ bb8:  000880f980000c02        \.375  mul_step\[gprA_2, gprB_3\], 32x32_step1
+ bc0:  000dc0f980100c02        \.376  mul_step\[gprA_2, gprB_3\], 32x32_step2
+ bc8:  0001c0f980200c02        \.377  mul_step\[gprA_2, gprB_3\], 32x32_step3
+ bd0:  000480f980300c02        \.378  mul_step\[gprA_2, gprB_3\], 32x32_step4
+ bd8:  000940f9804c0002        \.379  mul_step\[gprA_2, --\], 32x32_last
+ be0:  000ce0f9805c0003        \.380  mul_step\[gprA_3, --\], 32x32_last2
+ be8:  0001a0f800000802        \.381  mul_step\[gprA_2, gprB_2\], start
+ bf0:  000aa0f900000802        \.382  mul_step\[gprA_2, gprB_2\], 16x16_step1
+ bf8:  000fe0f900100802        \.383  mul_step\[gprA_2, gprB_2\], 16x16_step2
+ c00:  000f20f9004c0000        \.384  mul_step\[gprA_0, --\], 16x16_last
+ c08:  0001a0f800000802        \.385  mul_step\[gprA_2, gprB_2\], start
+ c10:  0006a0f880000802        \.386  mul_step\[gprA_2, gprB_2\], 24x8_step1
+ c18:  000320f8804c0000        \.387  mul_step\[gprA_0, --\], 24x8_last
+ c20:  0001a0f800000802        \.388  mul_step\[gprA_2, gprB_2\], start
+ c28:  0006a0f880000802        \.389  mul_step\[gprA_2, gprB_2\], 24x8_step1
+ c30:  0004f0f8804c0000        \.390  mul_step\[gprA_0, --\], 24x8_last, predicate_cc
+ c38:  0001a0f800000802        \.391  mul_step\[gprA_2, gprB_2\], start
+ c40:  0006a0f880000802        \.392  mul_step\[gprA_2, gprB_2\], 24x8_step1
+ c48:  0009e3f8804c0000        \.393  mul_step\[gprA_0, --\], 24x8_last, no_cc, gpr_wrboth
+ c50:  000b80a330000000        \.394  pop_count1\[gprB_0\]
+ c58:  000c80a3b0000000        \.395  pop_count2\[gprB_0\]
+ c60:  000d80a180000000        \.396  pop_count3\[gprA_0, gprB_0\]
+ c68:  000b80a330000000        \.397  pop_count1\[gprB_0\]
+ c70:  000c80a3b0000000        \.398  pop_count2\[gprB_0\]
+ c78:  000743a180000000        \.399  pop_count3\[gprA_0, gprB_0\], no_cc, gpr_wrboth
+ c80:  0004a4a330088000        \.400  pop_count1\[\*l\$index3\]
+ c88:  0003a4a3b0088000        \.401  pop_count2\[\*l\$index3\]
+ c90:  0000e5a1a438c000        \.402  pop_count3\[\*n\$index\+\+, \*l\$index3\+\+\], no_cc
+ c98:  000b80a330000000        \.403  pop_count1\[gprB_0\]
+ ca0:  000c80a3b0000000        \.404  pop_count2\[gprB_0\]
+ ca8:  000731a180000000        \.405  pop_count3\[gprA_0, gprB_0\], no_cc, predicate_cc
+ cb0:  000480e8000c0000        \.406  rtn\[gprA_0\]
+ cb8:  000620e8000a0700        \.407  rtn\[n\$reg_1\]
+ cc0:  000600e800088300        \.408  rtn\[\*l\$index1\]
+ cc8:  000a64e800080300        \.409  rtn\[\*l\$index2\]
+ cd0:  000dc0e800200300        \.410  rtn\[gprB_0\], defer\[2\]
+ cd8:  0008a0a0300c0700        \.411  alu\[--, --, B, 0x1\]
+ ce0:  0004a0a0300c0b00        \.412  alu\[--, --, B, 0x2\]
+ ce8:  000000f0000c0300        \.413  nop
+ cf0:  000000f0000c0300        \.414  nop
+ cf8:  000000f0000c0300        \.415  nop
+ d00:  000000f0000c0300        \.416  nop
+ d08:  0003501842300c09        \.417  arm\[read, \$xfer_3, gprA_9, gprB_3, 2\], ctx_swap\[sig4\]
+ d10:  0005501842302403        \.418  arm\[read, \$xfer_3, gprA_3, gprB_9, 2\], ctx_swap\[sig4\]
+ d18:  0004801842300c09        \.419  arm\[read, \$xfer_3, gprA_9, <<8, gprB_3, 2\], ctx_swap\[sig4\]
+ d20:  000f241842302403        \.420  arm\[read, \$xfer_3, gprB_9, <<8, gprA_3, 2\], ctx_swap\[sig4\]
+ d28:  0004a0a0300c0b00        \.421  alu\[--, --, B, 0x2\]
+ d30:  0008861842302403        \.422  arm\[read, \$xfer_3, gprB_9, <<8, gprA_3, 2\], indirect_ref, ctx_swap\[sig4\]
+ d38:  0004a0a0300c0b00        \.423  alu\[--, --, B, 0x2\]
+ d40:  000e8618e2302703        \.424  arm\[read, \$xfer_3, gprB_9, <<8, gprA_3, 2\], indirect_ref, sig_done\[sig14\]
+ d48:  0007841842302503        \.425  arm\[read, \$xfer_3, gprB_9, <<8, gprA_3, 2\], ctx_swap\[sig4\], defer\[1\]
+ d50:  0008a0a0300c0700        \.426  alu\[--, --, B, 0x1\]
+ d58:  000f101843c00c09        \.427  arm\[read, \$xfer_28, gprA_9, gprB_3, 2\], ctx_swap\[sig4\]
+ d60:  000910184e800c09        \.428  arm\[read, \$xfer_8, gprA_9, gprB_3, 8\], ctx_swap\[sig4\]
+ d68:  000a106440800c09        \.429  cls\[add, \$xfer_8, gprA_9, gprB_3, 1\], ctx_swap\[sig4\]
+ d70:  0000f0664080a009        \.430  cls\[sub, \$xfer_8, gprA_9, 0x8, 1\], ctx_swap\[sig4\]
+ d78:  000160644284a009        \.431  cls\[add64, \$xfer_8, gprA_9, <<8, 0x8, 2\], ctx_swap\[sig4\]
+ d80:  000404664284a408        \.432  cls\[sub64, \$xfer_8, 0x9, <<8, gprA_8, 2\], ctx_swap\[sig4\]
+ d88:  0008a0a0300c0700        \.433  alu\[--, --, B, 0x1\]
+ d90:  00032c650340a708        \.434  cls\[add_imm, 0x14, 0x9, <<8, gprA_8, 2\]
+ d98:  0007506040880c09        \.435  cls\[swap/test_compare_write, \$xfer_8, gprA_9, gprB_3, 1\], ctx_swap\[sig4\]
+ da0:  00023c6500007f9a        \.436  cls\[add_imm, 0x1f9a, --, 1\]
+ da8:  000038653c583f14        \.437  cls\[add_imm, 0xf14, 0xf16\]
+ db0:  000b54640013c30f        \.438  cls\[add, \$xfer_1, 0xf00f, 1\]
+ db8:  0002901c10a08000        \.439  ct\[xpb_read, \$xfer_10, gprA_0, 0x0, 1\], ctx_swap\[sig1\]
+ dc0:  0007501e10a48000        \.440  ct\[reflect_read_sig_init, \$xfer_10, gprA_0, 0x0, 1\], ctx_swap\[sig1\]
+ dc8:  000a501c10a48000        \.441  ct\[ring_get, \$xfer_10, gprA_0, 0x0, 1\], ctx_swap\[sig1\]
+ dd0:  000000f0000c0300        \.442  nop
+ dd8:  000cc0474a80a009        \.443  mem\[add64, \$xfer_8, gprA_9, <<8, 0x8, 6\], ctx_swap\[sig4\]
+ de0:  000d40404280a009        \.444  mem\[read, \$xfer_8, gprA_9, <<8, 0x8, 2\], ctx_swap\[sig4\]
+ de8:  000c405c4280a009        \.445  mem\[read32, \$xfer_8, gprA_9, <<8, 0x8, 2\], ctx_swap\[sig4\]
+ df0:  000ea0554280a009        \.446  mem\[ctm\.pe_dma_to_memory_indirect/emem\.get/imem\.lb_bucket_read_local, \$xfer_8, gprA_9, <<8, 0x8, 2\], ctx_swap\[sig4\]
+ df8:  0009204c408ca309        \.447  mem\[lock128/lock384, \$xfer_8, gprA_9, <<8, 0x8, 1\], sig_done\[sig4\]
+ e00:  000f20e000000030        \.448  ctx_arb\[sig4, sig5\]
+ e08:  0000a04c488ca309        \.449  mem\[lock256/lock512, \$xfer_8, gprA_9, <<8, 0x8, 5\], sig_done\[sig4\]
+ e10:  000f20e000000030        \.450  ctx_arb\[sig4, sig5\]
+ e18:  000ae04d4084a009        \.451  mem\[microq128_pop, \$xfer_8, gprA_9, <<8, 0x8, 1\], ctx_swap\[sig4\]
+ e20:  0002204d4080a009        \.452  mem\[microq128_get, \$xfer_8, gprA_9, <<8, 0x8, 1\], ctx_swap\[sig4\]
+ e28:  000ba04d4880a009        \.453  mem\[microq256_get, \$xfer_8, gprA_9, <<8, 0x8, 5\], ctx_swap\[sig4\]
+ e30:  0003805700028309        \.454  mem\[ctm\.pe_dma_from_memory_buffer/emem\.fast_journal/imem\.lb_push_stats_local, \$xfer_0, gprA_9, <<8, 0x40, 1\]
+ e38:  0005e04e4000a309        \.455  mem\[queue128_lock, \$xfer_0, gprA_9, <<8, 0x8, 1\], sig_done\[sig4\]
+ e40:  000f20e000000030        \.456  ctx_arb\[sig4, sig5\]
+ e48:  0001a04e0004a309        \.457  mem\[queue128_unlock, \$xfer_0, gprA_9, <<8, 0x8, 1\]
+ e50:  000c604e4800a309        \.458  mem\[queue256_lock, \$xfer_0, gprA_9, <<8, 0x8, 5\], sig_done\[sig4\]
+ e58:  000f20e000000030        \.459  ctx_arb\[sig4, sig5\]
+ e60:  0008204e0804a309        \.460  mem\[queue256_unlock, \$xfer_0, gprA_9, <<8, 0x8, 5\]
+ e68:  0008a05000001309        \.461  mem\[ctm\.packet_wait_packet_status/emem\.rd_qdesc/imem\.stats_log, \$xfer_0, gprA_9, <<8, gprB_4, 1\]
+ e70:  000b840092200c02        \.462  ila\[read, \$xfer_2, gprB_3, <<8, gprA_2, 2\], ctx_swap\[sig9\]
+ e78:  0005440182240f02        \.463  ila\[write_check_error, \$xfer_2, gprB_3, <<8, gprA_2, 2\], sig_done\[sig8\]
+ e80:  000d60e000000300        \.464  ctx_arb\[sig8, sig9\]
+ e88:  0007800410600000        \.465  nbi\[read, \$xfer_6, gprA_0, <<8, gprB_0, 1\], ctx_swap\[sig1\]
+ e90:  0002600c62000000        \.466  pcie\[read, \$xfer_0, gprA_0, <<8, gprB_0, 2\], ctx_swap\[sig6\]
+ e98:  0004c40d62000000        \.467  pcie\[write, \$xfer_0, gprB_0, <<8, gprA_0, 2\], ctx_swap\[sig6\]
+ ea0:  000d601462000000        \.468  crypto\[read, \$xfer_0, gprA_0, <<8, gprB_0, 2\], ctx_swap\[sig6\]
+ ea8:  0006601562000000        \.469  crypto\[write, \$xfer_0, gprA_0, <<8, gprB_0, 2\], ctx_swap\[sig6\]
+ eb0:  0000601662000000        \.470  crypto\[write_fifo, \$xfer_0, gprA_0, <<8, gprB_0, 2\], ctx_swap\[sig6\]
+ eb8:  000d840d60000050        \.471  pcie\[write, \$xfer_0, gprB_0, <<8, \*l\$index0, 1\], ctx_swap\[sig6\]
+ ec0:  0009e40d60000058        \.472  pcie\[write, \$xfer_0, gprB_0, <<8, \*l\$index1, 1\], ctx_swap\[sig6\]
+ ec8:  0009040d60000059        \.473  pcie\[write, \$xfer_0, gprB_0, <<8, \*l\$index1\[1\], 1\], ctx_swap\[sig6\]
+ ed0:  000000f0000c0300        \.474  nop
+ ed8:  000000f0000c0300        \.475  nop
+ ee0:  000000f0000c0300        \.476  nop
+ ee8:  000000f0000c0300        \.477  nop
+ ef0:  000000f0000c0300        \.478  nop
+ ef8:  000220e000020000        \.479  ctx_arb\[bpt\]
+ f00:  000420e000010000        \.480  ctx_arb\[kill\]
diff --git a/binutils/testsuite/binutils-all/nfp/test1_nfp6000.nffw b/binutils/testsuite/binutils-all/nfp/test1_nfp6000.nffw
new file mode 100644 (file)
index 0000000..869a6b2
Binary files /dev/null and b/binutils/testsuite/binutils-all/nfp/test1_nfp6000.nffw differ
diff --git a/binutils/testsuite/binutils-all/nfp/test2_ctx8.d b/binutils/testsuite/binutils-all/nfp/test2_ctx8.d
new file mode 100644 (file)
index 0000000..b3a1751
--- /dev/null
@@ -0,0 +1,16 @@
+
+.*:     file format elf64-nfp
+
+
+Disassembly of section \.text\.i32\.me0:
+
+0000000000000000 <\.text\.i32\.me0>:
+   0:  000d80a0300c0300        \.0  alu\[--, --, B, 0x0\]
+   8:  0008a0a0300c0700        \.1  alu\[--, --, B, 0x1\]
+  10:  0004a0a0300c0b00        \.2  alu\[--, --, B, 0x2\]
+  18:  000180a0300c0f00        \.3  alu\[--, --, B, 0x3\]
+  20:  0004a0a018cc1300        \.4  alu\[\$xfer_12, --, B, 0x4\]
+  28:  0001c0a019fc1700        \.5  alu\[\$xfer_15, --, B, 0x5\]
+  30:  000400a0b00c198c        \.6  alu\[--, \$xfer_12, \+, 0x6\]
+  38:  0008c0a0b00c1d9f        \.7  alu\[--, \$xfer_15, \+, 0x7\]
+  40:  000220e000020000        \.8  ctx_arb\[bpt\]
diff --git a/binutils/testsuite/binutils-all/nfp/test2_nfp6000.nffw b/binutils/testsuite/binutils-all/nfp/test2_nfp6000.nffw
new file mode 100644 (file)
index 0000000..28da2fd
Binary files /dev/null and b/binutils/testsuite/binutils-all/nfp/test2_nfp6000.nffw differ
diff --git a/binutils/testsuite/binutils-all/nfp/test2_no-pc_ctx4.d b/binutils/testsuite/binutils-all/nfp/test2_no-pc_ctx4.d
new file mode 100644 (file)
index 0000000..3f7450a
--- /dev/null
@@ -0,0 +1,16 @@
+
+.*:     file format elf64-nfp
+
+
+Disassembly of section \.text\.i32\.me0:
+
+0000000000000000 <\.text\.i32\.me0>:
+   0:  000d80a0300c0300        alu\[--, --, B, 0x0\]
+   8:  0008a0a0300c0700        alu\[--, --, B, 0x1\]
+  10:  0004a0a0300c0b00        alu\[--, --, B, 0x2\]
+  18:  000180a0300c0f00        alu\[--, --, B, 0x3\]
+  20:  0004a0a018cc1300        alu\[\$xfer_12, --, B, 0x4\]
+  28:  0001c0a019fc1700        alu\[\$xfer_31, --, B, 0x5\]
+  30:  000400a0b00c198c        alu\[--, \$xfer_12, \+, 0x6\]
+  38:  0008c0a0b00c1d9f        alu\[--, \$xfer_31, \+, 0x7\]
+  40:  000220e000020000        ctx_arb\[bpt\]
index 3e45748e7d500e0467f0fa0525d1f62d5d2f544d..cf0b62681262f8bc05bed3942289485a77e9a61b 100644 (file)
@@ -1,3 +1,11 @@
+2018-04-30  Francois H. Theron <francois.theron@netronome.com>
+
+       * dis-asm.h: Added print_nfp_disassembler_options prototype.
+       * elf/common.h: Added EM_NFP, officially assigned. See Google Group
+       Generic System V Application Binary Interface.
+       * elf/nfp.h: New, for NFP support.
+       * opcode/nfp.h: New, for NFP support.
+
 2018-04-25  Christophe Lyon  <christophe.lyon@st.com>
        Mickaël Guêné  <mickael.guene@st.com>
 
index 760ed3ebea7fb27b705bd6ee3aa389f49e9337a1..cb72b7db5d9fb825caf876e2f47150e12f56c86e 100644 (file)
@@ -254,6 +254,7 @@ extern disassembler_ftype cris_get_disassembler (bfd *);
 extern void print_aarch64_disassembler_options (FILE *);
 extern void print_i386_disassembler_options (FILE *);
 extern void print_mips_disassembler_options (FILE *);
+extern void print_nfp_disassembler_options (FILE *);
 extern void print_ppc_disassembler_options (FILE *);
 extern void print_riscv_disassembler_options (FILE *);
 extern void print_arm_disassembler_options (FILE *);
index 469fe5a98740bb816643d3de820ca72c8c33b76f..ae4a7b2b61911ed3c7478b48c0e8d1fabba76a09 100644 (file)
 #define EM_RISCV       243     /* RISC-V */
 #define EM_LANAI       244     /* Lanai 32-bit processor.  */
 #define EM_BPF         247     /* Linux BPF â€“ in-kernel virtual machine.  */
+#define EM_NFP         250     /* Netronome Flow Processor.  */
 
 /* If it is necessary to assign new unofficial EM_* values, please pick large
    random numbers (0x8523, 0xa7f2, etc.) to minimize the chances of collision
diff --git a/include/elf/nfp.h b/include/elf/nfp.h
new file mode 100755 (executable)
index 0000000..07d4bcc
--- /dev/null
@@ -0,0 +1,292 @@
+/* NFP ELF support for BFD.
+   Copyright (C) 2017-2018 Free Software Foundation, Inc.
+   Contributed by Francois H. Theron <francois.theron@netronome.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.  */
+
+#ifndef _ELF_NFP_H
+#define _ELF_NFP_H
+
+#include "bfd.h"
+#include "elf/common.h"
+#include "elf/reloc-macros.h"
+#include "bfd_stdint.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define ET_NFP_PARTIAL_REL (ET_LOPROC + ET_REL)
+#define ET_NFP_PARTIAL_EXEC (ET_LOPROC + ET_EXEC)
+
+/* NFP e_flags - chip family
+   Valid values for FAMILY are:
+   0x3200 - NFP-32xx
+   0x6000 - NFP-6xxx/NFP-4xxx.  */
+#define EF_NFP_MACH(ef_nfp)        (((ef_nfp) >> 8) & 0xFFFF)
+#define EF_NFP_SET_MACH(nfp_fam)   (((nfp_fam) & 0xFFFF) << 8)
+
+#define E_NFP_MACH_3200        0x3200
+#define E_NFP_MACH_6000        0x6000
+
+#define NFP_3200_CPPTGT_MSF0     1
+#define NFP_3200_CPPTGT_QDR      2
+#define NFP_3200_CPPTGT_MSF1     3
+#define NFP_3200_CPPTGT_HASH     4
+#define NFP_3200_CPPTGT_MU       7
+#define NFP_3200_CPPTGT_GS       8
+#define NFP_3200_CPPTGT_PCIE     9
+#define NFP_3200_CPPTGT_ARM     10
+#define NFP_3200_CPPTGT_CRYPTO  12
+#define NFP_3200_CPPTGT_CAP     13
+#define NFP_3200_CPPTGT_CT      14
+#define NFP_3200_CPPTGT_CLS     15
+
+#define NFP_6000_CPPTGT_NBI      1
+#define NFP_6000_CPPTGT_VQDR     2
+#define NFP_6000_CPPTGT_ILA      6
+#define NFP_6000_CPPTGT_MU       7
+#define NFP_6000_CPPTGT_PCIE     9
+#define NFP_6000_CPPTGT_ARM     10
+#define NFP_6000_CPPTGT_CRYPTO  12
+#define NFP_6000_CPPTGT_CTXPB   14
+#define NFP_6000_CPPTGT_CLS     15
+
+/* NFP Section types
+   MECONFIG - NFP-32xx only, ME CSR configurations
+   INITREG - A generic register initialisation section (chip or ME CSRs/GPRs)
+   UDEBUG - Legacy-style debug data section.  */
+#define SHT_NFP_MECONFIG       (SHT_LOPROC + 1)
+#define SHT_NFP_INITREG                (SHT_LOPROC + 2)
+#define SHT_NFP_UDEBUG         SHT_LOUSER
+
+/* NFP SECTION flags
+     ELF-64 sh_flags is 64-bit, but there is no info on what the upper 32 bits
+     are expected to be used for, it is not marked reserved either.
+     We'll use them for NFP-specific flags since we don't use ELF-32.
+
+   INIT - Sections that are loaded and executed before the final text
+         microcode.  Non-code INIT sections are loaded first, then other
+         memory secions, then INIT2 sections, then INIT-code sections.
+   INIT2 - Sections that are loaded before INIT-code sections, used for
+          transient configuration before executing INIT-code section
+          microcode.
+   SCS - The number of additional ME codestores being shared with the group's
+        base ME of the section, e.g. 0 for no SCS, 1 for dual and 3 for
+        quad.  If this is 0 it is possible that stagger-style SCS codestore
+        sections are being used.  For stagger-style each section is simply
+        loaded directly to the ME it is assigned to.  If these flags are
+        used, virtual address space loading will be used - one large section
+        loaded to the group's base ME will be packed across shared MEs by
+        hardware.  This is not available on all ME versions.
+
+    NFP_ELF_SHF_GET_SCS (val) returns the number of additional codestores
+    being shared with the group's base ME, e.g. 0 for no SCS,
+    1 for dual SCS, 3 for quad SCS.  */
+
+#define SHF_NFP_INIT           0x80000000
+#define SHF_NFP_INIT2          0x40000000
+#define SHF_NFP_SCS(shf)       (((shf) >> 32) & 0xFF)
+#define SHF_NFP_SET_SCS(v)     (((BFD_HOST_U_64_BIT)((v) & 0xFF)) << 32)
+
+/* NFP Section Info
+   For PROGBITS and NOBITS sections:
+     MEMTYPE - the memory type
+     DOMAIN - The island ID and ME number where the data will be loaded.
+             For NFP-32xx, this is an island number or linear ME number.
+             For NFP-6xxx, DOMAIN<15:8> == island ID, DOMAIN<7:0> is 0 based
+             ME number (if applicable).
+   For INITREG sections:
+     ISLAND - island ID (if it's a ME target, ME numbers are in the
+             section data)
+     CPPTGT - CPP Target ID
+     CPPACTRD - CPP Read Action
+     CPPTOKRD - CPP Read Token
+     CPPACTWR - CPP Write Action
+     CPPTOKWR - CPP Write Token
+     ORDER - Controls the order in which the loader processes sections with
+            the same info fields.  */
+
+#define SHI_NFP_DOMAIN(shi)            (((shi) >> 16) & 0xFFFF)
+#define SHI_NFP_MEMTYPE(shi)           ( (shi) & 0xFFFF)
+#define SHI_NFP_SET_DOMAIN(v)          (((v) & 0xFFFF) << 16)
+#define SHI_NFP_SET_MEMTYPE(v)         ( (v) & 0xFFFF)
+
+#define SHI_NFP_IREG_ISLAND(shi)       (((shi) >> 26) & 0x3F)
+#define SHI_NFP_IREG_CPPTGT(shi)       (((shi) >> 22) &  0xF)
+#define SHI_NFP_IREG_CPPACTRD(shi)     (((shi) >> 17) & 0x1F)
+#define SHI_NFP_IREG_CPPTOKRD(shi)     (((shi) >> 15) &  0x3)
+#define SHI_NFP_IREG_CPPACTWR(shi)     (((shi) >> 10) & 0x1F)
+#define SHI_NFP_IREG_CPPTOKWR(shi)     (((shi) >> 8)  &  0x3)
+#define SHI_NFP_IREG_ORDER(shi)                ( (shi) & 0xFF)
+#define SHI_NFP_SET_IREG_ISLAND(v)     (((v) & 0x3F) << 26)
+#define SHI_NFP_SET_IREG_CPPTGT(v)     (((v) &  0xF) << 22)
+#define SHI_NFP_SET_IREG_CPPACTRD(v)   (((v) & 0x1F) << 17)
+#define SHI_NFP_SET_IREG_CPPTOKRD(v)   (((v) &  0x3) << 15)
+#define SHI_NFP_SET_IREG_CPPACTWR(v)   (((v) & 0x1F) << 10)
+#define SHI_NFP_SET_IREG_CPPTOKWR(v)   (((v) &  0x3) << 8)
+#define SHI_NFP_SET_IREG_ORDER(v)      ( (v) & 0xFF)
+
+/* CtXpb/reflect_read_sig_init/reflect_write_sig_init
+   identifies Init-CSR sections for ME CSRs.  */
+#define SHI_NFP_6000_IS_IREG_MECSR(shi) ( \
+  SHI_NFP_IREG_CPPTGT (shi) == NFP_6000_CPPTGT_CTXPB \
+  && SHI_NFP_IREG_CPPACTRD (shi) == 2 \
+  && SHI_NFP_IREG_CPPTOKRD (shi) == 1 \
+  && SHI_NFP_IREG_CPPACTWR (shi) == 3 \
+  && SHI_NFP_IREG_CPPTOKWR (shi) == 1 \
+)
+
+/* Transient INITREG sections will be validated against the target
+   but will not be kept - validate, write or read and discard.
+   They will still be handled last (in order).  */
+#define SHI_NFP_IREG_ORDER_TRANSIENT   0xFF
+
+/* Below are some extra macros to translate SHI fields in more specific
+   contexts.
+
+   For NFP-32xx, DOMAIN is set to a global linear ME number (0 to 39).
+   An NFP-32xx has 8 MEs per island and up to 5 islands.  */
+
+#define SHI_NFP_3200_ISLAND(shi)       ((SHI_NFP_DOMAIN (shi) >> 3) & 0x7)
+#define SHI_NFP_3200_MENUM(shi)                ( SHI_NFP_DOMAIN (shi)       & 0x7)
+#define SHI_NFP_SET_3200_ISLAND(v)     SHI_NFP_SET_DOMAIN (((v) & 0x7) << 3)
+#define SHI_NFP_SET_3200_MENUM(v)      SHI_NFP_SET_DOMAIN ( (v) & 0x7)
+
+#define SHI_NFP_ISLAND(shi)            ((SHI_NFP_DOMAIN (shi) >> 8) & 0xFF)
+#define SHI_NFP_MENUM(shi)             ( SHI_NFP_DOMAIN (shi)       & 0xFF)
+#define SHI_NFP_SET_ISLAND(shi)                SHI_NFP_SET_DOMAIN (((shi) & 0xFF) << 8)
+#define SHI_NFP_SET_MENUM(shi)         SHI_NFP_SET_DOMAIN ( (shi) & 0xFF)
+
+#define SHI_NFP_MEMTYPE_NONE           0
+#define SHI_NFP_MEMTYPE_USTORE                 1
+#define SHI_NFP_MEMTYPE_LMEM           2
+#define SHI_NFP_MEMTYPE_CLS            3
+#define SHI_NFP_MEMTYPE_DRAM           4
+#define SHI_NFP_MEMTYPE_MU             4
+#define SHI_NFP_MEMTYPE_SRAM           5
+#define SHI_NFP_MEMTYPE_GS             6
+#define SHI_NFP_MEMTYPE_PPC_LMEM       7
+#define SHI_NFP_MEMTYPE_PPC_SMEM       8
+#define SHI_NFP_MEMTYPE_EMU_CACHE      9
+
+/* VTP_FORCE is for use by the NFP Linker+Loader only.  */
+#define NFP_IREG_VTP_FORCE             0
+#define NFP_IREG_VTP_CONST             1
+#define NFP_IREG_VTP_REQUIRED          2
+#define NFP_IREG_VTP_VOLATILE_INIT     3
+#define NFP_IREG_VTP_VOLATILE_NOINIT   4
+#define NFP_IREG_VTP_INVALID           5
+
+/* Init-CSR entry w0 fields:
+   NLW - Not Last Word
+   CTX - ME context number (if applicable)
+   VTP - Value type
+   COH - CPP Offset High 8 bits.  */
+#define NFP_IREG_ENTRY_WO_NLW(w0) (((w0) >> 31) & 0x1)
+#define NFP_IREG_ENTRY_WO_CTX(w0) (((w0) >> 28) & 0x7)
+#define NFP_IREG_ENTRY_WO_VTP(w0) (((w0) >> 25) & 0x7)
+#define NFP_IREG_ENTRY_WO_COH(w0) (((w0) >> 0) & 0xFF)
+
+typedef struct
+{
+  uint32_t w0;
+  uint32_t cpp_offset_lo;
+  uint32_t val;
+  uint32_t mask;
+} Elf_Nfp_InitRegEntry;
+
+typedef struct
+{
+  uint32_t ctx_enables;
+  uint32_t entry;
+  uint32_t misc_control;
+  uint32_t reserved;
+} Elf_Nfp_MeConfig;
+
+/* Relocations.  */
+START_RELOC_NUMBERS (elf_nfp3200_reloc_type)
+    RELOC_NUMBER (R_NFP3200_NOTYPE, 0)
+    RELOC_NUMBER (R_NFP3200_W32LE, 1)
+    RELOC_NUMBER (R_NFP3200_SRC8_A, 2)
+    RELOC_NUMBER (R_NFP3200_SRC8_B, 3)
+    RELOC_NUMBER (R_NFP3200_IMMED8_I, 4)
+    RELOC_NUMBER (R_NFP3200_SC, 5)
+    RELOC_NUMBER (R_NFP3200_IMMED_LO16_I_A, 6)
+    RELOC_NUMBER (R_NFP3200_IMMED_LO16_I_B, 7)
+    RELOC_NUMBER (R_NFP3200_SRC7_B, 8)
+    RELOC_NUMBER (R_NFP3200_SRC7_A, 9)
+    RELOC_NUMBER (R_NFP3200_SRC8_I_B, 10)
+    RELOC_NUMBER (R_NFP3200_SRC8_I_A, 11)
+    RELOC_NUMBER (R_NFP3200_IMMED_HI16_I_A, 12)
+    RELOC_NUMBER (R_NFP3200_IMMED_HI16_I_B, 13)
+    RELOC_NUMBER (R_NFP3200_RSVD_0, 14)
+    RELOC_NUMBER (R_NFP3200_RSVD_1, 15)
+    RELOC_NUMBER (R_NFP3200_RSVD_2, 16)
+    RELOC_NUMBER (R_NFP3200_RSVD_3, 17)
+    RELOC_NUMBER (R_NFP3200_RSVD_4, 18)
+    RELOC_NUMBER (R_NFP3200_RSVD_5, 19)
+    RELOC_NUMBER (R_NFP3200_RSVD_6, 20)
+    RELOC_NUMBER (R_NFP3200_W64LE, 21)
+    RELOC_NUMBER (R_NFP3200_W32BE, 22)
+    RELOC_NUMBER (R_NFP3200_W64BE, 23)
+    RELOC_NUMBER (R_NFP3200_W32LE_AND, 24)
+    RELOC_NUMBER (R_NFP3200_W32BE_AND, 25)
+    RELOC_NUMBER (R_NFP3200_W32LE_OR, 26)
+    RELOC_NUMBER (R_NFP3200_W32BE_OR, 27)
+    RELOC_NUMBER (R_NFP3200_W64LE_AND, 28)
+    RELOC_NUMBER (R_NFP3200_W64BE_AND, 29)
+    RELOC_NUMBER (R_NFP3200_W64LE_OR, 30)
+    RELOC_NUMBER (R_NFP3200_W64BE_OR, 31)
+END_RELOC_NUMBERS (R_NFP3200_MAX)
+
+START_RELOC_NUMBERS (elf_nfp_reloc_type)
+    RELOC_NUMBER (R_NFP_NOTYPE, 0)
+    RELOC_NUMBER (R_NFP_W32LE, 1)
+    RELOC_NUMBER (R_NFP_SRC8_A, 2)
+    RELOC_NUMBER (R_NFP_SRC8_B, 3)
+    RELOC_NUMBER (R_NFP_IMMED8_I, 4)
+    RELOC_NUMBER (R_NFP_SC, 5)
+    RELOC_NUMBER (R_NFP_IMMED_LO16_I_A, 6)
+    RELOC_NUMBER (R_NFP_IMMED_LO16_I_B, 7)
+    RELOC_NUMBER (R_NFP_SRC7_B, 8)
+    RELOC_NUMBER (R_NFP_SRC7_A, 9)
+    RELOC_NUMBER (R_NFP_SRC8_I_B, 10)
+    RELOC_NUMBER (R_NFP_SRC8_I_A, 11)
+    RELOC_NUMBER (R_NFP_IMMED_HI16_I_A, 12)
+    RELOC_NUMBER (R_NFP_IMMED_HI16_I_B, 13)
+    RELOC_NUMBER (R_NFP_W64LE, 14)
+    RELOC_NUMBER (R_NFP_SH_INFO, 15)
+    RELOC_NUMBER (R_NFP_W32BE, 16)
+    RELOC_NUMBER (R_NFP_W64BE, 17)
+    RELOC_NUMBER (R_NFP_W32_29_24, 18)
+    RELOC_NUMBER (R_NFP_W32LE_AND, 19)
+    RELOC_NUMBER (R_NFP_W32BE_AND, 20)
+    RELOC_NUMBER (R_NFP_W32LE_OR, 21)
+    RELOC_NUMBER (R_NFP_W32BE_OR, 22)
+    RELOC_NUMBER (R_NFP_W64LE_AND, 23)
+    RELOC_NUMBER (R_NFP_W64BE_AND, 24)
+    RELOC_NUMBER (R_NFP_W64LE_OR, 25)
+    RELOC_NUMBER (R_NFP_W64BE_OR, 26)
+END_RELOC_NUMBERS (R_NFP_MAX)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ELF_NFP_H */
diff --git a/include/opcode/nfp.h b/include/opcode/nfp.h
new file mode 100644 (file)
index 0000000..6d9efaf
--- /dev/null
@@ -0,0 +1,180 @@
+/* nfp.h.  NFP opcode list.
+   Copyright (C) 2017-2018 Free Software Foundation, Inc.
+   Contributed by Francois H. Theron <francois.theron@netronome.com>
+
+   This file is part of the GNU opcodes library.
+
+   GDB, GAS, and the GNU binutils are free software; you can redistribute
+   them and/or modify them 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.
+
+   GDB, GAS, and the GNU binutils are distributed in the hope that they
+   will be useful, but WITHOUT ANY WARRANTY; without even the implied
+   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
+   the GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this file; see the file COPYING3.  If not, write to the Free
+   Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
+
+#ifndef _NFP_H_
+#define _NFP_H_
+
+#include "bfd.h"
+#include "elf/nfp.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/* The bfd_vma type has the description below, so we use that and BFD_VMA_FMT
+   instead of uint64_t or bfd_uint64_t.
+   "Represent a target address.  Also used as a generic unsigned type
+   which is guaranteed to be big enough to hold any arithmetic types
+   we need to deal with."
+
+   We use ME versions for most of this rather than NFP family and revision
+   numbers.  The version numbers are currently 2.7 and 2.8 and to avoid long
+   names with many underscores we'll just use 27 and 28 until some feature
+   number makes it necessary to do something different.  */
+
+#define NFP_ME27_INSTR_MASK_CMD                ((bfd_vma) 0x008000000000)
+#define NFP_ME27_INSTR_CMD             ((bfd_vma) 0x000000000000)
+#define NFP_ME27_INSTR_IS_CMD(instr) \
+       ((instr & NFP_ME27_INSTR_MASK_CMD) == NFP_ME27_INSTR_CMD)
+
+#define NFP_ME27_INSTR_MASK_ALU_SHF    ((bfd_vma) 0x1ee000000000)
+#define NFP_ME27_INSTR_ALU_SHF         ((bfd_vma) 0x008000000000)
+#define NFP_ME27_INSTR_IS_ALU_SHF(instr) \
+       ((instr & NFP_ME27_INSTR_MASK_ALU_SHF) == NFP_ME27_INSTR_ALU_SHF)
+
+#define NFP_ME27_INSTR_MASK_ALU                ((bfd_vma) 0x1ee000000000)
+#define NFP_ME27_INSTR_ALU             ((bfd_vma) 0x00a000000000)
+#define NFP_ME27_INSTR_IS_ALU(instr) \
+               ((instr & NFP_ME27_INSTR_MASK_ALU) == NFP_ME27_INSTR_ALU)
+
+#define NFP_ME27_INSTR_MASK_IMMED      ((bfd_vma) 0x1ff900000000)
+#define NFP_ME27_INSTR_IMMED           ((bfd_vma) 0x00f000000000)
+#define NFP_ME27_INSTR_IS_IMMED(instr) \
+       ((instr & NFP_ME27_INSTR_MASK_IMMED) == NFP_ME27_INSTR_IMMED)
+
+#define NFP_ME27_INSTR_MASK_LD_FIELD   ((bfd_vma) 0x1ffa00e00000)
+#define NFP_ME27_INSTR_LD_FIELD                ((bfd_vma) 0x00c000000000)
+#define NFP_ME27_INSTR_IS_LD_FIELD(instr) \
+       ((instr & NFP_ME27_INSTR_MASK_LD_FIELD) == NFP_ME27_INSTR_LD_FIELD)
+
+#define NFP_ME27_INSTR_MASK_CTX_ARB    ((bfd_vma) 0x00f800000000)
+#define NFP_ME27_INSTR_CTX_ARB         ((bfd_vma) 0x00e000000000)
+#define NFP_ME27_INSTR_IS_CTX_ARB(instr) \
+       ((instr & NFP_ME27_INSTR_MASK_CTX_ARB) == NFP_ME27_INSTR_CTX_ARB)
+
+#define NFP_ME27_INSTR_MASK_LOCAL_CSR  ((bfd_vma) 0x1ffe00100000)
+#define NFP_ME27_INSTR_LOCAL_CSR       ((bfd_vma) 0x00fc00000000)
+#define NFP_ME27_INSTR_IS_LOCAL_CSR(instr) \
+       ((instr & NFP_ME27_INSTR_MASK_LOCAL_CSR) == NFP_ME27_INSTR_LOCAL_CSR)
+
+#define NFP_ME27_INSTR_MASK_BRANCH     ((bfd_vma) 0x00f8000c3ce0)
+#define NFP_ME27_INSTR_BRANCH          ((bfd_vma) 0x00d800000020)
+#define NFP_ME27_INSTR_IS_BRANCH(instr) \
+       ((instr & NFP_ME27_INSTR_MASK_BRANCH) == NFP_ME27_INSTR_BRANCH)
+
+#define NFP_ME27_INSTR_MASK_BR_BYTE    ((bfd_vma) 0x00f800000000)
+#define NFP_ME27_INSTR_BR_BYTE         ((bfd_vma) 0x00c800000000)
+#define NFP_ME27_INSTR_IS_BR_BYTE(instr) \
+       ((instr & NFP_ME27_INSTR_MASK_BR_BYTE) == NFP_ME27_INSTR_BR_BYTE)
+
+#define NFP_ME27_INSTR_MASK_BR_BIT     ((bfd_vma) 0x00f800080300)
+#define NFP_ME27_INSTR_BR_BIT          ((bfd_vma) 0x00d000000000)
+#define NFP_ME27_INSTR_IS_BR_BIT(instr) \
+       ((instr & NFP_ME27_INSTR_MASK_BR_BIT) == NFP_ME27_INSTR_BR_BIT)
+
+#define NFP_ME27_INSTR_MASK_BR_ALU     ((bfd_vma) 0x1fff80000000)
+#define NFP_ME27_INSTR_BR_ALU          ((bfd_vma) 0x00e800000000)
+#define NFP_ME27_INSTR_IS_BR_ALU(instr) \
+       ((instr & NFP_ME27_INSTR_MASK_BR_ALU) == NFP_ME27_INSTR_BR_ALU)
+
+#define NFP_ME27_INSTR_MASK_MULT       ((bfd_vma) 0x1efe3f000000)
+#define NFP_ME27_INSTR_MULT            ((bfd_vma) 0x00f800000000)
+#define NFP_ME27_INSTR_IS_MULT(instr) \
+       ((instr & NFP_ME27_INSTR_MASK_MULT) == NFP_ME27_INSTR_MULT)
+
+
+#define NFP_ME28_INSTR_MASK_CMD                ((bfd_vma) 0x008000000000)
+#define NFP_ME28_INSTR_CMD             ((bfd_vma) 0x000000000000)
+#define NFP_ME28_INSTR_IS_CMD(instr) \
+       ((instr & NFP_ME28_INSTR_MASK_CMD) == NFP_ME28_INSTR_CMD)
+
+#define NFP_ME28_INSTR_MASK_ALU_SHF    ((bfd_vma) 0x00e000000000)
+#define NFP_ME28_INSTR_ALU_SHF         ((bfd_vma) 0x008000000000)
+#define NFP_ME28_INSTR_IS_ALU_SHF(instr) \
+       ((instr & NFP_ME28_INSTR_MASK_ALU_SHF) == NFP_ME28_INSTR_ALU_SHF)
+
+#define NFP_ME28_INSTR_MASK_ALU                ((bfd_vma) 0x00e000000000)
+#define NFP_ME28_INSTR_ALU             ((bfd_vma) 0x00a000000000)
+#define NFP_ME28_INSTR_IS_ALU(instr) \
+       ((instr & NFP_ME28_INSTR_MASK_ALU) == NFP_ME28_INSTR_ALU)
+
+#define NFP_ME28_INSTR_MASK_IMMED      ((bfd_vma) 0x01f900000000)
+#define NFP_ME28_INSTR_IMMED           ((bfd_vma) 0x00f000000000)
+#define NFP_ME28_INSTR_IS_IMMED(instr) \
+       ((instr & NFP_ME28_INSTR_MASK_IMMED) == NFP_ME28_INSTR_IMMED)
+
+#define NFP_ME28_INSTR_MASK_LD_FIELD   ((bfd_vma) 0x01fa00e00000)
+#define NFP_ME28_INSTR_LD_FIELD                ((bfd_vma) 0x00c000000000)
+#define NFP_ME28_INSTR_IS_LD_FIELD(instr) \
+       ((instr & NFP_ME28_INSTR_MASK_LD_FIELD) == NFP_ME28_INSTR_LD_FIELD)
+
+#define NFP_ME28_INSTR_MASK_CTX_ARB    ((bfd_vma) 0x00f800000000)
+#define NFP_ME28_INSTR_CTX_ARB         ((bfd_vma) 0x00e000000000)
+#define NFP_ME28_INSTR_IS_CTX_ARB(instr) \
+       ((instr & NFP_ME28_INSTR_MASK_CTX_ARB) == NFP_ME28_INSTR_CTX_ARB)
+
+#define NFP_ME28_INSTR_MASK_LOCAL_CSR  ((bfd_vma) 0x01fe00100000)
+#define NFP_ME28_INSTR_LOCAL_CSR       ((bfd_vma) 0x00fc00000000)
+#define NFP_ME28_INSTR_IS_LOCAL_CSR(instr) \
+       ((instr & NFP_ME28_INSTR_MASK_LOCAL_CSR) == NFP_ME28_INSTR_LOCAL_CSR)
+
+#define NFP_ME28_INSTR_MASK_BRANCH     ((bfd_vma) 0x00f8000c3ce0)
+#define NFP_ME28_INSTR_BRANCH          ((bfd_vma) 0x00d800000020)
+#define NFP_ME28_INSTR_IS_BRANCH(instr) \
+       ((instr & NFP_ME28_INSTR_MASK_BRANCH) == NFP_ME28_INSTR_BRANCH)
+
+#define NFP_ME28_INSTR_MASK_BR_BYTE    ((bfd_vma) 0x00f800000000)
+#define NFP_ME28_INSTR_BR_BYTE         ((bfd_vma) 0x00c800000000)
+#define NFP_ME28_INSTR_IS_BR_BYTE(instr) \
+       ((instr & NFP_ME28_INSTR_MASK_BR_BYTE) == NFP_ME28_INSTR_BR_BYTE)
+
+#define NFP_ME28_INSTR_MASK_BR_BIT     ((bfd_vma) 0x00f800080300)
+#define NFP_ME28_INSTR_BR_BIT          ((bfd_vma) 0x00d000000000)
+#define NFP_ME28_INSTR_IS_BR_BIT(instr) \
+       ((instr & NFP_ME28_INSTR_MASK_BR_BIT) == NFP_ME28_INSTR_BR_BIT)
+
+#define NFP_ME28_INSTR_MASK_BR_ALU     ((bfd_vma) 0x00ff80000000)
+#define NFP_ME28_INSTR_BR_ALU          ((bfd_vma) 0x00e800000000)
+#define NFP_ME28_INSTR_IS_BR_ALU(instr) \
+       ((instr & NFP_ME28_INSTR_MASK_BR_ALU) == NFP_ME28_INSTR_BR_ALU)
+
+#define NFP_ME28_INSTR_MASK_MULT       ((bfd_vma) 0x00fe3f000000)
+#define NFP_ME28_INSTR_MULT            ((bfd_vma) 0x00f800000000)
+#define NFP_ME28_INSTR_IS_MULT(instr) \
+       ((instr & NFP_ME28_INSTR_MASK_MULT) == NFP_ME28_INSTR_MULT)
+
+typedef struct
+{
+  int cpp_target;
+  int cpp_action;
+  int cpp_token;
+  unsigned int len_fixed;
+  unsigned int len_mask;
+  const char *mnemonic;
+}
+nfp_cmd_mnemonic;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif                         /* _NFP_H_ */
index be522a104f942312a7665ad285f6d1c3a727b854..e0834bf595e72f3af6896d3280f23d6ea43635d5 100644 (file)
@@ -1,3 +1,14 @@
+2018-04-30  Francois H. Theron <francois.theron@netronome.com>
+
+       Makefile.am: Added nfp-dis.c.
+       configure.ac: Added bfd_nfp_arch.
+       disassemble.h: Added print_insn_nfp prototype.
+       disassemble.c: Added ARCH_nfp and call to print_insn_nfp
+       nfp-dis.c: New, for NFP support.
+       po/POTFILES.in: Added nfp-dis.c to the list.
+       Makefile.in: Regenerate.
+       configure: Regenerate.
+
 2018-04-26  Jan Beulich  <jbeulich@suse.com>
 
        * i386-opc.tbl: Fold various non-memory operand AVX512VL
index 05def3f65e0b1321c7687a90abebcafb15c8385f..0c7d09d7597cb590a130946ae17e3d734e03f250 100644 (file)
@@ -200,6 +200,7 @@ TARGET_LIBOPCODES_CFILES = \
        mt-opc.c \
        nds32-asm.c \
        nds32-dis.c \
+       nfp-dis.c \
        nios2-dis.c \
        nios2-opc.c \
        ns32k-dis.c \
index ca822309619ad2727d64199cdea59eb4d8401b57..0d85bd43fa0d66929bbc1f856406eaff95bc629b 100644 (file)
@@ -502,6 +502,7 @@ TARGET_LIBOPCODES_CFILES = \
        mt-opc.c \
        nds32-asm.c \
        nds32-dis.c \
+       nfp-dis.c \
        nios2-dis.c \
        nios2-opc.c \
        ns32k-dis.c \
@@ -902,6 +903,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mt-opc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nds32-asm.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nds32-dis.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nfp-dis.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nios2-dis.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nios2-opc.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ns32k-dis.Plo@am__quote@
index 6e58d0c0959fe7ffcf087abd95e748ffc265bc44..c7a88054b36d3f8d5c9e34a291389348aa31ee57 100755 (executable)
@@ -12671,6 +12671,7 @@ if test x${all_targets} = xfalse ; then
        bfd_mt_arch)            ta="$ta mt-asm.lo mt-desc.lo mt-dis.lo mt-ibld.lo mt-opc.lo" using_cgen=yes ;;
        bfd_msp430_arch)        ta="$ta msp430-dis.lo msp430-decode.lo" ;;
        bfd_nds32_arch)         ta="$ta nds32-asm.lo nds32-dis.lo" ;;
+       bfd_nfp_arch)           ta="$ta nfp-dis.lo" ;;
        bfd_nios2_arch)         ta="$ta nios2-dis.lo nios2-opc.lo" ;;
        bfd_ns32k_arch)         ta="$ta ns32k-dis.lo" ;;
        bfd_or1k_arch)          ta="$ta or1k-asm.lo or1k-desc.lo or1k-dis.lo or1k-ibld.lo or1k-opc.lo" using_cgen=yes ;;
index 2bd880feeaf7114a90d826cafe03ff55ae64bd5f..e42b661fcf3b1cc1f5f29c7a6e08224d3c330cda 100644 (file)
@@ -295,6 +295,7 @@ if test x${all_targets} = xfalse ; then
        bfd_mt_arch)            ta="$ta mt-asm.lo mt-desc.lo mt-dis.lo mt-ibld.lo mt-opc.lo" using_cgen=yes ;;
        bfd_msp430_arch)        ta="$ta msp430-dis.lo msp430-decode.lo" ;;
        bfd_nds32_arch)         ta="$ta nds32-asm.lo nds32-dis.lo" ;;
+       bfd_nfp_arch)           ta="$ta nfp-dis.lo" ;;
        bfd_nios2_arch)         ta="$ta nios2-dis.lo nios2-opc.lo" ;;
        bfd_ns32k_arch)         ta="$ta ns32k-dis.lo" ;;
        bfd_or1k_arch)          ta="$ta or1k-asm.lo or1k-desc.lo or1k-dis.lo or1k-ibld.lo or1k-opc.lo" using_cgen=yes ;;
index 4cb90f1cf64f750319ed694fef79cb85c26ab7af..100ccd3fac4bc711cbeb0a978d95598cfa01c965 100644 (file)
@@ -64,6 +64,7 @@
 #define ARCH_mt
 #define ARCH_msp430
 #define ARCH_nds32
+#define ARCH_nfp
 #define ARCH_nios2
 #define ARCH_ns32k
 #define ARCH_or1k
@@ -275,6 +276,11 @@ disassembler (enum bfd_architecture a,
       disassemble = print_insn_nds32;
       break;
 #endif
+#ifdef ARCH_nfp
+    case bfd_arch_nfp:
+      disassemble = print_insn_nfp;
+      break;
+#endif
 #ifdef ARCH_ns32k
     case bfd_arch_ns32k:
       disassemble = print_insn_ns32k;
@@ -537,6 +543,9 @@ disassembler_usage (FILE *stream ATTRIBUTE_UNUSED)
 #ifdef ARCH_mips
   print_mips_disassembler_options (stream);
 #endif
+#ifdef ARCH_nfp
+  print_nfp_disassembler_options (stream);
+#endif
 #ifdef ARCH_powerpc
   print_ppc_disassembler_options (stream);
 #endif
index 5284033fd7fddabe10837804d930a3c52f4e3999..9d78b2193f8feef9dff50522f7eed408e3fe1de2 100644 (file)
@@ -72,6 +72,7 @@ extern int print_insn_moxie           (bfd_vma, disassemble_info *);
 extern int print_insn_msp430           (bfd_vma, disassemble_info *);
 extern int print_insn_mt                (bfd_vma, disassemble_info *);
 extern int print_insn_nds32            (bfd_vma, disassemble_info *);
+extern int print_insn_nfp              (bfd_vma, disassemble_info *);
 extern int print_insn_ns32k            (bfd_vma, disassemble_info *);
 extern int print_insn_or1k             (bfd_vma, disassemble_info *);
 extern int print_insn_pdp11            (bfd_vma, disassemble_info *);
diff --git a/opcodes/nfp-dis.c b/opcodes/nfp-dis.c
new file mode 100644 (file)
index 0000000..30442db
--- /dev/null
@@ -0,0 +1,2990 @@
+/* Print NFP instructions for objdump.
+   Copyright (C) 2017-2018 Free Software Foundation, Inc.
+   Contributed by Francois H. Theron <francois.theron@netronome.com>
+
+   This file is part of the GNU opcodes 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.
+
+   It is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 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.  */
+
+/* There will be many magic numbers here that are based on hardware.
+   Making #define macros for each encoded bit field will probably reduce
+   readability far more than the simple numbers will, so we make sure that
+   the context of the magic numbers make it clear what they are used for.  */
+
+#include "sysdep.h"
+#include <stdio.h>
+#include "disassemble.h"
+#include "libiberty.h"
+#include "elf/nfp.h"
+#include "opcode/nfp.h"
+#include "opintl.h"
+#include "elf-bfd.h"
+#include "bfd.h"
+#include "bfd_stdint.h"
+#include "libbfd.h"
+
+#define _NFP_ERR_STOP -1
+#define _NFP_ERR_CONT -8
+
+/* The bfd_vma type has the description below, so we use that and BFD_VMA_FMT
+   instead of uint64_t or bfd_uint64_t.
+   "Represent a target address.  Also used as a generic unsigned type
+   which is guaranteed to be big enough to hold any arithmetic types
+   we need to deal with."  */
+
+#define _BTST(v, b)               (((v) >> b) & 1)
+#define _BF(v, msb, lsb)          (((v) >> (lsb)) & ((1U << ((msb) - (lsb) + 1)) - 1))
+#define _BFS(v, msb, lsb, lshift) (_BF(v, msb, lsb) << (lshift))
+
+#define _NFP_ME27_28_CSR_CTX_ENABLES     0x18
+#define _NFP_ME27_28_CSR_MISC_CONTROL    0x160
+
+typedef struct
+{
+  unsigned char ctx4_mode:1;
+  unsigned char addr_3rdparty32:1;
+  unsigned char scs_cnt:2;
+  unsigned char _future:4;
+}
+nfp_priv_mecfg;
+
+typedef struct
+{
+  unsigned char show_pc;
+  unsigned char ctx_mode;
+}
+nfp_opts;
+
+/* mecfgs[island][menum][is-text] */
+typedef struct
+{
+  nfp_priv_mecfg mecfgs[64][12][2];
+}
+nfp_priv_data;
+
+static const char *nfp_mealu_shf_op[8] =
+{
+  /* 0b000 (0) */ "B",
+  /* 0b001 (1) */ "~B",
+  /* 0b010 (2) */ "AND",
+  /* 0b011 (3) */ "~AND",
+  /* 0b100 (4) */ "AND~",
+  /* 0b101 (5) */ "OR",
+  /* 0b110 (6) */ "asr",
+  /* 0b111 (7) */ "byte_align"
+};
+
+static const char *nfp_me27_28_alu_op[32] =
+{
+  /* 0b00000 (0) */ "B",
+  /* 0b00001 (1) */ "+",
+  NULL,
+  /* 0b00011 (3) */ "pop_count3",
+  /* 0b00100 (4) */ "~B",
+  /* 0b00101 (5) */ "+16",
+  /* 0b00110 (6) */ "pop_count1",
+  /* 0b00111 (7) */ "pop_count2",
+  /* 0b01000 (8) */ "AND",
+  /* 0b01001 (9) */ "+8",
+  NULL,
+  /* 0b01011 (11) */ "cam_clear",
+  /* 0b01100 (12) */ "~AND",
+  /* 0b01101 (13) */ "-carry",
+  /* 0b01110 (14) */ "ffs",
+  /* 0b01111 (15) */ "cam_read_tag",
+  /* 0b10000 (16) */ "AND~",
+  /* 0b10001 (17) */ "+carry",
+  /* 0b10010 (18) */ "CRC",
+  /* 0b10011 (19) */ "cam_write",
+  /* 0b10100 (20) */ "OR",
+  /* 0b10101 (21) */ "-",
+  NULL,
+  /* 0b10111 (23) */ "cam_lookup",
+  /* 0b11000 (24) */ "XOR",
+  /* 0b11001 (25) */ "B-A",
+  NULL,
+  /* 0b11011 (27) */ "cam_write_state",
+  NULL,
+  NULL,
+  NULL,
+  /* 0b11111 (31) */ "cam_read_state"
+};
+
+static const char *nfp_me27_28_crc_op[8] =
+{
+  /* 0b000 (0) */ "--",
+  NULL,
+  /* 0b010 (2) */ "crc_ccitt",
+  NULL,
+  /* 0b100 (4) */ "crc_32",
+  /* 0b101 (5) */ "crc_iscsi",
+  /* 0b110 (6) */ "crc_10",
+  /* 0b111 (7) */ "crc_5"
+};
+
+static const char *nfp_me27_28_crc_bytes[8] =
+{
+  /* 0b000 (0) */ "bytes_0_3",
+  /* 0b001 (1) */ "bytes_1_3",
+  /* 0b010 (2) */ "bytes_2_3",
+  /* 0b011 (3) */ "byte_3",
+  /* 0b100 (4) */ "bytes_0_2",
+  /* 0b101 (5) */ "bytes_0_1",
+  /* 0b110 (6) */ "byte_0"
+};
+
+static const char *nfp_me27_28_mecsrs[] =
+{
+  /* 0x000 (0) */ "UstorAddr",
+  /* 0x004 (1) */ "UstorDataLwr",
+  /* 0x008 (2) */ "UstorDataUpr",
+  /* 0x00c (3) */ "UstorErrStat",
+  /* 0x010 (4) */ "ALUOut",
+  /* 0x014 (5) */ "CtxArbCtrl",
+  /* 0x018 (6) */ "CtxEnables",
+  /* 0x01c (7) */ "CondCodeEn",
+  /* 0x020 (8) */ "CSRCtxPtr",
+  /* 0x024 (9) */ "PcBreakpoint0",
+  /* 0x028 (10) */ "PcBreakpoint1",
+  /* 0x02c (11) */ "PcBreakpointStatus",
+  /* 0x030 (12) */ "RegErrStatus",
+  /* 0x034 (13) */ "LMErrStatus",
+  /* 0x038 (14) */ "LMeccErrorMask",
+  NULL,
+  /* 0x040 (16) */ "IndCtxStatus",
+  /* 0x044 (17) */ "ActCtxStatus",
+  /* 0x048 (18) */ "IndCtxSglEvt",
+  /* 0x04c (19) */ "ActCtxSglEvt",
+  /* 0x050 (20) */ "IndCtxWkpEvt",
+  /* 0x054 (21) */ "ActCtxWkpEvt",
+  /* 0x058 (22) */ "IndCtxFtrCnt",
+  /* 0x05c (23) */ "ActCtxFtrCnt",
+  /* 0x060 (24) */ "IndLMAddr0",
+  /* 0x064 (25) */ "ActLMAddr0",
+  /* 0x068 (26) */ "IndLMAddr1",
+  /* 0x06c (27) */ "ActLMAddr1",
+  /* 0x070 (28) */ "ByteIndex",
+  /* 0x074 (29) */ "XferIndex",
+  /* 0x078 (30) */ "IndFtrCntSgl",
+  /* 0x07c (31) */ "ActFtrCntSgl",
+  /* 0x080 (32) */ "NNPut",
+  /* 0x084 (33) */ "NNGet",
+  NULL,
+  NULL,
+  /* 0x090 (36) */ "IndLMAddr2",
+  /* 0x094 (37) */ "ActLMAddr2",
+  /* 0x098 (38) */ "IndLMAddr3",
+  /* 0x09c (39) */ "ActLMAddr3",
+  /* 0x0a0 (40) */ "IndLMAddr2BytIdx",
+  /* 0x0a4 (41) */ "ActLMAddr2BytIdx",
+  /* 0x0a8 (42) */ "IndLMAddr3BytIdx",
+  /* 0x0ac (43) */ "ActLMAddr3BytIdx",
+  /* 0x0b0 (44) */ "IndPredCC",
+  NULL,
+  NULL,
+  NULL,
+  /* 0x0c0 (48) */ "TimestampLow",
+  /* 0x0c4 (49) */ "TimestampHgh",
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  /* 0x0e0 (56) */ "IndLMAddr0BytIdx",
+  /* 0x0e4 (57) */ "ActLMAddr0BytIdx",
+  /* 0x0e8 (58) */ "IndLMAddr1BytIdx",
+  /* 0x0ec (59) */ "ActLMAddr1BytIdx",
+  NULL,
+  /* 0x0f4 (61) */ "XfrAndBytIdx",
+  NULL,
+  NULL,
+  /* 0x100 (64) */ "NxtNghbrSgl",
+  /* 0x104 (65) */ "PrvNghbrSgl",
+  /* 0x108 (66) */ "SameMESignal",
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  /* 0x140 (80) */ "CRCRemainder",
+  /* 0x144 (81) */ "ProfileCnt",
+  /* 0x148 (82) */ "PseudoRndNum",
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  /* 0x160 (88) */ "MiscControl",
+  /* 0x164 (89) */ "PcBreakpoint0Mask",
+  /* 0x168 (90) */ "PcBreakpoint1Mask",
+  NULL,
+  /* 0x170 (92) */ "Mailbox0",
+  /* 0x174 (93) */ "Mailbox1",
+  /* 0x178 (94) */ "Mailbox2",
+  /* 0x17c (95) */ "Mailbox3",
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  /* 0x190 (100) */ "CmdIndirectRef0"
+};
+
+const char *nfp_me27_28_br_ops[32] =
+{
+  /* 0b00000 (0) */ "beq",
+  /* 0b00001 (1) */ "bne",
+  /* 0b00010 (2) */ "bmi",
+  /* 0b00011 (3) */ "bpl",
+  /* 0b00100 (4) */ "bcs",
+  /* 0b00101 (5) */ "bcc",
+  /* 0b00110 (6) */ "bvs",
+  /* 0b00111 (7) */ "bvc",
+  /* 0b01000 (8) */ "bge",
+  /* 0b01001 (9) */ "blt",
+  /* 0b01010 (10) */ "ble",
+  /* 0b01011 (11) */ "bgt",
+  /* (12) */ NULL,
+  /* (13) */ NULL,
+  /* (14) */ NULL,
+  /* (15) */ NULL,
+  /* 0b10000 (16) */ "br=ctx",
+  /* 0b10001 (17) */ "br!=ctx",
+  /* 0b10010 (18) */ "br_signal",
+  /* 0b10011 (19) */ "br_!signal",
+  /* 0b10100 (20) */ "br_inp_state",
+  /* 0b10101 (21) */ "br_!inp_state",
+  /* 0b10110 (22) */ "br_cls_state",
+  /* 0b10111 (23) */ "br_!cls_state",
+  /* 0b11000 (24) */ "br",
+  /* (25) */ NULL,
+  /* (26) */ NULL,
+  /* (27) */ NULL,
+  /* (28) */ NULL,
+  /* (29) */ NULL,
+  /* (30) */ NULL,
+  /* (31) */ NULL
+};
+
+static const char *nfp_me27_br_inpstates[16] =
+{
+  /* 0 */ "nn_empty",
+  /* 1 */ "nn_full",
+  /* 2 */ "scr_ring0_status",
+  /* 3 */ "scr_ring1_status",
+  /* 4 */ "scr_ring2_status",
+  /* 5 */ "scr_ring3_status",
+  /* 6 */ "scr_ring4_status",
+  /* 7 */ "scr_ring5_status",
+  /* 8 */ "scr_ring6_status",
+  /* 9 */ "scr_ring7_status",
+  /* 10 */ "scr_ring8_status",
+  /* 11 */ "scr_ring9_status",
+  /* 12 */ "scr_ring10_status",
+  /* 13 */ "scr_ring11_status",
+  /* 14 */ "fci_not_empty",
+  /* 15 */ "fci_full"
+};
+
+static const char *nfp_me28_br_inpstates[16] =
+{
+  /* 0 */ "nn_empty",
+  /* 1 */ "nn_full",
+  /* 2 */ "ctm_ring0_status",
+  /* 3 */ "ctm_ring1_status",
+  /* 4 */ "ctm_ring2_status",
+  /* 5 */ "ctm_ring3_status",
+  /* 6 */ "ctm_ring4_status",
+  /* 7 */ "ctm_ring5_status",
+  /* 8 */ "ctm_ring6_status",
+  /* 9 */ "ctm_ring7_status",
+  /* 10 */ "ctm_ring8_status",
+  /* 11 */ "ctm_ring9_status",
+  /* 12 */ "ctm_ring10_status",
+  /* 13 */ "ctm_ring11_status",
+  /* 14 */ "ctm_ring12_status",
+  /* 15 */ "ctm_ring13_status"
+};
+
+static const char *nfp_me27_28_mult_steps[8] =
+{
+  /* 0 */ "step1",
+  /* 1 */ "step2",
+  /* 2 */ "step3",
+  /* 3 */ "step4",
+  /* 4 */ "last",
+  /* 5 */ "last2",
+  NULL,
+  NULL
+};
+
+static const char *nfp_me27_28_mult_types[4] =
+{
+  "start",
+  "24x8",
+  "16x16",
+  "32x32"
+};
+
+/* The cmd_mnemonics arrays are sorted here in its definition so that we can
+   use bsearch () on the first three fields.  There can be multiple matches
+   and we assume that bsearch can return any of them, so we manually step
+   back to the first one.  */
+
+static const nfp_cmd_mnemonic nfp_me27_mnemonics[] =
+{
+  {NFP_3200_CPPTGT_MSF0, 0, 0, 0, 0, "read"},
+  {NFP_3200_CPPTGT_MSF0, 0, 2, 0, 0, "read64"},
+  {NFP_3200_CPPTGT_MSF0, 1, 0, 0, 0, "write"},
+  {NFP_3200_CPPTGT_MSF0, 1, 1, 0, 0, "fast_wr"},
+  {NFP_3200_CPPTGT_MSF0, 1, 2, 0, 0, "write64"},
+  {NFP_3200_CPPTGT_QDR, 0, 0, 0, 0, "read"},
+  {NFP_3200_CPPTGT_QDR, 1, 0, 0, 0, "write"},
+  {NFP_3200_CPPTGT_QDR, 2, 0, 0, 0, "write_atomic"},
+  {NFP_3200_CPPTGT_QDR, 2, 1, 0, 0, "swap"},
+  {NFP_3200_CPPTGT_QDR, 3, 0, 0, 0, "set"},
+  {NFP_3200_CPPTGT_QDR, 3, 1, 0, 0, "test_and_set"},
+  {NFP_3200_CPPTGT_QDR, 4, 0, 0, 0, "clr"},
+  {NFP_3200_CPPTGT_QDR, 4, 1, 0, 0, "test_and_clr"},
+  {NFP_3200_CPPTGT_QDR, 5, 0, 0, 0, "add"},
+  {NFP_3200_CPPTGT_QDR, 5, 1, 0, 0, "test_and_add"},
+  {NFP_3200_CPPTGT_QDR, 6, 0, 0, 0, "read_queue"},
+  {NFP_3200_CPPTGT_QDR, 6, 1, 0, 0, "read_queue_ring"},
+  {NFP_3200_CPPTGT_QDR, 6, 2, 0, 0, "write_queue"},
+  {NFP_3200_CPPTGT_QDR, 6, 3, 0, 0, "write_queue_ring"},
+  {NFP_3200_CPPTGT_QDR, 7, 0, 0, 0, "incr"},
+  {NFP_3200_CPPTGT_QDR, 7, 1, 0, 0, "test_and_incr"},
+  {NFP_3200_CPPTGT_QDR, 8, 0, 0, 0, "decr"},
+  {NFP_3200_CPPTGT_QDR, 8, 1, 0, 0, "test_and_decr"},
+  {NFP_3200_CPPTGT_QDR, 9, 0, 0, 0, "put"},
+  {NFP_3200_CPPTGT_QDR, 9, 1, 0, 0, "get"},
+  {NFP_3200_CPPTGT_QDR, 9, 2, 0, 0, "put_imm"},
+  {NFP_3200_CPPTGT_QDR, 9, 3, 0, 0, "pop"},
+  {NFP_3200_CPPTGT_QDR, 10, 0, 0, 0, "journal"},
+  {NFP_3200_CPPTGT_QDR, 10, 1, 0, 0, "fast_journal"},
+  {NFP_3200_CPPTGT_QDR, 11, 0, 0, 0, "dequeue"},
+  {NFP_3200_CPPTGT_QDR, 12, 0, 0, 0, "enqueue"},
+  {NFP_3200_CPPTGT_QDR, 12, 1, 0, 0, "enueue_tail"},
+  {NFP_3200_CPPTGT_QDR, 12, 2, 0, 0, "nfp_enqueue"},
+  {NFP_3200_CPPTGT_QDR, 12, 3, 0, 0, "nfp_enueue_tail"},
+  {NFP_3200_CPPTGT_QDR, 13, 0, 0, 0, "csr_wr"},
+  {NFP_3200_CPPTGT_QDR, 13, 1, 0, 0, "csr_rd"},
+  {NFP_3200_CPPTGT_QDR, 14, 0, 0, 0, "wr_qdesc"},
+  {NFP_3200_CPPTGT_QDR, 14, 1, 0, 0, "nfp_wr_qdesc"},
+  {NFP_3200_CPPTGT_QDR, 14, 2, 0, 0, "wr_qdesc_count"},
+  {NFP_3200_CPPTGT_QDR, 14, 3, 0, 0, "push_qdesc"},
+  {NFP_3200_CPPTGT_QDR, 15, 0, 0, 0, "rd_qdesc_other"},
+  {NFP_3200_CPPTGT_QDR, 15, 1, 0, 0, "rd_qdesc_tail"},
+  {NFP_3200_CPPTGT_QDR, 15, 2, 0, 0, "rd_qdesc_head"},
+  {NFP_3200_CPPTGT_QDR, 15, 3, 0, 0, "nfp_rd_qdesc"},
+  {NFP_3200_CPPTGT_MSF1, 0, 0, 0, 0, "read"},
+  {NFP_3200_CPPTGT_MSF1, 0, 2, 0, 0, "read64"},
+  {NFP_3200_CPPTGT_MSF1, 1, 0, 0, 0, "write"},
+  {NFP_3200_CPPTGT_MSF1, 1, 1, 0, 0, "fast_wr"},
+  {NFP_3200_CPPTGT_MSF1, 1, 2, 0, 0, "write64"},
+  {NFP_3200_CPPTGT_HASH, 0, 0, 0, 0, "hash_48"},
+  {NFP_3200_CPPTGT_HASH, 0, 1, 0, 0, "hash_64"},
+  {NFP_3200_CPPTGT_HASH, 0, 2, 0, 0, "hash_128"},
+  {NFP_3200_CPPTGT_MU, 0, 0, 0, 0, "read"},
+  {NFP_3200_CPPTGT_MU, 0, 1, 0, 0, "read_le"},
+  {NFP_3200_CPPTGT_MU, 0, 2, 0, 0, "read_swap"},
+  {NFP_3200_CPPTGT_MU, 0, 3, 0, 0, "read_swap_le"},
+  {NFP_3200_CPPTGT_MU, 1, 0, 0, 0, "write"},
+  {NFP_3200_CPPTGT_MU, 1, 1, 0, 0, "write_le"},
+  {NFP_3200_CPPTGT_MU, 1, 2, 0, 0, "write_swap"},
+  {NFP_3200_CPPTGT_MU, 1, 3, 0, 0, "write_swap_le"},
+  {NFP_3200_CPPTGT_MU, 2, 0, 0, 0, "write8"},
+  {NFP_3200_CPPTGT_MU, 2, 1, 0, 0, "write8_le"},
+  {NFP_3200_CPPTGT_MU, 2, 2, 0, 0, "write8_swap"},
+  {NFP_3200_CPPTGT_MU, 2, 3, 0, 0, "write8_swap_le"},
+  {NFP_3200_CPPTGT_MU, 3, 0, 0, 0, "read_atomic"},
+  {NFP_3200_CPPTGT_MU, 3, 1, 0, 0, "read8"},
+  {NFP_3200_CPPTGT_MU, 3, 2, 0, 0, "compare_write"},
+  {NFP_3200_CPPTGT_MU, 3, 3, 0, 0, "test_and_compare_write"},
+  {NFP_3200_CPPTGT_MU, 4, 0, 0, 0, "write_atomic"},
+  {NFP_3200_CPPTGT_MU, 4, 1, 0, 0, "swap"},
+  {NFP_3200_CPPTGT_MU, 4, 2, 0, 0, "write_atomic_imm"},
+  {NFP_3200_CPPTGT_MU, 4, 3, 0, 0, "swap_imm"},
+  {NFP_3200_CPPTGT_MU, 5, 0, 0, 0, "set"},
+  {NFP_3200_CPPTGT_MU, 5, 1, 0, 0, "test_and_set"},
+  {NFP_3200_CPPTGT_MU, 5, 2, 0, 0, "set_imm"},
+  {NFP_3200_CPPTGT_MU, 5, 3, 0, 0, "test_and_set_imm"},
+  {NFP_3200_CPPTGT_MU, 6, 0, 0, 0, "clr"},
+  {NFP_3200_CPPTGT_MU, 6, 1, 0, 0, "test_and_clr"},
+  {NFP_3200_CPPTGT_MU, 6, 2, 0, 0, "clr_imm"},
+  {NFP_3200_CPPTGT_MU, 6, 3, 0, 0, "test_and_clr_imm"},
+  {NFP_3200_CPPTGT_MU, 7, 0, 0, 4, "add"},
+  {NFP_3200_CPPTGT_MU, 7, 0, 4, 4, "add64"},
+  {NFP_3200_CPPTGT_MU, 7, 1, 0, 4, "test_and_add"},
+  {NFP_3200_CPPTGT_MU, 7, 1, 4, 4, "test_and_add64"},
+  {NFP_3200_CPPTGT_MU, 7, 2, 0, 4, "add_imm"},
+  {NFP_3200_CPPTGT_MU, 7, 2, 4, 4, "add64_imm"},
+  {NFP_3200_CPPTGT_MU, 7, 3, 0, 4, "test_and_add_imm"},
+  {NFP_3200_CPPTGT_MU, 7, 3, 4, 4, "test_and_add64_imm"},
+  {NFP_3200_CPPTGT_MU, 8, 0, 0, 4, "add_sat"},
+  {NFP_3200_CPPTGT_MU, 8, 0, 4, 4, "add64_sat"},
+  {NFP_3200_CPPTGT_MU, 8, 1, 0, 4, "test_and_add_sat"},
+  {NFP_3200_CPPTGT_MU, 8, 1, 4, 4, "test_and_add64_sat"},
+  {NFP_3200_CPPTGT_MU, 8, 2, 0, 4, "add_imm_sat"},
+  {NFP_3200_CPPTGT_MU, 8, 2, 4, 4, "add_imm_sat"},
+  {NFP_3200_CPPTGT_MU, 8, 3, 0, 0, "test_and_add_sat_imm"},
+  {NFP_3200_CPPTGT_MU, 9, 0, 0, 4, "sub"},
+  {NFP_3200_CPPTGT_MU, 9, 0, 4, 4, "sub64"},
+  {NFP_3200_CPPTGT_MU, 9, 1, 0, 4, "test_and_sub"},
+  {NFP_3200_CPPTGT_MU, 9, 1, 4, 4, "test_and_sub64"},
+  {NFP_3200_CPPTGT_MU, 9, 2, 0, 4, "sub_imm"},
+  {NFP_3200_CPPTGT_MU, 9, 2, 4, 4, "sub64_imm"},
+  {NFP_3200_CPPTGT_MU, 9, 3, 0, 0, "tes_and_sub_imm"},
+  {NFP_3200_CPPTGT_MU, 10, 0, 0, 4, "sub_sat"},
+  {NFP_3200_CPPTGT_MU, 10, 0, 4, 4, "sub64_sat"},
+  {NFP_3200_CPPTGT_MU, 10, 1, 0, 4, "test_and_sub_sat"},
+  {NFP_3200_CPPTGT_MU, 10, 1, 4, 4, "test_and_sub64_sat"},
+  {NFP_3200_CPPTGT_MU, 10, 2, 0, 4, "sub_imm_sat"},
+  {NFP_3200_CPPTGT_MU, 10, 2, 4, 4, "sub64_imm_sat"},
+  {NFP_3200_CPPTGT_MU, 10, 3, 0, 0, "test_and_sub_sat_imm"},
+  {NFP_3200_CPPTGT_MU, 11, 0, 0, 0, "release_ticket"},
+  {NFP_3200_CPPTGT_MU, 11, 1, 0, 0, "release_ticket_ind"},
+  {NFP_3200_CPPTGT_MU, 12, 0, 0, 0, "cam_lookup"},
+  {NFP_3200_CPPTGT_MU, 12, 1, 0, 0, "cam_lookup_add"},
+  {NFP_3200_CPPTGT_MU, 12, 2, 0, 0, "tcam_lookup"},
+  {NFP_3200_CPPTGT_MU, 12, 3, 0, 3, "lock"},
+  {NFP_3200_CPPTGT_MU, 12, 3, 2, 3, "cam_lookup_add_inc"},
+  {NFP_3200_CPPTGT_MU, 13, 0, 0, 4, "microq128_get"},
+  {NFP_3200_CPPTGT_MU, 13, 0, 4, 4, "microq256_get"},
+  {NFP_3200_CPPTGT_MU, 13, 1, 0, 4, "microq128_pop"},
+  {NFP_3200_CPPTGT_MU, 13, 1, 4, 4, "microq256_pop"},
+  {NFP_3200_CPPTGT_MU, 13, 2, 0, 4, "microq128_put"},
+  {NFP_3200_CPPTGT_MU, 13, 2, 4, 4, "microq256_put"},
+  {NFP_3200_CPPTGT_MU, 14, 0, 0, 4, "queue128_lock"},
+  {NFP_3200_CPPTGT_MU, 14, 0, 4, 4, "queue256_lock"},
+  {NFP_3200_CPPTGT_MU, 14, 1, 0, 4, "queue128_unlock"},
+  {NFP_3200_CPPTGT_MU, 14, 1, 4, 4, "queue256_unlock"},
+  {NFP_3200_CPPTGT_MU, 15, 0, 0, 0, "xor"},
+  {NFP_3200_CPPTGT_MU, 15, 1, 0, 0, "test_and_xor"},
+  {NFP_3200_CPPTGT_MU, 15, 2, 0, 0, "xor_imm"},
+  {NFP_3200_CPPTGT_MU, 15, 3, 0, 0, "test_and_xor_imm"},
+  {NFP_3200_CPPTGT_MU, 16, 0, 0, 0, "rd_qdesc"},
+  {NFP_3200_CPPTGT_MU, 16, 1, 0, 0, "wr_qdesc"},
+  {NFP_3200_CPPTGT_MU, 16, 2, 0, 0, "push_qdesc"},
+  {NFP_3200_CPPTGT_MU, 16, 3, 0, 0, "tag_writeback"},
+  {NFP_3200_CPPTGT_MU, 17, 0, 0, 0, "enqueue"},
+  {NFP_3200_CPPTGT_MU, 17, 1, 0, 0, "enqueue_tail"},
+  {NFP_3200_CPPTGT_MU, 17, 2, 0, 0, "dequeue"},
+  {NFP_3200_CPPTGT_MU, 18, 0, 0, 0, "read_queue"},
+  {NFP_3200_CPPTGT_MU, 18, 1, 0, 0, "read_queue_ring"},
+  {NFP_3200_CPPTGT_MU, 18, 2, 0, 0, "write_queue"},
+  {NFP_3200_CPPTGT_MU, 18, 3, 0, 0, "write_queue_ring"},
+  {NFP_3200_CPPTGT_MU, 19, 0, 0, 0, "add_tail"},
+  {NFP_3200_CPPTGT_MU, 19, 1, 0, 0, "qadd_thread"},
+  {NFP_3200_CPPTGT_MU, 19, 2, 0, 0, "qadd_work"},
+  {NFP_3200_CPPTGT_MU, 19, 3, 0, 0, "qadd_work_imm"},
+  {NFP_3200_CPPTGT_MU, 20, 0, 0, 0, "put"},
+  {NFP_3200_CPPTGT_MU, 20, 1, 0, 0, "put_tag"},
+  {NFP_3200_CPPTGT_MU, 20, 2, 0, 0, "journal"},
+  {NFP_3200_CPPTGT_MU, 20, 3, 0, 0, "journal_tag"},
+  {NFP_3200_CPPTGT_MU, 21, 0, 0, 0, "get"},
+  {NFP_3200_CPPTGT_MU, 21, 1, 0, 0, "get_eop"},
+  {NFP_3200_CPPTGT_MU, 21, 2, 0, 0, "get_safe"},
+  {NFP_3200_CPPTGT_MU, 21, 3, 0, 0, "get_tag_safe"},
+  {NFP_3200_CPPTGT_MU, 22, 0, 0, 0, "pop"},
+  {NFP_3200_CPPTGT_MU, 22, 1, 0, 0, "pop_eop"},
+  {NFP_3200_CPPTGT_MU, 22, 2, 0, 0, "pop_safe"},
+  {NFP_3200_CPPTGT_MU, 22, 3, 0, 0, "pop_tag_safe"},
+  {NFP_3200_CPPTGT_MU, 23, 0, 0, 0, "fast_journal"},
+  {NFP_3200_CPPTGT_MU, 23, 1, 0, 0, "fast_journal_sig"},
+  {NFP_3200_CPPTGT_GS, 0, 0, 0, 0, "read"},
+  {NFP_3200_CPPTGT_GS, 1, 0, 0, 0, "write"},
+  {NFP_3200_CPPTGT_GS, 2, 0, 0, 0, "write_atomic"},
+  {NFP_3200_CPPTGT_GS, 2, 1, 0, 0, "swap"},
+  {NFP_3200_CPPTGT_GS, 3, 0, 0, 0, "set"},
+  {NFP_3200_CPPTGT_GS, 3, 1, 0, 0, "test_and_set"},
+  {NFP_3200_CPPTGT_GS, 4, 0, 0, 0, "clr"},
+  {NFP_3200_CPPTGT_GS, 4, 1, 0, 0, "test_and_clr"},
+  {NFP_3200_CPPTGT_GS, 5, 0, 0, 0, "add"},
+  {NFP_3200_CPPTGT_GS, 5, 1, 0, 0, "test_and_add"},
+  {NFP_3200_CPPTGT_GS, 6, 0, 0, 0, "sub"},
+  {NFP_3200_CPPTGT_GS, 6, 1, 0, 0, "test_and_sub"},
+  {NFP_3200_CPPTGT_GS, 7, 0, 0, 0, "inc"},
+  {NFP_3200_CPPTGT_GS, 7, 1, 0, 0, "test_and_inc"},
+  {NFP_3200_CPPTGT_GS, 8, 0, 0, 0, "dec"},
+  {NFP_3200_CPPTGT_GS, 8, 1, 0, 0, "test_and_dec"},
+  {NFP_3200_CPPTGT_GS, 9, 0, 0, 0, "get"},
+  {NFP_3200_CPPTGT_GS, 10, 0, 0, 0, "put"},
+  {NFP_3200_CPPTGT_PCIE, 0, 0, 0, 0, "read"},
+  {NFP_3200_CPPTGT_PCIE, 1, 0, 0, 0, "write"},
+  {NFP_3200_CPPTGT_PCIE, 2, 0, 0, 0, "read_internal"},
+  {NFP_3200_CPPTGT_PCIE, 3, 0, 0, 0, "write_internal"},
+  {NFP_3200_CPPTGT_ARM, 0, 0, 0, 0, "read"},
+  {NFP_3200_CPPTGT_ARM, 1, 0, 0, 0, "write"},
+  {NFP_3200_CPPTGT_CRYPTO, 0, 0, 0, 0, "read"},
+  {NFP_3200_CPPTGT_CRYPTO, 1, 0, 0, 0, "write"},
+  {NFP_3200_CPPTGT_CRYPTO, 2, 0, 0, 0, "write_fifo"},
+  {NFP_3200_CPPTGT_CAP, 0, 0, 0, 0, "read_enum"},
+  {NFP_3200_CPPTGT_CAP, 0, 1, 0, 0, "read"},
+  {NFP_3200_CPPTGT_CAP, 0, 2, 0, 0, "read_reflect"},
+  {NFP_3200_CPPTGT_CAP, 1, 0, 0, 0, "write_enum"},
+  {NFP_3200_CPPTGT_CAP, 1, 1, 0, 0, "write"},
+  {NFP_3200_CPPTGT_CAP, 1, 2, 0, 0, "write_reflect"},
+  {NFP_3200_CPPTGT_CAP, 2, 0, 0, 0, "fast_wr_alu"},
+  {NFP_3200_CPPTGT_CAP, 3, 0, 0, 0, "fast_wr"},
+  {NFP_3200_CPPTGT_CT, 1, 0, 0, 0, "write"},
+  {NFP_3200_CPPTGT_CLS, 0, 0, 0, 0, "read_be"},
+  {NFP_3200_CPPTGT_CLS, 0, 1, 0, 0, "read_le"},
+  {NFP_3200_CPPTGT_CLS, 0, 2, 0, 0, "test_and_compare_write"},
+  {NFP_3200_CPPTGT_CLS, 0, 3, 0, 0, "xor"},
+  {NFP_3200_CPPTGT_CLS, 1, 0, 0, 0, "write_be"},
+  {NFP_3200_CPPTGT_CLS, 1, 1, 0, 0, "write_le"},
+  {NFP_3200_CPPTGT_CLS, 1, 2, 0, 0, "write8_be"},
+  {NFP_3200_CPPTGT_CLS, 1, 3, 0, 0, "write8_le"},
+  {NFP_3200_CPPTGT_CLS, 2, 0, 0, 0, "set"},
+  {NFP_3200_CPPTGT_CLS, 2, 1, 0, 0, "clr"},
+  {NFP_3200_CPPTGT_CLS, 2, 2, 0, 0, "test_and_set"},
+  {NFP_3200_CPPTGT_CLS, 2, 3, 0, 0, "test_and_clr"},
+  {NFP_3200_CPPTGT_CLS, 3, 0, 0, 0, "set_imm"},
+  {NFP_3200_CPPTGT_CLS, 3, 1, 0, 0, "clr_imm"},
+  {NFP_3200_CPPTGT_CLS, 3, 2, 0, 0, "test_and_set_imm"},
+  {NFP_3200_CPPTGT_CLS, 3, 3, 0, 0, "test_and_clr_imm"},
+  {NFP_3200_CPPTGT_CLS, 4, 0, 0, 0, "add"},
+  {NFP_3200_CPPTGT_CLS, 4, 1, 0, 0, "add64"},
+  {NFP_3200_CPPTGT_CLS, 4, 2, 0, 0, "add_sat"},
+  {NFP_3200_CPPTGT_CLS, 4, 3, 0, 0, "test_and_add_sat"},
+  {NFP_3200_CPPTGT_CLS, 5, 0, 0, 0, "add_imm"},
+  {NFP_3200_CPPTGT_CLS, 5, 1, 0, 0, "add64_imm"},
+  {NFP_3200_CPPTGT_CLS, 5, 2, 0, 0, "add_imm_sat"},
+  {NFP_3200_CPPTGT_CLS, 5, 3, 0, 0, "test_and_add_imm_sat"},
+  {NFP_3200_CPPTGT_CLS, 6, 0, 0, 0, "sub"},
+  {NFP_3200_CPPTGT_CLS, 6, 1, 0, 0, "sub64"},
+  {NFP_3200_CPPTGT_CLS, 6, 2, 0, 0, "sub_sat"},
+  {NFP_3200_CPPTGT_CLS, 6, 3, 0, 0, "test_and_sub_sat"},
+  {NFP_3200_CPPTGT_CLS, 7, 0, 0, 0, "sub_imm"},
+  {NFP_3200_CPPTGT_CLS, 7, 1, 0, 0, "sub64_imm"},
+  {NFP_3200_CPPTGT_CLS, 7, 2, 0, 0, "sub_imm_sat"},
+  {NFP_3200_CPPTGT_CLS, 7, 3, 0, 0, "test_and_sub_imm_sat"},
+  {NFP_3200_CPPTGT_CLS, 8, 0, 0, 0, "queue_lock"},
+  {NFP_3200_CPPTGT_CLS, 8, 1, 0, 0, "queue_unlock"},
+  {NFP_3200_CPPTGT_CLS, 8, 2, 0, 0, "hash_mask"},
+  {NFP_3200_CPPTGT_CLS, 8, 3, 0, 0, "hash_mask_clear"},
+  {NFP_3200_CPPTGT_CLS, 9, 0, 0, 0, "get"},
+  {NFP_3200_CPPTGT_CLS, 9, 1, 0, 0, "pop"},
+  {NFP_3200_CPPTGT_CLS, 9, 2, 0, 0, "get_safe"},
+  {NFP_3200_CPPTGT_CLS, 9, 3, 0, 0, "pop_safe"},
+  {NFP_3200_CPPTGT_CLS, 10, 0, 0, 0, "put"},
+  {NFP_3200_CPPTGT_CLS, 10, 1, 0, 0, "put_offset"},
+  {NFP_3200_CPPTGT_CLS, 10, 2, 0, 0, "journal"},
+  {NFP_3200_CPPTGT_CLS, 10, 3, 0, 0, "add_tail"},
+  {NFP_3200_CPPTGT_CLS, 11, 0, 0, 0, "cam_lookup32"},
+  {NFP_3200_CPPTGT_CLS, 11, 1, 0, 0, "cam_lookup32_add"},
+  {NFP_3200_CPPTGT_CLS, 11, 2, 0, 0, "cam_lookup24"},
+  {NFP_3200_CPPTGT_CLS, 11, 3, 0, 0, "cam_lookup24_add"},
+  {NFP_3200_CPPTGT_CLS, 12, 0, 0, 0, "cam_lookup8"},
+  {NFP_3200_CPPTGT_CLS, 12, 1, 0, 0, "cam_lookup8_add"},
+  {NFP_3200_CPPTGT_CLS, 12, 2, 0, 0, "cam_lookup16"},
+  {NFP_3200_CPPTGT_CLS, 12, 3, 0, 0, "cam_lookup16_add"},
+  {NFP_3200_CPPTGT_CLS, 13, 0, 0, 0, "tcam_lookup32"},
+  {NFP_3200_CPPTGT_CLS, 13, 1, 0, 0, "tcam_lookup24"},
+  {NFP_3200_CPPTGT_CLS, 13, 2, 0, 0, "tcam_lookup16"},
+  {NFP_3200_CPPTGT_CLS, 13, 3, 0, 0, "tcam_lookup8"},
+  {NFP_3200_CPPTGT_CLS, 14, 0, 0, 0, "reflect_from_sig_src"},
+  {NFP_3200_CPPTGT_CLS, 14, 1, 0, 0, "reflect_from_sig_dst"},
+  {NFP_3200_CPPTGT_CLS, 14, 2, 0, 0, "reflect_from_sig_both"},
+  {NFP_3200_CPPTGT_CLS, 15, 0, 0, 0, "reflect_to_sig_src"},
+  {NFP_3200_CPPTGT_CLS, 15, 1, 0, 0, "reflect_to_sig_dst"},
+  {NFP_3200_CPPTGT_CLS, 15, 2, 0, 0, "reflect_to_sig_both"}
+};
+
+static const nfp_cmd_mnemonic nfp_me28_mnemonics[] =
+{
+  {NFP_6000_CPPTGT_NBI, 0, 0, 0, 0, "read"},
+  {NFP_6000_CPPTGT_NBI, 1, 0, 0, 0, "write"},
+  {NFP_6000_CPPTGT_NBI, 3, 0, 0, 0, "packet_ready_drop"},
+  {NFP_6000_CPPTGT_NBI, 3, 1, 0, 0, "packet_ready_unicast"},
+  {NFP_6000_CPPTGT_NBI, 3, 2, 0, 0, "packet_ready_multicast_dont_free"},
+  {NFP_6000_CPPTGT_NBI, 3, 3, 0, 0, "packet_ready_multicast_free_on_last"},
+  {NFP_6000_CPPTGT_ILA, 0, 0, 0, 0, "read"},
+  {NFP_6000_CPPTGT_ILA, 0, 1, 0, 0, "read_check_error"},
+  {NFP_6000_CPPTGT_ILA, 1, 0, 0, 0, "write"},
+  {NFP_6000_CPPTGT_ILA, 1, 1, 0, 0, "write_check_error"},
+  {NFP_6000_CPPTGT_ILA, 2, 0, 0, 0, "read_int"},
+  {NFP_6000_CPPTGT_ILA, 3, 0, 0, 7, "write_int"},
+  {NFP_6000_CPPTGT_ILA, 3, 0, 3, 7, "write_dma"},
+  {NFP_6000_CPPTGT_MU, 0, 0, 0, 0, "read"},
+  {NFP_6000_CPPTGT_MU, 0, 1, 0, 0, "read_le"},
+  {NFP_6000_CPPTGT_MU, 0, 2, 0, 0, "read_swap"},
+  {NFP_6000_CPPTGT_MU, 0, 3, 0, 0, "read_swap_le"},
+  {NFP_6000_CPPTGT_MU, 1, 0, 0, 0, "write"},
+  {NFP_6000_CPPTGT_MU, 1, 1, 0, 0, "write_le"},
+  {NFP_6000_CPPTGT_MU, 1, 2, 0, 0, "write_swap"},
+  {NFP_6000_CPPTGT_MU, 1, 3, 0, 0, "write_swap_le"},
+  {NFP_6000_CPPTGT_MU, 2, 0, 0, 0, "write8"},
+  {NFP_6000_CPPTGT_MU, 2, 1, 0, 0, "write8_le"},
+  {NFP_6000_CPPTGT_MU, 2, 2, 0, 0, "write8_swap"},
+  {NFP_6000_CPPTGT_MU, 2, 3, 0, 0, "write8_swap_le"},
+  {NFP_6000_CPPTGT_MU, 3, 0, 0, 0, "atomic_read"},
+  {NFP_6000_CPPTGT_MU, 3, 1, 0, 0, "read8"},
+  {NFP_6000_CPPTGT_MU, 3, 2, 0, 0,
+   "compare_write_or_incr/mask_compare_write"},
+  {NFP_6000_CPPTGT_MU, 3, 3, 0, 0,
+   "test_compare_write_or_incr/test_mask_compare_write"},
+  {NFP_6000_CPPTGT_MU, 4, 0, 0, 0, "atomic_write"},
+  {NFP_6000_CPPTGT_MU, 4, 1, 0, 0, "swap"},
+  {NFP_6000_CPPTGT_MU, 4, 2, 0, 0, "atomic_write_imm"},
+  {NFP_6000_CPPTGT_MU, 4, 3, 0, 0, "swap_imm"},
+  {NFP_6000_CPPTGT_MU, 5, 0, 0, 0, "set"},
+  {NFP_6000_CPPTGT_MU, 5, 1, 0, 0, "test_set"},
+  {NFP_6000_CPPTGT_MU, 5, 2, 0, 0, "set_imm"},
+  {NFP_6000_CPPTGT_MU, 5, 3, 0, 0, "test_set_imm"},
+  {NFP_6000_CPPTGT_MU, 6, 0, 0, 0, "clr"},
+  {NFP_6000_CPPTGT_MU, 6, 1, 0, 0, "test_clr"},
+  {NFP_6000_CPPTGT_MU, 6, 2, 0, 0, "clr_imm"},
+  {NFP_6000_CPPTGT_MU, 6, 3, 0, 0, "test_clr_imm"},
+  {NFP_6000_CPPTGT_MU, 7, 0, 0, 4, "add"},
+  {NFP_6000_CPPTGT_MU, 7, 0, 4, 4, "add64"},
+  {NFP_6000_CPPTGT_MU, 7, 1, 0, 4, "test_add"},
+  {NFP_6000_CPPTGT_MU, 7, 1, 4, 4, "test_add64"},
+  {NFP_6000_CPPTGT_MU, 7, 2, 0, 4, "add_imm"},
+  {NFP_6000_CPPTGT_MU, 7, 2, 4, 4, "add64_imm"},
+  {NFP_6000_CPPTGT_MU, 7, 3, 0, 4, "test_add_imm"},
+  {NFP_6000_CPPTGT_MU, 7, 3, 4, 4, "test_add64_imm"},
+  {NFP_6000_CPPTGT_MU, 8, 0, 0, 4, "addsat"},
+  {NFP_6000_CPPTGT_MU, 8, 0, 4, 4, "addsat64"},
+  {NFP_6000_CPPTGT_MU, 8, 1, 0, 4, "test_addsat"},
+  {NFP_6000_CPPTGT_MU, 8, 1, 4, 4, "test_addsat64"},
+  {NFP_6000_CPPTGT_MU, 8, 2, 0, 4, "addsat_imm"},
+  {NFP_6000_CPPTGT_MU, 8, 2, 4, 4, "addsat64_imm"},
+  {NFP_6000_CPPTGT_MU, 8, 3, 0, 4, "test_addsat_imm"},
+  {NFP_6000_CPPTGT_MU, 8, 3, 4, 4, "test_addsat64_imm"},
+  {NFP_6000_CPPTGT_MU, 9, 0, 0, 4, "sub"},
+  {NFP_6000_CPPTGT_MU, 9, 0, 4, 4, "sub64"},
+  {NFP_6000_CPPTGT_MU, 9, 1, 0, 4, "test_sub"},
+  {NFP_6000_CPPTGT_MU, 9, 1, 4, 4, "test_sub64"},
+  {NFP_6000_CPPTGT_MU, 9, 2, 0, 4, "sub_imm"},
+  {NFP_6000_CPPTGT_MU, 9, 2, 4, 4, "sub64_imm"},
+  {NFP_6000_CPPTGT_MU, 9, 3, 0, 4, "test_sub_imm"},
+  {NFP_6000_CPPTGT_MU, 9, 3, 4, 4, "test_sub64_imm"},
+  {NFP_6000_CPPTGT_MU, 10, 0, 0, 4, "subsat"},
+  {NFP_6000_CPPTGT_MU, 10, 0, 4, 4, "subsat64"},
+  {NFP_6000_CPPTGT_MU, 10, 1, 0, 4, "test_subsat"},
+  {NFP_6000_CPPTGT_MU, 10, 1, 4, 4, "test_subsat64"},
+  {NFP_6000_CPPTGT_MU, 10, 2, 0, 4, "subsat_imm"},
+  {NFP_6000_CPPTGT_MU, 10, 2, 4, 4, "subsat64_imm"},
+  {NFP_6000_CPPTGT_MU, 10, 3, 0, 4, "test_subsat_imm"},
+  {NFP_6000_CPPTGT_MU, 10, 3, 4, 4, "test_subsat64_imm"},
+  {NFP_6000_CPPTGT_MU, 11, 0, 0, 0, "ticket_release"},
+  {NFP_6000_CPPTGT_MU, 11, 1, 0, 0, "ticket_release_ind"},
+  {NFP_6000_CPPTGT_MU, 12, 0, 0, 7, "cam128_lookup8/cam384_lookup8"},
+  {NFP_6000_CPPTGT_MU, 12, 0, 1, 7, "cam128_lookup16/cam384_lookup16"},
+  {NFP_6000_CPPTGT_MU, 12, 0, 2, 7, "cam128_lookup24/cam384_lookup24"},
+  {NFP_6000_CPPTGT_MU, 12, 0, 3, 7, "cam128_lookup32/cam384_lookup32"},
+  {NFP_6000_CPPTGT_MU, 12, 0, 4, 7, "cam256_lookup8/cam512_lookup8"},
+  {NFP_6000_CPPTGT_MU, 12, 0, 5, 7, "cam256_lookup16/cam512_lookup16"},
+  {NFP_6000_CPPTGT_MU, 12, 0, 6, 7, "cam256_lookup24/cam512_lookup24"},
+  {NFP_6000_CPPTGT_MU, 12, 0, 7, 7, "cam256_lookup32/cam512_lookup32"},
+  {NFP_6000_CPPTGT_MU, 12, 1, 0, 7,
+   "cam128_lookup8_add/cam384_lookup8_add"},
+  {NFP_6000_CPPTGT_MU, 12, 1, 1, 7,
+   "cam128_lookup16_add/cam384_lookup16_add"},
+  {NFP_6000_CPPTGT_MU, 12, 1, 2, 7,
+   "cam128_lookup24_add/cam384_lookup24_add"},
+  {NFP_6000_CPPTGT_MU, 12, 1, 3, 7,
+   "cam128_lookup32_add/cam384_lookup32_add"},
+  {NFP_6000_CPPTGT_MU, 12, 1, 4, 7,
+   "cam256_lookup8_add/cam512_lookup8_add"},
+  {NFP_6000_CPPTGT_MU, 12, 1, 5, 7,
+   "cam256_lookup16_add/cam512_lookup16_add"},
+  {NFP_6000_CPPTGT_MU, 12, 1, 6, 7,
+   "cam256_lookup24_add/cam512_lookup24_add"},
+  {NFP_6000_CPPTGT_MU, 12, 1, 7, 7,
+   "cam256_lookup32_add/cam512_lookup32_add"},
+  {NFP_6000_CPPTGT_MU, 12, 2, 0, 7, "tcam128_lookup8/tcam384_lookup8"},
+  {NFP_6000_CPPTGT_MU, 12, 2, 1, 7, "tcam128_lookup16/tcam384_lookup16"},
+  {NFP_6000_CPPTGT_MU, 12, 2, 2, 7, "tcam128_lookup24/tcam384_lookup24"},
+  {NFP_6000_CPPTGT_MU, 12, 2, 3, 7, "tcam128_lookup32/tcam384_lookup32"},
+  {NFP_6000_CPPTGT_MU, 12, 2, 4, 7, "tcam256_lookup8/tcam512_lookup8"},
+  {NFP_6000_CPPTGT_MU, 12, 2, 5, 7, "tcam256_lookup16/tcam512_lookup16"},
+  {NFP_6000_CPPTGT_MU, 12, 2, 6, 7, "tcam256_lookup24/tcam512_lookup24"},
+  {NFP_6000_CPPTGT_MU, 12, 2, 7, 7, "tcam256_lookup32/tcam512_lookup32"},
+  {NFP_6000_CPPTGT_MU, 12, 3, 0, 7, "lock128/lock384"},
+  {NFP_6000_CPPTGT_MU, 12, 3, 2, 7,
+   "cam128_lookup24_add_inc/cam384_lookup24_add_inc"},
+  {NFP_6000_CPPTGT_MU, 12, 3, 4, 7, "lock256/lock512"},
+  {NFP_6000_CPPTGT_MU, 12, 3, 6, 7,
+   "cam256_lookup24_add_inc/cam512_lookup24_add_inc"},
+  {NFP_6000_CPPTGT_MU, 13, 0, 0, 7, "microq128_get"},
+  {NFP_6000_CPPTGT_MU, 13, 0, 4, 7, "microq256_get"},
+  {NFP_6000_CPPTGT_MU, 13, 1, 0, 7, "microq128_pop"},
+  {NFP_6000_CPPTGT_MU, 13, 1, 4, 7, "microq256_pop"},
+  {NFP_6000_CPPTGT_MU, 13, 2, 0, 7, "microq128_put"},
+  {NFP_6000_CPPTGT_MU, 13, 2, 4, 7, "microq256_put"},
+  {NFP_6000_CPPTGT_MU, 14, 0, 0, 7, "queue128_lock"},
+  {NFP_6000_CPPTGT_MU, 14, 0, 4, 7, "queue256_lock"},
+  {NFP_6000_CPPTGT_MU, 14, 1, 0, 7, "queue128_unlock"},
+  {NFP_6000_CPPTGT_MU, 14, 1, 4, 7, "queue256_unlock"},
+  {NFP_6000_CPPTGT_MU, 15, 0, 0, 0, "xor"},
+  {NFP_6000_CPPTGT_MU, 15, 1, 0, 0, "test_xor"},
+  {NFP_6000_CPPTGT_MU, 15, 2, 0, 0, "xor_imm"},
+  {NFP_6000_CPPTGT_MU, 15, 3, 0, 0, "test_xor_imm"},
+  {NFP_6000_CPPTGT_MU, 16, 0, 0, 0,
+   "ctm.packet_wait_packet_status/emem.rd_qdesc/imem.stats_log"},
+  {NFP_6000_CPPTGT_MU, 16, 1, 0, 0,
+   "ctm.packet_read_packet_status/emem.wr_qdesc/imem.stats_log_sat"},
+  {NFP_6000_CPPTGT_MU, 16, 2, 0, 0,
+   "emem.push_qdesc/imem.stats_log_event"},
+  {NFP_6000_CPPTGT_MU, 16, 3, 0, 0, "imem.stats_log_sat_event"},
+  {NFP_6000_CPPTGT_MU, 17, 0, 0, 0,
+   "ctm.packet_alloc/emem.enqueue/imem.stats_push"},
+  {NFP_6000_CPPTGT_MU, 17, 1, 0, 0,
+   "ctm.packet_credit_get/emem.enqueue_tail/imem.stats_push_clear"},
+  {NFP_6000_CPPTGT_MU, 17, 2, 0, 0, "ctm.packet_alloc_poll/emem.dequeue"},
+  {NFP_6000_CPPTGT_MU, 17, 3, 0, 0, "ctm.packet_add_thread"},
+  {NFP_6000_CPPTGT_MU, 18, 0, 0, 0,
+   "ctm.packet_free/emem.read_queue/imem.lb_write_desc"},
+  {NFP_6000_CPPTGT_MU, 18, 1, 0, 0,
+   "ctm.packet_free_and_signal/emem.read_queue_ring/imem.lb_read_desc"},
+  {NFP_6000_CPPTGT_MU, 18, 2, 0, 0,
+   "ctm.packet_free_and_return_pointer/emem.write_queue"},
+  {NFP_6000_CPPTGT_MU, 18, 3, 0, 0,
+   "ctm.packet_return_pointer/emem.write_queue_ring"},
+  {NFP_6000_CPPTGT_MU, 19, 0, 0, 0,
+   "ctm.packet_complete_drop/emem.add_tail/imem.lb_write_idtable"},
+  {NFP_6000_CPPTGT_MU, 19, 1, 0, 0,
+   "ctm.packet_complete_unicast/emem.qadd_thread/imem.lb_read_idtable"},
+  {NFP_6000_CPPTGT_MU, 19, 2, 0, 0,
+   "ctm.packet_complete_multicast/emem.qadd_work"},
+  {NFP_6000_CPPTGT_MU, 19, 3, 0, 0,
+   "ctm.packet_complete_multicast_free/emem.qadd_work_imm"},
+  {NFP_6000_CPPTGT_MU, 20, 0, 0, 0,
+   "ctm.pe_dma_to_memory_packet/emem.put/imem.lb_bucket_write_local"},
+  {NFP_6000_CPPTGT_MU, 20, 1, 0, 0,
+   "ctm.pe_dma_to_memory_packet_swap/imem.lb_bucket_write_dcache"},
+  {NFP_6000_CPPTGT_MU, 20, 2, 0, 0,
+   "ctm.pe_dma_to_memory_packet_free/emem.journal"},
+  {NFP_6000_CPPTGT_MU, 20, 3, 0, 0,
+   "ctm.pe_dma_to_memory_packet_free_swap"},
+  {NFP_6000_CPPTGT_MU, 21, 0, 0, 0,
+   "ctm.pe_dma_to_memory_indirect/emem.get/imem.lb_bucket_read_local"},
+  {NFP_6000_CPPTGT_MU, 21, 1, 0, 0,
+   "ctm.pe_dma_to_memory_indirect_swap/emem.get_eop/"
+     "imem.lb_bucket_read_dcache"},
+  {NFP_6000_CPPTGT_MU, 21, 2, 0, 0,
+   "ctm.pe_dma_to_memory_indirect_free/emem.get_freely"},
+  {NFP_6000_CPPTGT_MU, 21, 3, 0, 0,
+   "ctm.pe_dma_to_memory_indirect_free_swap"},
+  {NFP_6000_CPPTGT_MU, 22, 0, 0, 0,
+   "ctm.pe_dma_to_memory_buffer/emem.pop/imem.lb_lookup_bundleid"},
+  {NFP_6000_CPPTGT_MU, 22, 1, 0, 0,
+   "ctm.pe_dma_to_memory_buffer_le/emem.pop_eop/imem.lb_lookup_dcache"},
+  {NFP_6000_CPPTGT_MU, 22, 2, 0, 0,
+   "ctm.pe_dma_to_memory_buffer_swap/emem.pop_freely/imem.lb_lookup_idtable"},
+  {NFP_6000_CPPTGT_MU, 22, 3, 0, 0, "ctm.pe_dma_to_memory_buffer_le_swap"},
+  {NFP_6000_CPPTGT_MU, 23, 0, 0, 0,
+   "ctm.pe_dma_from_memory_buffer/emem.fast_journal/imem.lb_push_stats_local"},
+  {NFP_6000_CPPTGT_MU, 23, 1, 0, 0,
+   "ctm.pe_dma_from_memory_buffer_le/emem.fast_journal_sig/"
+     "imem.lb_push_stats_dcache"},
+  {NFP_6000_CPPTGT_MU, 23, 2, 0, 0,
+   "ctm.pe_dma_from_memory_buffer_swap/imem.lb_push_stats_local_clr"},
+  {NFP_6000_CPPTGT_MU, 23, 3, 0, 0,
+   "ctm.pe_dma_from_memory_buffer_le_swap/imem.lb_push_stats_dcache_clr"},
+  {NFP_6000_CPPTGT_MU, 26, 0, 0, 0, "emem.lookup/imem.lookup"},
+  {NFP_6000_CPPTGT_MU, 28, 0, 0, 0, "read32"},
+  {NFP_6000_CPPTGT_MU, 28, 1, 0, 0, "read32_le"},
+  {NFP_6000_CPPTGT_MU, 28, 2, 0, 0, "read32_swap"},
+  {NFP_6000_CPPTGT_MU, 28, 3, 0, 0, "read32_swap_le"},
+  {NFP_6000_CPPTGT_MU, 29, 1, 0, 0, "cam_lookup_add_lock"},
+  {NFP_6000_CPPTGT_MU, 29, 2, 0, 0, "cam_lookup_add_extend"},
+  {NFP_6000_CPPTGT_MU, 29, 3, 0, 0, "cam_lookup_add_inc"},
+  {NFP_6000_CPPTGT_MU, 30, 2, 0, 0, "meter"},
+  {NFP_6000_CPPTGT_MU, 31, 0, 0, 0, "write32"},
+  {NFP_6000_CPPTGT_MU, 31, 1, 0, 0, "write32_le"},
+  {NFP_6000_CPPTGT_MU, 31, 2, 0, 0, "write32_swap"},
+  {NFP_6000_CPPTGT_MU, 31, 3, 0, 0, "write32_swap_le"},
+  {NFP_6000_CPPTGT_PCIE, 0, 0, 0, 0, "read"},
+  {NFP_6000_CPPTGT_PCIE, 0, 1, 0, 0, "read_rid"},
+  {NFP_6000_CPPTGT_PCIE, 1, 0, 0, 0, "write"},
+  {NFP_6000_CPPTGT_PCIE, 1, 1, 0, 0, "write_rid"},
+  {NFP_6000_CPPTGT_PCIE, 1, 2, 0, 0, "write_vdm"},
+  {NFP_6000_CPPTGT_PCIE, 2, 0, 0, 0, "read_int"},
+  {NFP_6000_CPPTGT_PCIE, 3, 0, 0, 0, "write_int"},
+  {NFP_6000_CPPTGT_ARM, 0, 0, 0, 0, "read"},
+  {NFP_6000_CPPTGT_ARM, 1, 0, 0, 0, "write"},
+  {NFP_6000_CPPTGT_CRYPTO, 0, 0, 0, 0, "read"},
+  {NFP_6000_CPPTGT_CRYPTO, 1, 0, 0, 0, "write"},
+  {NFP_6000_CPPTGT_CRYPTO, 2, 0, 0, 0, "write_fifo"},
+  {NFP_6000_CPPTGT_CTXPB, 0, 0, 0, 0, "xpb_read"},
+  {NFP_6000_CPPTGT_CTXPB, 0, 1, 0, 0, "ring_get"},
+  {NFP_6000_CPPTGT_CTXPB, 0, 2, 0, 0, "interthread_signal"},
+  {NFP_6000_CPPTGT_CTXPB, 1, 0, 0, 0, "xpb_write"},
+  {NFP_6000_CPPTGT_CTXPB, 1, 1, 0, 0, "ring_put"},
+  {NFP_6000_CPPTGT_CTXPB, 1, 2, 0, 0, "ctnn_write"},
+  {NFP_6000_CPPTGT_CTXPB, 2, 0, 0, 0, "reflect_read_none"},
+  {NFP_6000_CPPTGT_CTXPB, 2, 1, 0, 0, "reflect_read_sig_init"},
+  {NFP_6000_CPPTGT_CTXPB, 2, 2, 0, 0, "reflect_read_sig_remote"},
+  {NFP_6000_CPPTGT_CTXPB, 2, 3, 0, 0, "reflect_read_sig_both"},
+  {NFP_6000_CPPTGT_CTXPB, 3, 0, 0, 0, "reflect_write_none"},
+  {NFP_6000_CPPTGT_CTXPB, 3, 1, 0, 0, "reflect_write_sig_init"},
+  {NFP_6000_CPPTGT_CTXPB, 3, 2, 0, 0, "reflect_write_sig_remote"},
+  {NFP_6000_CPPTGT_CTXPB, 3, 3, 0, 0, "reflect_write_sig_both"},
+  {NFP_6000_CPPTGT_CLS, 0, 0, 0, 0, "read"},
+  {NFP_6000_CPPTGT_CLS, 0, 1, 0, 0, "read_le"},
+  {NFP_6000_CPPTGT_CLS, 0, 2, 0, 0, "swap/test_compare_write"},
+  {NFP_6000_CPPTGT_CLS, 0, 3, 0, 0, "xor"},
+  {NFP_6000_CPPTGT_CLS, 1, 0, 0, 0, "write"},
+  {NFP_6000_CPPTGT_CLS, 1, 1, 0, 0, "write_le"},
+  {NFP_6000_CPPTGT_CLS, 1, 2, 0, 0, "write8_be"},
+  {NFP_6000_CPPTGT_CLS, 1, 3, 0, 0, "write8_le"},
+  {NFP_6000_CPPTGT_CLS, 2, 0, 0, 0, "set"},
+  {NFP_6000_CPPTGT_CLS, 2, 1, 0, 0, "clr"},
+  {NFP_6000_CPPTGT_CLS, 2, 2, 0, 0, "test_set"},
+  {NFP_6000_CPPTGT_CLS, 2, 3, 0, 0, "test_clr"},
+  {NFP_6000_CPPTGT_CLS, 3, 0, 0, 0, "set_imm"},
+  {NFP_6000_CPPTGT_CLS, 3, 1, 0, 0, "clr_imm"},
+  {NFP_6000_CPPTGT_CLS, 3, 2, 0, 0, "test_set_imm"},
+  {NFP_6000_CPPTGT_CLS, 3, 3, 0, 0, "test_clr_imm"},
+  {NFP_6000_CPPTGT_CLS, 4, 0, 0, 0, "add"},
+  {NFP_6000_CPPTGT_CLS, 4, 1, 0, 0, "add64"},
+  {NFP_6000_CPPTGT_CLS, 4, 2, 0, 0, "addsat"},
+  {NFP_6000_CPPTGT_CLS, 5, 0, 0, 0, "add_imm"},
+  {NFP_6000_CPPTGT_CLS, 5, 1, 0, 0, "add64_imm"},
+  {NFP_6000_CPPTGT_CLS, 5, 2, 0, 0, "addsat_imm"},
+  {NFP_6000_CPPTGT_CLS, 6, 0, 0, 0, "sub"},
+  {NFP_6000_CPPTGT_CLS, 6, 1, 0, 0, "sub64"},
+  {NFP_6000_CPPTGT_CLS, 6, 2, 0, 0, "subsat"},
+  {NFP_6000_CPPTGT_CLS, 7, 0, 0, 0, "sub_imm"},
+  {NFP_6000_CPPTGT_CLS, 7, 1, 0, 0, "sub64_imm"},
+  {NFP_6000_CPPTGT_CLS, 7, 2, 0, 0, "subsat_imm"},
+  {NFP_6000_CPPTGT_CLS, 8, 0, 0, 0, "queue_lock"},
+  {NFP_6000_CPPTGT_CLS, 8, 1, 0, 0, "queue_unlock"},
+  {NFP_6000_CPPTGT_CLS, 8, 2, 0, 0, "hash_mask"},
+  {NFP_6000_CPPTGT_CLS, 8, 3, 0, 0, "hash_mask_clear"},
+  {NFP_6000_CPPTGT_CLS, 9, 0, 0, 0, "get"},
+  {NFP_6000_CPPTGT_CLS, 9, 1, 0, 0, "pop"},
+  {NFP_6000_CPPTGT_CLS, 9, 2, 0, 0, "get_safe"},
+  {NFP_6000_CPPTGT_CLS, 9, 3, 0, 0, "pop_safe"},
+  {NFP_6000_CPPTGT_CLS, 10, 0, 0, 0, "ring_put"},
+  {NFP_6000_CPPTGT_CLS, 10, 2, 0, 0, "ring_journal"},
+  {NFP_6000_CPPTGT_CLS, 11, 0, 0, 0, "cam_lookup32"},
+  {NFP_6000_CPPTGT_CLS, 11, 1, 0, 0, "cam_lookup32_add"},
+  {NFP_6000_CPPTGT_CLS, 11, 2, 0, 0, "cam_lookup24"},
+  {NFP_6000_CPPTGT_CLS, 11, 3, 0, 0, "cam_lookup24_add"},
+  {NFP_6000_CPPTGT_CLS, 12, 0, 0, 0, "cam_lookup8"},
+  {NFP_6000_CPPTGT_CLS, 12, 1, 0, 0, "cam_lookup8_add"},
+  {NFP_6000_CPPTGT_CLS, 12, 2, 0, 0, "cam_lookup16"},
+  {NFP_6000_CPPTGT_CLS, 12, 3, 0, 0, "cam_lookup16_add"},
+  {NFP_6000_CPPTGT_CLS, 13, 0, 0, 0, "tcam_lookup32"},
+  {NFP_6000_CPPTGT_CLS, 13, 1, 0, 0, "tcam_lookup24"},
+  {NFP_6000_CPPTGT_CLS, 13, 2, 0, 0, "tcam_lookup16"},
+  {NFP_6000_CPPTGT_CLS, 13, 3, 0, 0, "tcam_lookup8"},
+  {NFP_6000_CPPTGT_CLS, 14, 0, 0, 0, "reflect_write_sig_local"},
+  {NFP_6000_CPPTGT_CLS, 14, 1, 0, 0, "reflect_write_sig_remote"},
+  {NFP_6000_CPPTGT_CLS, 14, 2, 0, 0, "reflect_write_sig_both"},
+  {NFP_6000_CPPTGT_CLS, 15, 0, 0, 0, "reflect_read_sig_remote"},
+  {NFP_6000_CPPTGT_CLS, 15, 1, 0, 0, "reflect_read_sig_local"},
+  {NFP_6000_CPPTGT_CLS, 15, 2, 0, 0, "reflect_read_sig_both"},
+  {NFP_6000_CPPTGT_CLS, 16, 1, 0, 0, "cam_lookup32_add_lock"},
+  {NFP_6000_CPPTGT_CLS, 16, 2, 0, 0, "cam_lookup24_add_inc"},
+  {NFP_6000_CPPTGT_CLS, 16, 3, 0, 0, "cam_lookup32_add_extend"},
+  {NFP_6000_CPPTGT_CLS, 17, 0, 0, 0, "meter"},
+  {NFP_6000_CPPTGT_CLS, 17, 2, 0, 0, "statistic"},
+  {NFP_6000_CPPTGT_CLS, 17, 3, 0, 0, "statistic_imm"},
+  {NFP_6000_CPPTGT_CLS, 20, 0, 0, 0, "test_add"},
+  {NFP_6000_CPPTGT_CLS, 20, 1, 0, 0, "test_add64"},
+  {NFP_6000_CPPTGT_CLS, 20, 2, 0, 0, "test_addsat"},
+  {NFP_6000_CPPTGT_CLS, 21, 0, 0, 0, "test_add_imm"},
+  {NFP_6000_CPPTGT_CLS, 21, 1, 0, 0, "test_add64_imm"},
+  {NFP_6000_CPPTGT_CLS, 21, 2, 0, 0, "test_addsat_imm"},
+  {NFP_6000_CPPTGT_CLS, 22, 0, 0, 0, "test_sub"},
+  {NFP_6000_CPPTGT_CLS, 22, 1, 0, 0, "test_sub64"},
+  {NFP_6000_CPPTGT_CLS, 22, 2, 0, 0, "test_subsat"},
+  {NFP_6000_CPPTGT_CLS, 23, 0, 0, 0, "test_sub_imm"},
+  {NFP_6000_CPPTGT_CLS, 23, 1, 0, 0, "test_sub64_imm"},
+  {NFP_6000_CPPTGT_CLS, 23, 2, 0, 0, "test_subsat_imm"},
+  {NFP_6000_CPPTGT_CLS, 24, 0, 0, 0, "ring_read"},
+  {NFP_6000_CPPTGT_CLS, 24, 1, 0, 0, "ring_write"},
+  {NFP_6000_CPPTGT_CLS, 24, 2, 0, 0, "ring_ordered_lock"},
+  {NFP_6000_CPPTGT_CLS, 24, 3, 0, 0, "ring_ordered_unlock"},
+  {NFP_6000_CPPTGT_CLS, 25, 0, 0, 0, "ring_workq_add_thread"},
+  {NFP_6000_CPPTGT_CLS, 25, 1, 0, 0, "ring_workq_add_work"}
+};
+
+static int
+nfp_me_print_invalid (bfd_vma instr, struct disassemble_info *dinfo)
+{
+  const char * err_msg = N_("<invalid_instruction>:");
+  dinfo->fprintf_func (dinfo->stream, "%s 0x%" BFD_VMA_FMT "x", err_msg, instr);
+  return _NFP_ERR_CONT;
+}
+
+static bfd_boolean
+nfp_me_is_imm_opnd10 (unsigned int opnd)
+{
+  return _BF (opnd, 9, 8) == 0x3;
+}
+
+static bfd_boolean
+nfp_me_is_imm_opnd8 (unsigned int opnd)
+{
+  return _BTST (opnd, 5);
+}
+
+static unsigned int
+nfp_me_imm_opnd10 (unsigned int opnd)
+{
+  return nfp_me_is_imm_opnd10 (opnd) ? (opnd & 0xff) : ~0U;
+}
+
+static unsigned int
+nfp_me_imm_opnd8 (unsigned int opnd, unsigned int imm8_msb)
+{
+  unsigned int v = (imm8_msb << 7) | _BFS (opnd, 7, 6, 5) | _BF (opnd, 4, 0);
+
+  return nfp_me_is_imm_opnd8 (opnd) ? v : ~0U;
+}
+
+/* Print an unrestricted/10-bit operand.
+   This can mostly be generic across NFP families at the moment.  */
+static bfd_boolean
+nfp_me_print_opnd10 (unsigned int opnd, char bank, int num_ctx, int lmem_ext,
+                    struct disassemble_info *dinfo)
+{
+  unsigned int n = _BF (opnd, (num_ctx == 8) ? 3 : 4, 0);
+
+  /* Absolute GPR.  */
+  if (_BF (opnd, 9, 7) == 0x1)
+    dinfo->fprintf_func (dinfo->stream, "@gpr%c_%d", bank, _BF (opnd, 6, 0));
+
+  /* Relative GPR.  */
+  else if (_BF (opnd, 9, 6) == 0x0)
+    dinfo->fprintf_func (dinfo->stream, "gpr%c_%d", bank, n);
+
+  /* Indexed Xfer.  */
+  else if (_BF (opnd, 9, 7) == 0x2)
+    {
+      dinfo->fprintf_func (dinfo->stream, "*$index");
+      if (_BF (opnd, 2, 1) == 0x1)
+       dinfo->fprintf_func (dinfo->stream, "++");
+      else if (_BF (opnd, 2, 1) == 0x2)
+       dinfo->fprintf_func (dinfo->stream, "--");
+    }
+
+  /* Relative Xfer.  */
+  else if (_BF (opnd, 9, 7) == 0x3)
+    {
+      if (_BTST (opnd, 6))
+       n += (num_ctx == 8 ? 16 : 32);
+      dinfo->fprintf_func (dinfo->stream, "$xfer_%d", n);
+    }
+
+  /* Indexed Next Neighbour.  */
+  else if (_BF (opnd, 9, 6) == 0x9)
+    {
+      dinfo->fprintf_func (dinfo->stream, "*n$index");
+      if (_BTST (opnd, 1))
+       dinfo->fprintf_func (dinfo->stream, "++");
+    }
+
+  /* Relative Next Neighbour.  */
+  else if (_BF (opnd, 9, 6) == 0xa)
+    {
+      dinfo->fprintf_func (dinfo->stream, "n$reg_%d", n);
+    }
+
+  /* Indexed LMEM.  */
+  else if (_BF (opnd, 9, 6) == 0x8)
+    {
+      n = _BF (opnd, 5, 5) + (lmem_ext * 2);
+      dinfo->fprintf_func (dinfo->stream, "*l$index%d", n);
+      if (_BTST (opnd, 4))
+       dinfo->fprintf_func (dinfo->stream, _BTST (opnd, 0) ? "--" : "++");
+      else if (_BF (opnd, 3, 0))
+       dinfo->fprintf_func (dinfo->stream, "[%d]", _BF (opnd, 3, 0));
+    }
+
+  /* 8-bit Constant value.  */
+  else if (_BF (opnd, 9, 8) == 0x3)
+    dinfo->fprintf_func (dinfo->stream, "0x%x", _BF (opnd, 7, 0));
+
+  else
+    {
+      dinfo->fprintf_func (dinfo->stream, "<opnd:0x%x>", opnd);
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+/* Print a restricted/8-bit operand.
+   This can mostly be generic across NFP families at the moment.  */
+
+static bfd_boolean
+nfp_me_print_opnd8 (unsigned int opnd, char bank, int num_ctx, int lmem_ext,
+                   unsigned int imm8_msb, struct disassemble_info *dinfo)
+{
+  unsigned int n = _BF (opnd, (num_ctx == 8) ? 3 : 4, 0);
+
+  /* Relative GPR.  */
+  if (_BF (opnd, 7, 5) == 0x0)
+    dinfo->fprintf_func (dinfo->stream, "gpr%c_%d", bank, n);
+
+  /* Relative Xfer.  */
+  else if (_BF (opnd, 7, 5) == 0x4)
+    dinfo->fprintf_func (dinfo->stream, "$xfer_%d", n);
+
+  /* Relative Xfer.  */
+  else if (_BF (opnd, 7, 5) == 0x6)
+    {
+      n += (num_ctx == 8 ? 16 : 32);
+      dinfo->fprintf_func (dinfo->stream, "$xfer_%d", n);
+    }
+
+  /* Indexed Xfer.  */
+  else if ((_BF (opnd, 7, 4) == 0x4) && (!_BTST (opnd, 0)))
+    {
+      dinfo->fprintf_func (dinfo->stream, "*$index");
+      if (_BF (opnd, 2, 1) == 0x1)
+       dinfo->fprintf_func (dinfo->stream, "++");
+      else if (_BF (opnd, 2, 1) == 0x2)
+       dinfo->fprintf_func (dinfo->stream, "--");
+    }
+
+  /* Indexed NN.  */
+  else if ((_BF (opnd, 7, 4) == 0x4) && (_BTST (opnd, 0)))
+    {
+      dinfo->fprintf_func (dinfo->stream, "*n$index");
+      if (_BTST (opnd, 1))
+       dinfo->fprintf_func (dinfo->stream, "++");
+    }
+
+  /* Indexed LMEM.  */
+  else if (_BF (opnd, 7, 4) == 0x5)
+    {
+      n = _BF (opnd, 3, 3) + (lmem_ext * 2);
+      dinfo->fprintf_func (dinfo->stream, "*l$index%d", n);
+      if (_BF (opnd, 2, 0))
+       dinfo->fprintf_func (dinfo->stream, "[%d]", _BF (opnd, 2, 0));
+    }
+
+  /* 7+1-bit Constant value.  */
+  else if (_BTST (opnd, 5))
+    {
+      n = (imm8_msb << 7) | _BFS (opnd, 7, 6, 5) | _BF (opnd, 4, 0);
+      dinfo->fprintf_func (dinfo->stream, "0x%x", n);
+    }
+
+  else
+    {
+      dinfo->fprintf_func (dinfo->stream, "<opnd:0x%x>", opnd);
+      return FALSE;
+    }
+
+  return TRUE;
+}
+
+static int
+nfp_me27_28_print_alu_shf (bfd_vma instr, unsigned int pred_cc,
+                          unsigned int dst_lmext, unsigned int src_lmext,
+                          unsigned int gpr_wrboth,
+                          int num_ctx, struct disassemble_info *dinfo)
+{
+  unsigned int op = _BF (instr, 35, 33);
+  unsigned int srcA = _BF (instr, 7, 0);
+  unsigned int srcB = _BF (instr, 17, 10);
+  unsigned int dst = _BF (instr, 27, 20);
+  unsigned int sc = _BF (instr, 9, 8);
+  unsigned int imm_msb = _BTST (instr, 18);
+  unsigned int swap = _BTST (instr, 19);
+  unsigned int shift = _BF (instr, 32, 28);
+  char dst_bank = 'A' + _BTST (instr, 36);
+  unsigned int nocc = _BTST (instr, 40);
+  bfd_boolean err = FALSE;
+
+  if (swap)
+    {
+      unsigned int tmp = srcA;
+      srcA = srcB;
+      srcB = tmp;
+    }
+
+  /* alu_shf, dbl_shf, asr.  */
+  if (op < 7)
+    {
+      if (sc == 3)
+       dinfo->fprintf_func (dinfo->stream, "dbl_shf[");
+      else if (op == 6)
+       dinfo->fprintf_func (dinfo->stream, "asr[");
+      else
+       dinfo->fprintf_func (dinfo->stream, "alu_shf[");
+
+      /* dest operand */
+      if (nfp_me_is_imm_opnd8 (dst))
+       dinfo->fprintf_func (dinfo->stream, "--");
+      else
+       err = err || !nfp_me_print_opnd8 (dst, dst_bank, num_ctx,
+                                         dst_lmext, imm_msb, dinfo);
+
+      dinfo->fprintf_func (dinfo->stream, ", ");
+
+      /* A operand.  */
+      if (op != 6)
+       {
+         if ((op < 2) && (sc != 3))    /* Not dbl_shf.  */
+           dinfo->fprintf_func (dinfo->stream, "--");  /* B or ~B operator.  */
+         else
+           err = err || !nfp_me_print_opnd8 (srcA, (swap) ? 'B' : 'A',
+                                             num_ctx, src_lmext, imm_msb,
+                                             dinfo);
+
+         dinfo->fprintf_func (dinfo->stream, ", ");
+
+         /* Operator (not for dbl_shf).  */
+         if (sc != 3)
+           {
+             dinfo->fprintf_func (dinfo->stream, "%s, ",
+                                  nfp_mealu_shf_op[op]);
+           }
+       }
+
+      /* B operand.  */
+      err = err || !nfp_me_print_opnd8 (srcB, (swap) ? 'A' : 'B',
+                                       num_ctx, src_lmext, imm_msb, dinfo);
+
+      dinfo->fprintf_func (dinfo->stream, ", ");
+
+      /* Shift */
+      if (sc == 0)
+       dinfo->fprintf_func (dinfo->stream, ">>rot%d", shift);
+      else if (sc == 2)
+       {
+         if (shift)
+           dinfo->fprintf_func (dinfo->stream, "<<%d", (32 - shift));
+         else
+           dinfo->fprintf_func (dinfo->stream, "<<indirect");
+       }
+      else
+       {
+         if (shift)
+           dinfo->fprintf_func (dinfo->stream, ">>%d", shift);
+         else
+           dinfo->fprintf_func (dinfo->stream, ">>indirect");
+       }
+    }
+  /* Byte Align.  */
+  else if (op == 7)
+    {
+      dinfo->fprintf_func (dinfo->stream, "byte_align_%s[",
+                          ((sc == 2) ? "le" : "be"));
+
+      /* Dest operand.  */
+      if (nfp_me_is_imm_opnd8 (dst))
+       dinfo->fprintf_func (dinfo->stream, "--");
+      else
+       err = err || !nfp_me_print_opnd8 (dst, dst_bank, num_ctx,
+                                         dst_lmext, imm_msb, dinfo);
+
+      dinfo->fprintf_func (dinfo->stream, ", ");
+
+      if (sc == 2)
+       err = err || !nfp_me_print_opnd8 (srcA, (swap) ? 'B' : 'A', num_ctx,
+                                         0, imm_msb, dinfo);
+      else
+       err = err || !nfp_me_print_opnd8 (srcB, (swap) ? 'A' : 'B', num_ctx,
+                                         0, imm_msb, dinfo);
+    }
+
+  dinfo->fprintf_func (dinfo->stream, "]");
+  if (nocc)
+    dinfo->fprintf_func (dinfo->stream, ", no_cc");
+  if (gpr_wrboth)
+    dinfo->fprintf_func (dinfo->stream, ", gpr_wrboth");
+  if (pred_cc)
+    dinfo->fprintf_func (dinfo->stream, ", predicate_cc");
+
+  if (err)
+    return _NFP_ERR_CONT;
+  return 0;
+}
+
+static int
+nfp_me27_28_print_alu (bfd_vma instr, unsigned int pred_cc,
+                      unsigned int dst_lmext, unsigned int src_lmext,
+                      unsigned int gpr_wrboth,
+                      int num_ctx, struct disassemble_info *dinfo)
+{
+  unsigned int op = _BF (instr, 35, 31);
+  unsigned int srcA = _BF (instr, 9, 0);
+  unsigned int srcB = _BF (instr, 19, 10);
+  unsigned int dst = _BF (instr, 29, 20);
+  unsigned int swap = _BTST (instr, 30);
+  char dst_bank = 'A' + _BTST (instr, 36);
+  unsigned int nocc = _BTST (instr, 40);
+  int do_close_bracket = 1;
+  bfd_boolean err = FALSE;
+
+  if (swap)
+    {
+      unsigned int tmp = srcA;
+      srcA = srcB;
+      srcB = tmp;
+    }
+
+  switch (op)
+    {
+    case 3:                    /* pop_count3[dst, srcB] */
+    case 6:                    /* pop_count1[srcB] */
+    case 7:                    /* pop_count2[srcB] */
+    case 14:                   /* ffs[dst, srcB] */
+    case 15:                   /* cam_read_tag[dst, srcB] */
+    case 31:                   /* cam_read_state[dst, srcB] */
+      dinfo->fprintf_func (dinfo->stream, "%s[", nfp_me27_28_alu_op[op]);
+
+      /* No dest for pop_count1/2.  */
+      if ((op != 6) && (op != 7))
+       {
+         /* dest operand */
+         if (nfp_me_is_imm_opnd10 (dst))
+           dinfo->fprintf_func (dinfo->stream, "--");
+         else
+           err = err || !nfp_me_print_opnd10 (dst, dst_bank, num_ctx,
+                                              dst_lmext, dinfo);
+
+         dinfo->fprintf_func (dinfo->stream, ", ");
+       }
+
+      /* B operand.  */
+      err = err || !nfp_me_print_opnd10 (srcB, (swap) ? 'A' : 'B',
+                                        num_ctx, src_lmext, dinfo);
+      break;
+      /* cam_clear.  */
+    case 11:
+      do_close_bracket = 0;
+      dinfo->fprintf_func (dinfo->stream, "cam_clear");
+      break;
+
+      /* cam_lookup.  */
+    case 23:
+      do_close_bracket = 0;
+      dinfo->fprintf_func (dinfo->stream, "%s[", nfp_me27_28_alu_op[op]);
+
+      /* Dest operand.  */
+      if (nfp_me_is_imm_opnd10 (dst))
+       dinfo->fprintf_func (dinfo->stream, "--");
+      else
+       err = err || !nfp_me_print_opnd10 (dst, dst_bank, num_ctx,
+                                          dst_lmext, dinfo);
+
+      dinfo->fprintf_func (dinfo->stream, ", ");
+
+      /* A operand.  */
+      err = err || !nfp_me_print_opnd10 (srcA, (swap) ? 'B' : 'A',
+                                        num_ctx, src_lmext, dinfo);
+
+      dinfo->fprintf_func (dinfo->stream, "]");
+
+      if (_BF (srcB, 1, 0))
+       {
+         unsigned int n = _BTST (srcB, 1);
+         if (_BTST (srcB, 4))  /* Only for MEv28.  */
+           n += 2;
+         dinfo->fprintf_func (dinfo->stream, ", lm_addr%d[%d]", n,
+                              _BF (srcB, 3, 2));
+       }
+
+      break;
+
+    case 19:      /* cam_write.  */
+    case 27:      /* cam_write_state.  */
+      dinfo->fprintf_func (dinfo->stream, "%s[", nfp_me27_28_alu_op[op]);
+      err = err || !nfp_me_print_opnd10 (srcB, (swap) ? 'A' : 'B',
+                                        num_ctx, src_lmext, dinfo);
+      dinfo->fprintf_func (dinfo->stream, ", ");
+      if (op == 19)
+       {
+         err = err || !nfp_me_print_opnd10 (srcA, (swap) ? 'B' : 'A',
+                                            num_ctx, src_lmext, dinfo);
+         dinfo->fprintf_func (dinfo->stream, ", ");
+       }
+      dinfo->fprintf_func (dinfo->stream, "%d", (dst & 0xf));
+      break;
+
+      /* CRC.  */
+    case 18:   
+      do_close_bracket = 0;
+      dinfo->fprintf_func (dinfo->stream, "crc_%s[",
+                          _BTST (instr, 3) ? "le" : "be");
+      if (!nfp_me27_28_crc_op[_BF (instr, 7, 5)])
+       {
+         dinfo->fprintf_func (dinfo->stream, _(", <invalid CRC operator>, "));
+         err = TRUE;
+       }
+      else
+       {
+         dinfo->fprintf_func (dinfo->stream, "%s, ",
+                              nfp_me27_28_crc_op[_BF (instr, 7, 5)]);
+       }
+
+      /* Dest operand.  */
+      if (nfp_me_is_imm_opnd10 (dst))
+       dinfo->fprintf_func (dinfo->stream, "--");
+      else
+       err = err || !nfp_me_print_opnd10 (dst, dst_bank, num_ctx,
+                                          dst_lmext, dinfo);
+
+      dinfo->fprintf_func (dinfo->stream, ", ");
+
+      /* B operand.  */
+      err = err || !nfp_me_print_opnd10 (srcB, (swap) ? 'A' : 'B',
+                                        num_ctx, src_lmext, dinfo);
+
+      dinfo->fprintf_func (dinfo->stream, "]");
+      if (_BF (instr, 2, 0))
+       dinfo->fprintf_func (dinfo->stream, ", %s",
+                            nfp_me27_28_crc_bytes[_BF (instr, 2, 0)]);
+      if (_BTST (instr, 4))
+       dinfo->fprintf_func (dinfo->stream, ", bit_swap");
+      break;
+
+    default:
+      /* s += 'alu[%s, %s, %s, %s]' % (dst, srcAs, op, srcBs).  */
+      dinfo->fprintf_func (dinfo->stream, "alu[");
+
+      /* Dest operand.  */
+      if (nfp_me_is_imm_opnd10 (dst))
+       dinfo->fprintf_func (dinfo->stream, "--");
+      else
+       err = err || !nfp_me_print_opnd10 (dst, dst_bank, num_ctx,
+                                          dst_lmext, dinfo);
+      dinfo->fprintf_func (dinfo->stream, ", ");
+
+      /* A operand.  */
+      if ((op == 0) || (op == 4))      /* B only operators.  */
+       dinfo->fprintf_func (dinfo->stream, "--");
+      else
+       err = err || !nfp_me_print_opnd10 (srcA, (swap) ? 'B' : 'A',
+                                          num_ctx, src_lmext, dinfo);
+
+      if (!nfp_me27_28_alu_op[op])
+       {
+         dinfo->fprintf_func (dinfo->stream, ", <operator:0x%x>, ", op);
+         err = TRUE;
+       }
+      else
+       {
+         dinfo->fprintf_func (dinfo->stream, ", %s, ",
+                              nfp_me27_28_alu_op[op]);
+       }
+
+      /* B operand.  */
+      err = err || !nfp_me_print_opnd10 (srcB, (swap) ? 'A' : 'B',
+                                        num_ctx, src_lmext, dinfo);
+      break;
+    }
+
+  if (do_close_bracket)
+    dinfo->fprintf_func (dinfo->stream, "]");
+
+  if (nocc)
+    dinfo->fprintf_func (dinfo->stream, ", no_cc");
+  if (gpr_wrboth)
+    dinfo->fprintf_func (dinfo->stream, ", gpr_wrboth");
+  if (pred_cc)
+    dinfo->fprintf_func (dinfo->stream, ", predicate_cc");
+
+  if (err)
+    return _NFP_ERR_CONT;
+  return 0;
+}
+
+static int
+nfp_me27_28_print_immed (bfd_vma instr, unsigned int pred_cc,
+                        unsigned int dst_lmext,
+                        unsigned int gpr_wrboth,
+                        int num_ctx, struct disassemble_info *dinfo)
+{
+  unsigned int srcA = _BF (instr, 9, 0);
+  unsigned int srcB = _BF (instr, 19, 10);
+  unsigned int imm = _BF (instr, 27, 20);
+  unsigned int by = _BTST (instr, 29);
+  unsigned int wd = _BTST (instr, 30);
+  unsigned int inv = _BTST (instr, 31);
+  unsigned int byte_shift = _BF (instr, 34, 33);
+  bfd_boolean err = FALSE;
+
+  if (nfp_me_is_imm_opnd10 (srcB))
+    {
+      imm = (imm << 8) | nfp_me_imm_opnd10 (srcB);
+      if (nfp_me_is_imm_opnd10 (srcA) && (imm == 0))
+       {
+         dinfo->fprintf_func (dinfo->stream, "nop");
+         return 0;
+       }
+    }
+  else
+    {
+      imm = (imm << 8) | nfp_me_imm_opnd10 (srcA);
+    }
+
+  if (inv)
+    imm = (imm ^ 0xffff) | 0xffff0000U;
+
+  if (by)
+    {
+      dinfo->fprintf_func (dinfo->stream, "immed_b%d[", byte_shift);
+      imm &= 0xff;
+    }
+  else if (wd)
+    {
+      dinfo->fprintf_func (dinfo->stream, "immed_w%d[", (byte_shift / 2));
+      imm &= 0xffff;
+    }
+  else
+    dinfo->fprintf_func (dinfo->stream, "immed[");
+
+  /* Dest.  */
+  if (nfp_me_is_imm_opnd10 (srcA) && nfp_me_is_imm_opnd10 (srcB))
+    dinfo->fprintf_func (dinfo->stream, "--"); /* No Dest.  */
+  else if (nfp_me_is_imm_opnd10 (srcA))
+    err = err || !nfp_me_print_opnd10 (srcB, 'B', num_ctx, dst_lmext, dinfo);
+  else
+    err = err || !nfp_me_print_opnd10 (srcA, 'A', num_ctx, dst_lmext, dinfo);
+
+  dinfo->fprintf_func (dinfo->stream, ", 0x%x", imm);
+
+  if ((!by) && (!wd) && (byte_shift))
+    dinfo->fprintf_func (dinfo->stream, ", <<%d", (byte_shift * 8));
+
+  dinfo->fprintf_func (dinfo->stream, "]");
+
+  if (gpr_wrboth)
+    dinfo->fprintf_func (dinfo->stream, ", gpr_wrboth");
+  if (pred_cc)
+    dinfo->fprintf_func (dinfo->stream, ", predicate_cc");
+
+  if (err)
+    return _NFP_ERR_CONT;
+  return 0;
+}
+
+static int
+nfp_me27_28_print_ld_field (bfd_vma instr, unsigned int pred_cc,
+                           unsigned int dst_lmext, unsigned int src_lmext,
+                           unsigned int gpr_wrboth,
+                           int num_ctx, struct disassemble_info *dinfo)
+{
+  unsigned int load_cc = _BTST (instr, 34);
+  unsigned int shift = _BF (instr, 32, 28);
+  unsigned int byte_mask = _BF (instr, 27, 24);
+  unsigned int zerof = _BTST (instr, 20);
+  unsigned int swap = _BTST (instr, 19);
+  unsigned int imm_msb = _BTST (instr, 18);
+  unsigned int src = _BF (instr, 17, 10);
+  unsigned int sc = _BF (instr, 9, 8);
+  unsigned int dst = _BF (instr, 7, 0);
+  bfd_boolean err = FALSE;
+
+  if (swap)
+    {
+      unsigned int tmp = src;
+      src = dst;
+      dst = tmp;
+    }
+
+  if (zerof)
+    dinfo->fprintf_func (dinfo->stream, "ld_field_w_clr[");
+  else
+    dinfo->fprintf_func (dinfo->stream, "ld_field[");
+
+  err = err || !nfp_me_print_opnd8 (dst, (swap) ? 'B' : 'A', num_ctx,
+                                   dst_lmext, imm_msb, dinfo);
+  dinfo->fprintf_func (dinfo->stream, ", %d%d%d%d, ",
+                      _BTST (byte_mask, 3),
+                      _BTST (byte_mask, 2),
+                      _BTST (byte_mask, 1), _BTST (byte_mask, 0));
+  err = err || !nfp_me_print_opnd8 (src, (swap) ? 'A' : 'B', num_ctx,
+                                   src_lmext, imm_msb, dinfo);
+
+  if ((sc == 0) && (shift != 0))
+    dinfo->fprintf_func (dinfo->stream, ", >>rot%d", shift);
+  else if (sc == 1)
+    {
+      if (shift)
+       dinfo->fprintf_func (dinfo->stream, ", >>%d", shift);
+      else
+       dinfo->fprintf_func (dinfo->stream, ", >>indirect");
+    }
+  else if (sc == 2)
+    {
+      if (shift)
+       dinfo->fprintf_func (dinfo->stream, ", <<%d", (32 - shift));
+      else
+       dinfo->fprintf_func (dinfo->stream, ", <<indirect");
+    }
+  else if (sc == 3)
+    dinfo->fprintf_func (dinfo->stream, ", >>dbl%d", shift);
+
+  dinfo->fprintf_func (dinfo->stream, "]");
+
+  if (load_cc)
+    dinfo->fprintf_func (dinfo->stream, ", load_cc");
+  if (gpr_wrboth)
+    dinfo->fprintf_func (dinfo->stream, ", gpr_wrboth");
+  if (pred_cc)
+    dinfo->fprintf_func (dinfo->stream, ", predicate_cc");
+
+  if (err)
+    return _NFP_ERR_CONT;
+  return 0;
+}
+
+static int
+nfp_me27_28_print_ctx_arb (bfd_vma instr, struct disassemble_info *dinfo)
+{
+  unsigned int resume_addr = _BFS (instr, 40, 40, 13) | _BF (instr, 34, 22);
+  unsigned int defer = _BF (instr, 21, 20);
+  unsigned int no_load = _BTST (instr, 19);
+  unsigned int resume = _BTST (instr, 18);
+  unsigned int bpt = _BTST (instr, 17);
+  unsigned int sig_or = _BTST (instr, 16);
+  unsigned int ev_mask = _BF (instr, 15, 0);
+
+  dinfo->fprintf_func (dinfo->stream, "ctx_arb[");
+  if (bpt)
+    dinfo->fprintf_func (dinfo->stream, "bpt");
+  else if (ev_mask == 1)
+    dinfo->fprintf_func (dinfo->stream, "voluntary");
+  else if ((!no_load) && (ev_mask == 0))
+    {
+      dinfo->fprintf_func (dinfo->stream, "kill");
+      sig_or = 0;
+    }
+  else if (ev_mask == 0)
+    dinfo->fprintf_func (dinfo->stream, "--");
+  else
+    {
+      int first_print = 1;
+      unsigned int n;
+
+      for (n = 1; n < 16; n++)
+       {
+         if (!_BTST (ev_mask, n))
+           continue;
+         dinfo->fprintf_func (dinfo->stream, "%ssig%d",
+                              (first_print) ? "" : ", ", n);
+         first_print = 0;
+       }
+    }
+
+  dinfo->fprintf_func (dinfo->stream, "]");
+
+  if (sig_or)
+    dinfo->fprintf_func (dinfo->stream, ", any");
+  if (resume)
+    dinfo->fprintf_func (dinfo->stream, ", br[.%d]", resume_addr);
+  if (defer)
+    dinfo->fprintf_func (dinfo->stream, ", defer[%d]", defer);
+
+  return 0;
+}
+
+static int
+nfp_me27_28_print_local_csr (bfd_vma instr,
+                            unsigned int src_lmext,
+                            int num_ctx, struct disassemble_info *dinfo)
+{
+  unsigned int srcA = _BF (instr, 9, 0);
+  unsigned int srcB = _BF (instr, 19, 10);
+  unsigned int wr = _BTST (instr, 21);
+  unsigned int csr_num = _BF (instr, 32, 22);
+  unsigned int src = srcA;
+  char src_bank = 'A';
+  bfd_boolean err = FALSE;
+
+  if (nfp_me_is_imm_opnd10 (srcA) && !nfp_me_is_imm_opnd10 (srcB))
+    {
+      src_bank = 'B';
+      src = srcB;
+    }
+
+  /* MEv28 does not have urd/uwr.  */
+  if (csr_num == 1)
+    {
+      if (wr)
+       {
+         dinfo->fprintf_func (dinfo->stream, "uwr[*u$index%d++, ",
+                              (int) _BTST (instr, 20));
+         err = err || !nfp_me_print_opnd10 (src, src_bank, num_ctx,
+                                            src_lmext, dinfo);
+       }
+      else
+       {
+         dinfo->fprintf_func (dinfo->stream, "urd[");
+         err = err || !nfp_me_print_opnd10 (src, src_bank, num_ctx,
+                                            src_lmext, dinfo);
+         dinfo->fprintf_func (dinfo->stream, ", *u$index%d++",
+                              (int) _BTST (instr, 20));
+       }
+      dinfo->fprintf_func (dinfo->stream, "]");
+    }
+  else
+    {
+      const char *nm = NULL;
+
+      if (csr_num < ARRAY_SIZE (nfp_me27_28_mecsrs))
+       nm = nfp_me27_28_mecsrs[csr_num];
+
+      dinfo->fprintf_func (dinfo->stream, "local_csr_%s[",
+                          (wr) ? "wr" : "rd");
+      if (nm)
+       dinfo->fprintf_func (dinfo->stream, "%s", nm);
+      else
+       dinfo->fprintf_func (dinfo->stream, "0x%x", (csr_num * 4));
+
+      if (wr)
+       {
+         dinfo->fprintf_func (dinfo->stream, ", ");
+         err = err || !nfp_me_print_opnd10 (src, src_bank, num_ctx,
+                                            src_lmext, dinfo);
+       }
+      dinfo->fprintf_func (dinfo->stream, "]");
+    }
+
+  if (err)
+    return _NFP_ERR_CONT;
+  return 0;
+}
+
+static int
+nfp_me27_28_print_branch (bfd_vma instr,
+                         const char *br_inpstates[16],
+                         struct disassemble_info *dinfo)
+{
+  unsigned int br_op = _BF (instr, 4, 0);
+  unsigned int ctx_sig_state = _BF (instr, 17, 14);
+  unsigned int defer = _BF (instr, 21, 20);
+  unsigned int br_addr = _BFS (instr, 40, 40, 13) | _BF (instr, 34, 22);
+  int ret = 0;
+
+  if (!nfp_me27_28_br_ops[br_op])
+    {
+      dinfo->fprintf_func (dinfo->stream, _("<invalid branch>["));
+      ret = _NFP_ERR_CONT;
+    }
+  else
+    dinfo->fprintf_func (dinfo->stream, "%s[", nfp_me27_28_br_ops[br_op]);
+
+  switch (br_op)
+    {
+    case 16:                   /* br=ctx */
+    case 17:                   /* br!=ctx */
+    case 18:                   /* br_signal */
+    case 19:                   /* br_!signal */
+      dinfo->fprintf_func (dinfo->stream, "%d, ", ctx_sig_state);
+      break;
+    case 20:                   /* "br_inp_state" */
+    case 21:                   /* "br_!inp_state" */
+      dinfo->fprintf_func (dinfo->stream, "%s, ",
+                          br_inpstates[ctx_sig_state]);
+      break;
+    case 22:                   /* "br_cls_state" */
+    case 23:                   /* "br_!cls_state" */
+      dinfo->fprintf_func (dinfo->stream, "cls_ring%d_status, ",
+                          ctx_sig_state);
+      break;
+    default:
+      break;
+    }
+
+  dinfo->fprintf_func (dinfo->stream, ".%d]", br_addr);
+
+  if (defer)
+    dinfo->fprintf_func (dinfo->stream, ", defer[%d]", defer);
+
+  return ret;
+}
+
+static int
+nfp_me27_28_print_br_byte (bfd_vma instr,
+                          unsigned int src_lmext, int num_ctx,
+                          struct disassemble_info *dinfo)
+{
+  unsigned int srcA = _BF (instr, 7, 0);
+  unsigned int by = _BF (instr, 9, 8);
+  unsigned int srcB = _BF (instr, 17, 10);
+  unsigned int imm_msb = _BTST (instr, 18);
+  unsigned int eq = _BTST (instr, 19);
+  unsigned int defer = _BF (instr, 21, 20);
+  unsigned int br_addr = _BFS (instr, 40, 40, 13) | _BF (instr, 34, 22);
+  bfd_boolean err = FALSE;
+
+  if (eq)
+    dinfo->fprintf_func (dinfo->stream, "br=byte[");
+  else
+    dinfo->fprintf_func (dinfo->stream, "br!=byte[");
+
+  if (nfp_me_is_imm_opnd8 (srcA))
+    err = err || !nfp_me_print_opnd8 (srcB, 'B', num_ctx,
+                                     src_lmext, imm_msb, dinfo);
+  else
+    err = err || !nfp_me_print_opnd8 (srcA, 'A', num_ctx,
+                                     src_lmext, imm_msb, dinfo);
+
+  dinfo->fprintf_func (dinfo->stream, ", %d, ", by);
+
+  if (nfp_me_is_imm_opnd8 (srcA))
+    err = err || !nfp_me_print_opnd8 (srcA, 'A', num_ctx,
+                                     src_lmext, imm_msb, dinfo);
+  else
+    err = err || !nfp_me_print_opnd8 (srcB, 'B', num_ctx,
+                                     src_lmext, imm_msb, dinfo);
+
+  dinfo->fprintf_func (dinfo->stream, ", .%d]", br_addr);
+
+  if (defer)
+    dinfo->fprintf_func (dinfo->stream, ", defer[%d]", defer);
+
+  if (err)
+    return _NFP_ERR_CONT;
+  return 0;
+}
+
+static int
+nfp_me27_28_print_br_bit (bfd_vma instr, unsigned int src_lmext,
+                         int num_ctx, struct disassemble_info *dinfo)
+{
+  unsigned int srcA = _BF (instr, 7, 0);
+  unsigned int srcB = _BF (instr, 17, 10);
+  unsigned int b = _BTST (instr, 18);
+  unsigned int defer = _BF (instr, 21, 20);
+  unsigned int br_addr = _BFS (instr, 40, 40, 13) | _BF (instr, 34, 22);
+  bfd_boolean err = FALSE;
+
+  if (b)
+    dinfo->fprintf_func (dinfo->stream, "br_bset[");
+  else
+    dinfo->fprintf_func (dinfo->stream, "br_bclr[");
+
+  if (nfp_me_is_imm_opnd8 (srcA))
+    {
+      err = err
+       || !nfp_me_print_opnd8 (srcB, 'B', num_ctx, src_lmext, 0, dinfo);
+      b = (nfp_me_imm_opnd8 (srcA, 0) - 1) & 0x1f;
+    }
+  else
+    {
+      err = err
+       || !nfp_me_print_opnd8 (srcA, 'A', num_ctx, src_lmext, 0, dinfo);
+      b = (nfp_me_imm_opnd8 (srcB, 0) - 1) & 0x1f;
+    }
+
+  dinfo->fprintf_func (dinfo->stream, ", %d, .%d]", b, br_addr);
+
+  if (defer)
+    dinfo->fprintf_func (dinfo->stream, ", defer[%d]", defer);
+
+  if (err)
+    return _NFP_ERR_CONT;
+  return 0;
+}
+
+static int
+nfp_me27_28_print_br_alu (bfd_vma instr, unsigned int src_lmext,
+                         int num_ctx, struct disassemble_info *dinfo)
+{
+  unsigned int srcA = _BF (instr, 9, 0);
+  unsigned int srcB = _BF (instr, 19, 10);
+  unsigned int defer = _BF (instr, 21, 20);
+  unsigned int imm = _BF (instr, 30, 22);
+  bfd_boolean err = FALSE;
+
+  if (nfp_me_is_imm_opnd10 (srcA))
+    imm = (imm << 8) | nfp_me_imm_opnd10 (srcA);
+  else
+    imm = (imm << 8) | nfp_me_imm_opnd10 (srcB);
+
+  if (!imm)
+    dinfo->fprintf_func (dinfo->stream, "rtn[");
+  else
+    dinfo->fprintf_func (dinfo->stream, "jump[");
+
+  if (nfp_me_is_imm_opnd10 (srcA))
+    err = err || !nfp_me_print_opnd10 (srcB, 'B', num_ctx, src_lmext, dinfo);
+  else
+    err = err || !nfp_me_print_opnd10 (srcA, 'A', num_ctx, src_lmext, dinfo);
+
+  if (imm)
+    dinfo->fprintf_func (dinfo->stream, ", .%d", imm);
+
+  dinfo->fprintf_func (dinfo->stream, "]");
+
+  if (defer)
+    dinfo->fprintf_func (dinfo->stream, ", defer[%d]", defer);
+
+  if (err)
+    return _NFP_ERR_CONT;
+  return 0;
+}
+
+static int
+nfp_me27_28_print_mult (bfd_vma instr, unsigned int pred_cc,
+                       unsigned int dst_lmext, unsigned int src_lmext,
+                       unsigned int gpr_wrboth,
+                       int num_ctx, struct disassemble_info *dinfo)
+{
+  unsigned int srcA = _BF (instr, 9, 0);
+  unsigned int srcB = _BF (instr, 19, 10);
+  unsigned int mstep = _BF (instr, 22, 20);
+  char dst_bank = 'A' + _BTST (instr, 23);
+  unsigned int swap = _BTST (instr, 30);
+  unsigned int mtype = _BF (instr, 32, 31);
+  unsigned int nocc = _BTST (instr, 40);
+  bfd_boolean err = FALSE;
+
+  if (swap)
+    {
+      unsigned int tmp = srcA;
+      srcA = srcB;
+      srcB = tmp;
+    }
+
+  dinfo->fprintf_func (dinfo->stream, "mul_step[");
+
+  if (mstep >= 4)
+    err = err
+      || !nfp_me_print_opnd10 (srcA, dst_bank, num_ctx, dst_lmext, dinfo);
+  else
+    err = err || !nfp_me_print_opnd10 (srcA, (swap) ? 'B' : 'A', num_ctx,
+                                      src_lmext, dinfo);
+
+  dinfo->fprintf_func (dinfo->stream, ", ");
+
+  if (mstep >= 4)
+    dinfo->fprintf_func (dinfo->stream, "--");
+  else
+    err = err || !nfp_me_print_opnd10 (srcB, (swap) ? 'A' : 'B', num_ctx,
+                                      src_lmext, dinfo);
+
+  dinfo->fprintf_func (dinfo->stream, "], %s", nfp_me27_28_mult_types[mtype]);
+  if (mtype > 0)
+    {
+      const char *s = nfp_me27_28_mult_steps[mstep];
+      if (!s)
+       {
+         s = "<invalid mul_step>";
+         err = TRUE;
+       }
+      dinfo->fprintf_func (dinfo->stream, "_%s", s);
+    }
+
+  if (nocc)
+    dinfo->fprintf_func (dinfo->stream, ", no_cc");
+  if (gpr_wrboth)
+    dinfo->fprintf_func (dinfo->stream, ", gpr_wrboth");
+  if (pred_cc)
+    dinfo->fprintf_func (dinfo->stream, ", predicate_cc");
+
+  if (err)
+    return _NFP_ERR_CONT;
+  return 0;
+}
+
+static int
+_nfp_cmp_mnmnc (const void *arg_a, const void *arg_b)
+{
+  const nfp_cmd_mnemonic *a = arg_a;
+  const nfp_cmd_mnemonic *b = arg_b;
+
+  if (a->cpp_target != b->cpp_target)
+    return (a->cpp_target > b->cpp_target) - (a->cpp_target < b->cpp_target);
+
+  if (a->cpp_action != b->cpp_action)
+    return (a->cpp_action > b->cpp_action) - (a->cpp_action < b->cpp_action);
+
+  return (a->cpp_token > b->cpp_token) - (a->cpp_token < b->cpp_token);
+}
+
+static const char *
+nfp_me_find_mnemonic (unsigned int cpp_tgt, unsigned int cpp_act,
+                     unsigned int cpp_tok, unsigned int cpp_len,
+                     const nfp_cmd_mnemonic * mnemonics,
+                     size_t mnemonics_cnt)
+{
+  nfp_cmd_mnemonic search_key = { cpp_tgt, cpp_act, cpp_tok, 0, 0, NULL };
+  const nfp_cmd_mnemonic *cmd = NULL;
+
+  cmd = bsearch (&search_key, mnemonics, mnemonics_cnt,
+                sizeof (nfp_cmd_mnemonic), _nfp_cmp_mnmnc);
+
+  if (!cmd)
+    return NULL;
+
+  /* Make sure we backtrack to the first entry that still matches the three
+     bsearched fields - then we simply iterate and compare cpp_len.  */
+  while ((cmd > mnemonics) && (_nfp_cmp_mnmnc (&cmd[-1], &search_key) == 0))
+    --cmd;
+
+  /* Now compare by cpp_len and make sure we stay in range.  */
+  for (; (cmd < (mnemonics + mnemonics_cnt))
+       && (_nfp_cmp_mnmnc (cmd, &search_key) == 0); ++cmd)
+    {
+      if ((cpp_len & cmd->len_mask) == cmd->len_fixed)
+       return cmd->mnemonic;
+    }
+
+  return NULL;
+}
+
+/* NFP-32xx (ME Version 2.7).  */
+
+static int
+nfp_me27_print_cmd (bfd_vma instr, int third_party_32bit,
+                   int num_ctx, struct disassemble_info *dinfo)
+{
+  unsigned int srcA = _BF (instr, 7, 0);
+  unsigned int ctxswap_defer = _BF (instr, 9, 8);
+  unsigned int srcB = _BF (instr, 17, 10);
+  unsigned int token = _BF (instr, 19, 18);
+  unsigned int xfer = _BFS (instr, 40, 40, 5) | _BF (instr, 24, 20);
+  unsigned int cpp_len = _BF (instr, 27, 25);
+  unsigned int sig = _BF (instr, 31, 28);
+  unsigned int tgtcmd = _BF (instr, 38, 32);
+  unsigned int indref = _BTST (instr, 41);
+  unsigned int mode = _BF (instr, 44, 42);
+
+  bfd_boolean err = FALSE;
+  int cpp_target = -1;
+  int cpp_action = -1;
+  const char *mnemonic = NULL;
+  unsigned int imm;
+  unsigned int valBA;
+  int visswap = ((mode == 1) || (mode == 3));
+
+  imm = (sig << 10) | (cpp_len << 7) | ((xfer & 0x1f) << 2) | token;
+  valBA = (srcB << 8) | srcA;
+
+  if (mode == 6)
+    {
+      token = 0;
+      sig = 0;
+      xfer = 0;
+    }
+
+  /* Convert tgtcmd to action/token tuple.  */
+  if (_BF (tgtcmd, 6, 5) == 0x0)
+    {
+      switch (_BF (tgtcmd, 4, 2))
+       {
+       case 0:
+         cpp_target = NFP_3200_CPPTGT_CAP;
+         dinfo->fprintf_func (dinfo->stream, "cap[");
+         break;
+       case 1:
+         cpp_target = NFP_3200_CPPTGT_MSF0;
+         dinfo->fprintf_func (dinfo->stream, "msf0[");
+         break;
+       case 2:
+         cpp_target = NFP_3200_CPPTGT_MSF1;
+         dinfo->fprintf_func (dinfo->stream, "msf1[");
+         break;
+       case 3:
+         cpp_target = NFP_3200_CPPTGT_PCIE;
+         dinfo->fprintf_func (dinfo->stream, "pcie[");
+         break;
+       case 4:
+         cpp_target = NFP_3200_CPPTGT_HASH;
+         break;
+       case 5:
+         cpp_target = NFP_3200_CPPTGT_CRYPTO;
+         dinfo->fprintf_func (dinfo->stream, "crypto[");
+         break;
+       case 6:
+         cpp_target = NFP_3200_CPPTGT_ARM;
+         dinfo->fprintf_func (dinfo->stream, "arm[");
+         break;
+       case 7:
+         cpp_target = NFP_3200_CPPTGT_CT;
+         dinfo->fprintf_func (dinfo->stream, "ct[");
+         break;
+       }
+      cpp_action = _BF (tgtcmd, 1, 0);
+    }
+  else
+    {
+      switch (_BF (tgtcmd, 6, 4))
+       {
+       case 2:
+         cpp_target = NFP_3200_CPPTGT_GS;
+         dinfo->fprintf_func (dinfo->stream, "scratch[");
+         break;
+       case 3:
+         cpp_target = NFP_3200_CPPTGT_QDR;     /* A.k.a. SRAM.  */
+         dinfo->fprintf_func (dinfo->stream, "sram[");
+         break;
+       case 4:
+       case 5:
+         cpp_target = NFP_3200_CPPTGT_MU;
+         dinfo->fprintf_func (dinfo->stream, "mem[");
+         break;
+       case 6:
+       case 7:
+         cpp_target = NFP_3200_CPPTGT_CLS;
+         dinfo->fprintf_func (dinfo->stream, "cls[");
+         break;
+       }
+      cpp_action = _BF (tgtcmd, 3, 0);
+    }
+
+  if (cpp_target < 0)
+    {
+      dinfo->fprintf_func (dinfo->stream, _("<invalid cmd target %d:%d:%d>[]"),
+                          cpp_target, cpp_action, token);
+      return _NFP_ERR_CONT;
+    }
+
+  mnemonic = nfp_me_find_mnemonic (cpp_target, cpp_action, token, cpp_len,
+                                  nfp_me27_mnemonics,
+                                  ARRAY_SIZE (nfp_me27_mnemonics));
+
+  if (!mnemonic)
+    {
+      dinfo->fprintf_func (dinfo->stream, _("<invalid cmd action %d:%d:%d>[]"),
+                          cpp_target, cpp_action, token);
+      return _NFP_ERR_CONT;
+    }
+
+  if (cpp_target == NFP_3200_CPPTGT_HASH)
+    {
+      dinfo->fprintf_func (dinfo->stream, "%s[$xfer_%d, %d",
+                          mnemonic, xfer, cpp_len);
+      goto print_opt_toks;
+    }
+
+  dinfo->fprintf_func (dinfo->stream, "%s, ", mnemonic);
+
+  if (visswap)
+    {
+      unsigned int tmp = srcA;
+      srcA = srcB;
+      srcB = tmp;
+    }
+
+  switch (mode)
+    {
+    case 0:                    /* (A << 8) + B.  */
+    case 1:                    /* (B << 8) + A.  */
+      dinfo->fprintf_func (dinfo->stream, "$xfer_%d, ", xfer);
+      err = err
+       || !nfp_me_print_opnd8 (srcA, 'A' + visswap, num_ctx, 0, 0, dinfo);
+      dinfo->fprintf_func (dinfo->stream, ", <<8, ");
+      err = err
+       || !nfp_me_print_opnd8 (srcB, 'B' - visswap, num_ctx, 0, 0, dinfo);
+      dinfo->fprintf_func (dinfo->stream, ", %d", (cpp_len + 1));
+      break;
+    case 2:                    /* Accelerated 3rd party (A[ << 8]) + B.  */
+    case 3:                    /* Accelerated 3rd party (B[ << 8]) + A.  */
+      dinfo->fprintf_func (dinfo->stream, "0x%x, ", (indref << 6) | xfer);
+      err = err
+       || !nfp_me_print_opnd8 (srcA, 'A' + visswap, num_ctx, 0, 0, dinfo);
+      if (third_party_32bit)
+       dinfo->fprintf_func (dinfo->stream, ", ");
+      else
+       dinfo->fprintf_func (dinfo->stream, ", <<8, ");
+      err = err
+       || !nfp_me_print_opnd8 (srcB, 'B' - visswap, num_ctx, 0, 0, dinfo);
+      dinfo->fprintf_func (dinfo->stream, ", %d", (cpp_len + 1));
+      break;
+    case 4:                    /* A + B.  */
+      dinfo->fprintf_func (dinfo->stream, "$xfer_%d, ", xfer);
+      err = err || !nfp_me_print_opnd8 (srcA, 'A', num_ctx, 0, 0, dinfo);
+      dinfo->fprintf_func (dinfo->stream, ", ");
+      err = err || !nfp_me_print_opnd8 (srcB, 'B', num_ctx, 0, 0, dinfo);
+      dinfo->fprintf_func (dinfo->stream, ", %d", (cpp_len + 1));
+      break;
+    case 5:                    /* Immediate address.  */
+      dinfo->fprintf_func (dinfo->stream, "$xfer_%d, 0x%x, %d", xfer, valBA,
+                          (cpp_len + 1));
+      break;
+    case 6:                    /* Immediate address and data.  */
+      dinfo->fprintf_func (dinfo->stream, "0x%x, 0x%x", valBA, imm);
+      break;
+    case 7:                    /* Immediate data.  */
+      dinfo->fprintf_func (dinfo->stream, "0x%x, --, %d",
+                          ((xfer << 16) | valBA), (cpp_len + 1));
+      break;
+    }
+
+ print_opt_toks:
+  dinfo->fprintf_func (dinfo->stream, "]");
+
+  if (indref && (mode != 2) && (mode != 3))
+    dinfo->fprintf_func (dinfo->stream, ", indirect_ref");
+
+  if (ctxswap_defer != 3)
+    {
+      dinfo->fprintf_func (dinfo->stream, ", ctx_swap[");
+      if (sig)
+       dinfo->fprintf_func (dinfo->stream, "sig%d]", sig);
+      else
+       dinfo->fprintf_func (dinfo->stream, "--]");
+
+      if (ctxswap_defer != 0)
+       dinfo->fprintf_func (dinfo->stream, ", defer[%d]", ctxswap_defer);
+    }
+  else if (sig)
+    dinfo->fprintf_func (dinfo->stream, ", sig_done[sig%d]", sig);
+
+  if (err)
+    return _NFP_ERR_CONT;
+  return 0;
+}
+
+static int
+nfp_me27_print_alu_shf (bfd_vma instr, int num_ctx,
+                       struct disassemble_info *dinfo)
+{
+  return nfp_me27_28_print_alu_shf (instr, 0, 0, 0, 0, num_ctx, dinfo);
+}
+
+static int
+nfp_me27_print_alu (bfd_vma instr, int num_ctx,
+                   struct disassemble_info *dinfo)
+{
+  return nfp_me27_28_print_alu_shf (instr, 0, 0, 0, 0, num_ctx, dinfo);
+}
+
+static int
+nfp_me27_print_immed (bfd_vma instr, int num_ctx,
+                     struct disassemble_info *dinfo)
+{
+  return nfp_me27_28_print_immed (instr, 0, 0, 0, num_ctx, dinfo);
+}
+
+static int
+nfp_me27_print_ld_field (bfd_vma instr, int num_ctx,
+                        struct disassemble_info *dinfo)
+{
+  return nfp_me27_28_print_ld_field (instr, 0, 0, 0, 0, num_ctx, dinfo);
+}
+
+static int
+nfp_me27_print_ctx_arb (bfd_vma instr, struct disassemble_info *dinfo)
+{
+  return nfp_me27_28_print_ctx_arb (instr, dinfo);
+}
+
+static int
+nfp_me27_print_local_csr (bfd_vma instr, int num_ctx,
+                         struct disassemble_info *dinfo)
+{
+  return nfp_me27_28_print_local_csr (instr, 0, num_ctx, dinfo);
+}
+
+static int
+nfp_me27_print_branch (bfd_vma instr, struct disassemble_info *dinfo)
+{
+  return nfp_me27_28_print_branch (instr, nfp_me27_br_inpstates, dinfo);
+}
+
+static int
+nfp_me27_print_br_byte (bfd_vma instr, int num_ctx,
+                       struct disassemble_info *dinfo)
+{
+  return nfp_me27_28_print_br_byte (instr, 0, num_ctx, dinfo);
+}
+
+static int
+nfp_me27_print_br_bit (bfd_vma instr, int num_ctx,
+                      struct disassemble_info *dinfo)
+{
+  return nfp_me27_28_print_br_bit (instr, 0, num_ctx, dinfo);
+}
+
+static int
+nfp_me27_print_br_alu (bfd_vma instr, int num_ctx,
+                      struct disassemble_info *dinfo)
+{
+  return nfp_me27_28_print_br_alu (instr, 0, num_ctx, dinfo);
+}
+
+static int
+nfp_me27_print_mult (bfd_vma instr, int num_ctx,
+                    struct disassemble_info *dinfo)
+{
+  return nfp_me27_28_print_mult (instr, 0, 0, 0, 0, num_ctx, dinfo);
+}
+
+/*NFP-6xxx/4xxx (ME Version 2.8).  */
+
+static int
+nfp_me28_print_cmd (bfd_vma instr, int third_party_32bit,
+                   int num_ctx, struct disassemble_info *dinfo)
+{
+  unsigned int srcA = _BF (instr, 7, 0);
+  unsigned int ctxswap_defer = _BF (instr, 9, 8);
+  unsigned int srcB = _BF (instr, 17, 10);
+  unsigned int token = _BF (instr, 19, 18);
+  unsigned int xfer = _BFS (instr, 40, 40, 5) | _BF (instr, 24, 20);
+  unsigned int cpp_len = _BF (instr, 27, 25);
+  unsigned int sig = _BF (instr, 31, 28);
+  unsigned int tgtcmd = _BF (instr, 38, 32);
+  unsigned int indref = _BTST (instr, 41);
+  unsigned int mode = _BF (instr, 44, 42);
+
+  bfd_boolean err = FALSE;
+  int cpp_target = -1;
+  int cpp_action = -1;
+  const char *mnemonic = NULL;
+  unsigned int imm;
+  unsigned int valBA;
+  int visswap = ((mode == 1) || (mode == 3));
+
+  imm = (sig << 10) | (cpp_len << 7) | ((xfer & 0x1f) << 2) | token;
+  valBA = (srcB << 8) | srcA;
+
+  if (mode == 6)
+    {
+      token = 0;
+      sig = 0;
+      xfer = 0;
+    }
+
+  /* Convert tgtcmd to action/token tuple.  */
+  if (_BF (tgtcmd, 6, 5) == 0x0)
+    {
+      switch (_BF (tgtcmd, 4, 2))
+       {
+       case 0:
+         cpp_target = NFP_6000_CPPTGT_ILA;
+         dinfo->fprintf_func (dinfo->stream, "ila[");
+         break;
+       case 1:
+         cpp_target = NFP_6000_CPPTGT_NBI;
+         dinfo->fprintf_func (dinfo->stream, "nbi[");
+         break;
+       case 3:
+         cpp_target = NFP_6000_CPPTGT_PCIE;
+         dinfo->fprintf_func (dinfo->stream, "pcie[");
+         break;
+       case 5:
+         cpp_target = NFP_6000_CPPTGT_CRYPTO;
+         dinfo->fprintf_func (dinfo->stream, "crypto[");
+         break;
+       case 6:
+         cpp_target = NFP_6000_CPPTGT_ARM;
+         dinfo->fprintf_func (dinfo->stream, "arm[");
+         break;
+       case 7:
+         cpp_target = NFP_6000_CPPTGT_CTXPB;
+         dinfo->fprintf_func (dinfo->stream, "ct[");
+         break;
+       }
+      cpp_action = _BF (tgtcmd, 1, 0);
+    }
+  else
+    {
+      /* One bit overlap between "t" and "a" fields, for sram it's "t" and
+        for mem/cls it's "a".  */
+      cpp_action = _BF (tgtcmd, 4, 0);
+      switch (_BF (tgtcmd, 6, 4))
+       {
+       case 3:
+         cpp_target = NFP_6000_CPPTGT_VQDR;
+         cpp_action = _BF (tgtcmd, 3, 0);
+         dinfo->fprintf_func (dinfo->stream, "sram[");
+         break;
+       case 4:
+       case 5:
+         cpp_target = NFP_6000_CPPTGT_MU;
+         dinfo->fprintf_func (dinfo->stream, "mem[");
+         break;
+       case 6:
+       case 7:
+         cpp_target = NFP_6000_CPPTGT_CLS;
+         dinfo->fprintf_func (dinfo->stream, "cls[");
+         break;
+       }
+    }
+
+  if (cpp_target < 0)
+    {
+      dinfo->fprintf_func (dinfo->stream, _("<invalid cmd target %d:%d:%d>[]"),
+                          cpp_target, cpp_action, token);
+      return _NFP_ERR_CONT;
+    }
+
+  mnemonic = nfp_me_find_mnemonic (cpp_target, cpp_action, token, cpp_len,
+                                  nfp_me28_mnemonics,
+                                  ARRAY_SIZE (nfp_me28_mnemonics));
+
+  if (!mnemonic)
+    {
+      dinfo->fprintf_func (dinfo->stream, _("<invalid cmd action %d:%d:%d>[]"),
+                          cpp_target, cpp_action, token);
+      return _NFP_ERR_CONT;
+    }
+
+  dinfo->fprintf_func (dinfo->stream, "%s, ", mnemonic);
+
+  if (visswap)
+    {
+      unsigned int tmp = srcA;
+      srcA = srcB;
+      srcB = tmp;
+    }
+
+  switch (mode)
+    {
+    case 0:                    /* (A << 8) + B.  */
+    case 1:                    /* (B << 8) + A.  */
+      dinfo->fprintf_func (dinfo->stream, "$xfer_%d, ", xfer);
+      err = err
+       || !nfp_me_print_opnd8 (srcA, 'A' + visswap, num_ctx, 0, 0, dinfo);
+      dinfo->fprintf_func (dinfo->stream, ", <<8, ");
+      err = err
+       || !nfp_me_print_opnd8 (srcB, 'B' - visswap, num_ctx, 0, 0, dinfo);
+      dinfo->fprintf_func (dinfo->stream, ", %d", (cpp_len + 1));
+      break;
+    case 2:                    /* Accelerated 3rd party (A[ << 8]) + B.  */
+    case 3:                    /* Accelerated 3rd party (B[ << 8]) + A.  */
+      dinfo->fprintf_func (dinfo->stream, "0x%x, ", (indref << 6) | xfer);
+      err = err
+       || !nfp_me_print_opnd8 (srcA, 'A' + visswap, num_ctx, 0, 0, dinfo);
+      if (third_party_32bit)
+       dinfo->fprintf_func (dinfo->stream, ", ");
+      else
+       dinfo->fprintf_func (dinfo->stream, ", <<8, ");
+      err = err
+       || !nfp_me_print_opnd8 (srcB, 'B' - visswap, num_ctx, 0, 0, dinfo);
+      dinfo->fprintf_func (dinfo->stream, ", %d", (cpp_len + 1));
+      break;
+    case 4:                    /* A + B.  */
+      dinfo->fprintf_func (dinfo->stream, "$xfer_%d, ", xfer);
+      err = err || !nfp_me_print_opnd8 (srcA, 'A', num_ctx, 0, 0, dinfo);
+      dinfo->fprintf_func (dinfo->stream, ", ");
+      err = err || !nfp_me_print_opnd8 (srcB, 'B', num_ctx, 0, 0, dinfo);
+      dinfo->fprintf_func (dinfo->stream, ", %d", (cpp_len + 1));
+      break;
+    case 5:                    /* Immediate address.  */
+      dinfo->fprintf_func (dinfo->stream, "$xfer_%d, 0x%x, %d", xfer, valBA,
+                          (cpp_len + 1));
+      break;
+    case 6:                    /* Immediate address and data.  */
+      dinfo->fprintf_func (dinfo->stream, "0x%x, 0x%x", valBA, imm);
+      break;
+    case 7:                    /* Immediate data.  */
+      dinfo->fprintf_func (dinfo->stream, "0x%x, --, %d",
+                          ((xfer << 16) | valBA), (cpp_len + 1));
+      break;
+    }
+
+  dinfo->fprintf_func (dinfo->stream, "]");
+
+  if (indref && (mode != 2) && (mode != 3))
+    dinfo->fprintf_func (dinfo->stream, ", indirect_ref");
+
+  if (ctxswap_defer != 3)
+    {
+      dinfo->fprintf_func (dinfo->stream, ", ctx_swap[");
+      if (sig)
+       dinfo->fprintf_func (dinfo->stream, "sig%d]", sig);
+      else
+       dinfo->fprintf_func (dinfo->stream, "--]");
+
+      if (ctxswap_defer != 0)
+       dinfo->fprintf_func (dinfo->stream, ", defer[%d]", ctxswap_defer);
+    }
+  else if (sig)
+    dinfo->fprintf_func (dinfo->stream, ", sig_done[sig%d]", sig);
+
+  if (err)
+    return _NFP_ERR_CONT;
+  return 0;
+}
+
+static int
+nfp_me28_print_alu_shf (bfd_vma instr, int num_ctx,
+                       struct disassemble_info *dinfo)
+{
+  unsigned int gpr_wrboth = _BTST (instr, 41);
+  unsigned int src_lmext = _BTST (instr, 42);
+  unsigned int dst_lmext = _BTST (instr, 43);
+  unsigned int pred_cc = _BTST (instr, 44);
+
+  return nfp_me27_28_print_alu_shf (instr, pred_cc, dst_lmext,
+                                   src_lmext, gpr_wrboth, num_ctx, dinfo);
+}
+
+static int
+nfp_me28_print_alu (bfd_vma instr, int num_ctx,
+                   struct disassemble_info *dinfo)
+{
+  unsigned int gpr_wrboth = _BTST (instr, 41);
+  unsigned int src_lmext = _BTST (instr, 42);
+  unsigned int dst_lmext = _BTST (instr, 43);
+  unsigned int pred_cc = _BTST (instr, 44);
+
+  return nfp_me27_28_print_alu (instr, pred_cc, dst_lmext, src_lmext,
+                               gpr_wrboth, num_ctx, dinfo);
+}
+
+static int
+nfp_me28_print_immed (bfd_vma instr, int num_ctx,
+                     struct disassemble_info *dinfo)
+{
+  unsigned int gpr_wrboth = _BTST (instr, 41);
+  unsigned int dst_lmext = _BTST (instr, 43);
+  unsigned int pred_cc = _BTST (instr, 44);
+
+  return nfp_me27_28_print_immed (instr, pred_cc, dst_lmext, gpr_wrboth,
+                                 num_ctx, dinfo);
+}
+
+static int
+nfp_me28_print_ld_field (bfd_vma instr, int num_ctx,
+                        struct disassemble_info *dinfo)
+{
+  unsigned int gpr_wrboth = _BTST (instr, 41);
+  unsigned int src_lmext = _BTST (instr, 42);
+  unsigned int dst_lmext = _BTST (instr, 43);
+  unsigned int pred_cc = _BTST (instr, 44);
+
+  return nfp_me27_28_print_ld_field (instr, pred_cc, dst_lmext,
+                                    src_lmext, gpr_wrboth, num_ctx, dinfo);
+}
+
+static int
+nfp_me28_print_ctx_arb (bfd_vma instr, struct disassemble_info *dinfo)
+{
+  return nfp_me27_28_print_ctx_arb (instr, dinfo);
+}
+
+static int
+nfp_me28_print_local_csr (bfd_vma instr, int num_ctx,
+                         struct disassemble_info *dinfo)
+{
+  unsigned int src_lmext = _BTST (instr, 42);
+
+  return nfp_me27_28_print_local_csr (instr, src_lmext, num_ctx, dinfo);
+}
+
+static int
+nfp_me28_print_branch (bfd_vma instr, struct disassemble_info *dinfo)
+{
+  return nfp_me27_28_print_branch (instr, nfp_me28_br_inpstates, dinfo);
+}
+
+static int
+nfp_me28_print_br_byte (bfd_vma instr, int num_ctx,
+                       struct disassemble_info *dinfo)
+{
+  unsigned int src_lmext = _BTST (instr, 42);
+  return nfp_me27_28_print_br_byte (instr, src_lmext, num_ctx, dinfo);
+}
+
+static int
+nfp_me28_print_br_bit (bfd_vma instr, int num_ctx,
+                      struct disassemble_info *dinfo)
+{
+  unsigned int src_lmext = _BTST (instr, 42);
+  return nfp_me27_28_print_br_bit (instr, src_lmext, num_ctx, dinfo);
+}
+
+static int
+nfp_me28_print_br_alu (bfd_vma instr, int num_ctx,
+                      struct disassemble_info *dinfo)
+{
+  unsigned int src_lmext = _BTST (instr, 42);
+  return nfp_me27_28_print_br_alu (instr, src_lmext, num_ctx, dinfo);
+}
+
+static int
+nfp_me28_print_mult (bfd_vma instr, int num_ctx,
+                    struct disassemble_info *dinfo)
+{
+  unsigned int gpr_wrboth = _BTST (instr, 41);
+  unsigned int src_lmext = _BTST (instr, 42);
+  unsigned int dst_lmext = _BTST (instr, 43);
+  unsigned int pred_cc = _BTST (instr, 44);
+
+  return nfp_me27_28_print_mult (instr, pred_cc, dst_lmext, src_lmext,
+                                gpr_wrboth, num_ctx, dinfo);
+}
+
+static bfd_boolean
+init_nfp3200_priv (nfp_priv_data * priv, struct disassemble_info *dinfo)
+{
+  Elf_Internal_Shdr *sec = NULL;
+  Elf_Nfp_MeConfig mecfg_ent;
+  unsigned char buffer[sizeof (Elf_Nfp_MeConfig)];
+  file_ptr roff = 0;
+  unsigned int sec_cnt = 0;
+  unsigned int sec_idx;
+  size_t menum_linear = 0;
+
+  if (!dinfo->section)
+    /* No section info, will use default values.  */
+    return TRUE;
+
+  sec_cnt = elf_numsections (dinfo->section->owner);
+
+  /* Find the MECONFIG section.  It's index is also in e_flags, but it has
+     a unique SHT and we'll use that.  */
+  for (sec_idx = 0; sec_idx < sec_cnt; sec_idx++)
+    {
+      sec = elf_elfsections (dinfo->section->owner)[sec_idx];
+
+      if (sec->sh_type == SHT_NFP_MECONFIG)
+       break;
+    }
+
+  if (sec_idx == sec_cnt)
+    {
+      dinfo->fprintf_func (dinfo->stream, _("File has no ME-Config section."));
+      return FALSE;
+    }
+
+  for (roff = 0; (bfd_size_type) roff < sec->sh_size;
+       roff += sec->sh_entsize, menum_linear++)
+    {
+      nfp_priv_mecfg *mecfg;
+      int isl = menum_linear >> 3;
+      int menum = menum_linear & 7;
+
+      if (menum_linear >= 40)
+       {
+         dinfo->fprintf_func (dinfo->stream,
+                              _("File has invalid ME-Config section."));
+         return FALSE;
+       }
+
+      mecfg = &priv->mecfgs[isl][menum][1];
+
+      if (!_bfd_generic_get_section_contents (dinfo->section->owner,
+                                             sec->bfd_section, buffer,
+                                             roff, sizeof (buffer)))
+       return FALSE;
+
+      mecfg_ent.ctx_enables = bfd_getl32 (buffer + offsetof (Elf_Nfp_MeConfig,
+                                                            ctx_enables));
+      mecfg_ent.misc_control = bfd_getl32 (buffer
+       + offsetof (Elf_Nfp_MeConfig, misc_control));
+
+      mecfg->ctx4_mode = _BTST (mecfg_ent.ctx_enables, 31);
+      mecfg->addr_3rdparty32 = _BTST (mecfg_ent.misc_control, 4);
+      mecfg->scs_cnt = _BTST (mecfg_ent.misc_control, 2);
+    }
+
+  return TRUE;
+}
+
+static bfd_boolean
+init_nfp6000_mecsr_sec (nfp_priv_data * priv, Elf_Internal_Shdr * sec,
+                       int is_for_text, struct disassemble_info *dinfo)
+{
+  Elf_Nfp_InitRegEntry ireg;
+  unsigned char buffer[sizeof (Elf_Nfp_InitRegEntry)];
+  file_ptr ireg_off = 0;
+  size_t isl, menum;
+
+  if (sec->sh_entsize != sizeof (ireg))
+    return FALSE;
+
+  isl = SHI_NFP_IREG_ISLAND (sec->sh_info);
+
+  /* For these sections we know that the address will only be 32 bits
+     so we only need cpp_offset_lo.
+     Address is encoded as follows:
+     <31:30> 0
+     <29:24> island (already got this from sh_info)
+     <23:17> 0
+     <16:16> XferCsrRegSel (1 for these sections)
+     <15:14> 0
+     <13:10> DataMasterID (MEnum = this - 4)
+     <9:2> register (index)
+     <1:0> 0b0 (register byte address if appened to the previous field).  */
+  for (ireg_off = 0; (bfd_size_type) ireg_off < sec->sh_size;
+       ireg_off += sec->sh_entsize)
+    {
+      uint32_t csr_off;
+      nfp_priv_mecfg *mecfg;
+
+      if (!_bfd_generic_get_section_contents (dinfo->section->owner,
+                                             sec->bfd_section, buffer,
+                                             ireg_off, sizeof (buffer)))
+       return FALSE;
+
+      ireg.cpp_offset_lo = bfd_getl32 (buffer
+       + offsetof (Elf_Nfp_InitRegEntry, cpp_offset_lo));
+      ireg.mask = bfd_getl32 (buffer + offsetof (Elf_Nfp_InitRegEntry, mask));
+      ireg.val = bfd_getl32 (buffer + offsetof (Elf_Nfp_InitRegEntry, val));
+      ireg.w0 = bfd_getl32 (buffer + offsetof (Elf_Nfp_InitRegEntry, w0));
+
+      if (NFP_IREG_ENTRY_WO_NLW (ireg.w0))
+       continue;
+
+      /* Only consider entries that are permanent for runtime.  */
+      if ((NFP_IREG_ENTRY_WO_VTP (ireg.w0) != NFP_IREG_VTP_CONST)
+         && (NFP_IREG_ENTRY_WO_VTP (ireg.w0) != NFP_IREG_VTP_FORCE))
+       continue;
+
+      menum = _BF (ireg.cpp_offset_lo, 13, 10) - 4;
+      csr_off = _BF (ireg.cpp_offset_lo, 9, 0);
+
+      mecfg = &priv->mecfgs[isl][menum][is_for_text];
+      switch (csr_off)
+       {
+       case _NFP_ME27_28_CSR_CTX_ENABLES:
+         mecfg->ctx4_mode = _BTST (ireg.val, 31);
+         break;
+       case _NFP_ME27_28_CSR_MISC_CONTROL:
+         mecfg->addr_3rdparty32 = _BTST (ireg.val, 4);
+         mecfg->scs_cnt = _BTST (ireg.val, 2);
+         break;
+       default:
+         break;
+       }
+    }
+
+  return TRUE;
+}
+
+static bfd_boolean
+init_nfp6000_priv (nfp_priv_data * priv, struct disassemble_info *dinfo)
+{
+  int mecfg_orders[64][2];
+  size_t isl;
+  unsigned int sec_cnt = 0;
+  unsigned int sec_idx;
+  int is_for_text;
+
+  memset (mecfg_orders, -1, sizeof (mecfg_orders));
+
+  if (!dinfo->section)
+    /* No section info, will use default values.  */
+    return TRUE;
+
+  sec_cnt = elf_numsections (dinfo->section->owner);
+
+  /* Go through all MECSR init sections to find ME configs.  */
+  for (sec_idx = 0; sec_idx < sec_cnt; sec_idx++)
+    {
+      Elf_Internal_Shdr *sec;
+      int sec_order;
+
+      sec = elf_elfsections (dinfo->section->owner)[sec_idx];
+      sec_order = (int) SHI_NFP_IREG_ORDER (sec->sh_info);
+
+      is_for_text = (sec->sh_flags & (SHF_NFP_INIT | SHF_NFP_INIT2)) == 0;
+
+      /* If we have an init2 section, that is the one that applies to the
+        ME when executing init code.  So we make it's order higher than
+        any plain init section.  */
+      if (sec->sh_flags & SHF_NFP_INIT2)
+       sec_order += SHI_NFP_IREG_ORDER (~0U) + 1;
+
+      if (sec->sh_type != SHT_NFP_INITREG)
+       continue;
+      if (!SHI_NFP_6000_IS_IREG_MECSR (sec->sh_info))
+       continue;
+
+      isl = SHI_NFP_IREG_ISLAND (sec->sh_info);
+      if ((sec_order < mecfg_orders[isl][is_for_text]))
+       /* Lower order or transient, skip it.  */
+       continue;
+
+      mecfg_orders[isl][is_for_text] = sec_order;
+
+      if (!init_nfp6000_mecsr_sec (priv, sec, is_for_text, dinfo))
+       {
+         dinfo->fprintf_func (dinfo->stream,
+                              _("Error processing section %u "), sec_idx);
+         return FALSE;
+       }
+    }
+
+  return TRUE;
+}
+
+static int
+parse_disassembler_options (nfp_opts * opts, struct disassemble_info *dinfo)
+{
+  const char *option;
+
+  if (dinfo->disassembler_options == NULL)
+    return 0;
+
+  FOR_EACH_DISASSEMBLER_OPTION (option, dinfo->disassembler_options)
+  {
+    if (disassembler_options_cmp (option, "no-pc") == 0)
+      opts->show_pc = 0;
+    else if (disassembler_options_cmp (option, "ctx4") == 0)
+      {
+       if (!opts->ctx_mode)
+         opts->ctx_mode = 4;
+      }
+    else if (disassembler_options_cmp (option, "ctx8") == 0)
+      opts->ctx_mode = 8;
+    else
+      {
+       dinfo->fprintf_func (dinfo->stream, _("Invalid NFP option: %s"), option);
+       return _NFP_ERR_STOP;
+      }
+  }
+
+  return 0;
+}
+
+/* Called on first disassembly attempt so that dinfo->section is valid
+   so that we can get the bfd owner to find ME configs.  */
+
+static nfp_priv_data *
+init_nfp_priv (struct disassemble_info *dinfo)
+{
+  nfp_priv_data *priv;
+  int ret = FALSE;
+
+  if (dinfo->private_data)
+    return (nfp_priv_data *) dinfo->private_data;
+
+#if 0  /* Right now only section-related info is kept in priv.
+         So don't even calloc it if we don't need it.  */
+  if (!dinfo->section)
+     return NULL;
+#endif
+
+  /* Alloc with no free, seems to be either this or a static global variable
+     and this at least keeps a large struct unallocated until really needed.  */
+  priv = calloc (1, sizeof (*priv));
+  if (!priv)
+    return NULL;
+
+  switch (dinfo->mach)
+    {
+    case E_NFP_MACH_3200:
+      ret = init_nfp3200_priv (priv, dinfo);
+      break;
+    case E_NFP_MACH_6000:
+      ret = init_nfp6000_priv (priv, dinfo);
+      break;
+    }
+
+  if (!ret)
+    {
+      free (priv);
+      return NULL;
+    }
+
+  dinfo->private_data = priv;
+  return priv;
+}
+
+static int
+_print_instrs (bfd_vma addr, struct disassemble_info *dinfo, nfp_opts * opts)
+{
+  nfp_priv_data *priv = init_nfp_priv (dinfo);
+  bfd_byte buffer[8];
+  int err;
+  bfd_vma instr = 0;
+  size_t island, menum;
+  int num_ctx, scs_cnt, addr_3rdparty32, pc, tmpi, tmpj;
+  int is_text = 1;
+
+  err = dinfo->read_memory_func (addr, buffer, 8, dinfo);
+  if (err)
+    return _NFP_ERR_STOP;
+
+  if (!dinfo->section)
+    {
+      num_ctx = 8;
+      scs_cnt = 0;
+      addr_3rdparty32 = 0;
+    }
+  else
+    {
+      unsigned int sh_info = 0;
+      nfp_priv_mecfg *mecfg;
+
+      /* We have a section, presumably all ELF sections.  Try to find
+        proper ME configs to produce better disassembly.  */
+      if (!priv)
+       return _NFP_ERR_STOP;   /* Sanity check */
+
+      is_text = (elf_section_flags (dinfo->section)
+                & (SHF_NFP_INIT | SHF_NFP_INIT2)) == 0;
+
+      sh_info = elf_section_info (dinfo->section);
+
+      switch (dinfo->mach)
+       {
+       case E_NFP_MACH_3200:
+         island = SHI_NFP_3200_ISLAND (sh_info);
+         menum = SHI_NFP_3200_MENUM (sh_info);
+         break;
+       default:
+         island = SHI_NFP_ISLAND (sh_info);
+         menum = SHI_NFP_MENUM (sh_info);
+         break;
+       }
+
+      mecfg = &priv->mecfgs[island][menum][is_text];
+      num_ctx = (mecfg->ctx4_mode) ? 4 : 8;
+      addr_3rdparty32 = mecfg->addr_3rdparty32;
+      scs_cnt = mecfg->scs_cnt;
+    }
+
+  if (opts->ctx_mode)
+    num_ctx = opts->ctx_mode;
+
+  dinfo->bytes_per_line = 8;
+  dinfo->bytes_per_chunk = 8;
+
+  instr = bfd_getl64 (buffer);
+
+  if (opts->show_pc)
+    {
+      pc = (int) (addr >> 3);
+
+      /* Guess max PC for formatting */
+      tmpj = (int) (dinfo->buffer_length >> 3);
+      if (scs_cnt == 1)
+       {
+         pc *= 2;
+         tmpj *= 2;
+         if (! !(menum & 1))
+           {
+             pc++;
+             tmpj++;
+           }
+       }
+
+      for (tmpi = 1; tmpj > 9; tmpj /= 10)
+       tmpi++;
+
+      tmpj = pc;
+      for (; tmpj > 9; tmpj /= 10)
+       tmpi--;
+
+      dinfo->fprintf_func (dinfo->stream, "%*c%d  ", tmpi, '.', pc);
+    }
+
+  switch (dinfo->mach)
+    {
+    case E_NFP_MACH_3200:
+      if (NFP_ME27_INSTR_IS_CMD (instr))
+       err = nfp_me27_print_cmd (instr, addr_3rdparty32, num_ctx, dinfo);
+      else if (NFP_ME27_INSTR_IS_ALU_SHF (instr))
+       err = nfp_me27_print_alu_shf (instr, num_ctx, dinfo);
+      else if (NFP_ME27_INSTR_IS_ALU (instr))
+       err = nfp_me27_print_alu (instr, num_ctx, dinfo);
+      else if (NFP_ME27_INSTR_IS_IMMED (instr))
+       err = nfp_me27_print_immed (instr, num_ctx, dinfo);
+      else if (NFP_ME27_INSTR_IS_LD_FIELD (instr))
+       err = nfp_me27_print_ld_field (instr, num_ctx, dinfo);
+      else if (NFP_ME27_INSTR_IS_CTX_ARB (instr))
+       err = nfp_me27_print_ctx_arb (instr, dinfo);
+      else if (NFP_ME27_INSTR_IS_LOCAL_CSR (instr))
+       err = nfp_me27_print_local_csr (instr, num_ctx, dinfo);
+      else if (NFP_ME27_INSTR_IS_BRANCH (instr))
+       err = nfp_me27_print_branch (instr, dinfo);
+      else if (NFP_ME27_INSTR_IS_BR_BYTE (instr))
+       err = nfp_me27_print_br_byte (instr, num_ctx, dinfo);
+      else if (NFP_ME27_INSTR_IS_BR_BIT (instr))
+       err = nfp_me27_print_br_bit (instr, num_ctx, dinfo);
+      else if (NFP_ME27_INSTR_IS_BR_ALU (instr))
+       err = nfp_me27_print_br_alu (instr, num_ctx, dinfo);
+      else if (NFP_ME27_INSTR_IS_MULT (instr))
+       err = nfp_me27_print_mult (instr, num_ctx, dinfo);
+      else
+       err = nfp_me_print_invalid (instr, dinfo);
+      break;
+
+    case E_NFP_MACH_6000:
+      if (NFP_ME28_INSTR_IS_CMD (instr))
+       err = nfp_me28_print_cmd (instr, addr_3rdparty32, num_ctx, dinfo);
+      else if (NFP_ME28_INSTR_IS_ALU_SHF (instr))
+       err = nfp_me28_print_alu_shf (instr, num_ctx, dinfo);
+      else if (NFP_ME28_INSTR_IS_ALU (instr))
+       err = nfp_me28_print_alu (instr, num_ctx, dinfo);
+      else if (NFP_ME28_INSTR_IS_IMMED (instr))
+       err = nfp_me28_print_immed (instr, num_ctx, dinfo);
+      else if (NFP_ME28_INSTR_IS_LD_FIELD (instr))
+       err = nfp_me28_print_ld_field (instr, num_ctx, dinfo);
+      else if (NFP_ME28_INSTR_IS_CTX_ARB (instr))
+       err = nfp_me28_print_ctx_arb (instr, dinfo);
+      else if (NFP_ME28_INSTR_IS_LOCAL_CSR (instr))
+       err = nfp_me28_print_local_csr (instr, num_ctx, dinfo);
+      else if (NFP_ME28_INSTR_IS_BRANCH (instr))
+       err = nfp_me28_print_branch (instr, dinfo);
+      else if (NFP_ME28_INSTR_IS_BR_BYTE (instr))
+       err = nfp_me28_print_br_byte (instr, num_ctx, dinfo);
+      else if (NFP_ME28_INSTR_IS_BR_BIT (instr))
+       err = nfp_me28_print_br_bit (instr, num_ctx, dinfo);
+      else if (NFP_ME28_INSTR_IS_BR_ALU (instr))
+       err = nfp_me28_print_br_alu (instr, num_ctx, dinfo);
+      else if (NFP_ME28_INSTR_IS_MULT (instr))
+       err = nfp_me28_print_mult (instr, num_ctx, dinfo);
+      else
+       err = nfp_me_print_invalid (instr, dinfo);
+      break;
+    }
+
+  if (err < 0)
+    return err;
+  return 8;
+}
+
+int
+print_insn_nfp (bfd_vma addr, struct disassemble_info *dinfo)
+{
+  nfp_opts opts;
+  int err;
+
+  opts.show_pc = 1;
+  opts.ctx_mode = 0;
+  err = parse_disassembler_options (&opts, dinfo);
+  if (err < 0)
+    goto end;
+
+  err = _print_instrs (addr, dinfo, &opts);
+
+end:
+  if (err != 8)
+    dinfo->fprintf_func (dinfo->stream, "\t # ERROR");
+  if (err == _NFP_ERR_CONT)
+    return 8;
+  return err;
+}
+
+void
+print_nfp_disassembler_options (FILE * stream)
+{
+  fprintf (stream, _("\n\
+The following NFP specific disassembler options are supported for use\n\
+with the -M switch (multiple options should be separated by commas):\n"));
+
+  fprintf (stream, _("\n\
+  no-pc                    Don't print program counter prefix.\n\
+  ctx4             Force disassembly using 4-context mode.\n\
+  ctx8             Force 8-context mode, takes presedence.\""));
+
+  fprintf (stream, _("\n"));
+}
index cc3997d047c7ea25b9e166d2a7703a608f7e78a9..7f250b09cd58896d6613103bc1fe7c1ada755a17 100644 (file)
@@ -154,6 +154,7 @@ mt-opc.c
 mt-opc.h
 nds32-asm.c
 nds32-dis.c
+nfp-dis.c
 nios2-dis.c
 nios2-opc.c
 ns32k-dis.c
index c7f0543da7ba01e99b2450df12b036bf4ea20df2..af9ea5d57456c380d7defdd481b3c26c9205c4aa 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: bug-binutils@gnu.org\n"
-"POT-Creation-Date: 2018-01-13 13:45+0000\n"
+"POT-Creation-Date: 2018-04-30 11:54+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,9 +18,9 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 
 #. Invalid option.
-#: aarch64-dis.c:81 arc-dis.c:781 arm-dis.c:6155
+#: aarch64-dis.c:81 arc-dis.c:782 arm-dis.c:6158
 #, c-format
-msgid "Unrecognised disassembler option: %s\n"
+msgid "unrecognised disassembler option: %s"
 msgstr ""
 
 #: aarch64-dis.c:3264
@@ -53,7 +53,7 @@ msgid ""
 msgstr ""
 
 #: aarch64-dis.c:3279 mips-dis.c:2601 mips-dis.c:2609 mips-dis.c:2611
-#: riscv-dis.c:509
+#: nfp-dis.c:2989 riscv-dis.c:509
 #, c-format
 msgid "\n"
 msgstr ""
@@ -138,7 +138,7 @@ msgstr ""
 msgid "invalid post-increment amount"
 msgstr ""
 
-#: aarch64-opc.c:1694 aarch64-opc.c:2171
+#: aarch64-opc.c:1694 aarch64-opc.c:2172
 msgid "invalid shift amount"
 msgstr ""
 
@@ -146,118 +146,118 @@ msgstr ""
 msgid "invalid extend/shift operator"
 msgstr ""
 
-#: aarch64-opc.c:1753 aarch64-opc.c:1992 aarch64-opc.c:2027 aarch64-opc.c:2046
-#: aarch64-opc.c:2054 aarch64-opc.c:2125 aarch64-opc.c:2301 aarch64-opc.c:2401
-#: aarch64-opc.c:2414
+#: aarch64-opc.c:1753 aarch64-opc.c:1993 aarch64-opc.c:2028 aarch64-opc.c:2047
+#: aarch64-opc.c:2055 aarch64-opc.c:2126 aarch64-opc.c:2302 aarch64-opc.c:2402
+#: aarch64-opc.c:2415
 msgid "immediate out of range"
 msgstr ""
 
-#: aarch64-opc.c:1775 aarch64-opc.c:1817 aarch64-opc.c:1866 aarch64-opc.c:1900
+#: aarch64-opc.c:1775 aarch64-opc.c:1817 aarch64-opc.c:1867 aarch64-opc.c:1901
 msgid "invalid addressing mode"
 msgstr ""
 
-#: aarch64-opc.c:1858
+#: aarch64-opc.c:1859
 msgid "index register xzr is not allowed"
 msgstr ""
 
-#: aarch64-opc.c:1980 aarch64-opc.c:2002 aarch64-opc.c:2204 aarch64-opc.c:2212
-#: aarch64-opc.c:2278 aarch64-opc.c:2307
+#: aarch64-opc.c:1981 aarch64-opc.c:2003 aarch64-opc.c:2205 aarch64-opc.c:2213
+#: aarch64-opc.c:2279 aarch64-opc.c:2308
 msgid "invalid shift operator"
 msgstr ""
 
-#: aarch64-opc.c:1986
+#: aarch64-opc.c:1987
 msgid "shift amount must be 0 or 12"
 msgstr ""
 
-#: aarch64-opc.c:2009
+#: aarch64-opc.c:2010
 msgid "shift amount must be a multiple of 16"
 msgstr ""
 
-#: aarch64-opc.c:2021
+#: aarch64-opc.c:2022
 msgid "negative immediate value not allowed"
 msgstr ""
 
-#: aarch64-opc.c:2136
+#: aarch64-opc.c:2137
 msgid "immediate zero expected"
 msgstr ""
 
-#: aarch64-opc.c:2150
+#: aarch64-opc.c:2151
 msgid "rotate expected to be 0, 90, 180 or 270"
 msgstr ""
 
-#: aarch64-opc.c:2160
+#: aarch64-opc.c:2161
 msgid "rotate expected to be 90 or 270"
 msgstr ""
 
-#: aarch64-opc.c:2220
+#: aarch64-opc.c:2221
 msgid "shift is not permitted"
 msgstr ""
 
-#: aarch64-opc.c:2245
+#: aarch64-opc.c:2246
 msgid "invalid value for immediate"
 msgstr ""
 
-#: aarch64-opc.c:2270
+#: aarch64-opc.c:2271
 msgid "shift amount must be 0 or 16"
 msgstr ""
 
-#: aarch64-opc.c:2291
+#: aarch64-opc.c:2292
 msgid "floating-point immediate expected"
 msgstr ""
 
-#: aarch64-opc.c:2325
+#: aarch64-opc.c:2326
 msgid "no shift amount allowed for 8-bit constants"
 msgstr ""
 
-#: aarch64-opc.c:2335
+#: aarch64-opc.c:2336
 msgid "shift amount must be 0 or 8"
 msgstr ""
 
-#: aarch64-opc.c:2348
+#: aarch64-opc.c:2349
 msgid "immediate too big for element size"
 msgstr ""
 
-#: aarch64-opc.c:2355
+#: aarch64-opc.c:2356
 msgid "invalid arithmetic immediate"
 msgstr ""
 
-#: aarch64-opc.c:2369
+#: aarch64-opc.c:2370
 msgid "floating-point value must be 0.5 or 1.0"
 msgstr ""
 
-#: aarch64-opc.c:2379
+#: aarch64-opc.c:2380
 msgid "floating-point value must be 0.5 or 2.0"
 msgstr ""
 
-#: aarch64-opc.c:2389
+#: aarch64-opc.c:2390
 msgid "floating-point value must be 0.0 or 1.0"
 msgstr ""
 
-#: aarch64-opc.c:2420
+#: aarch64-opc.c:2421
 msgid "invalid replicated MOV immediate"
 msgstr ""
 
-#: aarch64-opc.c:2535
+#: aarch64-opc.c:2536
 msgid "extend operator expected"
 msgstr ""
 
-#: aarch64-opc.c:2548
+#: aarch64-opc.c:2549
 msgid "missing extend operator"
 msgstr ""
 
-#: aarch64-opc.c:2554
+#: aarch64-opc.c:2555
 msgid "'LSL' operator not allowed"
 msgstr ""
 
-#: aarch64-opc.c:2575
+#: aarch64-opc.c:2576
 msgid "W register expected"
 msgstr ""
 
-#: aarch64-opc.c:2586
+#: aarch64-opc.c:2587
 msgid "shift operator expected"
 msgstr ""
 
-#: aarch64-opc.c:2593
+#: aarch64-opc.c:2594
 msgid "'ROR' operator not allowed"
 msgstr ""
 
@@ -277,12 +277,12 @@ msgid ""
 "\t\t\t\t"
 msgstr ""
 
-#: arc-dis.c:823
+#: arc-dis.c:825
 #, c-format
-msgid "Unrecognised disassembler CPU option: %s\n"
+msgid "unrecognised disassembler CPU option: %s"
 msgstr ""
 
-#: arc-dis.c:1385
+#: arc-dis.c:1387
 #, c-format
 msgid ""
 "\n"
@@ -290,42 +290,42 @@ msgid ""
 "with -M switch (multiple options should be separated by commas):\n"
 msgstr ""
 
-#: arc-dis.c:1397
+#: arc-dis.c:1399
 #, c-format
 msgid "  dsp             Recognize DSP instructions.\n"
 msgstr ""
 
-#: arc-dis.c:1399
+#: arc-dis.c:1401
 #, c-format
 msgid "  spfp            Recognize FPX SP instructions.\n"
 msgstr ""
 
-#: arc-dis.c:1401
+#: arc-dis.c:1403
 #, c-format
 msgid "  dpfp            Recognize FPX DP instructions.\n"
 msgstr ""
 
-#: arc-dis.c:1403
+#: arc-dis.c:1405
 #, c-format
 msgid "  quarkse_em      Recognize FPU QuarkSE-EM instructions.\n"
 msgstr ""
 
-#: arc-dis.c:1405
+#: arc-dis.c:1407
 #, c-format
 msgid "  fpuda           Recognize double assist FPU instructions.\n"
 msgstr ""
 
-#: arc-dis.c:1407
+#: arc-dis.c:1409
 #, c-format
 msgid "  fpus            Recognize single precision FPU instructions.\n"
 msgstr ""
 
-#: arc-dis.c:1409
+#: arc-dis.c:1411
 #, c-format
 msgid "  fpud            Recognize double precision FPU instructions.\n"
 msgstr ""
 
-#: arc-dis.c:1411
+#: arc-dis.c:1413
 #, c-format
 msgid "  hex             Use only hexadecimal number to print immediates.\n"
 msgstr ""
@@ -527,12 +527,12 @@ msgstr ""
 msgid "<illegal precision>"
 msgstr ""
 
-#: arm-dis.c:6148
+#: arm-dis.c:6149
 #, c-format
-msgid "Unrecognised register name set: %s\n"
+msgid "unrecognised register name set: %s"
 msgstr ""
 
-#: arm-dis.c:6852
+#: arm-dis.c:6855
 #, c-format
 msgid ""
 "\n"
@@ -545,12 +545,12 @@ msgstr ""
 msgid "undefined"
 msgstr ""
 
-#: avr-dis.c:215
+#: avr-dis.c:216
 #, c-format
-msgid "Internal disassembler error"
+msgid "internal disassembler error"
 msgstr ""
 
-#: avr-dis.c:268
+#: avr-dis.c:270
 #, c-format
 msgid "unknown constraint `%c'"
 msgstr ""
@@ -568,7 +568,12 @@ msgstr ""
 msgid "operand out of range (%lu not between %lu and %lu)"
 msgstr ""
 
-#: d30v-dis.c:254
+#: d30v-dis.c:229
+#, c-format
+msgid "illegal id (%d)"
+msgstr ""
+
+#: d30v-dis.c:256
 #, c-format
 msgid "<unknown register %d>"
 msgstr ""
@@ -619,95 +624,112 @@ msgstr ""
 msgid "Not a pc-relative address."
 msgstr ""
 
-#: epiphany-asm.c:455 fr30-asm.c:310 frv-asm.c:1263 ip2k-asm.c:511
-#: iq2000-asm.c:459 lm32-asm.c:349 m32c-asm.c:1584 m32r-asm.c:328
-#: mep-asm.c:1287 mt-asm.c:595 or1k-asm.c:503 xc16x-asm.c:376
-#: xstormy16-asm.c:276
+#: epiphany-asm.c:456 fr30-asm.c:311 frv-asm.c:1264 ip2k-asm.c:512
+#: iq2000-asm.c:460 lm32-asm.c:350 m32c-asm.c:1585 m32r-asm.c:329
+#: mep-asm.c:1288 mt-asm.c:596 or1k-asm.c:504 xc16x-asm.c:377
+#: xstormy16-asm.c:277
 #, c-format
-msgid "Unrecognized field %d while parsing.\n"
+msgid "internal error: unrecognized field %d while parsing"
 msgstr ""
 
-#: epiphany-asm.c:506 fr30-asm.c:361 frv-asm.c:1314 ip2k-asm.c:562
-#: iq2000-asm.c:510 lm32-asm.c:400 m32c-asm.c:1635 m32r-asm.c:379
-#: mep-asm.c:1338 mt-asm.c:646 or1k-asm.c:554 xc16x-asm.c:427
-#: xstormy16-asm.c:327
+#: epiphany-asm.c:508 fr30-asm.c:363 frv-asm.c:1316 ip2k-asm.c:564
+#: iq2000-asm.c:512 lm32-asm.c:402 m32c-asm.c:1637 m32r-asm.c:381
+#: mep-asm.c:1340 mt-asm.c:648 or1k-asm.c:556 xc16x-asm.c:429
+#: xstormy16-asm.c:329
 msgid "missing mnemonic in syntax string"
 msgstr ""
 
 #. We couldn't parse it.
-#: epiphany-asm.c:641 epiphany-asm.c:645 epiphany-asm.c:734 epiphany-asm.c:841
-#: fr30-asm.c:496 fr30-asm.c:500 fr30-asm.c:589 fr30-asm.c:696 frv-asm.c:1449
-#: frv-asm.c:1453 frv-asm.c:1542 frv-asm.c:1649 ip2k-asm.c:697 ip2k-asm.c:701
-#: ip2k-asm.c:790 ip2k-asm.c:897 iq2000-asm.c:645 iq2000-asm.c:649
-#: iq2000-asm.c:738 iq2000-asm.c:845 lm32-asm.c:535 lm32-asm.c:539
-#: lm32-asm.c:628 lm32-asm.c:735 m32c-asm.c:1770 m32c-asm.c:1774
-#: m32c-asm.c:1863 m32c-asm.c:1970 m32r-asm.c:514 m32r-asm.c:518 m32r-asm.c:607
-#: m32r-asm.c:714 mep-asm.c:1473 mep-asm.c:1477 mep-asm.c:1566 mep-asm.c:1673
-#: mt-asm.c:781 mt-asm.c:785 mt-asm.c:874 mt-asm.c:981 or1k-asm.c:689
-#: or1k-asm.c:693 or1k-asm.c:782 or1k-asm.c:889 xc16x-asm.c:562 xc16x-asm.c:566
-#: xc16x-asm.c:655 xc16x-asm.c:762 xstormy16-asm.c:462 xstormy16-asm.c:466
-#: xstormy16-asm.c:555 xstormy16-asm.c:662
+#: epiphany-asm.c:643 epiphany-asm.c:647 epiphany-asm.c:736 epiphany-asm.c:843
+#: fr30-asm.c:498 fr30-asm.c:502 fr30-asm.c:591 fr30-asm.c:698 frv-asm.c:1451
+#: frv-asm.c:1455 frv-asm.c:1544 frv-asm.c:1651 ip2k-asm.c:699 ip2k-asm.c:703
+#: ip2k-asm.c:792 ip2k-asm.c:899 iq2000-asm.c:647 iq2000-asm.c:651
+#: iq2000-asm.c:740 iq2000-asm.c:847 lm32-asm.c:537 lm32-asm.c:541
+#: lm32-asm.c:630 lm32-asm.c:737 m32c-asm.c:1772 m32c-asm.c:1776
+#: m32c-asm.c:1865 m32c-asm.c:1972 m32r-asm.c:516 m32r-asm.c:520 m32r-asm.c:609
+#: m32r-asm.c:716 mep-asm.c:1475 mep-asm.c:1479 mep-asm.c:1568 mep-asm.c:1675
+#: mt-asm.c:783 mt-asm.c:787 mt-asm.c:876 mt-asm.c:983 or1k-asm.c:691
+#: or1k-asm.c:695 or1k-asm.c:784 or1k-asm.c:891 xc16x-asm.c:564 xc16x-asm.c:568
+#: xc16x-asm.c:657 xc16x-asm.c:764 xstormy16-asm.c:464 xstormy16-asm.c:468
+#: xstormy16-asm.c:557 xstormy16-asm.c:664
 msgid "unrecognized instruction"
 msgstr ""
 
-#: epiphany-asm.c:688 fr30-asm.c:543 frv-asm.c:1496 ip2k-asm.c:744
-#: iq2000-asm.c:692 lm32-asm.c:582 m32c-asm.c:1817 m32r-asm.c:561
-#: mep-asm.c:1520 mt-asm.c:828 or1k-asm.c:736 xc16x-asm.c:609
-#: xstormy16-asm.c:509
+#: epiphany-asm.c:690 fr30-asm.c:545 frv-asm.c:1498 ip2k-asm.c:746
+#: iq2000-asm.c:694 lm32-asm.c:584 m32c-asm.c:1819 m32r-asm.c:563
+#: mep-asm.c:1522 mt-asm.c:830 or1k-asm.c:738 xc16x-asm.c:611
+#: xstormy16-asm.c:511
 #, c-format
 msgid "syntax error (expected char `%c', found `%c')"
 msgstr ""
 
-#: epiphany-asm.c:698 fr30-asm.c:553 frv-asm.c:1506 ip2k-asm.c:754
-#: iq2000-asm.c:702 lm32-asm.c:592 m32c-asm.c:1827 m32r-asm.c:571
-#: mep-asm.c:1530 mt-asm.c:838 or1k-asm.c:746 xc16x-asm.c:619
-#: xstormy16-asm.c:519
+#: epiphany-asm.c:700 fr30-asm.c:555 frv-asm.c:1508 ip2k-asm.c:756
+#: iq2000-asm.c:704 lm32-asm.c:594 m32c-asm.c:1829 m32r-asm.c:573
+#: mep-asm.c:1532 mt-asm.c:840 or1k-asm.c:748 xc16x-asm.c:621
+#: xstormy16-asm.c:521
 #, c-format
 msgid "syntax error (expected char `%c', found end of instruction)"
 msgstr ""
 
-#: epiphany-asm.c:728 fr30-asm.c:583 frv-asm.c:1536 ip2k-asm.c:784
-#: iq2000-asm.c:732 lm32-asm.c:622 m32c-asm.c:1857 m32r-asm.c:601
-#: mep-asm.c:1560 mt-asm.c:868 or1k-asm.c:776 xc16x-asm.c:649
-#: xstormy16-asm.c:549
+#: epiphany-asm.c:730 fr30-asm.c:585 frv-asm.c:1538 ip2k-asm.c:786
+#: iq2000-asm.c:734 lm32-asm.c:624 m32c-asm.c:1859 m32r-asm.c:603
+#: mep-asm.c:1562 mt-asm.c:870 or1k-asm.c:778 xc16x-asm.c:651
+#: xstormy16-asm.c:551
 msgid "junk at end of line"
 msgstr ""
 
-#: epiphany-asm.c:840 fr30-asm.c:695 frv-asm.c:1648 ip2k-asm.c:896
-#: iq2000-asm.c:844 lm32-asm.c:734 m32c-asm.c:1969 m32r-asm.c:713
-#: mep-asm.c:1672 mt-asm.c:980 or1k-asm.c:888 xc16x-asm.c:761
-#: xstormy16-asm.c:661
+#: epiphany-asm.c:842 fr30-asm.c:697 frv-asm.c:1650 ip2k-asm.c:898
+#: iq2000-asm.c:846 lm32-asm.c:736 m32c-asm.c:1971 m32r-asm.c:715
+#: mep-asm.c:1674 mt-asm.c:982 or1k-asm.c:890 xc16x-asm.c:763
+#: xstormy16-asm.c:663
 msgid "unrecognized form of instruction"
 msgstr ""
 
-#: epiphany-asm.c:854 fr30-asm.c:709 frv-asm.c:1662 ip2k-asm.c:910
-#: iq2000-asm.c:858 lm32-asm.c:748 m32c-asm.c:1983 m32r-asm.c:727
-#: mep-asm.c:1686 mt-asm.c:994 or1k-asm.c:902 xc16x-asm.c:775
-#: xstormy16-asm.c:675
+#: epiphany-asm.c:856 fr30-asm.c:711 frv-asm.c:1664 ip2k-asm.c:912
+#: iq2000-asm.c:860 lm32-asm.c:750 m32c-asm.c:1985 m32r-asm.c:729
+#: mep-asm.c:1688 mt-asm.c:996 or1k-asm.c:904 xc16x-asm.c:777
+#: xstormy16-asm.c:677
 #, c-format
 msgid "bad instruction `%.50s...'"
 msgstr ""
 
-#: epiphany-asm.c:857 fr30-asm.c:712 frv-asm.c:1665 ip2k-asm.c:913
-#: iq2000-asm.c:861 lm32-asm.c:751 m32c-asm.c:1986 m32r-asm.c:730
-#: mep-asm.c:1689 mt-asm.c:997 or1k-asm.c:905 xc16x-asm.c:778
-#: xstormy16-asm.c:678
+#: epiphany-asm.c:859 fr30-asm.c:714 frv-asm.c:1667 ip2k-asm.c:915
+#: iq2000-asm.c:863 lm32-asm.c:753 m32c-asm.c:1988 m32r-asm.c:732
+#: mep-asm.c:1691 mt-asm.c:999 or1k-asm.c:907 xc16x-asm.c:780
+#: xstormy16-asm.c:680
 #, c-format
 msgid "bad instruction `%.50s'"
 msgstr ""
 
+#: epiphany-desc.c:2109
+#, c-format
+msgid ""
+"internal error: epiphany_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
+"values: `%d' vs. `%d'"
+msgstr ""
+
+#: epiphany-desc.c:2192
+#, c-format
+msgid "internal error: epiphany_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: epiphany-desc.c:2211
+#, c-format
+msgid "internal error: epiphany_cgen_cpu_open: no endianness specified"
+msgstr ""
+
 #. Default text to print if an instruction isn't recognized.
 #: epiphany-dis.c:41 fr30-dis.c:41 frv-dis.c:41 ip2k-dis.c:41 iq2000-dis.c:41
-#: lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 mmix-dis.c:276
+#: lm32-dis.c:41 m32c-dis.c:41 m32r-dis.c:41 mep-dis.c:41 mmix-dis.c:275
 #: mt-dis.c:41 nds32-dis.c:39 or1k-dis.c:41 xc16x-dis.c:41 xstormy16-dis.c:41
 msgid "*unknown*"
 msgstr ""
 
-#: epiphany-dis.c:278 fr30-dis.c:299 frv-dis.c:396 ip2k-dis.c:288
-#: iq2000-dis.c:189 lm32-dis.c:147 m32c-dis.c:891 m32r-dis.c:279 mep-dis.c:1187
-#: mt-dis.c:290 or1k-dis.c:141 xc16x-dis.c:420 xstormy16-dis.c:168
+#: epiphany-dis.c:279 fr30-dis.c:300 frv-dis.c:397 ip2k-dis.c:289
+#: iq2000-dis.c:190 lm32-dis.c:148 m32c-dis.c:892 m32r-dis.c:280 mep-dis.c:1188
+#: mt-dis.c:291 or1k-dis.c:142 xc16x-dis.c:421 xstormy16-dis.c:169
 #, c-format
-msgid "Unrecognized field %d while printing insn.\n"
+msgid "internal error: unrecognized field %d while printing insn"
 msgstr ""
 
 #: epiphany-ibld.c:164 fr30-ibld.c:164 frv-ibld.c:164 ip2k-ibld.c:164
@@ -726,52 +748,52 @@ msgstr ""
 msgid "operand out of range (0x%lx not between 0 and 0x%lx)"
 msgstr ""
 
-#: epiphany-ibld.c:879 fr30-ibld.c:734 frv-ibld.c:860 ip2k-ibld.c:611
-#: iq2000-ibld.c:717 lm32-ibld.c:638 m32c-ibld.c:1735 m32r-ibld.c:669
-#: mep-ibld.c:1212 mt-ibld.c:753 or1k-ibld.c:650 xc16x-ibld.c:756
-#: xstormy16-ibld.c:682
+#: epiphany-ibld.c:880 fr30-ibld.c:735 frv-ibld.c:861 ip2k-ibld.c:612
+#: iq2000-ibld.c:718 lm32-ibld.c:639 m32c-ibld.c:1736 m32r-ibld.c:670
+#: mep-ibld.c:1213 mt-ibld.c:754 or1k-ibld.c:651 xc16x-ibld.c:757
+#: xstormy16-ibld.c:683
 #, c-format
-msgid "Unrecognized field %d while building insn.\n"
+msgid "internal error: unrecognized field %d while building insn"
 msgstr ""
 
-#: epiphany-ibld.c:1173 fr30-ibld.c:939 frv-ibld.c:1177 ip2k-ibld.c:686
-#: iq2000-ibld.c:892 lm32-ibld.c:742 m32c-ibld.c:2896 m32r-ibld.c:806
-#: mep-ibld.c:1811 mt-ibld.c:973 or1k-ibld.c:755 xc16x-ibld.c:976
-#: xstormy16-ibld.c:828
+#: epiphany-ibld.c:1175 fr30-ibld.c:941 frv-ibld.c:1179 ip2k-ibld.c:688
+#: iq2000-ibld.c:894 lm32-ibld.c:744 m32c-ibld.c:2898 m32r-ibld.c:808
+#: mep-ibld.c:1813 mt-ibld.c:975 or1k-ibld.c:757 xc16x-ibld.c:978
+#: xstormy16-ibld.c:830
 #, c-format
-msgid "Unrecognized field %d while decoding insn.\n"
+msgid "internal error: unrecognized field %d while decoding insn"
 msgstr ""
 
-#: epiphany-ibld.c:1316 fr30-ibld.c:1085 frv-ibld.c:1455 ip2k-ibld.c:760
-#: iq2000-ibld.c:1023 lm32-ibld.c:831 m32c-ibld.c:3513 m32r-ibld.c:919
-#: mep-ibld.c:2281 mt-ibld.c:1173 or1k-ibld.c:838 xc16x-ibld.c:1197
-#: xstormy16-ibld.c:938
+#: epiphany-ibld.c:1319 fr30-ibld.c:1088 frv-ibld.c:1458 ip2k-ibld.c:763
+#: iq2000-ibld.c:1026 lm32-ibld.c:834 m32c-ibld.c:3516 m32r-ibld.c:922
+#: mep-ibld.c:2284 mt-ibld.c:1176 or1k-ibld.c:841 xc16x-ibld.c:1200
+#: xstormy16-ibld.c:941
 #, c-format
-msgid "Unrecognized field %d while getting int operand.\n"
+msgid "internal error: unrecognized field %d while getting int operand"
 msgstr ""
 
-#: epiphany-ibld.c:1441 fr30-ibld.c:1213 frv-ibld.c:1715 ip2k-ibld.c:816
-#: iq2000-ibld.c:1136 lm32-ibld.c:902 m32c-ibld.c:4112 m32r-ibld.c:1014
-#: mep-ibld.c:2733 mt-ibld.c:1355 or1k-ibld.c:903 xc16x-ibld.c:1400
-#: xstormy16-ibld.c:1030
+#: epiphany-ibld.c:1445 fr30-ibld.c:1217 frv-ibld.c:1719 ip2k-ibld.c:820
+#: iq2000-ibld.c:1140 lm32-ibld.c:906 m32c-ibld.c:4116 m32r-ibld.c:1018
+#: mep-ibld.c:2737 mt-ibld.c:1359 or1k-ibld.c:907 xc16x-ibld.c:1404
+#: xstormy16-ibld.c:1034
 #, c-format
-msgid "Unrecognized field %d while getting vma operand.\n"
+msgid "internal error: unrecognized field %d while getting vma operand"
 msgstr ""
 
-#: epiphany-ibld.c:1573 fr30-ibld.c:1344 frv-ibld.c:1982 ip2k-ibld.c:875
-#: iq2000-ibld.c:1256 lm32-ibld.c:980 m32c-ibld.c:4699 m32r-ibld.c:1115
-#: mep-ibld.c:3146 mt-ibld.c:1544 or1k-ibld.c:975 xc16x-ibld.c:1604
-#: xstormy16-ibld.c:1129
+#: epiphany-ibld.c:1578 fr30-ibld.c:1349 frv-ibld.c:1987 ip2k-ibld.c:880
+#: iq2000-ibld.c:1261 lm32-ibld.c:985 m32c-ibld.c:4704 m32r-ibld.c:1120
+#: mep-ibld.c:3151 mt-ibld.c:1549 or1k-ibld.c:980 xc16x-ibld.c:1609
+#: xstormy16-ibld.c:1134
 #, c-format
-msgid "Unrecognized field %d while setting int operand.\n"
+msgid "internal error: unrecognized field %d while setting int operand"
 msgstr ""
 
-#: epiphany-ibld.c:1695 fr30-ibld.c:1465 frv-ibld.c:2239 ip2k-ibld.c:924
-#: iq2000-ibld.c:1366 lm32-ibld.c:1048 m32c-ibld.c:5276 m32r-ibld.c:1206
-#: mep-ibld.c:3549 mt-ibld.c:1723 or1k-ibld.c:1037 xc16x-ibld.c:1798
-#: xstormy16-ibld.c:1218
+#: epiphany-ibld.c:1701 fr30-ibld.c:1471 frv-ibld.c:2245 ip2k-ibld.c:930
+#: iq2000-ibld.c:1372 lm32-ibld.c:1054 m32c-ibld.c:5282 m32r-ibld.c:1212
+#: mep-ibld.c:3555 mt-ibld.c:1729 or1k-ibld.c:1043 xc16x-ibld.c:1804
+#: xstormy16-ibld.c:1224
 #, c-format
-msgid "Unrecognized field %d while setting vma operand.\n"
+msgid "internal error: unrecognized field %d while setting vma operand"
 msgstr ""
 
 #: fr30-asm.c:93 m32c-asm.c:872 m32c-asm.c:879
@@ -790,6 +812,23 @@ msgstr ""
 msgid "Register list is not valid"
 msgstr ""
 
+#: fr30-desc.c:1586
+#, c-format
+msgid ""
+"internal error: fr30_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
+"values: `%d' vs. `%d'"
+msgstr ""
+
+#: fr30-desc.c:1669
+#, c-format
+msgid "internal error: fr30_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: fr30-desc.c:1688
+#, c-format
+msgid "internal error: fr30_cgen_cpu_open: no endianness specified"
+msgstr ""
+
 #: frv-asm.c:608
 msgid "missing `]'"
 msgstr ""
@@ -806,32 +845,58 @@ msgstr ""
 msgid "register number must be even"
 msgstr ""
 
-#: h8300-dis.c:313
+#: frv-desc.c:6326
 #, c-format
-msgid "Hmmmm 0x%x"
+msgid ""
+"internal error: frv_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
+"values: `%d' vs. `%d'"
 msgstr ""
 
-#: h8300-dis.c:690
+#: frv-desc.c:6409
 #, c-format
-msgid "Don't understand 0x%x \n"
+msgid "internal error: frv_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: frv-desc.c:6428
+#, c-format
+msgid "internal error: frv_cgen_cpu_open: no endianness specified"
 msgstr ""
 
-#: h8500-dis.c:123
+#: frv-opc.c:459
 #, c-format
-msgid "can't cope with insert %d\n"
+msgid "internal error: bad vliw->next_slot value"
 msgstr ""
 
-#. Couldn't understand anything.
-#: h8500-dis.c:323
+#: frv-opc.c:769
 #, c-format
-msgid "%02x\t\t*unknown*"
+msgid "internal error: bad major code"
+msgstr ""
+
+#: frv-opc.c:819
+#, c-format
+msgid "internal error: bad insn unit"
+msgstr ""
+
+#: h8300-dis.c:63
+#, c-format
+msgid "internal error, h8_disassemble_init"
+msgstr ""
+
+#: h8300-dis.c:314
+#, c-format
+msgid "Hmmmm 0x%x"
+msgstr ""
+
+#: h8300-dis.c:691
+#, c-format
+msgid "Don't understand 0x%x \n"
 msgstr ""
 
-#: i386-dis.c:12330
+#: i386-dis.c:12380
 msgid "<internal disassembler error>"
 msgstr ""
 
-#: i386-dis.c:12625
+#: i386-dis.c:12675
 #, c-format
 msgid ""
 "\n"
@@ -840,149 +905,154 @@ msgid ""
 "with the -M switch (multiple options should be separated by commas):\n"
 msgstr ""
 
-#: i386-dis.c:12629
+#: i386-dis.c:12679
 #, c-format
 msgid "  x86-64      Disassemble in 64bit mode\n"
 msgstr ""
 
-#: i386-dis.c:12630
+#: i386-dis.c:12680
 #, c-format
 msgid "  i386        Disassemble in 32bit mode\n"
 msgstr ""
 
-#: i386-dis.c:12631
+#: i386-dis.c:12681
 #, c-format
 msgid "  i8086       Disassemble in 16bit mode\n"
 msgstr ""
 
-#: i386-dis.c:12632
+#: i386-dis.c:12682
 #, c-format
 msgid "  att         Display instruction in AT&T syntax\n"
 msgstr ""
 
-#: i386-dis.c:12633
+#: i386-dis.c:12683
 #, c-format
 msgid "  intel       Display instruction in Intel syntax\n"
 msgstr ""
 
-#: i386-dis.c:12634
+#: i386-dis.c:12684
 #, c-format
 msgid ""
 "  att-mnemonic\n"
 "              Display instruction in AT&T mnemonic\n"
 msgstr ""
 
-#: i386-dis.c:12636
+#: i386-dis.c:12686
 #, c-format
 msgid ""
 "  intel-mnemonic\n"
 "              Display instruction in Intel mnemonic\n"
 msgstr ""
 
-#: i386-dis.c:12638
+#: i386-dis.c:12688
 #, c-format
 msgid "  addr64      Assume 64bit address size\n"
 msgstr ""
 
-#: i386-dis.c:12639
+#: i386-dis.c:12689
 #, c-format
 msgid "  addr32      Assume 32bit address size\n"
 msgstr ""
 
-#: i386-dis.c:12640
+#: i386-dis.c:12690
 #, c-format
 msgid "  addr16      Assume 16bit address size\n"
 msgstr ""
 
-#: i386-dis.c:12641
+#: i386-dis.c:12691
 #, c-format
 msgid "  data32      Assume 32bit data size\n"
 msgstr ""
 
-#: i386-dis.c:12642
+#: i386-dis.c:12692
 #, c-format
 msgid "  data16      Assume 16bit data size\n"
 msgstr ""
 
-#: i386-dis.c:12643
+#: i386-dis.c:12693
 #, c-format
 msgid "  suffix      Always display instruction suffix in AT&T syntax\n"
 msgstr ""
 
-#: i386-dis.c:12644
+#: i386-dis.c:12694
 #, c-format
 msgid "  amd64       Display instruction in AMD64 ISA\n"
 msgstr ""
 
-#: i386-dis.c:12645
+#: i386-dis.c:12695
 #, c-format
 msgid "  intel64     Display instruction in Intel64 ISA\n"
 msgstr ""
 
-#: i386-dis.c:13190
+#: i386-dis.c:13235
 msgid "64-bit address is disabled"
 msgstr ""
 
-#: i386-gen.c:711 ia64-gen.c:306
+#: i386-gen.c:718
 #, c-format
-msgid "%s: Error: "
+msgid "%s: error: "
 msgstr ""
 
-#: i386-gen.c:890
+#: i386-gen.c:897
 #, c-format
-msgid "%s: %d: Unknown bitfield: %s\n"
+msgid "%s: %d: unknown bitfield: %s\n"
 msgstr ""
 
-#: i386-gen.c:892
+#: i386-gen.c:899
 #, c-format
-msgid "Unknown bitfield: %s\n"
+msgid "unknown bitfield: %s\n"
 msgstr ""
 
-#: i386-gen.c:955
+#: i386-gen.c:962
 #, c-format
-msgid "%s: %d: Missing `)' in bitfield: %s\n"
+msgid "%s: %d: missing `)' in bitfield: %s\n"
 msgstr ""
 
-#: i386-gen.c:1256
+#: i386-gen.c:1263
 #, c-format
 msgid "can't find i386-opc.tbl for reading, errno = %s\n"
 msgstr ""
 
-#: i386-gen.c:1387
+#: i386-gen.c:1394
 #, c-format
 msgid "can't find i386-reg.tbl for reading, errno = %s\n"
 msgstr ""
 
-#: i386-gen.c:1465
+#: i386-gen.c:1472
 #, c-format
 msgid "can't create i386-init.h, errno = %s\n"
 msgstr ""
 
-#: i386-gen.c:1555 ia64-gen.c:2829
+#: i386-gen.c:1562 ia64-gen.c:2829
 #, c-format
 msgid "unable to change directory to \"%s\", errno = %s\n"
 msgstr ""
 
-#: i386-gen.c:1567 i386-gen.c:1570
+#: i386-gen.c:1574 i386-gen.c:1577
 #, c-format
 msgid "CpuMax != %d!\n"
 msgstr ""
 
-#: i386-gen.c:1574
+#: i386-gen.c:1581
 #, c-format
 msgid "%d unused bits in i386_cpu_flags.\n"
 msgstr ""
 
-#: i386-gen.c:1581
+#: i386-gen.c:1588
 #, c-format
 msgid "%d unused bits in i386_operand_type.\n"
 msgstr ""
 
-#: i386-gen.c:1595
+#: i386-gen.c:1602
 #, c-format
 msgid "can't create i386-tbl.h, errno = %s\n"
 msgstr ""
 
+#: ia64-gen.c:306
+#, c-format
+msgid "%s: Error: "
+msgstr ""
+
 #: ia64-gen.c:319
 #, c-format
 msgid "%s: Warning: "
@@ -1136,6 +1206,23 @@ msgstr ""
 msgid "Attempt to find bit index of 0"
 msgstr ""
 
+#: ip2k-desc.c:1015
+#, c-format
+msgid ""
+"internal error: ip2k_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
+"values: `%d' vs. `%d'"
+msgstr ""
+
+#: ip2k-desc.c:1098
+#, c-format
+msgid "internal error: ip2k_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: ip2k-desc.c:1117
+#, c-format
+msgid "internal error: ip2k_cgen_cpu_open: no endianness specified"
+msgstr ""
+
 #: iq2000-asm.c:112 iq2000-asm.c:142
 msgid "immediate value cannot be register"
 msgstr ""
@@ -1148,6 +1235,23 @@ msgstr ""
 msgid "21-bit offset out of range"
 msgstr ""
 
+#: iq2000-desc.c:2020
+#, c-format
+msgid ""
+"internal error: iq2000_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
+"values: `%d' vs. `%d'"
+msgstr ""
+
+#: iq2000-desc.c:2103
+#, c-format
+msgid "internal error: iq2000_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: iq2000-desc.c:2122
+#, c-format
+msgid "internal error: iq2000_cgen_cpu_open: no endianness specified"
+msgstr ""
+
 #: lm32-asm.c:166
 msgid "expecting gp relative address: gp(symbol)"
 msgstr ""
@@ -1164,6 +1268,23 @@ msgstr ""
 msgid "expecting got relative address: gotofflo16(symbol)"
 msgstr ""
 
+#: lm32-desc.c:1002
+#, c-format
+msgid ""
+"internal error: lm32_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
+"values: `%d' vs. `%d'"
+msgstr ""
+
+#: lm32-desc.c:1085
+#, c-format
+msgid "internal error: lm32_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: lm32-desc.c:1104
+#, c-format
+msgid "internal error: lm32_cgen_cpu_open: no endianness specified"
+msgstr ""
+
 #: m10200-dis.c:157 m10300-dis.c:580
 #, c-format
 msgid "unknown\t0x%04lx"
@@ -1248,6 +1369,40 @@ msgstr ""
 msgid "Invalid size specifier"
 msgstr ""
 
+#: m32c-desc.c:63033
+#, c-format
+msgid ""
+"internal error: m32c_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
+"values: `%d' vs. `%d'"
+msgstr ""
+
+#: m32c-desc.c:63116
+#, c-format
+msgid "internal error: m32c_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: m32c-desc.c:63135
+#, c-format
+msgid "internal error: m32c_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: m32r-desc.c:1365
+#, c-format
+msgid ""
+"internal error: m32r_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
+"values: `%d' vs. `%d'"
+msgstr ""
+
+#: m32r-desc.c:1448
+#, c-format
+msgid "internal error: m32r_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: m32r-desc.c:1467
+#, c-format
+msgid "internal error: m32r_cgen_cpu_open: no endianness specified"
+msgstr ""
+
 #: m68k-dis.c:1292
 #, c-format
 msgid "<function code %d>"
@@ -1258,11 +1413,6 @@ msgstr ""
 msgid "<internal error in opcode table: %s %s>\n"
 msgstr ""
 
-#: m88k-dis.c:678
-#, c-format
-msgid "# <dis error: %08lx>"
-msgstr ""
-
 #: mep-asm.c:129
 msgid "Only $tp or $13 allowed for this opcode"
 msgstr ""
@@ -1296,6 +1446,23 @@ msgstr ""
 msgid "Value is not aligned enough"
 msgstr ""
 
+#: mep-desc.c:6226
+#, c-format
+msgid ""
+"internal error: mep_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
+"values: `%d' vs. `%d'"
+msgstr ""
+
+#: mep-desc.c:6309
+#, c-format
+msgid "internal error: mep_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: mep-desc.c:6328
+#, c-format
+msgid "internal error: mep_cgen_cpu_open: no endianness specified"
+msgstr ""
+
 #: mips-dis.c:1751 mips-dis.c:1977
 #, c-format
 msgid "# internal error, undefined operand in `%s %s'"
@@ -1404,25 +1571,30 @@ msgid ""
 "   "
 msgstr ""
 
-#: mmix-dis.c:34
+#: mmix-dis.c:33
 #, c-format
-msgid "Bad case %d (%s) in %s:%d\n"
+msgid "bad case %d (%s) in %s:%d"
 msgstr ""
 
-#: mmix-dis.c:44
+#: mmix-dis.c:42
 #, c-format
-msgid "Internal: Non-debugged code (test-case missing): %s:%d"
+msgid "internal: non-debugged code (test-case missing): %s:%d"
 msgstr ""
 
-#: mmix-dis.c:53
+#: mmix-dis.c:52
 msgid "(unknown)"
 msgstr ""
 
-#: mmix-dis.c:511
+#: mmix-dis.c:510
 #, c-format
 msgid "*unknown operands type: %d*"
 msgstr ""
 
+#: msp430-decode.opc:145 rl78-decode.opc:106
+#, c-format
+msgid "internal error: immediate() called with invalid byte count %d"
+msgstr ""
+
 #: msp430-dis.c:59
 #, c-format
 msgid "Warning: disassembly unreliable - not enough bytes available"
@@ -1467,6 +1639,105 @@ msgstr ""
 msgid "invalid operand.  type may have values 0,1,2 only."
 msgstr ""
 
+#: mt-desc.c:1146
+#, c-format
+msgid ""
+"internal error: mt_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
+"values: `%d' vs. `%d'"
+msgstr ""
+
+#: mt-desc.c:1229
+#, c-format
+msgid "internal error: mt_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: mt-desc.c:1248
+#, c-format
+msgid "internal error: mt_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: nds32-asm.c:1508
+#, c-format
+msgid "internal error: unknown operand, %s"
+msgstr ""
+
+#: nds32-asm.c:2062
+#, c-format
+msgid "internal error: don't know how to handle parsing results"
+msgstr ""
+
+#: nds32-asm.c:2070
+#, c-format
+msgid "internal error: unknown hardware resource"
+msgstr ""
+
+#: nfp-dis.c:934
+msgid "<invalid_instruction>"
+msgstr ""
+
+#: nfp-dis.c:1337
+msgid ", <invalid CRC operator>, "
+msgstr ""
+
+#: nfp-dis.c:1689
+msgid "<invalid branch>["
+msgstr ""
+
+#: nfp-dis.c:2058 nfp-dis.c:2329
+#, c-format
+msgid "<invalid cmd target %d:%d:%d>[]"
+msgstr ""
+
+#: nfp-dis.c:2069 nfp-dis.c:2340
+#, c-format
+msgid "<invalid cmd action %d:%d:%d>[]"
+msgstr ""
+
+#: nfp-dis.c:2561
+msgid "File has no ME-Config section."
+msgstr ""
+
+#: nfp-dis.c:2575
+msgid "File has invalid ME-Config section."
+msgstr ""
+
+#: nfp-dis.c:2719
+#, c-format
+msgid "Error processing section %u "
+msgstr ""
+
+#: nfp-dis.c:2748
+#, c-format
+msgid "Invalid NFP option: %s"
+msgstr ""
+
+#: nfp-dis.c:2980
+#, c-format
+msgid ""
+"\n"
+"The following NFP specific disassembler options are supported for use\n"
+"with the -M switch (multiple options should be separated by commas):\n"
+msgstr ""
+
+#: nfp-dis.c:2984
+#, c-format
+msgid ""
+"\n"
+"  no-pc\t\t    Don't print program counter prefix.\n"
+"  ctx4\t\t    Force disassembly using 4-context mode.\n"
+"  ctx8\t\t    Force 8-context mode, takes presedence.\""
+msgstr ""
+
+#: nios2-dis.c:135
+#, c-format
+msgid "out of memory"
+msgstr ""
+
+#: nios2-dis.c:263
+#, c-format
+msgid "internal error: broken opcode descriptor for `%s %s'"
+msgstr ""
+
 #. I and Z are output operands and can`t be immediate
 #. A is an address and we can`t have the address of
 #. an immediate either. We don't know how much to increase
@@ -1477,12 +1748,29 @@ msgstr ""
 msgid "$<undefined>"
 msgstr ""
 
-#: ppc-dis.c:359
+#: or1k-desc.c:1948
+#, c-format
+msgid ""
+"internal error: or1k_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
+"values: `%d' vs. `%d'"
+msgstr ""
+
+#: or1k-desc.c:2031
+#, c-format
+msgid "internal error: or1k_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: or1k-desc.c:2050
+#, c-format
+msgid "internal error: or1k_cgen_cpu_open: no endianness specified"
+msgstr ""
+
+#: ppc-dis.c:363
 #, c-format
-msgid "warning: ignoring unknown -M%s option\n"
+msgid "warning: ignoring unknown -M%s option"
 msgstr ""
 
-#: ppc-dis.c:880
+#: ppc-dis.c:875
 #, c-format
 msgid ""
 "\n"
@@ -1582,10 +1870,9 @@ msgstr ""
 msgid "invalid Ddd value"
 msgstr ""
 
-#. Invalid option.
 #: riscv-dis.c:68
 #, c-format
-msgid "Unrecognized disassembler option: %s\n"
+msgid "unrecognized disassembler option: %s"
 msgstr ""
 
 #: riscv-dis.c:346
@@ -1628,7 +1915,12 @@ msgstr ""
 msgid "Print unknown instructions according to length from first two bits"
 msgstr ""
 
-#: s390-dis.c:409
+#: s390-dis.c:76
+#, c-format
+msgid "unknown S/390 disassembler option: %s"
+msgstr ""
+
+#: s390-dis.c:410
 #, c-format
 msgid ""
 "\n"
@@ -1641,34 +1933,29 @@ msgstr ""
 msgid "<illegal instruction>"
 msgstr ""
 
-#: sparc-dis.c:309
-#, c-format
-msgid "Internal error:  bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
-msgstr ""
-
-#: sparc-dis.c:320
+#: sparc-dis.c:308 sparc-dis.c:318
 #, c-format
-msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
+msgid "internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
 msgstr ""
 
-#: sparc-dis.c:379
+#: sparc-dis.c:377
 #, c-format
-msgid "Internal error: bad sparc-opcode.h: \"%s\" == \"%s\"\n"
+msgid "internal error: bad sparc-opcode.h: \"%s\" == \"%s\"\n"
 msgstr ""
 
 #. Mark as non-valid instruction.
-#: sparc-dis.c:1100
+#: sparc-dis.c:1098
 msgid "unknown"
 msgstr ""
 
 #: v850-dis.c:453
 #, c-format
-msgid "unknown operand shift: %x\n"
+msgid "unknown operand shift: %x"
 msgstr ""
 
-#: v850-dis.c:465
+#: v850-dis.c:469
 #, c-format
-msgid "unknown reg: %d\n"
+msgid "unknown reg: %d"
 msgstr ""
 
 #. The functions used to insert and extract complicated operands.
@@ -1780,6 +2067,23 @@ msgstr ""
 msgid "Missing 'seg:' prefix"
 msgstr ""
 
+#: xc16x-desc.c:3349
+#, c-format
+msgid ""
+"internal error: xc16x_cgen_rebuild_tables: conflicting insn-chunk-bitsize "
+"values: `%d' vs. `%d'"
+msgstr ""
+
+#: xc16x-desc.c:3432
+#, c-format
+msgid "internal error: xc16x_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: xc16x-desc.c:3451
+#, c-format
+msgid "internal error: xc16x_cgen_cpu_open: no endianness specified"
+msgstr ""
+
 #: xstormy16-asm.c:71
 msgid "Bad register in preincrement"
 msgstr ""
@@ -1819,3 +2123,20 @@ msgstr ""
 #: xstormy16-asm.c:165
 msgid "Syntax error: No trailing ')'"
 msgstr ""
+
+#: xstormy16-desc.c:1317
+#, c-format
+msgid ""
+"internal error: xstormy16_cgen_rebuild_tables: conflicting insn-chunk-"
+"bitsize values: `%d' vs. `%d'"
+msgstr ""
+
+#: xstormy16-desc.c:1400
+#, c-format
+msgid "internal error: xstormy16_cgen_cpu_open: unsupported argument `%d'"
+msgstr ""
+
+#: xstormy16-desc.c:1419
+#, c-format
+msgid "internal error: xstormy16_cgen_cpu_open: no endianness specified"
+msgstr ""