aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/.Sanitize1
-rw-r--r--bfd/ChangeLog9
-rwxr-xr-xbfd/configure40
-rw-r--r--bfd/hosts/.Sanitize6
-rw-r--r--bfd/hosts/i386nbsd.h14
-rw-r--r--bfd/hosts/m68knbsd.h13
-rw-r--r--bfd/hosts/mipsnbsd.h13
-rw-r--r--bfd/hosts/nbsd.h14
-rw-r--r--bfd/hosts/ns32knbsd.h13
-rw-r--r--bfd/hosts/sparcnbsd.h18
-rw-r--r--bfd/netbsd-core.c310
11 files changed, 330 insertions, 121 deletions
diff --git a/bfd/.Sanitize b/bfd/.Sanitize
index 8bd2244..a03d7ac 100644
--- a/bfd/.Sanitize
+++ b/bfd/.Sanitize
@@ -203,6 +203,7 @@ mipsbsd.c
mpw-config.in
mpw-make.sed
newsos3.c
+netbsd-core.c
netbsd.h
nlm-target.h
nlm.c
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index a9ae11a..45b1e1e 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,12 @@
+Tue Feb 6 14:04:49 1996 J.T. Conklin <jtc@rtl.cygnus.com>
+
+ * configure.in (*-*-netbsd*): Set COREFILE to netbsd-core.c.
+ don't define TRAD_HEADER.
+ * configure: Rebuild.
+
+ * netbsd-core.c: New file, support for NetBSD core files.
+ * hosts/*nbsd.h: Removed.
+
Tue Feb 6 11:47:49 1996 Doug Evans <dje@charmed.cygnus.com>
* reloc.c (BFD_RELOC_SPARC_[567]): New reloc types.
diff --git a/bfd/configure b/bfd/configure
index 923f5c0..be3d0b1 100755
--- a/bfd/configure
+++ b/bfd/configure
@@ -1170,7 +1170,7 @@ done
case "${host}" in
-i[345]86-*-msdos* | i[345]86-*-go32* | *-*-cygwin32)
+i[345]86-*-msdos* | i[345]86-*-go32* | i[345]86-*-win32)
cat >> confdefs.h <<\EOF
#define USE_BINARY_FOPEN 1
EOF
@@ -1299,11 +1299,7 @@ EOF
;;
i[345]86-*-netbsd*)
- COREFILE=trad-core.o
- cat >> confdefs.h <<\EOF
-#define TRAD_HEADER "hosts/i386nbsd.h"
-EOF
-
+ COREFILE=netbsd-core.o
;;
i[345]86-esix-sysv3*)
COREFILE=trad-core.o
@@ -1357,11 +1353,7 @@ EOF
;;
mips-*-netbsd*)
- COREFILE=trad-core.o
- cat >> confdefs.h <<\EOF
-#define TRAD_HEADER "hosts/mipsnbsd.h"
-EOF
-
+ COREFILE=netbsd-core.o
;;
mips-dec-*)
COREFILE=trad-core.o
@@ -1424,11 +1416,7 @@ EOF
;;
m68*-*-netbsd*)
- COREFILE=trad-core.o
- cat >> confdefs.h <<\EOF
-#define TRAD_HEADER "hosts/m68knbsd.h"
-EOF
-
+ COREFILE=netbsd-core.o
;;
m68*-apple-aux*)
COREFILE=trad-core.o
@@ -1454,11 +1442,7 @@ EOF
;;
ns32k-*-netbsd*)
- COREFILE=trad-core.o
- cat >> confdefs.h <<\EOF
-#define TRAD_HEADER "hosts/ns32knbsd.h"
-EOF
-
+ COREFILE=netbsd-core.o
;;
rs6000-*-lynx*) COREFILE=lynx-core.o ;;
rs6000-*-aix4*) COREFILE=rs6000-core.o ;;
@@ -1466,11 +1450,7 @@ EOF
powerpc-*-aix4*) COREFILE=rs6000-core.o ;;
powerpc-*-aix*) COREFILE=rs6000-core.o ;;
sparc-*-netbsd*)
- COREFILE=trad-core.o
- cat >> confdefs.h <<\EOF
-#define TRAD_HEADER "hosts/sparcnbsd.h"
-EOF
-
+ COREFILE=netbsd-core.o
;;
tahoe-*-*)
COREFILE=trad-core.o
@@ -1522,7 +1502,7 @@ EOF
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1526 "configure"
+#line 1506 "configure"
#include "confdefs.h"
#include <sys/procfs.h>
int main() { return 0; }
@@ -1809,7 +1789,7 @@ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1813 "configure"
+#line 1793 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@@ -1861,7 +1841,7 @@ else
ac_cv_func_mmap=no
else
cat > conftest.$ac_ext <<EOF
-#line 1865 "configure"
+#line 1845 "configure"
#include "confdefs.h"
/* Thanks to Mike Haertel and Jim Avera for this test. */
@@ -1955,7 +1935,7 @@ if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 1959 "configure"
+#line 1939 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
diff --git a/bfd/hosts/.Sanitize b/bfd/hosts/.Sanitize
index aa1993f..cc68c8c 100644
--- a/bfd/hosts/.Sanitize
+++ b/bfd/hosts/.Sanitize
@@ -32,22 +32,16 @@ hp300bsd.h
i386bsd.h
i386linux.h
i386mach3.h
-i386nbsd.h
i386sco.h
i860mach3.h
m68kaux.h
-m68knbsd.h
m88kmach3.h
mipsbsd.h
-mipsnbsd.h
mipsmach3.h
-nbsd.h
news-mips.h
news.h
-ns32knbsd.h
pc532mach.h
riscos.h
-sparcnbsd.h
symmetry.h
tahoe.h
vaxbsd.h
diff --git a/bfd/hosts/i386nbsd.h b/bfd/hosts/i386nbsd.h
deleted file mode 100644
index 1fd3bed..0000000
--- a/bfd/hosts/i386nbsd.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Intel 386 running NetBSD */
-
-#ifndef hosts_i386bsd_H
-#define hosts_i386bsd_H
-
-#include "hosts/nbsd.h"
-
-#define HOST_MACHINE_ARCH bfd_arch_i386
-
-#define TRAD_UNIX_CORE_FILE_FAILING_SIGNAL(core_bfd) \
- ((core_bfd)->tdata.trad_core_data->u.u_sig)
-#define u_comm u_kproc.kp_proc.p_comm
-#endif
-
diff --git a/bfd/hosts/m68knbsd.h b/bfd/hosts/m68knbsd.h
deleted file mode 100644
index 8dccf67..0000000
--- a/bfd/hosts/m68knbsd.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* m68k hosts running NetBSD */
-
-#ifndef hosts_m68knbsd_h
-#define hosts_m68knbsd_h
-
-#include "hosts/nbsd.h"
-
-#define HOST_MACHINE_ARCH bfd_arch_m68k
-
-#define TRAD_UNIX_CORE_FILE_FAILING_SIGNAL(core_bfd) \
- ((core_bfd)->tdata.trad_core_data->u.u_sig)
-#define u_comm u_kproc.kp_proc.p_comm
-#endif
diff --git a/bfd/hosts/mipsnbsd.h b/bfd/hosts/mipsnbsd.h
deleted file mode 100644
index 32e895a..0000000
--- a/bfd/hosts/mipsnbsd.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* mips running NetBSD */
-
-#ifndef hosts_mips
-#define hosts_mips
-
-#include "hosts/nbsd.h"
-
-#define HOST_MACHINE_ARCH bfd_arch_mips
-
-#define TRAD_UNIX_CORE_FILE_FAILING_SIGNAL(core_bfd) \
- ((core_bfd)->tdata.trad_core_data->u.u_sig)
-#define u_comm u_kproc.kp_proc.p_comm
-#endif
diff --git a/bfd/hosts/nbsd.h b/bfd/hosts/nbsd.h
deleted file mode 100644
index d773ee6..0000000
--- a/bfd/hosts/nbsd.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/* Architecture independant NetBSD host support */
-
-#include <machine/endian.h>
-#include <machine/vmparam.h>
-#include <machine/param.h>
-#include <machine/reg.h>
-
-#define HOST_PAGE_SIZE NBPG
-#define HOST_TEXT_START_ADDR USRTEXT
-#define HOST_STACK_END_ADDR USRSTACK
-
-#if BYTE_ORDER == BIG_ENDIAN
-#define HOST_BIG_ENDIAN_P
-#endif
diff --git a/bfd/hosts/ns32knbsd.h b/bfd/hosts/ns32knbsd.h
deleted file mode 100644
index d072d6d..0000000
--- a/bfd/hosts/ns32knbsd.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* ns32k running NetBSD */
-
-#ifndef hosts_ns32knbsd_h
-#define hosts_ns32knbsd_h
-
-#include "hosts/nbsd.h"
-
-#define HOST_MACHINE_ARCH bfd_arch_ns32k
-
-#define TRAD_UNIX_CORE_FILE_FAILING_SIGNAL(core_bfd) \
- ((core_bfd)->tdata.trad_core_data->u.u_sig)
-#define u_comm u_kproc.kp_proc.p_comm
-#endif
diff --git a/bfd/hosts/sparcnbsd.h b/bfd/hosts/sparcnbsd.h
deleted file mode 100644
index c0a4a8d4..0000000
--- a/bfd/hosts/sparcnbsd.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/* Sparc running NetBSD */
-
-#ifndef hosts_sparcnbsd_h
-#define hosts_sparcnbsd_h
-
-#include "hosts/nbsd.h"
-
-#define HOST_MACHINE_ARCH bfd_arch_sparc
-
-#define TRAD_UNIX_CORE_FILE_FAILING_SIGNAL(core_bfd) \
- ((core_bfd)->tdata.trad_core_data->u.u_sig)
-#define u_comm u_kproc.kp_proc.p_comm
-#define TRAD_CORE_REGPOS(core_bfd) \
- ((bfd_vma)(core_bfd)->tdata.trad_core_data->u.u_kproc.kp_proc.p_md.md_tf)
-
-#define CORE_FPU_OFFSET (sizeof(struct trapframe))
-
-#endif
diff --git a/bfd/netbsd-core.c b/bfd/netbsd-core.c
new file mode 100644
index 0000000..60f98e8
--- /dev/null
+++ b/bfd/netbsd-core.c
@@ -0,0 +1,310 @@
+/* BFD back end for NetBSD style core files
+ Copyright 1988, 1989, 1991, 1992, 1993 Free Software Foundation, Inc.
+ Written by Paul Kranenburg, EUR
+
+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 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+#include "bfd.h"
+#include "sysdep.h"
+#include "libbfd.h"
+#include "libaout.h" /* BFD a.out internal data structures */
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/dir.h>
+#include <signal.h>
+#include <sys/core.h>
+#include <errno.h>
+
+/*
+ * FIXME: On NetBSD/sparc CORE_FPU_OFFSET should be (sizeof(struct trapframe))
+ */
+
+struct netbsd_core_struct {
+ struct core core;
+} *rawptr;
+
+/* forward declarations */
+
+static const bfd_target * netbsd_core_core_file_p PARAMS ((bfd *abfd));
+static char * netbsd_core_core_file_failing_command PARAMS ((bfd *abfd));
+static int netbsd_core_core_file_failing_signal PARAMS ((bfd *abfd));
+static boolean netbsd_core_core_file_matches_executable_p
+ PARAMS ((bfd *core_bfd, bfd *exec_bfd));
+
+/* Handle NetBSD-style core dump file. */
+
+/* ARGSUSED */
+static const bfd_target *
+netbsd_core_core_file_p (abfd)
+ bfd *abfd;
+
+{
+ int i, val, offset;
+ asection *asect, *asect2;
+ struct core core;
+ struct coreseg coreseg;
+
+ val = bfd_read ((void *)&core, 1, sizeof core, abfd);
+ if (val != sizeof core) {
+ /* Too small to be a core file */
+ bfd_set_error(bfd_error_wrong_format);
+ return 0;
+ }
+
+ if (CORE_GETMAGIC(core) != COREMAGIC) {
+ bfd_set_error(bfd_error_wrong_format);
+ return 0;
+ }
+
+ rawptr = (struct netbsd_core_struct *)
+ bfd_zalloc (abfd, sizeof (struct netbsd_core_struct));
+ if (rawptr == NULL) {
+ bfd_set_error(bfd_error_no_memory);
+ return 0;
+ }
+
+ rawptr->core = core;
+ abfd->tdata.netbsd_core_data = rawptr;
+
+ offset = core.c_hdrsize;
+ for (i = 0; i < core.c_nseg; i++) {
+
+ if (bfd_seek (abfd, offset, SEEK_SET) != 0)
+ goto punt;
+
+ val = bfd_read ((void *)&coreseg, 1, sizeof coreseg, abfd);
+ if (val != sizeof coreseg) {
+ bfd_set_error(bfd_error_file_truncated);
+ goto punt;
+ }
+ if (CORE_GETMAGIC(coreseg) != CORESEGMAGIC) {
+ bfd_set_error(bfd_error_wrong_format);
+ goto punt;
+ }
+
+ offset += core.c_seghdrsize;
+
+ asect = (asection *) bfd_zalloc (abfd, sizeof(asection));
+ if (asect == NULL) {
+ bfd_set_error(bfd_error_no_memory);
+ }
+
+ asect->_raw_size = coreseg.c_size;
+ asect->vma = coreseg.c_addr;
+ asect->filepos = offset;
+ asect->alignment_power = 2;
+ asect->next = abfd->sections;
+ abfd->sections = asect;
+ abfd->section_count++;
+ offset += coreseg.c_size;
+
+ switch (CORE_GETFLAG(coreseg)) {
+ case CORE_CPU:
+ asect->name = ".reg";
+ asect->flags = SEC_ALLOC + SEC_HAS_CONTENTS;
+#ifdef CORE_FPU_OFFSET
+ /* Hackish... */
+ asect->_raw_size = CORE_FPU_OFFSET;
+ asect2 = (asection *)bfd_zalloc (abfd,
+ sizeof (asection));
+ if (asect2 == NULL) {
+ bfd_set_error(bfd_error_no_memory);
+ goto punt;
+ }
+ asect2->_raw_size = coreseg.c_size - CORE_FPU_OFFSET;
+ asect2->vma = 0;
+ asect2->filepos = asect->filepos + CORE_FPU_OFFSET;
+ asect2->alignment_power = 2;
+ asect2->next = abfd->sections;
+ asect2->name = ".reg2";
+ asect2->flags = SEC_ALLOC + SEC_HAS_CONTENTS;
+ abfd->sections = asect2;
+ abfd->section_count++;
+#endif
+
+ break;
+ case CORE_DATA:
+ asect->name = ".data";
+ asect->flags = SEC_ALLOC+SEC_LOAD+SEC_HAS_CONTENTS;
+ break;
+ case CORE_STACK:
+ asect->name = ".stack";
+ asect->flags = SEC_ALLOC+SEC_LOAD+SEC_HAS_CONTENTS;
+ break;
+ }
+ }
+
+ /* OK, we believe you. You're a core file (sure, sure). */
+ return abfd->xvec;
+
+punt: {
+ asection *anext;
+ for (asect = abfd->sections; asect; asect = anext) {
+ anext = asect->next;
+ free((void *)asect);
+ }
+ }
+ free ((void *)rawptr);
+ abfd->tdata.netbsd_core_data = NULL;
+ abfd->sections = NULL;
+ abfd->section_count = 0;
+ return 0;
+}
+
+static char*
+netbsd_core_core_file_failing_command (abfd)
+ bfd *abfd;
+{
+ /*return core_command (abfd);*/
+ return abfd->tdata.netbsd_core_data->core.c_name;
+}
+
+/* ARGSUSED */
+static int
+netbsd_core_core_file_failing_signal (abfd)
+ bfd *abfd;
+{
+ /*return core_signal (abfd);*/
+ return abfd->tdata.netbsd_core_data->core.c_signo;
+}
+
+/* ARGSUSED */
+static boolean
+netbsd_core_core_file_matches_executable_p (core_bfd, exec_bfd)
+ bfd *core_bfd, *exec_bfd;
+{
+ return true; /* FIXME, We have no way of telling at this point */
+}
+
+/* No archive file support via this BFD */
+#define netbsd_openr_next_archived_file bfd_generic_openr_next_archived_file
+#define netbsd_generic_stat_arch_elt bfd_generic_stat_arch_elt
+#define netbsd_slurp_armap bfd_false
+#define netbsd_slurp_extended_name_table bfd_true
+#define netbsd_write_armap (boolean (*) PARAMS \
+ ((bfd *arch, unsigned int elength, struct orl *map, \
+ unsigned int orl_count, int stridx))) bfd_false
+#define netbsd_truncate_arname bfd_dont_truncate_arname
+#define aout_32_openr_next_archived_file bfd_generic_openr_next_archived_file
+
+#define netbsd_close_and_cleanup bfd_generic_close_and_cleanup
+#define netbsd_set_section_contents (boolean (*) PARAMS \
+ ((bfd *abfd, asection *section, PTR data, file_ptr offset, \
+ bfd_size_type count))) bfd_false
+#define netbsd_get_section_contents bfd_generic_get_section_contents
+#define netbsd_new_section_hook (boolean (*) PARAMS \
+ ((bfd *, sec_ptr))) bfd_true
+#define netbsd_get_symtab_upper_bound bfd_0u
+#define netbsd_get_symtab (unsigned int (*) PARAMS \
+ ((bfd *, struct symbol_cache_entry **))) bfd_0u
+#define netbsd_get_reloc_upper_bound (unsigned int (*) PARAMS \
+ ((bfd *, sec_ptr))) bfd_0u
+#define netbsd_canonicalize_reloc (unsigned int (*) PARAMS \
+ ((bfd *, sec_ptr, arelent **, struct symbol_cache_entry**))) bfd_0u
+#define netbsd_make_empty_symbol (struct symbol_cache_entry * \
+ (*) PARAMS ((bfd *))) bfd_false
+#define netbsd_print_symbol (void (*) PARAMS \
+ ((bfd *, PTR, struct symbol_cache_entry *, \
+ bfd_print_symbol_type))) bfd_false
+#define netbsd_get_symbol_info (void (*) PARAMS \
+ ((bfd *, struct symbol_cache_entry *, \
+ symbol_info *))) bfd_false
+#define netbsd_get_lineno (alent * (*) PARAMS \
+ ((bfd *, struct symbol_cache_entry *))) bfd_nullvoidptr
+#define netbsd_set_arch_mach (boolean (*) PARAMS \
+ ((bfd *, enum bfd_architecture, unsigned long))) bfd_false
+#define netbsd_find_nearest_line (boolean (*) PARAMS \
+ ((bfd *abfd, struct sec *section, \
+ struct symbol_cache_entry **symbols,bfd_vma offset, \
+ CONST char **file, CONST char **func, unsigned int *line))) bfd_false
+#define netbsd_sizeof_headers (int (*) PARAMS \
+ ((bfd *, boolean))) bfd_0
+
+#define netbsd_bfd_debug_info_start bfd_void
+#define netbsd_bfd_debug_info_end bfd_void
+#define netbsd_bfd_debug_info_accumulate (void (*) PARAMS \
+ ((bfd *, struct sec *))) bfd_void
+#define netbsd_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents
+#define netbsd_bfd_relax_section bfd_generic_relax_section
+#define netbsd_bfd_seclet_link \
+ ((boolean (*) PARAMS ((bfd *, PTR, boolean))) bfd_false)
+#define netbsd_bfd_reloc_type_lookup \
+ ((CONST struct reloc_howto_struct *(*) PARAMS ((bfd *, bfd_reloc_code_real_type))) bfd_nullvoidptr)
+#define netbsd_bfd_make_debug_symbol \
+ ((asymbol *(*) PARAMS ((bfd *, void *, unsigned long))) bfd_nullvoidptr)
+
+/* If somebody calls any byte-swapping routines, shoot them. */
+static void
+swap_abort()
+{
+ abort(); /* This way doesn't require any declaration for ANSI to fuck up */
+}
+#define NO_GET ((bfd_vma (*) PARAMS (( const bfd_byte *))) swap_abort )
+#define NO_PUT ((void (*) PARAMS ((bfd_vma, bfd_byte *))) swap_abort )
+#define NO_SIGNED_GET \
+ ((bfd_signed_vma (*) PARAMS (( const bfd_byte *))) swap_abort )
+
+const bfd_target netbsd_core_vec =
+ {
+ "netbsd-core",
+ bfd_target_unknown_flavour,
+ true, /* target byte order */
+ true, /* target headers byte order */
+ (HAS_RELOC | EXEC_P | /* object flags */
+ HAS_LINENO | HAS_DEBUG |
+ HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
+ (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC), /* section flags */
+ 0, /* symbol prefix */
+ ' ', /* ar_pad_char */
+ 16, /* ar_max_namelen */
+ 3, /* minimum alignment power */
+ NO_GET, NO_SIGNED_GET, NO_PUT, /* 64 bit data */
+ NO_GET, NO_SIGNED_GET, NO_PUT, /* 32 bit data */
+ NO_GET, NO_SIGNED_GET, NO_PUT, /* 16 bit data */
+ NO_GET, NO_SIGNED_GET, NO_PUT, /* 64 bit hdrs */
+ NO_GET, NO_SIGNED_GET, NO_PUT, /* 32 bit hdrs */
+ NO_GET, NO_SIGNED_GET, NO_PUT, /* 16 bit hdrs */
+
+ { /* bfd_check_format */
+ _bfd_dummy_target, /* unknown format */
+ _bfd_dummy_target, /* object file */
+ _bfd_dummy_target, /* archive */
+ netbsd_core_core_file_p /* a core file */
+ },
+ { /* bfd_set_format */
+ bfd_false, bfd_false,
+ bfd_false, bfd_false
+ },
+ { /* bfd_write_contents */
+ bfd_false, bfd_false,
+ bfd_false, bfd_false
+ },
+
+ BFD_JUMP_TABLE_GENERIC (_bfd_generic),
+ BFD_JUMP_TABLE_COPY (_bfd_generic),
+ BFD_JUMP_TABLE_CORE (netbsd_core),
+ BFD_JUMP_TABLE_ARCHIVE (_bfd_noarchive),
+ BFD_JUMP_TABLE_SYMBOLS (_bfd_nosymbols),
+ BFD_JUMP_TABLE_RELOCS (_bfd_norelocs),
+ BFD_JUMP_TABLE_WRITE (_bfd_generic),
+ BFD_JUMP_TABLE_LINK (_bfd_nolink),
+ BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
+
+ (PTR) 0 /* backend_data */
+};