+2001-02-18 lars brinkhoff <lars@nocrew.org>
+
+ * Makefile.am: Add PDP-11 a.out target.
+ * config.bfd: Likewise.
+ * configure.in: Likewise.
+ * targets.c: Likewise.
+ * archures.c: Likewise.
+ * bfd-in2.h: Likewise. Add PDP-11 relocations.
+ * libbfd.h: Add PDP-11 relocations.
+ * reloc.c: Likewise.
+ * cpu-pdp11.c: New file.
+ * pdp11.c: New file.
+
+ * libaout.h (GET_WORD) [ARCH_SIZE==16]: Define.
+ (GET_SWORD) [ARCH_SIZE==16]: Likewise.
+ (GET_SWORD) [ARCH_SIZE==16]: Likewise.
+ (PUT_WORD) [ARCH_SIZE==16]: Likewise.
+ (GET_MAGIC): New macro.
+ (PUT_MAGIC): Likewise.
+ * aout-target.h (MY(object_p)): Use GET_MAGIC to read magic word.
+
2001-02-18 Jim Kingdon <jkingdon@engr.sgi.com>
* irix-core.c (irix_core_core_file_p): Set the architecture (GDB
cpu-mcore.lo \
cpu-mips.lo \
cpu-ns32k.lo \
+ cpu-pdp11.lo \
cpu-pj.lo \
cpu-powerpc.lo \
cpu-rs6000.lo \
cpu-mcore.c \
cpu-mips.c \
cpu-ns32k.c \
+ cpu-pdp11.c \
cpu-pj.c \
cpu-powerpc.c \
cpu-rs6000.c \
ns32knetbsd.lo \
oasys.lo \
pc532-mach.lo \
+ pdp11.lo \
pe-arm.lo \
pei-arm.lo \
pe-i386.lo \
ns32knetbsd.c \
oasys.c \
pc532-mach.c \
+ pdp11.c \
pe-arm.c \
pei-arm.c \
pe-i386.c \
cpu-mcore.lo: cpu-mcore.c $(INCDIR)/filenames.h
cpu-mips.lo: cpu-mips.c $(INCDIR)/filenames.h
cpu-ns32k.lo: cpu-ns32k.c $(INCDIR)/filenames.h ns32k.h
+cpu-pdp11.lo: cpu-pdp11.c $(INCDIR)/filenames.h
cpu-pj.lo: cpu-pj.c $(INCDIR)/filenames.h
cpu-powerpc.lo: cpu-powerpc.c $(INCDIR)/filenames.h
cpu-rs6000.lo: cpu-rs6000.c $(INCDIR)/filenames.h
pc532-mach.lo: pc532-mach.c $(INCDIR)/filenames.h libaout.h \
$(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h aout-target.h \
$(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h
+pdp11.lo: pdp11.c libaout.h $(INCDIR)/bfdlink.h \
+ aout-target.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \
+ $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h
pe-arm.lo: pe-arm.c $(INCDIR)/filenames.h coff-arm.c \
$(INCDIR)/coff/arm.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h \
libcoff.h $(INCDIR)/bfdlink.h coffcode.h peicode.h \
cpu-mcore.lo \
cpu-mips.lo \
cpu-ns32k.lo \
+ cpu-pdp11.lo \
cpu-pj.lo \
cpu-powerpc.lo \
cpu-rs6000.lo \
cpu-mcore.c \
cpu-mips.c \
cpu-ns32k.c \
+ cpu-pdp11.c \
cpu-pj.c \
cpu-powerpc.c \
cpu-rs6000.c \
ns32knetbsd.lo \
oasys.lo \
pc532-mach.lo \
+ pdp11.lo \
pe-arm.lo \
pei-arm.lo \
pe-i386.lo \
ns32knetbsd.c \
oasys.c \
pc532-mach.c \
+ pdp11.c \
pe-arm.c \
pei-arm.c \
pe-i386.c \
cpu-mcore.lo: cpu-mcore.c $(INCDIR)/filenames.h
cpu-mips.lo: cpu-mips.c $(INCDIR)/filenames.h
cpu-ns32k.lo: cpu-ns32k.c $(INCDIR)/filenames.h ns32k.h
+cpu-pdp11.lo: cpu-pdp11.c $(INCDIR)/filenames.h
cpu-pj.lo: cpu-pj.c $(INCDIR)/filenames.h
cpu-powerpc.lo: cpu-powerpc.c $(INCDIR)/filenames.h
cpu-rs6000.lo: cpu-rs6000.c $(INCDIR)/filenames.h
pc532-mach.lo: pc532-mach.c $(INCDIR)/filenames.h libaout.h \
$(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h aout-target.h \
$(INCDIR)/aout/stab_gnu.h $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h
+pdp11.lo: pdp11.c libaout.h $(INCDIR)/bfdlink.h \
+ aout-target.h $(INCDIR)/aout/aout64.h $(INCDIR)/aout/stab_gnu.h \
+ $(INCDIR)/aout/stab.def $(INCDIR)/aout/ar.h
pe-arm.lo: pe-arm.c $(INCDIR)/filenames.h coff-arm.c \
$(INCDIR)/coff/arm.h $(INCDIR)/coff/internal.h $(INCDIR)/coff/pe.h \
libcoff.h $(INCDIR)/bfdlink.h coffcode.h peicode.h \
#ifdef SWAP_MAGIC
exec.a_info = SWAP_MAGIC (exec_bytes.e_info);
#else
- exec.a_info = bfd_h_get_32 (abfd, exec_bytes.e_info);
+ exec.a_info = GET_MAGIC (abfd, exec_bytes.e_info);
#endif /* SWAP_MAGIC */
if (N_BADMAG (exec)) return 0;
.#define bfd_mach_h8300 1
.#define bfd_mach_h8300h 2
.#define bfd_mach_h8300s 3
+. bfd_arch_pdp11, {* DEC PDP-11 *}
. bfd_arch_powerpc, {* PowerPC *}
.#define bfd_mach_ppc 0
.#define bfd_mach_ppc_403 403
extern const bfd_arch_info_type bfd_mips_arch;
extern const bfd_arch_info_type bfd_mn10200_arch;
extern const bfd_arch_info_type bfd_mn10300_arch;
+extern const bfd_arch_info_type bfd_pdp11_arch;
extern const bfd_arch_info_type bfd_powerpc_arch;
extern const bfd_arch_info_type bfd_rs6000_arch;
extern const bfd_arch_info_type bfd_pj_arch;
&bfd_mips_arch,
&bfd_mn10200_arch,
&bfd_mn10300_arch,
+ &bfd_pdp11_arch,
&bfd_powerpc_arch,
&bfd_rs6000_arch,
&bfd_sh_arch,
#define bfd_mach_h8300 1
#define bfd_mach_h8300h 2
#define bfd_mach_h8300s 3
+ bfd_arch_pdp11, /* DEC PDP-11 */
bfd_arch_powerpc, /* PowerPC */
#define bfd_mach_ppc 0
#define bfd_mach_ppc_403 403
BFD_RELOC_NS32K_DISP_16_PCREL,
BFD_RELOC_NS32K_DISP_32_PCREL,
+/* PDP11 relocations */
+ BFD_RELOC_PDP11_DISP_8_PCREL,
+ BFD_RELOC_PDP11_DISP_6_PCREL,
+
/* Picojava relocs. Not all of these appear in object files. */
BFD_RELOC_PJ_CODE_HI16,
BFD_RELOC_PJ_CODE_LO16,
m68*) targ_archs=bfd_m68k_arch ;;
m88*) targ_archs=bfd_m88k_arch ;;
mips*) targ_archs=bfd_mips_arch ;;
+pdp11*) targ_archs=bfd_pdp11_arch ;;
pj*) targ_archs="bfd_pj_arch bfd_i386_arch";;
powerpc*) targ_archs="bfd_rs6000_arch bfd_powerpc_arch" ;;
s390*) targ_archs=bfd_s390_arch ;;
targ_underscore=yes
;;
+ pdp11-*-*)
+ targ_defvec=pdp11_aout_vec
+ targ_underscore=yes
+ ;;
+
pj-*-*)
targ_defvec=bfd_elf32_pj_vec
targ_selvecs="bfd_elf32_pj_vec bfd_elf32_pjl_vec"
nlm32_powerpc_vec) tb="$tb nlm32-ppc.lo nlm32.lo nlm.lo" ;;
pc532netbsd_vec) tb="$tb ns32knetbsd.lo aout-ns32k.lo" ;;
pc532machaout_vec) tb="$tb pc532-mach.lo aout-ns32k.lo" ;;
+ pdp11_aout_vec) tb="$tb pdp11.lo" ;;
pmac_xcoff_vec) tb="$tb coff-pmac.lo xcofflink.lo" ;;
rs6000coff_vec) tb="$tb coff-rs6000.lo xcofflink.lo" ;;
bfd_powerpc_pe_vec) tb="$tb pe-ppc.lo peigen.lo cofflink.lo" ;;
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6186: checking for $ac_hdr" >&5
+echo "configure:6187: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6191 "configure"
+#line 6192 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6196: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6197: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
for ac_func in getpagesize
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6225: checking for $ac_func" >&5
+echo "configure:6226: checking for $ac_func" >&5
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 6230 "configure"
+#line 6231 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:6253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6254: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
done
echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:6278: checking for working mmap" >&5
+echo "configure:6279: checking for working mmap" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_func_mmap_fixed_mapped=no
else
cat > conftest.$ac_ext <<EOF
-#line 6286 "configure"
+#line 6287 "configure"
#include "confdefs.h"
/* Thanks to Mike Haertel and Jim Avera for this test.
}
EOF
-if { (eval echo configure:6426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6427: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_fixed_mapped=yes
else
for ac_func in madvise mprotect
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:6451: checking for $ac_func" >&5
+echo "configure:6452: checking for $ac_func" >&5
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 6456 "configure"
+#line 6457 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:6479: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
nlm32_powerpc_vec) tb="$tb nlm32-ppc.lo nlm32.lo nlm.lo" ;;
pc532netbsd_vec) tb="$tb ns32knetbsd.lo aout-ns32k.lo" ;;
pc532machaout_vec) tb="$tb pc532-mach.lo aout-ns32k.lo" ;;
+ pdp11_aout_vec) tb="$tb pdp11.lo" ;;
pmac_xcoff_vec) tb="$tb coff-pmac.lo xcofflink.lo" ;;
rs6000coff_vec) tb="$tb coff-rs6000.lo xcofflink.lo" ;;
bfd_powerpc_pe_vec) tb="$tb pe-ppc.lo peigen.lo cofflink.lo" ;;
--- /dev/null
+/* BFD back-end for PDP-11 support.
+ Copyright (C) 2001 Free Software Foundation, Inc.
+
+This file is part of BFD, the Binary File Descriptor library.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 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"
+
+const bfd_arch_info_type bfd_pdp11_arch =
+ {
+ 16, /* 16 bits in a word */
+ 16, /* 16 bits in an address */
+ 8, /* 8 bits in a byte */
+ bfd_arch_pdp11,
+ 0, /* only 1 machine */
+ "pdp11",
+ "pdp11",
+ 1, /* aligment = 16 bit */
+ true, /* the one and only */
+ bfd_default_compatible,
+ bfd_default_scan ,
+ 0,
+ };
+
#if ARCH_SIZE==64
#define GET_WORD bfd_h_get_64
#define GET_SWORD bfd_h_get_signed_64
+#define GET_MAGIC bfd_h_get_32
#define PUT_WORD bfd_h_put_64
+#define PUT_MAGIC bfd_h_put_32
#ifndef NAME
#define NAME(x,y) CAT3(x,_64_,y)
#endif
#define JNAME(x) CAT(x,_64)
#define BYTES_IN_WORD 8
+#else
+#if ARCH_SIZE==16
+#define GET_WORD bfd_h_get_16
+#define GET_SWORD bfd_h_get_signed_16
+#define GET_MAGIC bfd_h_get_16
+#define PUT_WORD bfd_h_put_16
+#define PUT_MAGIC bfd_h_put_16
+#ifndef NAME
+#define NAME(x,y) CAT3(x,_16_,y)
+#endif
+#define JNAME(x) CAT(x,_16)
+#define BYTES_IN_WORD 2
#else /* ARCH_SIZE == 32 */
#define GET_WORD bfd_h_get_32
#define GET_SWORD bfd_h_get_signed_32
+#define GET_MAGIC bfd_h_get_32
#define PUT_WORD bfd_h_put_32
+#define PUT_MAGIC bfd_h_put_32
#ifndef NAME
#define NAME(x,y) CAT3(x,_32_,y)
#endif
#define JNAME(x) CAT(x,_32)
#define BYTES_IN_WORD 4
#endif /* ARCH_SIZE==32 */
+#endif /* ARCH_SIZE==64 */
/* Declare at file level, since used in parameter lists, which have
weird scope. */
/* A.out uses the generic versions of these routines... */
+#define aout_16_get_section_contents _bfd_generic_get_section_contents
+
#define aout_32_get_section_contents _bfd_generic_get_section_contents
#define aout_64_get_section_contents _bfd_generic_get_section_contents
"BFD_RELOC_NS32K_DISP_8_PCREL",
"BFD_RELOC_NS32K_DISP_16_PCREL",
"BFD_RELOC_NS32K_DISP_32_PCREL",
+ "BFD_RELOC_PDP11_DISP_8_PCREL",
+ "BFD_RELOC_PDP11_DISP_6_PCREL",
"BFD_RELOC_PJ_CODE_HI16",
"BFD_RELOC_PJ_CODE_LO16",
"BFD_RELOC_PJ_CODE_DIR16",
--- /dev/null
+/* BFD back-end for PDP-11 a.out binaries.
+ Copyright (C) 2001 Free Software Foundation, Inc.
+
+This file is part of BFD, the Binary File Descriptor library.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 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. */
+
+/* BFD backend for PDP-11, running 2.11BSD in particular.
+
+ This file was hacked up by looking hard at the existing vaxnetbsd
+ back end and the header files in 2.11BSD.
+
+ TODO
+ * support for V7 file formats
+ * support for overlay object files (see 2.11 a.out(5))
+ * support for old and very old archives
+ (see 2.11 ar(5), historical section)
+
+ Search for TODO to find other areas needing more work. */
+
+#define BYTES_IN_WORD 2
+#define BYTES_IN_LONG 4
+#define ARCH_SIZE 16
+#undef TARGET_IS_BIG_ENDIAN_P
+
+#define TARGET_PAGE_SIZE 1024
+#define SEGMENT__SIZE TARGET_PAGE_SIZE
+
+#define DEFAULT_ARCH bfd_arch_pdp11
+#define DEFAULT_MID M_PDP11
+
+#define MY(OP) CAT(pdp11_aout_,OP)
+/* This needs to start with a.out so GDB knows it is an a.out variant. */
+#define TARGETNAME "a.out-pdp11"
+
+/* This is the normal load address for executables. */
+#define TEXT_START_ADDR 0
+
+/* The header is not included in the text segment. */
+#define N_HEADER_IN_TEXT(x) 0
+
+/* There are no shared libraries. */
+#define N_SHARED_LIB(x) 0
+
+/* There is no flags field. */
+#define N_FLAGS(exec) 0
+
+#define N_SET_FLAGS(exec, flags) do { } while (0)
+#define N_BADMAG(x) (((x).a_info != OMAGIC) && \
+ ((x).a_info != NMAGIC) && \
+ ((x).a_info != A_MAGIC3) && \
+ ((x).a_info != A_MAGIC4) && \
+ ((x).a_info != A_MAGIC5) && \
+ ((x).a_info != A_MAGIC6))
+
+#include "bfd.h"
+
+#define external_exec pdp11_external_exec
+struct pdp11_external_exec
+ {
+ bfd_byte e_info[2]; /* magic number */
+ bfd_byte e_text[2]; /* length of text section in bytes */
+ bfd_byte e_data[2]; /* length of data section in bytes */
+ bfd_byte e_bss[2]; /* length of bss area in bytes */
+ bfd_byte e_syms[2]; /* length of symbol table in bytes */
+ bfd_byte e_entry[2]; /* start address */
+ bfd_byte e_unused[2]; /* not used */
+ bfd_byte e_flag[2]; /* relocation info stripped */
+ bfd_byte e_relocatable; /* ugly hack */
+ };
+
+#define EXEC_BYTES_SIZE (8 * 2)
+
+#define A_MAGIC1 OMAGIC
+#define OMAGIC 0407 /* ...object file or impure executable. */
+#define A_MAGIC2 NMAGIC
+#define NMAGIC 0410 /* pure executable. */
+#define ZMAGIC 0413 /* demand-paged executable. */
+#define A_MAGIC3 0411 /* separated I&D */
+#define A_MAGIC4 0405 /* overlay */
+#define A_MAGIC5 0430 /* auto-overlay (nonseparate) */
+#define A_MAGIC6 0431 /* auto-overlay (separate) */
+#define QMAGIC 0
+#define BMAGIC 0
+
+#define A_FLAG_RELOC_STRIPPED 0x0001
+
+#define external_nlist pdp11_external_nlist
+struct pdp11_external_nlist
+ {
+ bfd_byte e_unused[2]; /* unused */
+ bfd_byte e_strx[2]; /* index into string table of name */
+ bfd_byte e_type[1]; /* type of symbol */
+ bfd_byte e_ovly[1]; /* overlay number */
+ bfd_byte e_value[2]; /* value of symbol */
+ };
+
+#define EXTERNAL_NLIST_SIZE 8
+
+#define N_TXTOFF(x) (EXEC_BYTES_SIZE)
+#define N_DATOFF(x) (N_TXTOFF(x) + (x).a_text)
+#define N_TRELOFF(x) (N_DATOFF(x) + (x).a_data)
+#define N_DRELOFF(x) (N_TRELOFF(x) + (x).a_trsize)
+#define N_SYMOFF(x) (N_DRELOFF(x) + (x).a_drsize)
+#define N_STROFF(x) (N_SYMOFF(x) + (x).a_syms)
+
+#define WRITE_HEADERS(abfd, execp) pdp11_aout_write_headers (abfd, execp)
+
+#include "sysdep.h"
+#include "libbfd.h"
+#include "libaout.h"
+
+#define SWAP_MAGIC(ext) bfd_getl16 (ext)
+
+#define MY_entry_is_text_address 1
+
+#define MY_write_object_contents MY(write_object_contents)
+static boolean MY(write_object_contents) PARAMS ((bfd *abfd));
+#define MY_text_includes_header 1
+
+bfd_vma bfd_getp32 PARAMS ((const bfd_byte *));
+bfd_signed_vma bfd_getp_signed_32 PARAMS ((const bfd_byte *));
+void bfd_putp32 PARAMS ((bfd_vma, bfd_byte *));
+
+#define MY_BFD_TARGET
+
+#include "aout-target.h"
+
+const bfd_target MY(vec) =
+{
+ TARGETNAME, /* name */
+ bfd_target_aout_flavour,
+ BFD_ENDIAN_LITTLE, /* target byte order (little) */
+ BFD_ENDIAN_LITTLE, /* target headers byte order (little) */
+ (HAS_RELOC | EXEC_P | /* object flags */
+ HAS_LINENO | HAS_DEBUG |
+ HAS_SYMS | HAS_LOCALS | WP_TEXT),
+ (SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA),
+ MY_symbol_leading_char,
+ AR_PAD_CHAR, /* ar_pad_char */
+ 15, /* ar_max_namelen */
+ bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+ bfd_getp32, bfd_getp_signed_32, bfd_putp32,
+ bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
+ bfd_getl64, bfd_getl_signed_64, bfd_putl64,
+ bfd_getp32, bfd_getp_signed_32, bfd_putp32,
+ bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
+ {_bfd_dummy_target, MY_object_p, /* bfd_check_format */
+ bfd_generic_archive_p, MY_core_file_p},
+ {bfd_false, MY_mkobject, /* bfd_set_format */
+ _bfd_generic_mkarchive, bfd_false},
+ {bfd_false, MY_write_object_contents, /* bfd_write_contents */
+ _bfd_write_archive_contents, bfd_false},
+
+ BFD_JUMP_TABLE_GENERIC (MY),
+ BFD_JUMP_TABLE_COPY (MY),
+ BFD_JUMP_TABLE_CORE (MY),
+ BFD_JUMP_TABLE_ARCHIVE (MY),
+ BFD_JUMP_TABLE_SYMBOLS (MY),
+ BFD_JUMP_TABLE_RELOCS (MY),
+ BFD_JUMP_TABLE_WRITE (MY),
+ BFD_JUMP_TABLE_LINK (MY),
+ BFD_JUMP_TABLE_DYNAMIC (MY),
+
+ /* Alternative_target */
+ NULL,
+
+ (PTR) MY_backend_data,
+};
+
+/* start of modified aoutx.h */
+/* BFD semi-generic back-end for a.out binaries.
+ Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 1998
+ Free Software Foundation, Inc.
+ Written by Cygnus Support.
+
+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. */
+
+/*
+SECTION
+ a.out backends
+
+
+DESCRIPTION
+
+ BFD supports a number of different flavours of a.out format,
+ though the major differences are only the sizes of the
+ structures on disk, and the shape of the relocation
+ information.
+
+ The support is split into a basic support file @file{aoutx.h}
+ and other files which derive functions from the base. One
+ derivation file is @file{aoutf1.h} (for a.out flavour 1), and
+ adds to the basic a.out functions support for sun3, sun4, 386
+ and 29k a.out files, to create a target jump vector for a
+ specific target.
+
+ This information is further split out into more specific files
+ for each machine, including @file{sunos.c} for sun3 and sun4,
+ @file{newsos3.c} for the Sony NEWS, and @file{demo64.c} for a
+ demonstration of a 64 bit a.out format.
+
+ The base file @file{aoutx.h} defines general mechanisms for
+ reading and writing records to and from disk and various
+ other methods which BFD requires. It is included by
+ @file{aout32.c} and @file{aout64.c} to form the names
+ <<aout_32_swap_exec_header_in>>, <<aout_64_swap_exec_header_in>>, etc.
+
+ As an example, this is what goes on to make the back end for a
+ sun4, from @file{aout32.c}:
+
+| #define ARCH_SIZE 32
+| #include "aoutx.h"
+
+ Which exports names:
+
+| ...
+| aout_32_canonicalize_reloc
+| aout_32_find_nearest_line
+| aout_32_get_lineno
+| aout_32_get_reloc_upper_bound
+| ...
+
+ from @file{sunos.c}:
+
+| #define TARGET_NAME "a.out-sunos-big"
+| #define VECNAME sunos_big_vec
+| #include "aoutf1.h"
+
+ requires all the names from @file{aout32.c}, and produces the jump vector
+
+| sunos_big_vec
+
+ The file @file{host-aout.c} is a special case. It is for a large set
+ of hosts that use ``more or less standard'' a.out files, and
+ for which cross-debugging is not interesting. It uses the
+ standard 32-bit a.out support routines, but determines the
+ file offsets and addresses of the text, data, and BSS
+ sections, the machine architecture and machine type, and the
+ entry point address, in a host-dependent manner. Once these
+ values have been determined, generic code is used to handle
+ the object file.
+
+ When porting it to run on a new system, you must supply:
+
+| HOST_PAGE_SIZE
+| HOST_SEGMENT_SIZE
+| HOST_MACHINE_ARCH (optional)
+| HOST_MACHINE_MACHINE (optional)
+| HOST_TEXT_START_ADDR
+| HOST_STACK_END_ADDR
+
+ in the file @file{../include/sys/h-@var{XXX}.h} (for your host). These
+ values, plus the structures and macros defined in @file{a.out.h} on
+ your host system, will produce a BFD target that will access
+ ordinary a.out files on your host. To configure a new machine
+ to use @file{host-aout.c}, specify:
+
+| TDEFAULTS = -DDEFAULT_VECTOR=host_aout_big_vec
+| TDEPFILES= host-aout.o trad-core.o
+
+ in the @file{config/@var{XXX}.mt} file, and modify @file{configure.in}
+ to use the
+ @file{@var{XXX}.mt} file (by setting "<<bfd_target=XXX>>") when your
+ configuration is selected.
+
+*/
+
+/* Some assumptions:
+ * Any BFD with D_PAGED set is ZMAGIC, and vice versa.
+ Doesn't matter what the setting of WP_TEXT is on output, but it'll
+ get set on input.
+ * Any BFD with D_PAGED clear and WP_TEXT set is NMAGIC.
+ * Any BFD with both flags clear is OMAGIC.
+ (Just want to make these explicit, so the conditions tested in this
+ file make sense if you're more familiar with a.out than with BFD.) */
+
+#define KEEPIT udata.i
+
+#include <string.h> /* For strchr and friends */
+#include <ctype.h>
+#include "bfd.h"
+#include "sysdep.h"
+#include "bfdlink.h"
+
+#include "libaout.h"
+/*#include "libbfd.h"*/
+#include "aout/aout64.h"
+#include "aout/stab_gnu.h"
+#include "aout/ar.h"
+
+#undef N_TYPE
+#undef N_UNDF
+#undef N_ABS
+#undef N_TEXT
+#undef N_DATA
+#undef N_BSS
+#undef N_REG
+#undef N_FN
+#undef N_EXT
+#define N_TYPE 0x1f /* type mask */
+#define N_UNDF 0x00 /* undefined */
+#define N_ABS 0x01 /* absolute */
+#define N_TEXT 0x02 /* text segment */
+#define N_DATA 0x03 /* data segment */
+#define N_BSS 0x04 /* bss segment */
+#define N_REG 0x14 /* register symbol */
+#define N_FN 0x1f /* file name */
+
+#define N_EXT 0x20 /* external flag */
+
+#define RELOC_SIZE 2
+
+struct pdp11_aout_reloc_external
+{
+ bfd_byte e_reloc_entry[2];
+};
+
+#define RELFLG 0x0001 /* pc-relative flag */
+#define RTYPE 0x000e /* type mask */
+#define RIDXMASK 0xfff0 /* index mask */
+
+#define RABS 0x00 /* absolute */
+#define RTEXT 0x02 /* text */
+#define RDATA 0x04 /* data */
+#define RBSS 0x06 /* bss */
+#define REXT 0x08 /* external */
+
+#define RINDEX(x) (((x) & 0xfff0) >> 4)
+
+static boolean aout_get_external_symbols PARAMS ((bfd *));
+static boolean translate_from_native_sym_flags
+ PARAMS ((bfd *, aout_symbol_type *));
+static boolean translate_to_native_sym_flags
+ PARAMS ((bfd *, asymbol *, struct external_nlist *));
+static void adjust_o_magic PARAMS ((bfd *, struct internal_exec *));
+static void adjust_z_magic PARAMS ((bfd *, struct internal_exec *));
+static void adjust_n_magic PARAMS ((bfd *, struct internal_exec *));
+
+/*
+SUBSECTION
+ Relocations
+
+DESCRIPTION
+ The file @file{aoutx.h} provides for both the @emph{standard}
+ and @emph{extended} forms of a.out relocation records.
+
+ The standard records contain only an
+ address, a symbol index, and a type field. The extended records
+ (used on 29ks and sparcs) also have a full integer for an
+ addend.
+
+*/
+
+#ifndef MY_final_link_relocate
+#define MY_final_link_relocate _bfd_final_link_relocate
+#endif
+
+#ifndef MY_relocate_contents
+#define MY_relocate_contents _bfd_relocate_contents
+#endif
+
+reloc_howto_type howto_table_pdp11[] =
+{
+ /* type rs size bsz pcrel bitpos ovrf sf name part_inpl readmask setmask pcdone */
+HOWTO( 0, 0, 1, 16, false, 0, complain_overflow_signed,0,"16", true, 0x0000ffff,0x0000ffff, false),
+HOWTO( 1, 0, 1, 16, true, 0, complain_overflow_signed,0,"DISP16", true, 0x0000ffff,0x0000ffff, false),
+};
+
+#define TABLE_SIZE(TABLE) (sizeof(TABLE)/sizeof(TABLE[0]))
+
+reloc_howto_type *
+NAME(aout,reloc_type_lookup) (abfd,code)
+ bfd * abfd ATTRIBUTE_UNUSED;
+ bfd_reloc_code_real_type code;
+{
+ switch (code)
+ {
+ case BFD_RELOC_16:
+ return &howto_table_pdp11[0];
+ case BFD_RELOC_16_PCREL:
+ return &howto_table_pdp11[1];
+ default:
+ return (reloc_howto_type *)NULL;
+ }
+}
+
+static int
+pdp11_aout_write_headers (abfd, execp)
+ bfd *abfd;
+ struct internal_exec *execp;
+{
+ struct external_exec exec_bytes;
+ bfd_size_type text_size;
+ file_ptr text_end;
+
+ if (adata(abfd).magic == undecided_magic)
+ NAME(aout,adjust_sizes_and_vmas) (abfd, &text_size, &text_end);
+
+ execp->a_syms = bfd_get_symcount (abfd) * EXTERNAL_NLIST_SIZE;
+ execp->a_entry = bfd_get_start_address (abfd);
+
+ if (obj_textsec (abfd)->reloc_count > 0 ||
+ obj_datasec (abfd)->reloc_count > 0)
+ {
+ execp->a_trsize = execp->a_text;
+ execp->a_drsize = execp->a_data;
+ }
+ else
+ {
+ execp->a_trsize = 0;
+ execp->a_drsize = 0;
+ }
+
+ NAME(aout,swap_exec_header_out) (abfd, execp, &exec_bytes);
+
+ if (bfd_seek (abfd, (file_ptr) 0, SEEK_SET) != 0)
+ return false;
+
+ if (bfd_write ((PTR) &exec_bytes, 1, EXEC_BYTES_SIZE, abfd)
+ != EXEC_BYTES_SIZE)
+ return false;
+
+ /* Now write out reloc info, followed by syms and strings */
+
+ if (bfd_get_outsymbols (abfd) != (asymbol **) NULL
+ && bfd_get_symcount (abfd) != 0)
+ {
+ if (bfd_seek (abfd, (file_ptr)(N_SYMOFF(*execp)), SEEK_SET) != 0)
+ return false;
+
+ if (! NAME(aout,write_syms)(abfd)) return false;
+ }
+
+ if (obj_textsec (abfd)->reloc_count > 0 ||
+ obj_datasec (abfd)->reloc_count > 0)
+ {
+ if (bfd_seek (abfd, (file_ptr)(N_TRELOFF(*execp)), SEEK_SET) != 0)
+ return false;
+ if (!NAME(aout,squirt_out_relocs) (abfd, obj_textsec (abfd)))
+ return false;
+
+ if (bfd_seek (abfd, (file_ptr)(N_DRELOFF(*execp)), SEEK_SET) != 0)
+ return false;
+ if (!NAME(aout,squirt_out_relocs)(abfd, obj_datasec (abfd)))
+ return false;
+ }
+
+ return true;
+}
+
+/* Write an object file.
+ Section contents have already been written. We write the
+ file header, symbols, and relocation. */
+
+static boolean
+MY(write_object_contents) (abfd)
+ bfd *abfd;
+{
+ struct internal_exec *execp = exec_hdr (abfd);
+
+ /* We must make certain that the magic number has been set. This
+ will normally have been done by set_section_contents, but only if
+ there actually are some section contents. */
+ if (! abfd->output_has_begun)
+ {
+ bfd_size_type text_size;
+ file_ptr text_end;
+
+ NAME(aout,adjust_sizes_and_vmas) (abfd, &text_size, &text_end);
+ }
+
+ obj_reloc_entry_size (abfd) = RELOC_SIZE;
+
+ return WRITE_HEADERS(abfd, execp);
+}
+
+/*
+SUBSECTION
+ Internal entry points
+
+DESCRIPTION
+ @file{aoutx.h} exports several routines for accessing the
+ contents of an a.out file, which are gathered and exported in
+ turn by various format specific files (eg sunos.c).
+
+*/
+
+/*
+FUNCTION
+ aout_@var{size}_swap_exec_header_in
+
+SYNOPSIS
+ void aout_@var{size}_swap_exec_header_in,
+ (bfd *abfd,
+ struct external_exec *raw_bytes,
+ struct internal_exec *execp);
+
+DESCRIPTION
+ Swap the information in an executable header @var{raw_bytes} taken
+ from a raw byte stream memory image into the internal exec header
+ structure @var{execp}.
+*/
+
+#ifndef NAME_swap_exec_header_in
+void
+NAME(aout,swap_exec_header_in) (abfd, raw_bytes, execp)
+ bfd *abfd;
+ struct external_exec *raw_bytes;
+ struct internal_exec *execp;
+{
+ struct external_exec *bytes = (struct external_exec *)raw_bytes;
+
+ /* The internal_exec structure has some fields that are unused in this
+ configuration (IE for i960), so ensure that all such uninitialized
+ fields are zero'd out. There are places where two of these structs
+ are memcmp'd, and thus the contents do matter. */
+ memset ((PTR) execp, 0, sizeof (struct internal_exec));
+ /* Now fill in fields in the execp, from the bytes in the raw data. */
+ execp->a_info = GET_MAGIC (abfd, bytes->e_info);
+ execp->a_text = GET_WORD (abfd, bytes->e_text);
+ execp->a_data = GET_WORD (abfd, bytes->e_data);
+ execp->a_bss = GET_WORD (abfd, bytes->e_bss);
+ execp->a_syms = GET_WORD (abfd, bytes->e_syms);
+ execp->a_entry = GET_WORD (abfd, bytes->e_entry);
+
+ if (GET_WORD (abfd, bytes->e_flag) & A_FLAG_RELOC_STRIPPED)
+ {
+ execp->a_trsize = 0;
+ execp->a_drsize = 0;
+ }
+ else
+ {
+ execp->a_trsize = execp->a_text;
+ execp->a_drsize = execp->a_data;
+ }
+}
+#define NAME_swap_exec_header_in NAME(aout,swap_exec_header_in)
+#endif
+
+/*
+FUNCTION
+ aout_@var{size}_swap_exec_header_out
+
+SYNOPSIS
+ void aout_@var{size}_swap_exec_header_out
+ (bfd *abfd,
+ struct internal_exec *execp,
+ struct external_exec *raw_bytes);
+
+DESCRIPTION
+ Swap the information in an internal exec header structure
+ @var{execp} into the buffer @var{raw_bytes} ready for writing to disk.
+*/
+void
+NAME(aout,swap_exec_header_out) (abfd, execp, raw_bytes)
+ bfd *abfd;
+ struct internal_exec *execp;
+ struct external_exec *raw_bytes;
+{
+ struct external_exec *bytes = (struct external_exec *)raw_bytes;
+
+ /* Now fill in fields in the raw data, from the fields in the exec struct. */
+ PUT_MAGIC (abfd, execp->a_info, bytes->e_info);
+ PUT_WORD (abfd, execp->a_text, bytes->e_text);
+ PUT_WORD (abfd, execp->a_data, bytes->e_data);
+ PUT_WORD (abfd, execp->a_bss, bytes->e_bss);
+ PUT_WORD (abfd, execp->a_syms, bytes->e_syms);
+ PUT_WORD (abfd, execp->a_entry, bytes->e_entry);
+ PUT_WORD (abfd, 0, bytes->e_unused);
+
+ if ((execp->a_trsize == 0 || execp->a_text == 0) &&
+ (execp->a_drsize == 0 || execp->a_data == 0))
+ PUT_WORD (abfd, A_FLAG_RELOC_STRIPPED, bytes->e_flag);
+ else if (execp->a_trsize == execp->a_text &&
+ execp->a_drsize == execp->a_data)
+ PUT_WORD (abfd, 0, bytes->e_flag);
+ else
+ {
+ /* TODO: print a proper warning message */
+ fprintf (stderr, "BFD:%s:%d: internal error\n", __FILE__, __LINE__);
+ PUT_WORD (abfd, 0, bytes->e_flag);
+ }
+}
+
+/* Make all the section for an a.out file. */
+
+boolean
+NAME(aout,make_sections) (abfd)
+ bfd *abfd;
+{
+ if (obj_textsec (abfd) == (asection *) NULL
+ && bfd_make_section (abfd, ".text") == (asection *) NULL)
+ return false;
+ if (obj_datasec (abfd) == (asection *) NULL
+ && bfd_make_section (abfd, ".data") == (asection *) NULL)
+ return false;
+ if (obj_bsssec (abfd) == (asection *) NULL
+ && bfd_make_section (abfd, ".bss") == (asection *) NULL)
+ return false;
+ return true;
+}
+
+/*
+FUNCTION
+ aout_@var{size}_some_aout_object_p
+
+SYNOPSIS
+ const bfd_target *aout_@var{size}_some_aout_object_p
+ (bfd *abfd,
+ const bfd_target *(*callback_to_real_object_p)());
+
+DESCRIPTION
+ Some a.out variant thinks that the file open in @var{abfd}
+ checking is an a.out file. Do some more checking, and set up
+ for access if it really is. Call back to the calling
+ environment's "finish up" function just before returning, to
+ handle any last-minute setup.
+*/
+
+const bfd_target *
+NAME(aout,some_aout_object_p) (abfd, execp, callback_to_real_object_p)
+ bfd *abfd;
+ struct internal_exec *execp;
+ const bfd_target *(*callback_to_real_object_p) PARAMS ((bfd *));
+{
+ struct aout_data_struct *rawptr, *oldrawptr;
+ const bfd_target *result;
+
+ rawptr = (struct aout_data_struct *) bfd_zalloc (abfd, sizeof (struct aout_data_struct ));
+ if (rawptr == NULL)
+ return 0;
+
+ oldrawptr = abfd->tdata.aout_data;
+ abfd->tdata.aout_data = rawptr;
+
+ /* Copy the contents of the old tdata struct.
+ In particular, we want the subformat, since for hpux it was set in
+ hp300hpux.c:swap_exec_header_in and will be used in
+ hp300hpux.c:callback. */
+ if (oldrawptr != NULL)
+ *abfd->tdata.aout_data = *oldrawptr;
+
+ abfd->tdata.aout_data->a.hdr = &rawptr->e;
+ *(abfd->tdata.aout_data->a.hdr) = *execp; /* Copy in the internal_exec struct */
+ execp = abfd->tdata.aout_data->a.hdr;
+
+ /* Set the file flags */
+ abfd->flags = BFD_NO_FLAGS;
+ if (execp->a_drsize || execp->a_trsize)
+ abfd->flags |= HAS_RELOC;
+ /* Setting of EXEC_P has been deferred to the bottom of this function */
+ if (execp->a_syms)
+ abfd->flags |= HAS_LINENO | HAS_DEBUG | HAS_SYMS | HAS_LOCALS;
+ if (N_DYNAMIC(*execp))
+ abfd->flags |= DYNAMIC;
+
+ if (N_MAGIC (*execp) == ZMAGIC)
+ {
+ abfd->flags |= D_PAGED | WP_TEXT;
+ adata (abfd).magic = z_magic;
+ }
+ else if (N_MAGIC (*execp) == QMAGIC)
+ {
+ abfd->flags |= D_PAGED | WP_TEXT;
+ adata (abfd).magic = z_magic;
+ adata (abfd).subformat = q_magic_format;
+ }
+ else if (N_MAGIC (*execp) == NMAGIC)
+ {
+ abfd->flags |= WP_TEXT;
+ adata (abfd).magic = n_magic;
+ }
+ else if (N_MAGIC (*execp) == OMAGIC
+ || N_MAGIC (*execp) == BMAGIC)
+ adata (abfd).magic = o_magic;
+ else
+ {
+ /* Should have been checked with N_BADMAG before this routine
+ was called. */
+ abort ();
+ }
+
+ bfd_get_start_address (abfd) = execp->a_entry;
+
+ obj_aout_symbols (abfd) = (aout_symbol_type *)NULL;
+ bfd_get_symcount (abfd) = execp->a_syms / sizeof (struct external_nlist);
+
+ /* The default relocation entry size is that of traditional V7 Unix. */
+ obj_reloc_entry_size (abfd) = RELOC_SIZE;
+
+ /* The default symbol entry size is that of traditional Unix. */
+ obj_symbol_entry_size (abfd) = EXTERNAL_NLIST_SIZE;
+
+#ifdef USE_MMAP
+ bfd_init_window (&obj_aout_sym_window (abfd));
+ bfd_init_window (&obj_aout_string_window (abfd));
+#endif
+ obj_aout_external_syms (abfd) = NULL;
+ obj_aout_external_strings (abfd) = NULL;
+ obj_aout_sym_hashes (abfd) = NULL;
+
+ if (! NAME(aout,make_sections) (abfd))
+ return NULL;
+
+ obj_datasec (abfd)->_raw_size = execp->a_data;
+ obj_bsssec (abfd)->_raw_size = execp->a_bss;
+
+ obj_textsec (abfd)->flags =
+ (execp->a_trsize != 0
+ ? (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS | SEC_RELOC)
+ : (SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_HAS_CONTENTS));
+ obj_datasec (abfd)->flags =
+ (execp->a_drsize != 0
+ ? (SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS | SEC_RELOC)
+ : (SEC_ALLOC | SEC_LOAD | SEC_DATA | SEC_HAS_CONTENTS));
+ obj_bsssec (abfd)->flags = SEC_ALLOC;
+
+#ifdef THIS_IS_ONLY_DOCUMENTATION
+ /* The common code can't fill in these things because they depend
+ on either the start address of the text segment, the rounding
+ up of virtual addresses between segments, or the starting file
+ position of the text segment -- all of which varies among different
+ versions of a.out. */
+
+ /* Call back to the format-dependent code to fill in the rest of the
+ fields and do any further cleanup. Things that should be filled
+ in by the callback: */
+
+ struct exec *execp = exec_hdr (abfd);
+
+ obj_textsec (abfd)->size = N_TXTSIZE(*execp);
+ obj_textsec (abfd)->raw_size = N_TXTSIZE(*execp);
+ /* data and bss are already filled in since they're so standard */
+
+ /* The virtual memory addresses of the sections */
+ obj_textsec (abfd)->vma = N_TXTADDR(*execp);
+ obj_datasec (abfd)->vma = N_DATADDR(*execp);
+ obj_bsssec (abfd)->vma = N_BSSADDR(*execp);
+
+ /* The file offsets of the sections */
+ obj_textsec (abfd)->filepos = N_TXTOFF(*execp);
+ obj_datasec (abfd)->filepos = N_DATOFF(*execp);
+
+ /* The file offsets of the relocation info */
+ obj_textsec (abfd)->rel_filepos = N_TRELOFF(*execp);
+ obj_datasec (abfd)->rel_filepos = N_DRELOFF(*execp);
+
+ /* The file offsets of the string table and symbol table. */
+ obj_str_filepos (abfd) = N_STROFF (*execp);
+ obj_sym_filepos (abfd) = N_SYMOFF (*execp);
+
+ /* Determine the architecture and machine type of the object file. */
+ abfd->obj_arch = bfd_arch_obscure;
+
+ adata(abfd)->page_size = TARGET_PAGE_SIZE;
+ adata(abfd)->segment_size = SEGMENT_SIZE;
+ adata(abfd)->exec_bytes_size = EXEC_BYTES_SIZE;
+
+ return abfd->xvec;
+
+ /* The architecture is encoded in various ways in various a.out variants,
+ or is not encoded at all in some of them. The relocation size depends
+ on the architecture and the a.out variant. Finally, the return value
+ is the bfd_target vector in use. If an error occurs, return zero and
+ set bfd_error to the appropriate error code.
+
+ Formats such as b.out, which have additional fields in the a.out
+ header, should cope with them in this callback as well. */
+#endif /* DOCUMENTATION */
+
+ result = (*callback_to_real_object_p)(abfd);
+
+ /* Now that the segment addresses have been worked out, take a better
+ guess at whether the file is executable. If the entry point
+ is within the text segment, assume it is. (This makes files
+ executable even if their entry point address is 0, as long as
+ their text starts at zero.).
+
+ This test had to be changed to deal with systems where the text segment
+ runs at a different location than the default. The problem is that the
+ entry address can appear to be outside the text segment, thus causing an
+ erroneous conclusion that the file isn't executable.
+
+ To fix this, we now accept any non-zero entry point as an indication of
+ executability. This will work most of the time, since only the linker
+ sets the entry point, and that is likely to be non-zero for most systems. */
+
+ if (execp->a_entry != 0
+ || (execp->a_entry >= obj_textsec(abfd)->vma
+ && execp->a_entry < obj_textsec(abfd)->vma + obj_textsec(abfd)->_raw_size))
+ abfd->flags |= EXEC_P;
+#ifdef STAT_FOR_EXEC
+ else
+ {
+ struct stat stat_buf;
+
+ /* The original heuristic doesn't work in some important cases.
+ The a.out file has no information about the text start
+ address. For files (like kernels) linked to non-standard
+ addresses (ld -Ttext nnn) the entry point may not be between
+ the default text start (obj_textsec(abfd)->vma) and
+ (obj_textsec(abfd)->vma) + text size. This is not just a mach
+ issue. Many kernels are loaded at non standard addresses. */
+ if (abfd->iostream != NULL
+ && (abfd->flags & BFD_IN_MEMORY) == 0
+ && (fstat(fileno((FILE *) (abfd->iostream)), &stat_buf) == 0)
+ && ((stat_buf.st_mode & 0111) != 0))
+ abfd->flags |= EXEC_P;
+ }
+#endif /* STAT_FOR_EXEC */
+
+ if (result)
+ {
+#if 0 /* These should be set correctly anyways. */
+ abfd->sections = obj_textsec (abfd);
+ obj_textsec (abfd)->next = obj_datasec (abfd);
+ obj_datasec (abfd)->next = obj_bsssec (abfd);
+#endif
+ }
+ else
+ {
+ free (rawptr);
+ abfd->tdata.aout_data = oldrawptr;
+ }
+ return result;
+}
+
+/*
+FUNCTION
+ aout_@var{size}_mkobject
+
+SYNOPSIS
+ boolean aout_@var{size}_mkobject, (bfd *abfd);
+
+DESCRIPTION
+ Initialize BFD @var{abfd} for use with a.out files.
+*/
+
+boolean
+NAME(aout,mkobject) (abfd)
+ bfd *abfd;
+{
+ struct aout_data_struct *rawptr;
+
+ bfd_set_error (bfd_error_system_call);
+
+ /* Use an intermediate variable for clarity */
+ rawptr = (struct aout_data_struct *)bfd_zalloc (abfd, sizeof (struct aout_data_struct ));
+
+ if (rawptr == NULL)
+ return false;
+
+ abfd->tdata.aout_data = rawptr;
+ exec_hdr (abfd) = &(rawptr->e);
+
+ obj_textsec (abfd) = (asection *)NULL;
+ obj_datasec (abfd) = (asection *)NULL;
+ obj_bsssec (abfd) = (asection *)NULL;
+
+ return true;
+}
+
+
+/*
+FUNCTION
+ aout_@var{size}_machine_type
+
+SYNOPSIS
+ enum machine_type aout_@var{size}_machine_type
+ (enum bfd_architecture arch,
+ unsigned long machine));
+
+DESCRIPTION
+ Keep track of machine architecture and machine type for
+ a.out's. Return the <<machine_type>> for a particular
+ architecture and machine, or <<M_UNKNOWN>> if that exact architecture
+ and machine can't be represented in a.out format.
+
+ If the architecture is understood, machine type 0 (default)
+ is always understood.
+*/
+
+enum machine_type
+NAME(aout,machine_type) (arch, machine, unknown)
+ enum bfd_architecture arch;
+ unsigned long machine;
+ boolean *unknown;
+{
+ enum machine_type arch_flags;
+
+ arch_flags = M_UNKNOWN;
+ *unknown = true;
+
+ switch (arch)
+ {
+ case bfd_arch_sparc:
+ if (machine == 0
+ || machine == bfd_mach_sparc
+ || machine == bfd_mach_sparc_sparclite
+ || machine == bfd_mach_sparc_v9)
+ arch_flags = M_SPARC;
+ else if (machine == bfd_mach_sparc_sparclet)
+ arch_flags = M_SPARCLET;
+ break;
+
+ case bfd_arch_m68k:
+ switch (machine)
+ {
+ case 0: arch_flags = M_68010; break;
+ case bfd_mach_m68000: arch_flags = M_UNKNOWN; *unknown = false; break;
+ case bfd_mach_m68010: arch_flags = M_68010; break;
+ case bfd_mach_m68020: arch_flags = M_68020; break;
+ default: arch_flags = M_UNKNOWN; break;
+ }
+ break;
+
+ case bfd_arch_i386:
+ if (machine == 0) arch_flags = M_386;
+ break;
+
+ case bfd_arch_a29k:
+ if (machine == 0) arch_flags = M_29K;
+ break;
+
+ case bfd_arch_arm:
+ if (machine == 0) arch_flags = M_ARM;
+ break;
+
+ case bfd_arch_mips:
+ switch (machine)
+ {
+ case 0:
+ case 2000:
+ case bfd_mach_mips3000:
+ arch_flags = M_MIPS1;
+ break;
+ case bfd_mach_mips4000: /* mips3 */
+ case bfd_mach_mips4400:
+ case bfd_mach_mips8000: /* mips4 */
+ case bfd_mach_mips6000: /* real mips2: */
+ arch_flags = M_MIPS2;
+ break;
+ default:
+ arch_flags = M_UNKNOWN;
+ break;
+ }
+ break;
+
+ case bfd_arch_ns32k:
+ switch (machine)
+ {
+ case 0: arch_flags = M_NS32532; break;
+ case 32032: arch_flags = M_NS32032; break;
+ case 32532: arch_flags = M_NS32532; break;
+ default: arch_flags = M_UNKNOWN; break;
+ }
+ break;
+
+ case bfd_arch_pdp11:
+ /* TODO: arch_flags = M_PDP11; */
+ *unknown = false;
+ break;
+
+ case bfd_arch_vax:
+ *unknown = false;
+ break;
+
+ default:
+ arch_flags = M_UNKNOWN;
+ }
+
+ if (arch_flags != M_UNKNOWN)
+ *unknown = false;
+
+ return arch_flags;
+}
+
+
+/*
+FUNCTION
+ aout_@var{size}_set_arch_mach
+
+SYNOPSIS
+ boolean aout_@var{size}_set_arch_mach,
+ (bfd *,
+ enum bfd_architecture arch,
+ unsigned long machine));
+
+DESCRIPTION
+ Set the architecture and the machine of the BFD @var{abfd} to the
+ values @var{arch} and @var{machine}. Verify that @var{abfd}'s format
+ can support the architecture required.
+*/
+
+boolean
+NAME(aout,set_arch_mach) (abfd, arch, machine)
+ bfd *abfd;
+ enum bfd_architecture arch;
+ unsigned long machine;
+{
+ if (! bfd_default_set_arch_mach (abfd, arch, machine))
+ return false;
+
+ if (arch != bfd_arch_unknown)
+ {
+ boolean unknown;
+
+ NAME(aout,machine_type) (arch, machine, &unknown);
+ if (unknown)
+ return false;
+ }
+
+ obj_reloc_entry_size (abfd) = RELOC_SIZE;
+
+ return (*aout_backend_info(abfd)->set_sizes) (abfd);
+}
+
+static void
+adjust_o_magic (abfd, execp)
+ bfd *abfd;
+ struct internal_exec *execp;
+{
+ file_ptr pos = adata (abfd).exec_bytes_size;
+ bfd_vma vma = 0;
+ int pad = 0;
+
+ /* Text. */
+ obj_textsec (abfd)->filepos = pos;
+ if (! obj_textsec (abfd)->user_set_vma)
+ obj_textsec (abfd)->vma = vma;
+ else
+ vma = obj_textsec (abfd)->vma;
+
+ pos += obj_textsec (abfd)->_raw_size;
+ vma += obj_textsec (abfd)->_raw_size;
+
+ /* Data. */
+ if (!obj_datasec (abfd)->user_set_vma)
+ {
+#if 0 /* ?? Does alignment in the file image really matter? */
+ pad = align_power (vma, obj_datasec (abfd)->alignment_power) - vma;
+#endif
+ obj_textsec (abfd)->_raw_size += pad;
+ pos += pad;
+ vma += pad;
+ obj_datasec (abfd)->vma = vma;
+ }
+ else
+ vma = obj_datasec (abfd)->vma;
+ obj_datasec (abfd)->filepos = pos;
+ pos += obj_datasec (abfd)->_raw_size;
+ vma += obj_datasec (abfd)->_raw_size;
+
+ /* BSS. */
+ if (! obj_bsssec (abfd)->user_set_vma)
+ {
+#if 0
+ pad = align_power (vma, obj_bsssec (abfd)->alignment_power) - vma;
+#endif
+ obj_datasec (abfd)->_raw_size += pad;
+ pos += pad;
+ vma += pad;
+ obj_bsssec (abfd)->vma = vma;
+ }
+ else
+ {
+ /* The VMA of the .bss section is set by the the VMA of the
+ .data section plus the size of the .data section. We may
+ need to add padding bytes to make this true. */
+ pad = obj_bsssec (abfd)->vma - vma;
+ if (pad > 0)
+ {
+ obj_datasec (abfd)->_raw_size += pad;
+ pos += pad;
+ }
+ }
+ obj_bsssec (abfd)->filepos = pos;
+
+ /* Fix up the exec header. */
+ execp->a_text = obj_textsec (abfd)->_raw_size;
+ execp->a_data = obj_datasec (abfd)->_raw_size;
+ execp->a_bss = obj_bsssec (abfd)->_raw_size;
+ N_SET_MAGIC (*execp, OMAGIC);
+}
+
+static void
+adjust_z_magic (abfd, execp)
+ bfd *abfd;
+ struct internal_exec *execp;
+{
+ bfd_size_type data_pad, text_pad;
+ file_ptr text_end;
+ CONST struct aout_backend_data *abdp;
+ int ztih; /* Nonzero if text includes exec header. */
+
+ abdp = aout_backend_info (abfd);
+
+ /* Text. */
+ ztih = (abdp != NULL
+ && (abdp->text_includes_header
+ || obj_aout_subformat (abfd) == q_magic_format));
+ obj_textsec(abfd)->filepos = (ztih
+ ? adata(abfd).exec_bytes_size
+ : adata(abfd).zmagic_disk_block_size);
+ if (! obj_textsec(abfd)->user_set_vma)
+ {
+ /* ?? Do we really need to check for relocs here? */
+ obj_textsec(abfd)->vma = ((abfd->flags & HAS_RELOC)
+ ? 0
+ : (ztih
+ ? (abdp->default_text_vma
+ + adata (abfd).exec_bytes_size)
+ : abdp->default_text_vma));
+ text_pad = 0;
+ }
+ else
+ {
+ /* The .text section is being loaded at an unusual address. We
+ may need to pad it such that the .data section starts at a page
+ boundary. */
+ if (ztih)
+ text_pad = ((obj_textsec (abfd)->filepos - obj_textsec (abfd)->vma)
+ & (adata (abfd).page_size - 1));
+ else
+ text_pad = ((- obj_textsec (abfd)->vma)
+ & (adata (abfd).page_size - 1));
+ }
+
+ /* Find start of data. */
+ if (ztih)
+ {
+ text_end = obj_textsec (abfd)->filepos + obj_textsec (abfd)->_raw_size;
+ text_pad += BFD_ALIGN (text_end, adata (abfd).page_size) - text_end;
+ }
+ else
+ {
+ /* Note that if page_size == zmagic_disk_block_size, then
+ filepos == page_size, and this case is the same as the ztih
+ case. */
+ text_end = obj_textsec (abfd)->_raw_size;
+ text_pad += BFD_ALIGN (text_end, adata (abfd).page_size) - text_end;
+ text_end += obj_textsec (abfd)->filepos;
+ }
+
+ obj_textsec (abfd)->_raw_size += text_pad;
+ text_end += text_pad;
+
+ /* Data. */
+ if (!obj_datasec(abfd)->user_set_vma)
+ {
+ bfd_vma vma;
+ vma = obj_textsec(abfd)->vma + obj_textsec(abfd)->_raw_size;
+ obj_datasec(abfd)->vma = BFD_ALIGN (vma, adata(abfd).segment_size);
+ }
+ if (abdp && abdp->zmagic_mapped_contiguous)
+ {
+ text_pad = (obj_datasec(abfd)->vma
+ - obj_textsec(abfd)->vma
+ - obj_textsec(abfd)->_raw_size);
+ obj_textsec(abfd)->_raw_size += text_pad;
+ }
+ obj_datasec (abfd)->filepos = (obj_textsec (abfd)->filepos
+ + obj_textsec (abfd)->_raw_size);
+
+ /* Fix up exec header while we're at it. */
+ execp->a_text = obj_textsec(abfd)->_raw_size;
+ if (ztih && (!abdp || (abdp && !abdp->exec_header_not_counted)))
+ execp->a_text += adata(abfd).exec_bytes_size;
+ if (obj_aout_subformat (abfd) == q_magic_format)
+ N_SET_MAGIC (*execp, QMAGIC);
+ else
+ N_SET_MAGIC (*execp, ZMAGIC);
+
+ /* Spec says data section should be rounded up to page boundary. */
+ obj_datasec(abfd)->_raw_size
+ = align_power (obj_datasec(abfd)->_raw_size,
+ obj_bsssec(abfd)->alignment_power);
+ execp->a_data = BFD_ALIGN (obj_datasec(abfd)->_raw_size,
+ adata(abfd).page_size);
+ data_pad = execp->a_data - obj_datasec(abfd)->_raw_size;
+
+ /* BSS. */
+ if (!obj_bsssec(abfd)->user_set_vma)
+ obj_bsssec(abfd)->vma = (obj_datasec(abfd)->vma
+ + obj_datasec(abfd)->_raw_size);
+ /* If the BSS immediately follows the data section and extra space
+ in the page is left after the data section, fudge data
+ in the header so that the bss section looks smaller by that
+ amount. We'll start the bss section there, and lie to the OS.
+ (Note that a linker script, as well as the above assignment,
+ could have explicitly set the BSS vma to immediately follow
+ the data section.) */
+ if (align_power (obj_bsssec(abfd)->vma, obj_bsssec(abfd)->alignment_power)
+ == obj_datasec(abfd)->vma + obj_datasec(abfd)->_raw_size)
+ execp->a_bss = (data_pad > obj_bsssec(abfd)->_raw_size) ? 0 :
+ obj_bsssec(abfd)->_raw_size - data_pad;
+ else
+ execp->a_bss = obj_bsssec(abfd)->_raw_size;
+}
+
+static void
+adjust_n_magic (abfd, execp)
+ bfd *abfd;
+ struct internal_exec *execp;
+{
+ file_ptr pos = adata(abfd).exec_bytes_size;
+ bfd_vma vma = 0;
+ int pad;
+
+ /* Text. */
+ obj_textsec(abfd)->filepos = pos;
+ if (!obj_textsec(abfd)->user_set_vma)
+ obj_textsec(abfd)->vma = vma;
+ else
+ vma = obj_textsec(abfd)->vma;
+ pos += obj_textsec(abfd)->_raw_size;
+ vma += obj_textsec(abfd)->_raw_size;
+
+ /* Data. */
+ obj_datasec(abfd)->filepos = pos;
+ if (!obj_datasec(abfd)->user_set_vma)
+ obj_datasec(abfd)->vma = BFD_ALIGN (vma, adata(abfd).segment_size);
+ vma = obj_datasec(abfd)->vma;
+
+ /* Since BSS follows data immediately, see if it needs alignment. */
+ vma += obj_datasec(abfd)->_raw_size;
+ pad = align_power (vma, obj_bsssec(abfd)->alignment_power) - vma;
+ obj_datasec(abfd)->_raw_size += pad;
+ pos += obj_datasec(abfd)->_raw_size;
+
+ /* BSS. */
+ if (!obj_bsssec(abfd)->user_set_vma)
+ obj_bsssec(abfd)->vma = vma;
+ else
+ vma = obj_bsssec(abfd)->vma;
+
+ /* Fix up exec header. */
+ execp->a_text = obj_textsec(abfd)->_raw_size;
+ execp->a_data = obj_datasec(abfd)->_raw_size;
+ execp->a_bss = obj_bsssec(abfd)->_raw_size;
+ N_SET_MAGIC (*execp, NMAGIC);
+}
+
+boolean
+NAME(aout,adjust_sizes_and_vmas) (abfd, text_size, text_end)
+ bfd *abfd;
+ bfd_size_type *text_size;
+ file_ptr * text_end ATTRIBUTE_UNUSED;
+{
+ struct internal_exec *execp = exec_hdr (abfd);
+
+ if (! NAME(aout,make_sections) (abfd))
+ return false;
+
+ if (adata(abfd).magic != undecided_magic)
+ return true;
+
+ obj_textsec(abfd)->_raw_size =
+ align_power(obj_textsec(abfd)->_raw_size,
+ obj_textsec(abfd)->alignment_power);
+
+ *text_size = obj_textsec (abfd)->_raw_size;
+ /* Rule (heuristic) for when to pad to a new page. Note that there
+ are (at least) two ways demand-paged (ZMAGIC) files have been
+ handled. Most Berkeley-based systems start the text segment at
+ (TARGET_PAGE_SIZE). However, newer versions of SUNOS start the text
+ segment right after the exec header; the latter is counted in the
+ text segment size, and is paged in by the kernel with the rest of
+ the text. */
+
+ /* This perhaps isn't the right way to do this, but made it simpler for me
+ to understand enough to implement it. Better would probably be to go
+ right from BFD flags to alignment/positioning characteristics. But the
+ old code was sloppy enough about handling the flags, and had enough
+ other magic, that it was a little hard for me to understand. I think
+ I understand it better now, but I haven't time to do the cleanup this
+ minute. */
+
+ if (abfd->flags & WP_TEXT)
+ adata(abfd).magic = n_magic;
+ else
+ adata(abfd).magic = o_magic;
+
+#ifdef BFD_AOUT_DEBUG /* requires gcc2 */
+#if __GNUC__ >= 2
+ fprintf (stderr, "%s text=<%x,%x,%x> data=<%x,%x,%x> bss=<%x,%x,%x>\n",
+ ({ char *str;
+ switch (adata(abfd).magic) {
+ case n_magic: str = "NMAGIC"; break;
+ case o_magic: str = "OMAGIC"; break;
+ case z_magic: str = "ZMAGIC"; break;
+ default: abort ();
+ }
+ str;
+ }),
+ obj_textsec(abfd)->vma, obj_textsec(abfd)->_raw_size,
+ obj_textsec(abfd)->alignment_power,
+ obj_datasec(abfd)->vma, obj_datasec(abfd)->_raw_size,
+ obj_datasec(abfd)->alignment_power,
+ obj_bsssec(abfd)->vma, obj_bsssec(abfd)->_raw_size,
+ obj_bsssec(abfd)->alignment_power);
+#endif
+#endif
+
+ switch (adata(abfd).magic)
+ {
+ case o_magic:
+ adjust_o_magic (abfd, execp);
+ break;
+ case z_magic:
+ adjust_z_magic (abfd, execp);
+ break;
+ case n_magic:
+ adjust_n_magic (abfd, execp);
+ break;
+ default:
+ abort ();
+ }
+
+#ifdef BFD_AOUT_DEBUG
+ fprintf (stderr, " text=<%x,%x,%x> data=<%x,%x,%x> bss=<%x,%x>\n",
+ obj_textsec(abfd)->vma, obj_textsec(abfd)->_raw_size,
+ obj_textsec(abfd)->filepos,
+ obj_datasec(abfd)->vma, obj_datasec(abfd)->_raw_size,
+ obj_datasec(abfd)->filepos,
+ obj_bsssec(abfd)->vma, obj_bsssec(abfd)->_raw_size);
+#endif
+
+ return true;
+}
+
+/*
+FUNCTION
+ aout_@var{size}_new_section_hook
+
+SYNOPSIS
+ boolean aout_@var{size}_new_section_hook,
+ (bfd *abfd,
+ asection *newsect));
+
+DESCRIPTION
+ Called by the BFD in response to a @code{bfd_make_section}
+ request.
+*/
+boolean
+NAME(aout,new_section_hook) (abfd, newsect)
+ bfd *abfd;
+ asection *newsect;
+{
+ /* align to double at least */
+ newsect->alignment_power = bfd_get_arch_info(abfd)->section_align_power;
+
+
+ if (bfd_get_format (abfd) == bfd_object)
+ {
+ if (obj_textsec (abfd) == NULL
+ && ! strcmp (newsect->name, ".text"))
+ {
+ obj_textsec(abfd)= newsect;
+ newsect->target_index = N_TEXT;
+ return true;
+ }
+
+ if (obj_datasec (abfd) == NULL
+ && ! strcmp (newsect->name, ".data"))
+ {
+ obj_datasec (abfd) = newsect;
+ newsect->target_index = N_DATA;
+ return true;
+ }
+
+ if (obj_bsssec (abfd) == NULL
+ && !strcmp (newsect->name, ".bss"))
+ {
+ obj_bsssec (abfd) = newsect;
+ newsect->target_index = N_BSS;
+ return true;
+ }
+ }
+
+ /* We allow more than three sections internally */
+ return true;
+}
+
+boolean
+NAME(aout,set_section_contents) (abfd, section, location, offset, count)
+ bfd *abfd;
+ sec_ptr section;
+ PTR location;
+ file_ptr offset;
+ bfd_size_type count;
+{
+ file_ptr text_end;
+ bfd_size_type text_size;
+
+ if (! abfd->output_has_begun)
+ {
+ if (! NAME(aout,adjust_sizes_and_vmas) (abfd, &text_size, &text_end))
+ return false;
+ }
+
+ if (section == obj_bsssec (abfd))
+ {
+ bfd_set_error (bfd_error_no_contents);
+ return false;
+ }
+
+ if (section != obj_textsec (abfd)
+ && section != obj_datasec (abfd))
+ {
+ (*_bfd_error_handler)
+ ("%s: can not represent section `%s' in a.out object file format",
+ bfd_get_filename (abfd), bfd_get_section_name (abfd, section));
+ bfd_set_error (bfd_error_nonrepresentable_section);
+ return false;
+ }
+
+ if (count != 0)
+ {
+ if (bfd_seek (abfd, section->filepos + offset, SEEK_SET) != 0
+ || bfd_write (location, 1, count, abfd) != count)
+ return false;
+ }
+
+ return true;
+}
+\f
+/* Read the external symbols from an a.out file. */
+
+static boolean
+aout_get_external_symbols (abfd)
+ bfd *abfd;
+{
+ if (obj_aout_external_syms (abfd) == (struct external_nlist *) NULL)
+ {
+ bfd_size_type count;
+ struct external_nlist *syms;
+
+ count = exec_hdr (abfd)->a_syms / EXTERNAL_NLIST_SIZE;
+
+#ifdef USE_MMAP
+ if (bfd_get_file_window (abfd,
+ obj_sym_filepos (abfd), exec_hdr (abfd)->a_syms,
+ &obj_aout_sym_window (abfd), true) == false)
+ return false;
+ syms = (struct external_nlist *) obj_aout_sym_window (abfd).data;
+#else
+ /* We allocate using malloc to make the values easy to free
+ later on. If we put them on the objalloc it might not be
+ possible to free them. */
+ syms = ((struct external_nlist *)
+ bfd_malloc ((size_t) count * EXTERNAL_NLIST_SIZE));
+ if (syms == (struct external_nlist *) NULL && count != 0)
+ return false;
+
+ if (bfd_seek (abfd, obj_sym_filepos (abfd), SEEK_SET) != 0
+ || (bfd_read (syms, 1, exec_hdr (abfd)->a_syms, abfd)
+ != exec_hdr (abfd)->a_syms))
+ {
+ free (syms);
+ return false;
+ }
+#endif
+
+ obj_aout_external_syms (abfd) = syms;
+ obj_aout_external_sym_count (abfd) = count;
+ }
+
+ if (obj_aout_external_strings (abfd) == NULL
+ && exec_hdr (abfd)->a_syms != 0)
+ {
+ unsigned char string_chars[BYTES_IN_LONG];
+ bfd_size_type stringsize;
+ char *strings;
+
+ /* Get the size of the strings. */
+ if (bfd_seek (abfd, obj_str_filepos (abfd), SEEK_SET) != 0
+ || (bfd_read ((PTR) string_chars, BYTES_IN_LONG, 1, abfd) !=
+ BYTES_IN_LONG))
+ return false;
+ stringsize = bfd_h_get_32 (abfd, string_chars);
+
+#ifdef USE_MMAP
+ if (bfd_get_file_window (abfd, obj_str_filepos (abfd), stringsize,
+ &obj_aout_string_window (abfd), true) == false)
+ return false;
+ strings = (char *) obj_aout_string_window (abfd).data;
+#else
+ strings = (char *) bfd_malloc ((size_t) stringsize + 1);
+ if (strings == NULL)
+ return false;
+
+ /* Skip space for the string count in the buffer for convenience
+ when using indexes. */
+ if (bfd_read (strings + 4, 1, stringsize - 4, abfd) != stringsize - 4)
+ {
+ free (strings);
+ return false;
+ }
+#endif
+
+ /* Ensure that a zero index yields an empty string. */
+ strings[0] = '\0';
+
+ strings[stringsize - 1] = 0;
+
+ obj_aout_external_strings (abfd) = strings;
+ obj_aout_external_string_size (abfd) = stringsize;
+ }
+
+ return true;
+}
+
+/* Translate an a.out symbol into a BFD symbol. The desc, other, type
+ and symbol->value fields of CACHE_PTR will be set from the a.out
+ nlist structure. This function is responsible for setting
+ symbol->flags and symbol->section, and adjusting symbol->value. */
+
+static boolean
+translate_from_native_sym_flags (abfd, cache_ptr)
+ bfd *abfd;
+ aout_symbol_type *cache_ptr;
+{
+ flagword visible;
+
+ if (cache_ptr->type == N_FN)
+ {
+ asection *sec;
+
+ /* This is a debugging symbol. */
+
+ cache_ptr->symbol.flags = BSF_DEBUGGING;
+
+ /* Work out the symbol section. */
+ switch (cache_ptr->type & N_TYPE)
+ {
+ case N_TEXT:
+ case N_FN:
+ sec = obj_textsec (abfd);
+ break;
+ case N_DATA:
+ sec = obj_datasec (abfd);
+ break;
+ case N_BSS:
+ sec = obj_bsssec (abfd);
+ break;
+ default:
+ case N_ABS:
+ sec = bfd_abs_section_ptr;
+ break;
+ }
+
+ cache_ptr->symbol.section = sec;
+ cache_ptr->symbol.value -= sec->vma;
+
+ return true;
+ }
+
+ /* Get the default visibility. This does not apply to all types, so
+ we just hold it in a local variable to use if wanted. */
+ if ((cache_ptr->type & N_EXT) == 0)
+ visible = BSF_LOCAL;
+ else
+ visible = BSF_GLOBAL;
+
+ switch (cache_ptr->type)
+ {
+ default:
+ case N_ABS: case N_ABS | N_EXT:
+ cache_ptr->symbol.section = bfd_abs_section_ptr;
+ cache_ptr->symbol.flags = visible;
+ break;
+
+ case N_UNDF | N_EXT:
+ if (cache_ptr->symbol.value != 0)
+ {
+ /* This is a common symbol. */
+ cache_ptr->symbol.flags = BSF_GLOBAL;
+ cache_ptr->symbol.section = bfd_com_section_ptr;
+ }
+ else
+ {
+ cache_ptr->symbol.flags = 0;
+ cache_ptr->symbol.section = bfd_und_section_ptr;
+ }
+ break;
+
+ case N_TEXT: case N_TEXT | N_EXT:
+ cache_ptr->symbol.section = obj_textsec (abfd);
+ cache_ptr->symbol.value -= cache_ptr->symbol.section->vma;
+ cache_ptr->symbol.flags = visible;
+ break;
+
+ case N_DATA: case N_DATA | N_EXT:
+ cache_ptr->symbol.section = obj_datasec (abfd);
+ cache_ptr->symbol.value -= cache_ptr->symbol.section->vma;
+ cache_ptr->symbol.flags = visible;
+ break;
+
+ case N_BSS: case N_BSS | N_EXT:
+ cache_ptr->symbol.section = obj_bsssec (abfd);
+ cache_ptr->symbol.value -= cache_ptr->symbol.section->vma;
+ cache_ptr->symbol.flags = visible;
+ break;
+ }
+
+ return true;
+}
+
+/* Set the fields of SYM_POINTER according to CACHE_PTR. */
+
+static boolean
+translate_to_native_sym_flags (abfd, cache_ptr, sym_pointer)
+ bfd *abfd;
+ asymbol *cache_ptr;
+ struct external_nlist *sym_pointer;
+{
+ bfd_vma value = cache_ptr->value;
+ asection *sec;
+ bfd_vma off;
+
+ /* Mask out any existing type bits in case copying from one section
+ to another. */
+ sym_pointer->e_type[0] &= ~N_TYPE;
+
+ sec = bfd_get_section (cache_ptr);
+ off = 0;
+
+ if (sec == NULL)
+ {
+ /* This case occurs, e.g., for the *DEBUG* section of a COFF
+ file. */
+ (*_bfd_error_handler)
+ ("%s: can not represent section for symbol `%s' in a.out object file format",
+ bfd_get_filename (abfd),
+ cache_ptr->name != NULL ? cache_ptr->name : "*unknown*");
+ bfd_set_error (bfd_error_nonrepresentable_section);
+ return false;
+ }
+
+ if (sec->output_section != NULL)
+ {
+ off = sec->output_offset;
+ sec = sec->output_section;
+ }
+
+ if (bfd_is_abs_section (sec))
+ sym_pointer->e_type[0] |= N_ABS;
+ else if (sec == obj_textsec (abfd))
+ sym_pointer->e_type[0] |= N_TEXT;
+ else if (sec == obj_datasec (abfd))
+ sym_pointer->e_type[0] |= N_DATA;
+ else if (sec == obj_bsssec (abfd))
+ sym_pointer->e_type[0] |= N_BSS;
+ else if (bfd_is_und_section (sec))
+ sym_pointer->e_type[0] = N_UNDF | N_EXT;
+ else if (bfd_is_com_section (sec))
+ sym_pointer->e_type[0] = N_UNDF | N_EXT;
+ else
+ {
+ (*_bfd_error_handler)
+ ("%s: can not represent section `%s' in a.out object file format",
+ bfd_get_filename (abfd), bfd_get_section_name (abfd, sec));
+ bfd_set_error (bfd_error_nonrepresentable_section);
+ return false;
+ }
+
+ /* Turn the symbol from section relative to absolute again */
+ value += sec->vma + off;
+
+ if ((cache_ptr->flags & BSF_DEBUGGING) != 0)
+ sym_pointer->e_type[0] = ((aout_symbol_type *) cache_ptr)->type;
+ else if ((cache_ptr->flags & BSF_GLOBAL) != 0)
+ sym_pointer->e_type[0] |= N_EXT;
+
+#if 0
+ if ((cache_ptr->flags & BSF_CONSTRUCTOR) != 0)
+ {
+ int type = ((aout_symbol_type *) cache_ptr)->type;
+
+
+ switch (type)
+ {
+ case N_ABS: type = N_SETA; break;
+ case N_TEXT: type = N_SETT; break;
+ case N_DATA: type = N_SETD; break;
+ case N_BSS: type = N_SETB; break;
+ }
+ sym_pointer->e_type[0] = type;
+ }
+#endif
+
+#if 0
+ if ((cache_ptr->flags & BSF_WEAK) != 0)
+ {
+ int type;
+
+ switch (sym_pointer->e_type[0] & N_TYPE)
+ {
+ default:
+ case N_ABS: type = N_WEAKA; break;
+ case N_TEXT: type = N_WEAKT; break;
+ case N_DATA: type = N_WEAKD; break;
+ case N_BSS: type = N_WEAKB; break;
+ case N_UNDF: type = N_WEAKU; break;
+ }
+ sym_pointer->e_type[0] = type;
+ }
+#endif
+
+ PUT_WORD(abfd, value, sym_pointer->e_value);
+
+ return true;
+}
+\f
+/* Native-level interface to symbols. */
+
+asymbol *
+NAME(aout,make_empty_symbol) (abfd)
+ bfd *abfd;
+{
+ aout_symbol_type *new =
+ (aout_symbol_type *)bfd_zalloc (abfd, sizeof (aout_symbol_type));
+ if (!new)
+ return NULL;
+ new->symbol.the_bfd = abfd;
+
+ return &new->symbol;
+}
+
+/* Translate a set of internal symbols into external symbols. */
+
+boolean
+NAME(aout,translate_symbol_table) (abfd, in, ext, count, str, strsize, dynamic)
+ bfd *abfd;
+ aout_symbol_type *in;
+ struct external_nlist *ext;
+ bfd_size_type count;
+ char *str;
+ bfd_size_type strsize;
+ boolean dynamic;
+{
+ struct external_nlist *ext_end;
+
+ ext_end = ext + count;
+ for (; ext < ext_end; ext++, in++)
+ {
+ bfd_vma x;
+
+ x = GET_WORD (abfd, ext->e_strx);
+ in->symbol.the_bfd = abfd;
+
+ /* For the normal symbols, the zero index points at the number
+ of bytes in the string table but is to be interpreted as the
+ null string. For the dynamic symbols, the number of bytes in
+ the string table is stored in the __DYNAMIC structure and the
+ zero index points at an actual string. */
+ if (x == 0 && ! dynamic)
+ in->symbol.name = "";
+ else if (x < strsize)
+ in->symbol.name = str + x;
+ else
+ return false;
+
+ in->symbol.value = GET_SWORD (abfd, ext->e_value);
+ /* TODO: is 0 a safe value here? */
+ in->desc = 0;
+ in->other = 0;
+ in->type = bfd_h_get_8 (abfd, ext->e_type);
+ in->symbol.udata.p = NULL;
+
+ if (! translate_from_native_sym_flags (abfd, in))
+ return false;
+
+ if (dynamic)
+ in->symbol.flags |= BSF_DYNAMIC;
+ }
+
+ return true;
+}
+
+/* We read the symbols into a buffer, which is discarded when this
+ function exits. We read the strings into a buffer large enough to
+ hold them all plus all the cached symbol entries. */
+
+boolean
+NAME(aout,slurp_symbol_table) (abfd)
+ bfd *abfd;
+{
+ struct external_nlist *old_external_syms;
+ aout_symbol_type *cached;
+ size_t cached_size;
+
+ /* If there's no work to be done, don't do any */
+ if (obj_aout_symbols (abfd) != (aout_symbol_type *) NULL)
+ return true;
+
+ old_external_syms = obj_aout_external_syms (abfd);
+
+ if (! aout_get_external_symbols (abfd))
+ return false;
+
+ cached_size = (obj_aout_external_sym_count (abfd)
+ * sizeof (aout_symbol_type));
+ cached = (aout_symbol_type *) bfd_malloc (cached_size);
+ if (cached == NULL && cached_size != 0)
+ return false;
+ if (cached_size != 0)
+ memset (cached, 0, cached_size);
+
+ /* Convert from external symbol information to internal. */
+ if (! (NAME(aout,translate_symbol_table)
+ (abfd, cached,
+ obj_aout_external_syms (abfd),
+ obj_aout_external_sym_count (abfd),
+ obj_aout_external_strings (abfd),
+ obj_aout_external_string_size (abfd),
+ false)))
+ {
+ free (cached);
+ return false;
+ }
+
+ bfd_get_symcount (abfd) = obj_aout_external_sym_count (abfd);
+
+ obj_aout_symbols (abfd) = cached;
+
+ /* It is very likely that anybody who calls this function will not
+ want the external symbol information, so if it was allocated
+ because of our call to aout_get_external_symbols, we free it up
+ right away to save space. */
+ if (old_external_syms == (struct external_nlist *) NULL
+ && obj_aout_external_syms (abfd) != (struct external_nlist *) NULL)
+ {
+#ifdef USE_MMAP
+ bfd_free_window (&obj_aout_sym_window (abfd));
+#else
+ free (obj_aout_external_syms (abfd));
+#endif
+ obj_aout_external_syms (abfd) = NULL;
+ }
+
+ return true;
+}
+\f
+/* We use a hash table when writing out symbols so that we only write
+ out a particular string once. This helps particularly when the
+ linker writes out stabs debugging entries, because each different
+ contributing object file tends to have many duplicate stabs
+ strings.
+
+ This hash table code breaks dbx on SunOS 4.1.3, so we don't do it
+ if BFD_TRADITIONAL_FORMAT is set. */
+
+static bfd_size_type add_to_stringtab
+ PARAMS ((bfd *, struct bfd_strtab_hash *, const char *, boolean));
+static boolean emit_stringtab PARAMS ((bfd *, struct bfd_strtab_hash *));
+
+/* Get the index of a string in a strtab, adding it if it is not
+ already present. */
+
+static INLINE bfd_size_type
+add_to_stringtab (abfd, tab, str, copy)
+ bfd *abfd;
+ struct bfd_strtab_hash *tab;
+ const char *str;
+ boolean copy;
+{
+ boolean hash;
+ bfd_size_type index;
+
+ /* An index of 0 always means the empty string. */
+ if (str == 0 || *str == '\0')
+ return 0;
+
+ /* Don't hash if BFD_TRADITIONAL_FORMAT is set, because SunOS dbx
+ doesn't understand a hashed string table. */
+ hash = true;
+ if ((abfd->flags & BFD_TRADITIONAL_FORMAT) != 0)
+ hash = false;
+
+ index = _bfd_stringtab_add (tab, str, hash, copy);
+
+ if (index != (bfd_size_type) -1)
+ {
+ /* Add BYTES_IN_LONG to the return value to account for the
+ space taken up by the string table size. */
+ index += BYTES_IN_LONG;
+ }
+
+ return index;
+}
+
+/* Write out a strtab. ABFD is already at the right location in the
+ file. */
+
+static boolean
+emit_stringtab (abfd, tab)
+ register bfd *abfd;
+ struct bfd_strtab_hash *tab;
+{
+ bfd_byte buffer[BYTES_IN_LONG];
+
+ /* The string table starts with the size. */
+ bfd_h_put_32 (abfd, _bfd_stringtab_size (tab) + BYTES_IN_LONG, buffer);
+ if (bfd_write ((PTR) buffer, 1, BYTES_IN_LONG, abfd) != BYTES_IN_LONG)
+ return false;
+
+ return _bfd_stringtab_emit (abfd, tab);
+}
+\f
+boolean
+NAME(aout,write_syms) (abfd)
+ bfd *abfd;
+{
+ unsigned int count ;
+ asymbol **generic = bfd_get_outsymbols (abfd);
+ struct bfd_strtab_hash *strtab;
+
+ strtab = _bfd_stringtab_init ();
+ if (strtab == NULL)
+ return false;
+
+ for (count = 0; count < bfd_get_symcount (abfd); count++)
+ {
+ asymbol *g = generic[count];
+ bfd_size_type indx;
+ struct external_nlist nsp;
+
+ PUT_WORD (abfd, 0, (bfd_byte *)nsp.e_unused);
+
+ indx = add_to_stringtab (abfd, strtab, g->name, false);
+ if (indx == (bfd_size_type) -1)
+ goto error_return;
+ PUT_WORD (abfd, indx, (bfd_byte *) nsp.e_strx);
+
+ if (bfd_asymbol_flavour(g) == abfd->xvec->flavour)
+ bfd_h_put_8 (abfd, aout_symbol(g)->type, nsp.e_type);
+ else
+ bfd_h_put_8 (abfd, 0, nsp.e_type);
+
+ if (! translate_to_native_sym_flags (abfd, g, &nsp))
+ goto error_return;
+
+ bfd_h_put_8 (abfd, 0, nsp.e_ovly);
+
+ if (bfd_write((PTR)&nsp,1,EXTERNAL_NLIST_SIZE, abfd)
+ != EXTERNAL_NLIST_SIZE)
+ goto error_return;
+
+ /* NB: `KEEPIT' currently overlays `udata.p', so set this only
+ here, at the end. */
+ g->KEEPIT = count;
+ }
+
+ if (! emit_stringtab (abfd, strtab))
+ goto error_return;
+
+ _bfd_stringtab_free (strtab);
+
+ return true;
+
+error_return:
+ _bfd_stringtab_free (strtab);
+ return false;
+}
+
+\f
+long
+NAME(aout,get_symtab) (abfd, location)
+ bfd *abfd;
+ asymbol **location;
+{
+ unsigned int counter = 0;
+ aout_symbol_type *symbase;
+
+ if (!NAME(aout,slurp_symbol_table)(abfd))
+ return -1;
+
+ for (symbase = obj_aout_symbols(abfd); counter++ < bfd_get_symcount (abfd);)
+ *(location++) = (asymbol *)( symbase++);
+ *location++ =0;
+ return bfd_get_symcount (abfd);
+}
+
+\f
+/* Standard reloc stuff */
+
+/* Extended stuff */
+/* Output extended relocation information to a file in target byte order. */
+
+void
+pdp11_aout_swap_reloc_out (abfd, g, natptr)
+ bfd *abfd;
+ arelent *g;
+ register struct pdp11_aout_reloc_external *natptr;
+{
+ int r_index;
+ int r_pcrel;
+ int reloc_entry;
+ int r_type;
+ asymbol *sym = *(g->sym_ptr_ptr);
+ asection *output_section = sym->section->output_section;
+
+ if (g->addend != 0)
+ fprintf (stderr, "BFD: can't do this reloc addend stuff\n");
+
+ r_pcrel = g->howto->pc_relative;
+
+ if (bfd_is_abs_section (output_section))
+ r_type = RABS;
+ else if (output_section == obj_textsec (abfd))
+ r_type = RTEXT;
+ else if (output_section == obj_datasec (abfd))
+ r_type = RDATA;
+ else if (output_section == obj_bsssec (abfd))
+ r_type = RBSS;
+ else if (bfd_is_und_section (output_section))
+ r_type = REXT;
+ else if (bfd_is_com_section (output_section))
+ r_type = REXT;
+ else
+ r_type = -1;
+
+ BFD_ASSERT (r_type != -1);
+
+ if (r_type == RABS)
+ r_index = 0;
+ else
+ r_index = (*(g->sym_ptr_ptr))->KEEPIT;
+
+#if 0
+ if (bfd_is_abs_section (bfd_get_section (sym)))
+ {
+ r_extern = 0;
+ r_index = N_ABS;
+ r_type = RABS;
+ }
+ else if ((sym->flags & BSF_SECTION_SYM) == 0)
+ {
+ if (bfd_is_und_section (bfd_get_section (sym))
+ || (sym->flags & BSF_GLOBAL) != 0)
+ r_extern = 1;
+ else
+ r_extern = 0;
+ r_index = (*(g->sym_ptr_ptr))->KEEPIT;
+ }
+ else
+ {
+ /* Just an ordinary section */
+ r_extern = 0;
+ r_index = output_section->target_index;
+ }
+#endif
+
+ reloc_entry = r_index << 4 | r_type | r_pcrel;
+
+ PUT_WORD (abfd, reloc_entry, natptr->e_reloc_entry);
+}
+
+/* BFD deals internally with all things based from the section they're
+ in. so, something in 10 bytes into a text section with a base of
+ 50 would have a symbol (.text+10) and know .text vma was 50.
+
+ Aout keeps all it's symbols based from zero, so the symbol would
+ contain 60. This macro subs the base of each section from the value
+ to give the true offset from the section */
+
+
+#define MOVE_ADDRESS(ad) \
+ if (r_extern) \
+ { \
+ /* Undefined symbol. */ \
+ cache_ptr->sym_ptr_ptr = symbols + r_index; \
+ cache_ptr->addend = ad; \
+ } \
+ else \
+ { \
+ /* Defined, section relative. replace symbol with pointer to \
+ symbol which points to section. */ \
+ switch (r_index) \
+ { \
+ case N_TEXT: \
+ case N_TEXT | N_EXT: \
+ cache_ptr->sym_ptr_ptr = obj_textsec (abfd)->symbol_ptr_ptr; \
+ cache_ptr->addend = ad - su->textsec->vma; \
+ break; \
+ case N_DATA: \
+ case N_DATA | N_EXT: \
+ cache_ptr->sym_ptr_ptr = obj_datasec (abfd)->symbol_ptr_ptr; \
+ cache_ptr->addend = ad - su->datasec->vma; \
+ break; \
+ case N_BSS: \
+ case N_BSS | N_EXT: \
+ cache_ptr->sym_ptr_ptr = obj_bsssec (abfd)->symbol_ptr_ptr; \
+ cache_ptr->addend = ad - su->bsssec->vma; \
+ break; \
+ default: \
+ case N_ABS: \
+ case N_ABS | N_EXT: \
+ cache_ptr->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr; \
+ cache_ptr->addend = ad; \
+ break; \
+ } \
+ }
+
+void
+pdp11_aout_swap_reloc_in (abfd, bytes, cache_ptr, offset,
+ symbols, symcount)
+ bfd *abfd;
+ struct pdp11_aout_reloc_external *bytes;
+ arelent *cache_ptr;
+ bfd_size_type offset;
+ asymbol **symbols;
+ bfd_size_type symcount;
+{
+ struct aoutdata *su = &(abfd->tdata.aout_data->a);
+ unsigned int r_index;
+ int reloc_entry;
+ int r_extern;
+ int r_pcrel;
+
+ reloc_entry = GET_WORD (abfd, (PTR)bytes);
+
+ r_pcrel = reloc_entry & RELFLG;
+
+ cache_ptr->address = offset;
+ cache_ptr->howto = howto_table_pdp11 + (r_pcrel ? 1 : 0);
+
+ if ((reloc_entry & RTYPE) == RABS)
+ r_index = N_ABS;
+ else
+ r_index = RINDEX (reloc_entry);
+
+ /* r_extern reflects whether the symbol the reloc is against is
+ local or global. */
+ r_extern = (reloc_entry & RTYPE) == REXT;
+
+ if (r_extern && r_index > symcount)
+ {
+ /* We could arrange to return an error, but it might be useful
+ to see the file even if it is bad. */
+ r_extern = 0;
+ r_index = N_ABS;
+ }
+
+ MOVE_ADDRESS(0);
+}
+
+/* Read and swap the relocs for a section. */
+
+boolean
+NAME(aout,slurp_reloc_table) (abfd, asect, symbols)
+ bfd *abfd;
+ sec_ptr asect;
+ asymbol **symbols;
+{
+ struct pdp11_aout_reloc_external *rptr;
+ unsigned int count;
+ bfd_size_type reloc_size;
+ PTR relocs;
+ arelent *reloc_cache;
+ size_t each_size;
+ unsigned int counter = 0;
+ arelent *cache_ptr;
+
+ if (asect->relocation)
+ return true;
+
+ if (asect->flags & SEC_CONSTRUCTOR)
+ return true;
+
+ if (asect == obj_datasec (abfd))
+ reloc_size = exec_hdr(abfd)->a_drsize;
+ else if (asect == obj_textsec (abfd))
+ reloc_size = exec_hdr(abfd)->a_trsize;
+ else if (asect == obj_bsssec (abfd))
+ reloc_size = 0;
+ else
+ {
+ bfd_set_error (bfd_error_invalid_operation);
+ return false;
+ }
+
+ if (bfd_seek (abfd, asect->rel_filepos, SEEK_SET) != 0)
+ return false;
+
+ each_size = obj_reloc_entry_size (abfd);
+
+ relocs = bfd_malloc ((size_t) reloc_size);
+ if (relocs == NULL && reloc_size != 0)
+ return false;
+
+ if (bfd_read (relocs, 1, reloc_size, abfd) != reloc_size)
+ {
+ free (relocs);
+ return false;
+ }
+
+ count = reloc_size / each_size;
+
+ /* Count the number of NON-ZERO relocs, this is the count we want. */
+ {
+ unsigned int real_count = 0;
+
+ for (counter = 0; counter < count; counter++)
+ {
+ int x;
+
+ x = GET_WORD (abfd, relocs + each_size * counter);
+ if (x != 0)
+ real_count++;
+ }
+
+ count = real_count;
+ }
+
+ reloc_cache = (arelent *) bfd_malloc ((size_t) (count * sizeof (arelent)));
+ if (reloc_cache == NULL && count != 0)
+ return false;
+ memset (reloc_cache, 0, count * sizeof (arelent));
+
+ cache_ptr = reloc_cache;
+
+ rptr = (struct pdp11_aout_reloc_external *) relocs;
+ for (counter = 0;
+ counter < count;
+ counter++, ((char *)rptr) += RELOC_SIZE, cache_ptr++)
+ {
+ while (GET_WORD (abfd, (PTR)rptr) == 0)
+ {
+ rptr =
+ (struct pdp11_aout_reloc_external *)
+ ((char *)rptr + RELOC_SIZE);
+ if ((char *)rptr >= (char *)relocs + reloc_size)
+ goto done;
+ }
+
+ pdp11_aout_swap_reloc_in (abfd, rptr, cache_ptr,
+ (char *)rptr - (char *)relocs,
+ symbols, bfd_get_symcount (abfd));
+ }
+ done:
+ /* Just in case, if rptr >= relocs + reloc_size should happen
+ too early. */
+ BFD_ASSERT (counter == count);
+
+ free (relocs);
+
+ asect->relocation = reloc_cache;
+ asect->reloc_count = cache_ptr - reloc_cache;
+
+ return true;
+}
+
+/* Write out a relocation section into an object file. */
+
+boolean
+NAME(aout,squirt_out_relocs) (abfd, section)
+ bfd *abfd;
+ asection *section;
+{
+ arelent **generic;
+ unsigned char *native;
+ unsigned int count = section->reloc_count;
+ size_t natsize;
+
+#if 0
+ /* If we're writing an .o file, we must write
+ relocation information, even if there is none. */
+ if ((count == 0 || section->orelocation == NULL) &&
+ <writing_executable>)
+ return true;
+#endif
+
+ natsize = bfd_get_section_size_before_reloc (section);
+ native = (unsigned char *) bfd_zalloc (abfd, natsize);
+ if (!native)
+ return false;
+
+ memset ((PTR)native, 0, natsize);
+
+ generic = section->orelocation;
+ if (generic != NULL)
+ {
+ while (count > 0)
+ {
+ struct pdp11_aout_reloc_external *r;
+
+ r = (struct pdp11_aout_reloc_external *)
+ (native + (*generic)->address);
+ pdp11_aout_swap_reloc_out (abfd, *generic, r);
+ count--;
+ generic++;
+ }
+ }
+
+ if (bfd_write ((PTR) native, 1, natsize, abfd) != natsize)
+ {
+ bfd_release(abfd, native);
+ return false;
+ }
+
+ bfd_release (abfd, native);
+
+ return true;
+}
+
+/* This is stupid. This function should be a boolean predicate */
+long
+NAME(aout,canonicalize_reloc) (abfd, section, relptr, symbols)
+ bfd *abfd;
+ sec_ptr section;
+ arelent **relptr;
+ asymbol **symbols;
+{
+ arelent *tblptr = section->relocation;
+ unsigned int count;
+
+ if (section == obj_bsssec (abfd))
+ {
+ *relptr = NULL;
+ return 0;
+ }
+
+ if (!(tblptr || NAME(aout,slurp_reloc_table)(abfd, section, symbols)))
+ return -1;
+
+ if (section->flags & SEC_CONSTRUCTOR)
+ {
+ arelent_chain *chain = section->constructor_chain;
+
+ for (count = 0; count < section->reloc_count; count ++)
+ {
+ *relptr ++ = &chain->relent;
+ chain = chain->next;
+ }
+ }
+ else
+ {
+ tblptr = section->relocation;
+
+ for (count = 0; count++ < section->reloc_count;)
+ *relptr++ = tblptr++;
+ }
+
+ *relptr = 0;
+
+ return section->reloc_count;
+}
+
+long
+NAME(aout,get_reloc_upper_bound) (abfd, asect)
+ bfd *abfd;
+ sec_ptr asect;
+{
+ if (bfd_get_format (abfd) != bfd_object)
+ {
+ bfd_set_error (bfd_error_invalid_operation);
+ return -1;
+ }
+
+ if (asect->flags & SEC_CONSTRUCTOR)
+ return (sizeof (arelent *) * (asect->reloc_count+1));
+
+ if (asect == obj_datasec (abfd))
+ return (sizeof (arelent *)
+ * ((exec_hdr(abfd)->a_drsize / obj_reloc_entry_size (abfd))
+ + 1));
+
+ if (asect == obj_textsec (abfd))
+ return (sizeof (arelent *)
+ * ((exec_hdr(abfd)->a_trsize / obj_reloc_entry_size (abfd))
+ + 1));
+
+ /* TODO: why are there two if statements for obj_bsssec()? */
+
+ if (asect == obj_bsssec (abfd))
+ return sizeof (arelent *);
+
+ if (asect == obj_bsssec (abfd))
+ return 0;
+
+ bfd_set_error (bfd_error_invalid_operation);
+ return -1;
+}
+
+\f
+long
+NAME(aout,get_symtab_upper_bound) (abfd)
+ bfd *abfd;
+{
+ if (!NAME(aout,slurp_symbol_table)(abfd))
+ return -1;
+
+ return (bfd_get_symcount (abfd) + 1) * (sizeof (aout_symbol_type *));
+}
+
+alent *
+NAME(aout,get_lineno) (abfd, symbol)
+ bfd * abfd ATTRIBUTE_UNUSED;
+ asymbol * symbol ATTRIBUTE_UNUSED;
+{
+ return (alent *)NULL;
+}
+
+void
+NAME(aout,get_symbol_info) (abfd, symbol, ret)
+ bfd * abfd ATTRIBUTE_UNUSED;
+ asymbol *symbol;
+ symbol_info *ret;
+{
+ bfd_symbol_info (symbol, ret);
+
+ if (ret->type == '?')
+ {
+ int type_code = aout_symbol(symbol)->type & 0xff;
+ const char *stab_name = bfd_get_stab_name (type_code);
+ static char buf[10];
+
+ if (stab_name == NULL)
+ {
+ sprintf(buf, "(%d)", type_code);
+ stab_name = buf;
+ }
+ ret->type = '-';
+ ret->stab_type = type_code;
+ ret->stab_other = (unsigned)(aout_symbol(symbol)->other & 0xff);
+ ret->stab_desc = (unsigned)(aout_symbol(symbol)->desc & 0xffff);
+ ret->stab_name = stab_name;
+ }
+}
+
+/*ARGSUSED*/
+void
+NAME(aout,print_symbol) (abfd, afile, symbol, how)
+ bfd * abfd ATTRIBUTE_UNUSED;
+ PTR afile;
+ asymbol *symbol;
+ bfd_print_symbol_type how;
+{
+ FILE *file = (FILE *)afile;
+
+ switch (how)
+ {
+ case bfd_print_symbol_name:
+ if (symbol->name)
+ fprintf(file,"%s", symbol->name);
+ break;
+ case bfd_print_symbol_more:
+ fprintf(file,"%4x %2x %2x",(unsigned)(aout_symbol(symbol)->desc & 0xffff),
+ (unsigned)(aout_symbol(symbol)->other & 0xff),
+ (unsigned)(aout_symbol(symbol)->type));
+ break;
+ case bfd_print_symbol_all:
+ {
+ CONST char *section_name = symbol->section->name;
+
+ bfd_print_symbol_vandf ((PTR)file,symbol);
+
+ fprintf (file," %-5s %04x %02x %02x",
+ section_name,
+ (unsigned)(aout_symbol(symbol)->desc & 0xffff),
+ (unsigned)(aout_symbol(symbol)->other & 0xff),
+ (unsigned)(aout_symbol(symbol)->type & 0xff));
+ if (symbol->name)
+ fprintf(file," %s", symbol->name);
+ }
+ break;
+ }
+}
+
+/* If we don't have to allocate more than 1MB to hold the generic
+ symbols, we use the generic minisymbol method: it's faster, since
+ it only translates the symbols once, not multiple times. */
+#define MINISYM_THRESHOLD (1000000 / sizeof (asymbol))
+
+/* Read minisymbols. For minisymbols, we use the unmodified a.out
+ symbols. The minisymbol_to_symbol function translates these into
+ BFD asymbol structures. */
+
+long
+NAME(aout,read_minisymbols) (abfd, dynamic, minisymsp, sizep)
+ bfd *abfd;
+ boolean dynamic;
+ PTR *minisymsp;
+ unsigned int *sizep;
+{
+ if (dynamic)
+ {
+ /* We could handle the dynamic symbols here as well, but it's
+ easier to hand them off. */
+ return _bfd_generic_read_minisymbols (abfd, dynamic, minisymsp, sizep);
+ }
+
+ if (! aout_get_external_symbols (abfd))
+ return -1;
+
+ if (obj_aout_external_sym_count (abfd) < MINISYM_THRESHOLD)
+ return _bfd_generic_read_minisymbols (abfd, dynamic, minisymsp, sizep);
+
+ *minisymsp = (PTR) obj_aout_external_syms (abfd);
+
+ /* By passing the external symbols back from this routine, we are
+ giving up control over the memory block. Clear
+ obj_aout_external_syms, so that we do not try to free it
+ ourselves. */
+ obj_aout_external_syms (abfd) = NULL;
+
+ *sizep = EXTERNAL_NLIST_SIZE;
+ return obj_aout_external_sym_count (abfd);
+}
+
+/* Convert a minisymbol to a BFD asymbol. A minisymbol is just an
+ unmodified a.out symbol. The SYM argument is a structure returned
+ by bfd_make_empty_symbol, which we fill in here. */
+
+asymbol *
+NAME(aout,minisymbol_to_symbol) (abfd, dynamic, minisym, sym)
+ bfd *abfd;
+ boolean dynamic;
+ const PTR minisym;
+ asymbol *sym;
+{
+ if (dynamic
+ || obj_aout_external_sym_count (abfd) < MINISYM_THRESHOLD)
+ return _bfd_generic_minisymbol_to_symbol (abfd, dynamic, minisym, sym);
+
+ memset (sym, 0, sizeof (aout_symbol_type));
+
+ /* We call translate_symbol_table to translate a single symbol. */
+ if (! (NAME(aout,translate_symbol_table)
+ (abfd,
+ (aout_symbol_type *) sym,
+ (struct external_nlist *) minisym,
+ (bfd_size_type) 1,
+ obj_aout_external_strings (abfd),
+ obj_aout_external_string_size (abfd),
+ false)))
+ return NULL;
+
+ return sym;
+}
+
+/*
+ provided a BFD, a section and an offset into the section, calculate
+ and return the name of the source file and the line nearest to the
+ wanted location.
+*/
+
+boolean
+NAME(aout,find_nearest_line)
+ (abfd, section, symbols, offset, filename_ptr, functionname_ptr, line_ptr)
+ bfd *abfd;
+ asection *section;
+ asymbol **symbols;
+ bfd_vma offset;
+ CONST char **filename_ptr;
+ CONST char **functionname_ptr;
+ unsigned int *line_ptr;
+{
+ /* Run down the file looking for the filename, function and linenumber */
+ asymbol **p;
+ CONST char *directory_name = NULL;
+ CONST char *main_file_name = NULL;
+ CONST char *current_file_name = NULL;
+ CONST char *line_file_name = NULL; /* Value of current_file_name at line number. */
+ bfd_vma low_line_vma = 0;
+ bfd_vma low_func_vma = 0;
+ asymbol *func = 0;
+ size_t filelen, funclen;
+ char *buf;
+
+ *filename_ptr = abfd->filename;
+ *functionname_ptr = 0;
+ *line_ptr = 0;
+
+ if (symbols != (asymbol **)NULL)
+ {
+ for (p = symbols; *p; p++)
+ {
+ aout_symbol_type *q = (aout_symbol_type *)(*p);
+ next:
+ switch (q->type)
+ {
+ case N_TEXT:
+ /* If this looks like a file name symbol, and it comes after
+ the line number we have found so far, but before the
+ offset, then we have probably not found the right line
+ number. */
+ if (q->symbol.value <= offset
+ && ((q->symbol.value > low_line_vma
+ && (line_file_name != NULL
+ || *line_ptr != 0))
+ || (q->symbol.value > low_func_vma
+ && func != NULL)))
+ {
+ const char * symname;
+
+ symname = q->symbol.name;
+ if (strcmp (symname + strlen (symname) - 2, ".o") == 0)
+ {
+ if (q->symbol.value > low_line_vma)
+ {
+ *line_ptr = 0;
+ line_file_name = NULL;
+ }
+ if (q->symbol.value > low_func_vma)
+ func = NULL;
+ }
+ }
+ break;
+
+ case N_SO:
+ /* If this symbol is less than the offset, but greater than
+ the line number we have found so far, then we have not
+ found the right line number. */
+ if (q->symbol.value <= offset)
+ {
+ if (q->symbol.value > low_line_vma)
+ {
+ *line_ptr = 0;
+ line_file_name = NULL;
+ }
+ if (q->symbol.value > low_func_vma)
+ func = NULL;
+ }
+
+ main_file_name = current_file_name = q->symbol.name;
+ /* Look ahead to next symbol to check if that too is an N_SO. */
+ p++;
+ if (*p == NULL)
+ break;
+ q = (aout_symbol_type *)(*p);
+ if (q->type != (int)N_SO)
+ goto next;
+
+ /* Found a second N_SO First is directory; second is filename. */
+ directory_name = current_file_name;
+ main_file_name = current_file_name = q->symbol.name;
+ if (obj_textsec(abfd) != section)
+ goto done;
+ break;
+ case N_SOL:
+ current_file_name = q->symbol.name;
+ break;
+
+ case N_SLINE:
+ case N_DSLINE:
+ case N_BSLINE:
+ /* We'll keep this if it resolves nearer than the one we have
+ already. */
+ if (q->symbol.value >= low_line_vma
+ && q->symbol.value <= offset)
+ {
+ *line_ptr = q->desc;
+ low_line_vma = q->symbol.value;
+ line_file_name = current_file_name;
+ }
+ break;
+
+ case N_FUN:
+ {
+ /* We'll keep this if it is nearer than the one we have already */
+ if (q->symbol.value >= low_func_vma &&
+ q->symbol.value <= offset)
+ {
+ low_func_vma = q->symbol.value;
+ func = (asymbol *)q;
+ }
+ else if (q->symbol.value > offset)
+ goto done;
+ }
+ break;
+ }
+ }
+ }
+
+ done:
+ if (*line_ptr != 0)
+ main_file_name = line_file_name;
+
+ if (main_file_name == NULL
+ || main_file_name[0] == '/'
+ || directory_name == NULL)
+ filelen = 0;
+ else
+ filelen = strlen (directory_name) + strlen (main_file_name);
+ if (func == NULL)
+ funclen = 0;
+ else
+ funclen = strlen (bfd_asymbol_name (func));
+
+ if (adata (abfd).line_buf != NULL)
+ free (adata (abfd).line_buf);
+ if (filelen + funclen == 0)
+ adata (abfd).line_buf = buf = NULL;
+ else
+ {
+ buf = (char *) bfd_malloc (filelen + funclen + 3);
+ adata (abfd).line_buf = buf;
+ if (buf == NULL)
+ return false;
+ }
+
+ if (main_file_name != NULL)
+ {
+ if (main_file_name[0] == '/' || directory_name == NULL)
+ *filename_ptr = main_file_name;
+ else
+ {
+ sprintf (buf, "%s%s", directory_name, main_file_name);
+ *filename_ptr = buf;
+ buf += filelen + 1;
+ }
+ }
+
+ if (func)
+ {
+ const char *function = func->name;
+ char *p;
+
+ /* The caller expects a symbol name. We actually have a
+ function name, without the leading underscore. Put the
+ underscore back in, so that the caller gets a symbol name. */
+ if (bfd_get_symbol_leading_char (abfd) == '\0')
+ strcpy (buf, function);
+ else
+ {
+ buf[0] = bfd_get_symbol_leading_char (abfd);
+ strcpy (buf + 1, function);
+ }
+
+ /* Have to remove : stuff. */
+ p = strchr (buf, ':');
+ if (p != NULL)
+ *p = '\0';
+ *functionname_ptr = buf;
+ }
+
+ return true;
+}
+
+int
+NAME(aout,sizeof_headers) (abfd, execable)
+ bfd *abfd;
+ boolean execable ATTRIBUTE_UNUSED;
+{
+ return adata(abfd).exec_bytes_size;
+}
+
+/* Free all information we have cached for this BFD. We can always
+ read it again later if we need it. */
+
+boolean
+NAME(aout,bfd_free_cached_info) (abfd)
+ bfd *abfd;
+{
+ asection *o;
+
+ if (bfd_get_format (abfd) != bfd_object)
+ return true;
+
+#define BFCI_FREE(x) if (x != NULL) { free (x); x = NULL; }
+ BFCI_FREE (obj_aout_symbols (abfd));
+#ifdef USE_MMAP
+ obj_aout_external_syms (abfd) = 0;
+ bfd_free_window (&obj_aout_sym_window (abfd));
+ bfd_free_window (&obj_aout_string_window (abfd));
+ obj_aout_external_strings (abfd) = 0;
+#else
+ BFCI_FREE (obj_aout_external_syms (abfd));
+ BFCI_FREE (obj_aout_external_strings (abfd));
+#endif
+ for (o = abfd->sections; o != (asection *) NULL; o = o->next)
+ BFCI_FREE (o->relocation);
+#undef BFCI_FREE
+
+ return true;
+}
+\f
+/* a.out link code. */
+
+static boolean aout_link_add_object_symbols
+ PARAMS ((bfd *, struct bfd_link_info *));
+static boolean aout_link_check_archive_element
+ PARAMS ((bfd *, struct bfd_link_info *, boolean *));
+static boolean aout_link_free_symbols PARAMS ((bfd *));
+static boolean aout_link_check_ar_symbols
+ PARAMS ((bfd *, struct bfd_link_info *, boolean *pneeded));
+static boolean aout_link_add_symbols
+ PARAMS ((bfd *, struct bfd_link_info *));
+
+/* Routine to create an entry in an a.out link hash table. */
+
+struct bfd_hash_entry *
+NAME(aout,link_hash_newfunc) (entry, table, string)
+ struct bfd_hash_entry *entry;
+ struct bfd_hash_table *table;
+ const char *string;
+{
+ struct aout_link_hash_entry *ret = (struct aout_link_hash_entry *) entry;
+
+ /* Allocate the structure if it has not already been allocated by a
+ subclass. */
+ if (ret == (struct aout_link_hash_entry *) NULL)
+ ret = ((struct aout_link_hash_entry *)
+ bfd_hash_allocate (table, sizeof (struct aout_link_hash_entry)));
+ if (ret == (struct aout_link_hash_entry *) NULL)
+ return (struct bfd_hash_entry *) ret;
+
+ /* Call the allocation method of the superclass. */
+ ret = ((struct aout_link_hash_entry *)
+ _bfd_link_hash_newfunc ((struct bfd_hash_entry *) ret,
+ table, string));
+ if (ret)
+ {
+ /* Set local fields. */
+ ret->written = false;
+ ret->indx = -1;
+ }
+
+ return (struct bfd_hash_entry *) ret;
+}
+
+/* Initialize an a.out link hash table. */
+
+boolean
+NAME(aout,link_hash_table_init) (table, abfd, newfunc)
+ struct aout_link_hash_table *table;
+ bfd *abfd;
+ struct bfd_hash_entry *(*newfunc) PARAMS ((struct bfd_hash_entry *,
+ struct bfd_hash_table *,
+ const char *));
+{
+ return _bfd_link_hash_table_init (&table->root, abfd, newfunc);
+}
+
+/* Create an a.out link hash table. */
+
+struct bfd_link_hash_table *
+NAME(aout,link_hash_table_create) (abfd)
+ bfd *abfd;
+{
+ struct aout_link_hash_table *ret;
+
+ ret = ((struct aout_link_hash_table *)
+ bfd_alloc (abfd, sizeof (struct aout_link_hash_table)));
+ if (ret == NULL)
+ return (struct bfd_link_hash_table *) NULL;
+ if (! NAME(aout,link_hash_table_init) (ret, abfd,
+ NAME(aout,link_hash_newfunc)))
+ {
+ free (ret);
+ return (struct bfd_link_hash_table *) NULL;
+ }
+ return &ret->root;
+}
+
+/* Given an a.out BFD, add symbols to the global hash table as
+ appropriate. */
+
+boolean
+NAME(aout,link_add_symbols) (abfd, info)
+ bfd *abfd;
+ struct bfd_link_info *info;
+{
+ switch (bfd_get_format (abfd))
+ {
+ case bfd_object:
+ return aout_link_add_object_symbols (abfd, info);
+ case bfd_archive:
+ return _bfd_generic_link_add_archive_symbols
+ (abfd, info, aout_link_check_archive_element);
+ default:
+ bfd_set_error (bfd_error_wrong_format);
+ return false;
+ }
+}
+
+/* Add symbols from an a.out object file. */
+
+static boolean
+aout_link_add_object_symbols (abfd, info)
+ bfd *abfd;
+ struct bfd_link_info *info;
+{
+ if (! aout_get_external_symbols (abfd))
+ return false;
+ if (! aout_link_add_symbols (abfd, info))
+ return false;
+ if (! info->keep_memory)
+ {
+ if (! aout_link_free_symbols (abfd))
+ return false;
+ }
+ return true;
+}
+
+/* Check a single archive element to see if we need to include it in
+ the link. *PNEEDED is set according to whether this element is
+ needed in the link or not. This is called from
+ _bfd_generic_link_add_archive_symbols. */
+
+static boolean
+aout_link_check_archive_element (abfd, info, pneeded)
+ bfd *abfd;
+ struct bfd_link_info *info;
+ boolean *pneeded;
+{
+ if (! aout_get_external_symbols (abfd))
+ return false;
+
+ if (! aout_link_check_ar_symbols (abfd, info, pneeded))
+ return false;
+
+ if (*pneeded)
+ {
+ if (! aout_link_add_symbols (abfd, info))
+ return false;
+ }
+
+ if (! info->keep_memory || ! *pneeded)
+ {
+ if (! aout_link_free_symbols (abfd))
+ return false;
+ }
+
+ return true;
+}
+
+/* Free up the internal symbols read from an a.out file. */
+
+static boolean
+aout_link_free_symbols (abfd)
+ bfd *abfd;
+{
+ if (obj_aout_external_syms (abfd) != (struct external_nlist *) NULL)
+ {
+#ifdef USE_MMAP
+ bfd_free_window (&obj_aout_sym_window (abfd));
+#else
+ free ((PTR) obj_aout_external_syms (abfd));
+#endif
+ obj_aout_external_syms (abfd) = (struct external_nlist *) NULL;
+ }
+ if (obj_aout_external_strings (abfd) != (char *) NULL)
+ {
+#ifdef USE_MMAP
+ bfd_free_window (&obj_aout_string_window (abfd));
+#else
+ free ((PTR) obj_aout_external_strings (abfd));
+#endif
+ obj_aout_external_strings (abfd) = (char *) NULL;
+ }
+ return true;
+}
+
+/* Look through the internal symbols to see if this object file should
+ be included in the link. We should include this object file if it
+ defines any symbols which are currently undefined. If this object
+ file defines a common symbol, then we may adjust the size of the
+ known symbol but we do not include the object file in the link
+ (unless there is some other reason to include it). */
+
+static boolean
+aout_link_check_ar_symbols (abfd, info, pneeded)
+ bfd *abfd;
+ struct bfd_link_info *info;
+ boolean *pneeded;
+{
+ register struct external_nlist *p;
+ struct external_nlist *pend;
+ char *strings;
+
+ *pneeded = false;
+
+ /* Look through all the symbols. */
+ p = obj_aout_external_syms (abfd);
+ pend = p + obj_aout_external_sym_count (abfd);
+ strings = obj_aout_external_strings (abfd);
+ for (; p < pend; p++)
+ {
+ int type = bfd_h_get_8 (abfd, p->e_type);
+ const char *name;
+ struct bfd_link_hash_entry *h;
+
+ /* Ignore symbols that are not externally visible. This is an
+ optimization only, as we check the type more thoroughly
+ below. */
+ if ((type & N_EXT) == 0
+ || type == N_FN)
+ continue;
+
+ name = strings + GET_WORD (abfd, p->e_strx);
+ h = bfd_link_hash_lookup (info->hash, name, false, false, true);
+
+ /* We are only interested in symbols that are currently
+ undefined or common. */
+ if (h == (struct bfd_link_hash_entry *) NULL
+ || (h->type != bfd_link_hash_undefined
+ && h->type != bfd_link_hash_common))
+ continue;
+
+ if (type == (N_TEXT | N_EXT)
+ || type == (N_DATA | N_EXT)
+ || type == (N_BSS | N_EXT)
+ || type == (N_ABS | N_EXT))
+ {
+ /* This object file defines this symbol. We must link it
+ in. This is true regardless of whether the current
+ definition of the symbol is undefined or common. If the
+ current definition is common, we have a case in which we
+ have already seen an object file including
+ int a;
+ and this object file from the archive includes
+ int a = 5;
+ In such a case we must include this object file.
+
+ FIXME: The SunOS 4.1.3 linker will pull in the archive
+ element if the symbol is defined in the .data section,
+ but not if it is defined in the .text section. That
+ seems a bit crazy to me, and I haven't implemented it.
+ However, it might be correct. */
+ if (! (*info->callbacks->add_archive_element) (info, abfd, name))
+ return false;
+ *pneeded = true;
+ return true;
+ }
+
+ if (type == (N_UNDF | N_EXT))
+ {
+ bfd_vma value;
+
+ value = GET_WORD (abfd, p->e_value);
+ if (value != 0)
+ {
+ /* This symbol is common in the object from the archive
+ file. */
+ if (h->type == bfd_link_hash_undefined)
+ {
+ bfd *symbfd;
+ unsigned int power;
+
+ symbfd = h->u.undef.abfd;
+ if (symbfd == (bfd *) NULL)
+ {
+ /* This symbol was created as undefined from
+ outside BFD. We assume that we should link
+ in the object file. This is done for the -u
+ option in the linker. */
+ if (! (*info->callbacks->add_archive_element) (info,
+ abfd,
+ name))
+ return false;
+ *pneeded = true;
+ return true;
+ }
+ /* Turn the current link symbol into a common
+ symbol. It is already on the undefs list. */
+ h->type = bfd_link_hash_common;
+ h->u.c.p = ((struct bfd_link_hash_common_entry *)
+ bfd_hash_allocate (&info->hash->table,
+ sizeof (struct bfd_link_hash_common_entry)));
+ if (h->u.c.p == NULL)
+ return false;
+
+ h->u.c.size = value;
+
+ /* FIXME: This isn't quite right. The maximum
+ alignment of a common symbol should be set by the
+ architecture of the output file, not of the input
+ file. */
+ power = bfd_log2 (value);
+ if (power > bfd_get_arch_info (abfd)->section_align_power)
+ power = bfd_get_arch_info (abfd)->section_align_power;
+ h->u.c.p->alignment_power = power;
+
+ h->u.c.p->section = bfd_make_section_old_way (symbfd,
+ "COMMON");
+ }
+ else
+ {
+ /* Adjust the size of the common symbol if
+ necessary. */
+ if (value > h->u.c.size)
+ h->u.c.size = value;
+ }
+ }
+ }
+ }
+
+ /* We do not need this object file. */
+ return true;
+}
+
+/* Add all symbols from an object file to the hash table. */
+
+static boolean
+aout_link_add_symbols (abfd, info)
+ bfd *abfd;
+ struct bfd_link_info *info;
+{
+ boolean (*add_one_symbol) PARAMS ((struct bfd_link_info *, bfd *,
+ const char *, flagword, asection *,
+ bfd_vma, const char *, boolean,
+ boolean,
+ struct bfd_link_hash_entry **));
+ struct external_nlist *syms;
+ bfd_size_type sym_count;
+ char *strings;
+ boolean copy;
+ struct aout_link_hash_entry **sym_hash;
+ register struct external_nlist *p;
+ struct external_nlist *pend;
+
+ syms = obj_aout_external_syms (abfd);
+ sym_count = obj_aout_external_sym_count (abfd);
+ strings = obj_aout_external_strings (abfd);
+ if (info->keep_memory)
+ copy = false;
+ else
+ copy = true;
+
+ if (aout_backend_info (abfd)->add_dynamic_symbols != NULL)
+ {
+ if (! ((*aout_backend_info (abfd)->add_dynamic_symbols)
+ (abfd, info, &syms, &sym_count, &strings)))
+ return false;
+ }
+
+ /* We keep a list of the linker hash table entries that correspond
+ to particular symbols. We could just look them up in the hash
+ table, but keeping the list is more efficient. Perhaps this
+ should be conditional on info->keep_memory. */
+ sym_hash = ((struct aout_link_hash_entry **)
+ bfd_alloc (abfd,
+ ((size_t) sym_count
+ * sizeof (struct aout_link_hash_entry *))));
+ if (sym_hash == NULL && sym_count != 0)
+ return false;
+ obj_aout_sym_hashes (abfd) = sym_hash;
+
+ add_one_symbol = aout_backend_info (abfd)->add_one_symbol;
+ if (add_one_symbol == NULL)
+ add_one_symbol = _bfd_generic_link_add_one_symbol;
+
+ p = syms;
+ pend = p + sym_count;
+ for (; p < pend; p++, sym_hash++)
+ {
+ int type;
+ const char *name;
+ bfd_vma value;
+ asection *section;
+ flagword flags;
+ const char *string;
+
+ *sym_hash = NULL;
+
+ type = bfd_h_get_8 (abfd, p->e_type);
+
+#if 0 /* not supported in PDP-11 a.out */
+ /* Ignore debugging symbols. */
+ if ((type & N_STAB) != 0)
+ continue;
+#endif
+
+ name = strings + GET_WORD (abfd, p->e_strx);
+ value = GET_WORD (abfd, p->e_value);
+ flags = BSF_GLOBAL;
+ string = NULL;
+ switch (type)
+ {
+ default:
+ abort ();
+
+ case N_UNDF:
+ case N_ABS:
+ case N_TEXT:
+ case N_DATA:
+ case N_BSS:
+ case N_REG:
+ case N_FN:
+ /* Ignore symbols that are not externally visible. */
+ continue;
+
+ case N_UNDF | N_EXT:
+ if (value == 0)
+ {
+ section = bfd_und_section_ptr;
+ flags = 0;
+ }
+ else
+ section = bfd_com_section_ptr;
+ break;
+ case N_ABS | N_EXT:
+ section = bfd_abs_section_ptr;
+ break;
+ case N_TEXT | N_EXT:
+ section = obj_textsec (abfd);
+ value -= bfd_get_section_vma (abfd, section);
+ break;
+ case N_DATA | N_EXT:
+ /* Treat N_SETV symbols as N_DATA symbol; see comment in
+ translate_from_native_sym_flags. */
+ section = obj_datasec (abfd);
+ value -= bfd_get_section_vma (abfd, section);
+ break;
+ case N_BSS | N_EXT:
+ section = obj_bsssec (abfd);
+ value -= bfd_get_section_vma (abfd, section);
+ break;
+ }
+
+ if (! ((*add_one_symbol)
+ (info, abfd, name, flags, section, value, string, copy, false,
+ (struct bfd_link_hash_entry **) sym_hash)))
+ return false;
+
+ /* Restrict the maximum alignment of a common symbol based on
+ the architecture, since a.out has no way to represent
+ alignment requirements of a section in a .o file. FIXME:
+ This isn't quite right: it should use the architecture of the
+ output file, not the input files. */
+ if ((*sym_hash)->root.type == bfd_link_hash_common
+ && ((*sym_hash)->root.u.c.p->alignment_power >
+ bfd_get_arch_info (abfd)->section_align_power))
+ (*sym_hash)->root.u.c.p->alignment_power =
+ bfd_get_arch_info (abfd)->section_align_power;
+
+ /* If this is a set symbol, and we are not building sets, then
+ it is possible for the hash entry to not have been set. In
+ such a case, treat the symbol as not globally defined. */
+ if ((*sym_hash)->root.type == bfd_link_hash_new)
+ {
+ BFD_ASSERT ((flags & BSF_CONSTRUCTOR) != 0);
+ *sym_hash = NULL;
+ }
+ }
+
+ return true;
+}
+\f
+/* A hash table used for header files with N_BINCL entries. */
+
+struct aout_link_includes_table
+{
+ struct bfd_hash_table root;
+};
+
+/* A linked list of totals that we have found for a particular header
+ file. */
+
+struct aout_link_includes_totals
+{
+ struct aout_link_includes_totals *next;
+ bfd_vma total;
+};
+
+/* An entry in the header file hash table. */
+
+struct aout_link_includes_entry
+{
+ struct bfd_hash_entry root;
+ /* List of totals we have found for this file. */
+ struct aout_link_includes_totals *totals;
+};
+
+/* Look up an entry in an the header file hash table. */
+
+#define aout_link_includes_lookup(table, string, create, copy) \
+ ((struct aout_link_includes_entry *) \
+ bfd_hash_lookup (&(table)->root, (string), (create), (copy)))
+
+/* During the final link step we need to pass around a bunch of
+ information, so we do it in an instance of this structure. */
+
+struct aout_final_link_info
+{
+ /* General link information. */
+ struct bfd_link_info *info;
+ /* Output bfd. */
+ bfd *output_bfd;
+ /* Reloc file positions. */
+ file_ptr treloff, dreloff;
+ /* File position of symbols. */
+ file_ptr symoff;
+ /* String table. */
+ struct bfd_strtab_hash *strtab;
+ /* Header file hash table. */
+ struct aout_link_includes_table includes;
+ /* A buffer large enough to hold the contents of any section. */
+ bfd_byte *contents;
+ /* A buffer large enough to hold the relocs of any section. */
+ PTR relocs;
+ /* A buffer large enough to hold the symbol map of any input BFD. */
+ int *symbol_map;
+ /* A buffer large enough to hold output symbols of any input BFD. */
+ struct external_nlist *output_syms;
+};
+
+static struct bfd_hash_entry *aout_link_includes_newfunc
+ PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
+static boolean aout_link_input_bfd
+ PARAMS ((struct aout_final_link_info *, bfd *input_bfd));
+static boolean aout_link_write_symbols
+ PARAMS ((struct aout_final_link_info *, bfd *input_bfd));
+static boolean aout_link_write_other_symbol
+ PARAMS ((struct aout_link_hash_entry *, PTR));
+static boolean aout_link_input_section
+ PARAMS ((struct aout_final_link_info *, bfd *input_bfd,
+ asection *input_section, file_ptr *reloff_ptr,
+ bfd_size_type rel_size));
+static INLINE asection *aout_reloc_type_to_section
+ PARAMS ((bfd *, int));
+static boolean aout_link_reloc_link_order
+ PARAMS ((struct aout_final_link_info *, asection *,
+ struct bfd_link_order *));
+static boolean pdp11_aout_link_input_section
+ PARAMS ((struct aout_final_link_info *finfo,
+ bfd *input_bfd,
+ asection *input_section,
+ struct pdp11_aout_reloc_external *relocs,
+ bfd_size_type rel_size,
+ bfd_byte *contents));
+
+/* The function to create a new entry in the header file hash table. */
+
+static struct bfd_hash_entry *
+aout_link_includes_newfunc (entry, table, string)
+ struct bfd_hash_entry *entry;
+ struct bfd_hash_table *table;
+ const char *string;
+{
+ struct aout_link_includes_entry *ret =
+ (struct aout_link_includes_entry *) entry;
+
+ /* Allocate the structure if it has not already been allocated by a
+ subclass. */
+ if (ret == (struct aout_link_includes_entry *) NULL)
+ ret = ((struct aout_link_includes_entry *)
+ bfd_hash_allocate (table,
+ sizeof (struct aout_link_includes_entry)));
+ if (ret == (struct aout_link_includes_entry *) NULL)
+ return (struct bfd_hash_entry *) ret;
+
+ /* Call the allocation method of the superclass. */
+ ret = ((struct aout_link_includes_entry *)
+ bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string));
+ if (ret)
+ {
+ /* Set local fields. */
+ ret->totals = NULL;
+ }
+
+ return (struct bfd_hash_entry *) ret;
+}
+
+/* Do the final link step. This is called on the output BFD. The
+ INFO structure should point to a list of BFDs linked through the
+ link_next field which can be used to find each BFD which takes part
+ in the output. Also, each section in ABFD should point to a list
+ of bfd_link_order structures which list all the input sections for
+ the output section. */
+
+boolean
+NAME(aout,final_link) (abfd, info, callback)
+ bfd *abfd;
+ struct bfd_link_info *info;
+ void (*callback) PARAMS ((bfd *, file_ptr *, file_ptr *, file_ptr *));
+{
+ struct aout_final_link_info aout_info;
+ boolean includes_hash_initialized = false;
+ register bfd *sub;
+ bfd_size_type trsize, drsize;
+ size_t max_contents_size;
+ size_t max_relocs_size;
+ size_t max_sym_count;
+ bfd_size_type text_size;
+ file_ptr text_end;
+ register struct bfd_link_order *p;
+ asection *o;
+ boolean have_link_order_relocs;
+
+ if (info->shared)
+ abfd->flags |= DYNAMIC;
+
+ aout_info.info = info;
+ aout_info.output_bfd = abfd;
+ aout_info.contents = NULL;
+ aout_info.relocs = NULL;
+ aout_info.symbol_map = NULL;
+ aout_info.output_syms = NULL;
+
+ if (! bfd_hash_table_init_n (&aout_info.includes.root,
+ aout_link_includes_newfunc,
+ 251))
+ goto error_return;
+ includes_hash_initialized = true;
+
+ /* Figure out the largest section size. Also, if generating
+ relocateable output, count the relocs. */
+ trsize = 0;
+ drsize = 0;
+ max_contents_size = 0;
+ max_relocs_size = 0;
+ max_sym_count = 0;
+ for (sub = info->input_bfds; sub != NULL; sub = sub->link_next)
+ {
+ size_t sz;
+
+ if (info->relocateable)
+ {
+ if (bfd_get_flavour (sub) == bfd_target_aout_flavour)
+ {
+ trsize += exec_hdr (sub)->a_trsize;
+ drsize += exec_hdr (sub)->a_drsize;
+ }
+ else
+ {
+ /* FIXME: We need to identify the .text and .data sections
+ and call get_reloc_upper_bound and canonicalize_reloc to
+ work out the number of relocs needed, and then multiply
+ by the reloc size. */
+ (*_bfd_error_handler)
+ ("%s: relocateable link from %s to %s not supported",
+ bfd_get_filename (abfd),
+ sub->xvec->name, abfd->xvec->name);
+ bfd_set_error (bfd_error_invalid_operation);
+ goto error_return;
+ }
+ }
+
+ if (bfd_get_flavour (sub) == bfd_target_aout_flavour)
+ {
+ sz = bfd_section_size (sub, obj_textsec (sub));
+ if (sz > max_contents_size)
+ max_contents_size = sz;
+ sz = bfd_section_size (sub, obj_datasec (sub));
+ if (sz > max_contents_size)
+ max_contents_size = sz;
+
+ sz = exec_hdr (sub)->a_trsize;
+ if (sz > max_relocs_size)
+ max_relocs_size = sz;
+ sz = exec_hdr (sub)->a_drsize;
+ if (sz > max_relocs_size)
+ max_relocs_size = sz;
+
+ sz = obj_aout_external_sym_count (sub);
+ if (sz > max_sym_count)
+ max_sym_count = sz;
+ }
+ }
+
+ if (info->relocateable)
+ {
+ if (obj_textsec (abfd) != (asection *) NULL)
+ trsize += (_bfd_count_link_order_relocs (obj_textsec (abfd)
+ ->link_order_head)
+ * obj_reloc_entry_size (abfd));
+ if (obj_datasec (abfd) != (asection *) NULL)
+ drsize += (_bfd_count_link_order_relocs (obj_datasec (abfd)
+ ->link_order_head)
+ * obj_reloc_entry_size (abfd));
+ }
+
+ exec_hdr (abfd)->a_trsize = trsize;
+ exec_hdr (abfd)->a_drsize = drsize;
+
+ exec_hdr (abfd)->a_entry = bfd_get_start_address (abfd);
+
+ /* Adjust the section sizes and vmas according to the magic number.
+ This sets a_text, a_data and a_bss in the exec_hdr and sets the
+ filepos for each section. */
+ if (! NAME(aout,adjust_sizes_and_vmas) (abfd, &text_size, &text_end))
+ goto error_return;
+
+ /* The relocation and symbol file positions differ among a.out
+ targets. We are passed a callback routine from the backend
+ specific code to handle this.
+ FIXME: At this point we do not know how much space the symbol
+ table will require. This will not work for any (nonstandard)
+ a.out target that needs to know the symbol table size before it
+ can compute the relocation file positions. This may or may not
+ be the case for the hp300hpux target, for example. */
+ (*callback) (abfd, &aout_info.treloff, &aout_info.dreloff,
+ &aout_info.symoff);
+ obj_textsec (abfd)->rel_filepos = aout_info.treloff;
+ obj_datasec (abfd)->rel_filepos = aout_info.dreloff;
+ obj_sym_filepos (abfd) = aout_info.symoff;
+
+ /* We keep a count of the symbols as we output them. */
+ obj_aout_external_sym_count (abfd) = 0;
+
+ /* We accumulate the string table as we write out the symbols. */
+ aout_info.strtab = _bfd_stringtab_init ();
+ if (aout_info.strtab == NULL)
+ goto error_return;
+
+ /* Allocate buffers to hold section contents and relocs. */
+ aout_info.contents = (bfd_byte *) bfd_malloc (max_contents_size);
+ aout_info.relocs = (PTR) bfd_malloc (max_relocs_size);
+ aout_info.symbol_map = (int *) bfd_malloc (max_sym_count * sizeof (int *));
+ aout_info.output_syms = ((struct external_nlist *)
+ bfd_malloc ((max_sym_count + 1)
+ * sizeof (struct external_nlist)));
+ if ((aout_info.contents == NULL && max_contents_size != 0)
+ || (aout_info.relocs == NULL && max_relocs_size != 0)
+ || (aout_info.symbol_map == NULL && max_sym_count != 0)
+ || aout_info.output_syms == NULL)
+ goto error_return;
+
+ /* If we have a symbol named __DYNAMIC, force it out now. This is
+ required by SunOS. Doing this here rather than in sunos.c is a
+ hack, but it's easier than exporting everything which would be
+ needed. */
+ {
+ struct aout_link_hash_entry *h;
+
+ h = aout_link_hash_lookup (aout_hash_table (info), "__DYNAMIC",
+ false, false, false);
+ if (h != NULL)
+ aout_link_write_other_symbol (h, &aout_info);
+ }
+
+ /* The most time efficient way to do the link would be to read all
+ the input object files into memory and then sort out the
+ information into the output file. Unfortunately, that will
+ probably use too much memory. Another method would be to step
+ through everything that composes the text section and write it
+ out, and then everything that composes the data section and write
+ it out, and then write out the relocs, and then write out the
+ symbols. Unfortunately, that requires reading stuff from each
+ input file several times, and we will not be able to keep all the
+ input files open simultaneously, and reopening them will be slow.
+
+ What we do is basically process one input file at a time. We do
+ everything we need to do with an input file once--copy over the
+ section contents, handle the relocation information, and write
+ out the symbols--and then we throw away the information we read
+ from it. This approach requires a lot of lseeks of the output
+ file, which is unfortunate but still faster than reopening a lot
+ of files.
+
+ We use the output_has_begun field of the input BFDs to see
+ whether we have already handled it. */
+ for (sub = info->input_bfds; sub != (bfd *) NULL; sub = sub->link_next)
+ sub->output_has_begun = false;
+
+ /* Mark all sections which are to be included in the link. This
+ will normally be every section. We need to do this so that we
+ can identify any sections which the linker has decided to not
+ include. */
+ for (o = abfd->sections; o != NULL; o = o->next)
+ {
+ for (p = o->link_order_head; p != NULL; p = p->next)
+ {
+ if (p->type == bfd_indirect_link_order)
+ p->u.indirect.section->linker_mark = true;
+ }
+ }
+
+ have_link_order_relocs = false;
+ for (o = abfd->sections; o != (asection *) NULL; o = o->next)
+ {
+ for (p = o->link_order_head;
+ p != (struct bfd_link_order *) NULL;
+ p = p->next)
+ {
+ if (p->type == bfd_indirect_link_order
+ && (bfd_get_flavour (p->u.indirect.section->owner)
+ == bfd_target_aout_flavour))
+ {
+ bfd *input_bfd;
+
+ input_bfd = p->u.indirect.section->owner;
+ if (! input_bfd->output_has_begun)
+ {
+ if (! aout_link_input_bfd (&aout_info, input_bfd))
+ goto error_return;
+ input_bfd->output_has_begun = true;
+ }
+ }
+ else if (p->type == bfd_section_reloc_link_order
+ || p->type == bfd_symbol_reloc_link_order)
+ {
+ /* These are handled below. */
+ have_link_order_relocs = true;
+ }
+ else
+ {
+ if (! _bfd_default_link_order (abfd, info, o, p))
+ goto error_return;
+ }
+ }
+ }
+
+ /* Write out any symbols that we have not already written out. */
+ aout_link_hash_traverse (aout_hash_table (info),
+ aout_link_write_other_symbol,
+ (PTR) &aout_info);
+
+ /* Now handle any relocs we were asked to create by the linker.
+ These did not come from any input file. We must do these after
+ we have written out all the symbols, so that we know the symbol
+ indices to use. */
+ if (have_link_order_relocs)
+ {
+ for (o = abfd->sections; o != (asection *) NULL; o = o->next)
+ {
+ for (p = o->link_order_head;
+ p != (struct bfd_link_order *) NULL;
+ p = p->next)
+ {
+ if (p->type == bfd_section_reloc_link_order
+ || p->type == bfd_symbol_reloc_link_order)
+ {
+ if (! aout_link_reloc_link_order (&aout_info, o, p))
+ goto error_return;
+ }
+ }
+ }
+ }
+
+ if (aout_info.contents != NULL)
+ {
+ free (aout_info.contents);
+ aout_info.contents = NULL;
+ }
+ if (aout_info.relocs != NULL)
+ {
+ free (aout_info.relocs);
+ aout_info.relocs = NULL;
+ }
+ if (aout_info.symbol_map != NULL)
+ {
+ free (aout_info.symbol_map);
+ aout_info.symbol_map = NULL;
+ }
+ if (aout_info.output_syms != NULL)
+ {
+ free (aout_info.output_syms);
+ aout_info.output_syms = NULL;
+ }
+ if (includes_hash_initialized)
+ {
+ bfd_hash_table_free (&aout_info.includes.root);
+ includes_hash_initialized = false;
+ }
+
+ /* Finish up any dynamic linking we may be doing. */
+ if (aout_backend_info (abfd)->finish_dynamic_link != NULL)
+ {
+ if (! (*aout_backend_info (abfd)->finish_dynamic_link) (abfd, info))
+ goto error_return;
+ }
+
+ /* Update the header information. */
+ abfd->symcount = obj_aout_external_sym_count (abfd);
+ exec_hdr (abfd)->a_syms = abfd->symcount * EXTERNAL_NLIST_SIZE;
+ obj_str_filepos (abfd) = obj_sym_filepos (abfd) + exec_hdr (abfd)->a_syms;
+ obj_textsec (abfd)->reloc_count =
+ exec_hdr (abfd)->a_trsize / obj_reloc_entry_size (abfd);
+ obj_datasec (abfd)->reloc_count =
+ exec_hdr (abfd)->a_drsize / obj_reloc_entry_size (abfd);
+
+ /* Write out the string table, unless there are no symbols. */
+ if (abfd->symcount > 0)
+ {
+ if (bfd_seek (abfd, obj_str_filepos (abfd), SEEK_SET) != 0
+ || ! emit_stringtab (abfd, aout_info.strtab))
+ goto error_return;
+ }
+ else if (obj_textsec (abfd)->reloc_count == 0
+ && obj_datasec (abfd)->reloc_count == 0)
+ {
+ bfd_byte b;
+
+ b = 0;
+ if (bfd_seek (abfd,
+ (obj_datasec (abfd)->filepos
+ + exec_hdr (abfd)->a_data
+ - 1),
+ SEEK_SET) != 0
+ || bfd_write (&b, 1, 1, abfd) != 1)
+ goto error_return;
+ }
+
+ return true;
+
+ error_return:
+ if (aout_info.contents != NULL)
+ free (aout_info.contents);
+ if (aout_info.relocs != NULL)
+ free (aout_info.relocs);
+ if (aout_info.symbol_map != NULL)
+ free (aout_info.symbol_map);
+ if (aout_info.output_syms != NULL)
+ free (aout_info.output_syms);
+ if (includes_hash_initialized)
+ bfd_hash_table_free (&aout_info.includes.root);
+ return false;
+}
+
+/* Link an a.out input BFD into the output file. */
+
+static boolean
+aout_link_input_bfd (finfo, input_bfd)
+ struct aout_final_link_info *finfo;
+ bfd *input_bfd;
+{
+ bfd_size_type sym_count;
+
+ BFD_ASSERT (bfd_get_format (input_bfd) == bfd_object);
+
+ /* If this is a dynamic object, it may need special handling. */
+ if ((input_bfd->flags & DYNAMIC) != 0
+ && aout_backend_info (input_bfd)->link_dynamic_object != NULL)
+ {
+ return ((*aout_backend_info (input_bfd)->link_dynamic_object)
+ (finfo->info, input_bfd));
+ }
+
+ /* Get the symbols. We probably have them already, unless
+ finfo->info->keep_memory is false. */
+ if (! aout_get_external_symbols (input_bfd))
+ return false;
+
+ sym_count = obj_aout_external_sym_count (input_bfd);
+
+ /* Write out the symbols and get a map of the new indices. The map
+ is placed into finfo->symbol_map. */
+ if (! aout_link_write_symbols (finfo, input_bfd))
+ return false;
+
+ /* Relocate and write out the sections. These functions use the
+ symbol map created by aout_link_write_symbols. The linker_mark
+ field will be set if these sections are to be included in the
+ link, which will normally be the case. */
+ if (obj_textsec (input_bfd)->linker_mark)
+ {
+ if (! aout_link_input_section (finfo, input_bfd,
+ obj_textsec (input_bfd),
+ &finfo->treloff,
+ exec_hdr (input_bfd)->a_trsize))
+ return false;
+ }
+ if (obj_datasec (input_bfd)->linker_mark)
+ {
+ if (! aout_link_input_section (finfo, input_bfd,
+ obj_datasec (input_bfd),
+ &finfo->dreloff,
+ exec_hdr (input_bfd)->a_drsize))
+ return false;
+ }
+
+ /* If we are not keeping memory, we don't need the symbols any
+ longer. We still need them if we are keeping memory, because the
+ strings in the hash table point into them. */
+ if (! finfo->info->keep_memory)
+ {
+ if (! aout_link_free_symbols (input_bfd))
+ return false;
+ }
+
+ return true;
+}
+
+/* Adjust and write out the symbols for an a.out file. Set the new
+ symbol indices into a symbol_map. */
+
+static boolean
+aout_link_write_symbols (finfo, input_bfd)
+ struct aout_final_link_info *finfo;
+ bfd *input_bfd;
+{
+ bfd *output_bfd;
+ bfd_size_type sym_count;
+ char *strings;
+ enum bfd_link_strip strip;
+ enum bfd_link_discard discard;
+ struct external_nlist *outsym;
+ bfd_size_type strtab_index;
+ register struct external_nlist *sym;
+ struct external_nlist *sym_end;
+ struct aout_link_hash_entry **sym_hash;
+ int *symbol_map;
+ boolean pass;
+ boolean skip_next;
+
+ output_bfd = finfo->output_bfd;
+ sym_count = obj_aout_external_sym_count (input_bfd);
+ strings = obj_aout_external_strings (input_bfd);
+ strip = finfo->info->strip;
+ discard = finfo->info->discard;
+ outsym = finfo->output_syms;
+
+ /* First write out a symbol for this object file, unless we are
+ discarding such symbols. */
+ if (strip != strip_all
+ && (strip != strip_some
+ || bfd_hash_lookup (finfo->info->keep_hash, input_bfd->filename,
+ false, false) != NULL)
+ && discard != discard_all)
+ {
+ bfd_h_put_8 (output_bfd, N_TEXT, outsym->e_type);
+ strtab_index = add_to_stringtab (output_bfd, finfo->strtab,
+ input_bfd->filename, false);
+ if (strtab_index == (bfd_size_type) -1)
+ return false;
+ PUT_WORD (output_bfd, strtab_index, outsym->e_strx);
+ PUT_WORD (output_bfd,
+ (bfd_get_section_vma (output_bfd,
+ obj_textsec (input_bfd)->output_section)
+ + obj_textsec (input_bfd)->output_offset),
+ outsym->e_value);
+ ++obj_aout_external_sym_count (output_bfd);
+ ++outsym;
+ }
+
+ pass = false;
+ skip_next = false;
+ sym = obj_aout_external_syms (input_bfd);
+ sym_end = sym + sym_count;
+ sym_hash = obj_aout_sym_hashes (input_bfd);
+ symbol_map = finfo->symbol_map;
+ memset (symbol_map, 0, sym_count * sizeof *symbol_map);
+ for (; sym < sym_end; sym++, sym_hash++, symbol_map++)
+ {
+ const char *name;
+ int type;
+ struct aout_link_hash_entry *h;
+ boolean skip;
+ asection *symsec;
+ bfd_vma val = 0;
+ boolean copy;
+
+ /* We set *symbol_map to 0 above for all symbols. If it has
+ already been set to -1 for this symbol, it means that we are
+ discarding it because it appears in a duplicate header file.
+ See the N_BINCL code below. */
+ if (*symbol_map == -1)
+ continue;
+
+ /* Initialize *symbol_map to -1, which means that the symbol was
+ not copied into the output file. We will change it later if
+ we do copy the symbol over. */
+ *symbol_map = -1;
+
+ type = bfd_h_get_8 (input_bfd, sym->e_type);
+ name = strings + GET_WORD (input_bfd, sym->e_strx);
+
+ h = NULL;
+
+ if (pass)
+ {
+ /* Pass this symbol through. It is the target of an
+ indirect or warning symbol. */
+ val = GET_WORD (input_bfd, sym->e_value);
+ pass = false;
+ }
+ else if (skip_next)
+ {
+ /* Skip this symbol, which is the target of an indirect
+ symbol that we have changed to no longer be an indirect
+ symbol. */
+ skip_next = false;
+ continue;
+ }
+ else
+ {
+ struct aout_link_hash_entry *hresolve;
+
+ /* We have saved the hash table entry for this symbol, if
+ there is one. Note that we could just look it up again
+ in the hash table, provided we first check that it is an
+ external symbol. */
+ h = *sym_hash;
+
+ /* Use the name from the hash table, in case the symbol was
+ wrapped. */
+ if (h != NULL)
+ name = h->root.root.string;
+
+ /* If this is an indirect or warning symbol, then change
+ hresolve to the base symbol. We also change *sym_hash so
+ that the relocation routines relocate against the real
+ symbol. */
+ hresolve = h;
+ if (h != (struct aout_link_hash_entry *) NULL
+ && (h->root.type == bfd_link_hash_indirect
+ || h->root.type == bfd_link_hash_warning))
+ {
+ hresolve = (struct aout_link_hash_entry *) h->root.u.i.link;
+ while (hresolve->root.type == bfd_link_hash_indirect
+ || hresolve->root.type == bfd_link_hash_warning)
+ hresolve = ((struct aout_link_hash_entry *)
+ hresolve->root.u.i.link);
+ *sym_hash = hresolve;
+ }
+
+ /* If the symbol has already been written out, skip it. */
+ if (h != (struct aout_link_hash_entry *) NULL
+ && h->root.type != bfd_link_hash_warning
+ && h->written)
+ {
+ if ((type & N_TYPE) == N_INDR
+ || type == N_WARNING)
+ skip_next = true;
+ *symbol_map = h->indx;
+ continue;
+ }
+
+ /* See if we are stripping this symbol. */
+ skip = false;
+ switch (strip)
+ {
+ case strip_none:
+ break;
+ case strip_debugger:
+ if ((type & N_STAB) != 0)
+ skip = true;
+ break;
+ case strip_some:
+ if (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
+ == NULL)
+ skip = true;
+ break;
+ case strip_all:
+ skip = true;
+ break;
+ }
+ if (skip)
+ {
+ if (h != (struct aout_link_hash_entry *) NULL)
+ h->written = true;
+ continue;
+ }
+
+ /* Get the value of the symbol. */
+ if ((type & N_TYPE) == N_TEXT
+ || type == N_WEAKT)
+ symsec = obj_textsec (input_bfd);
+ else if ((type & N_TYPE) == N_DATA
+ || type == N_WEAKD)
+ symsec = obj_datasec (input_bfd);
+ else if ((type & N_TYPE) == N_BSS
+ || type == N_WEAKB)
+ symsec = obj_bsssec (input_bfd);
+ else if ((type & N_TYPE) == N_ABS
+ || type == N_WEAKA)
+ symsec = bfd_abs_section_ptr;
+ else if (((type & N_TYPE) == N_INDR
+ && (hresolve == (struct aout_link_hash_entry *) NULL
+ || (hresolve->root.type != bfd_link_hash_defined
+ && hresolve->root.type != bfd_link_hash_defweak
+ && hresolve->root.type != bfd_link_hash_common)))
+ || type == N_WARNING)
+ {
+ /* Pass the next symbol through unchanged. The
+ condition above for indirect symbols is so that if
+ the indirect symbol was defined, we output it with
+ the correct definition so the debugger will
+ understand it. */
+ pass = true;
+ val = GET_WORD (input_bfd, sym->e_value);
+ symsec = NULL;
+ }
+ else if ((type & N_STAB) != 0)
+ {
+ val = GET_WORD (input_bfd, sym->e_value);
+ symsec = NULL;
+ }
+ else
+ {
+ /* If we get here with an indirect symbol, it means that
+ we are outputting it with a real definition. In such
+ a case we do not want to output the next symbol,
+ which is the target of the indirection. */
+ if ((type & N_TYPE) == N_INDR)
+ skip_next = true;
+
+ symsec = NULL;
+
+ /* We need to get the value from the hash table. We use
+ hresolve so that if we have defined an indirect
+ symbol we output the final definition. */
+ if (h == (struct aout_link_hash_entry *) NULL)
+ {
+ switch (type & N_TYPE)
+ {
+ case N_SETT:
+ symsec = obj_textsec (input_bfd);
+ break;
+ case N_SETD:
+ symsec = obj_datasec (input_bfd);
+ break;
+ case N_SETB:
+ symsec = obj_bsssec (input_bfd);
+ break;
+ case N_SETA:
+ symsec = bfd_abs_section_ptr;
+ break;
+ default:
+ val = 0;
+ break;
+ }
+ }
+ else if (hresolve->root.type == bfd_link_hash_defined
+ || hresolve->root.type == bfd_link_hash_defweak)
+ {
+ asection *input_section;
+ asection *output_section;
+
+ /* This case usually means a common symbol which was
+ turned into a defined symbol. */
+ input_section = hresolve->root.u.def.section;
+ output_section = input_section->output_section;
+ BFD_ASSERT (bfd_is_abs_section (output_section)
+ || output_section->owner == output_bfd);
+ val = (hresolve->root.u.def.value
+ + bfd_get_section_vma (output_bfd, output_section)
+ + input_section->output_offset);
+
+ /* Get the correct type based on the section. If
+ this is a constructed set, force it to be
+ globally visible. */
+ if (type == N_SETT
+ || type == N_SETD
+ || type == N_SETB
+ || type == N_SETA)
+ type |= N_EXT;
+
+ type &=~ N_TYPE;
+
+ if (output_section == obj_textsec (output_bfd))
+ type |= (hresolve->root.type == bfd_link_hash_defined
+ ? N_TEXT
+ : N_WEAKT);
+ else if (output_section == obj_datasec (output_bfd))
+ type |= (hresolve->root.type == bfd_link_hash_defined
+ ? N_DATA
+ : N_WEAKD);
+ else if (output_section == obj_bsssec (output_bfd))
+ type |= (hresolve->root.type == bfd_link_hash_defined
+ ? N_BSS
+ : N_WEAKB);
+ else
+ type |= (hresolve->root.type == bfd_link_hash_defined
+ ? N_ABS
+ : N_WEAKA);
+ }
+ else if (hresolve->root.type == bfd_link_hash_common)
+ val = hresolve->root.u.c.size;
+ else if (hresolve->root.type == bfd_link_hash_undefweak)
+ {
+ val = 0;
+ type = N_WEAKU;
+ }
+ else
+ val = 0;
+ }
+ if (symsec != (asection *) NULL)
+ val = (symsec->output_section->vma
+ + symsec->output_offset
+ + (GET_WORD (input_bfd, sym->e_value)
+ - symsec->vma));
+
+ /* If this is a global symbol set the written flag, and if
+ it is a local symbol see if we should discard it. */
+ if (h != (struct aout_link_hash_entry *) NULL)
+ {
+ h->written = true;
+ h->indx = obj_aout_external_sym_count (output_bfd);
+ }
+ else if ((type & N_TYPE) != N_SETT
+ && (type & N_TYPE) != N_SETD
+ && (type & N_TYPE) != N_SETB
+ && (type & N_TYPE) != N_SETA)
+ {
+ switch (discard)
+ {
+ case discard_none:
+ break;
+ case discard_l:
+ if ((type & N_STAB) == 0
+ && bfd_is_local_label_name (input_bfd, name))
+ skip = true;
+ break;
+ case discard_all:
+ skip = true;
+ break;
+ }
+ if (skip)
+ {
+ pass = false;
+ continue;
+ }
+ }
+
+ /* An N_BINCL symbol indicates the start of the stabs
+ entries for a header file. We need to scan ahead to the
+ next N_EINCL symbol, ignoring nesting, adding up all the
+ characters in the symbol names, not including the file
+ numbers in types (the first number after an open
+ parenthesis). */
+ if (type == N_BINCL)
+ {
+ struct external_nlist *incl_sym;
+ int nest;
+ struct aout_link_includes_entry *incl_entry;
+ struct aout_link_includes_totals *t;
+
+ val = 0;
+ nest = 0;
+ for (incl_sym = sym + 1; incl_sym < sym_end; incl_sym++)
+ {
+ int incl_type;
+
+ incl_type = bfd_h_get_8 (input_bfd, incl_sym->e_type);
+ if (incl_type == N_EINCL)
+ {
+ if (nest == 0)
+ break;
+ --nest;
+ }
+ else if (incl_type == N_BINCL)
+ ++nest;
+ else if (nest == 0)
+ {
+ const char *s;
+
+ s = strings + GET_WORD (input_bfd, incl_sym->e_strx);
+ for (; *s != '\0'; s++)
+ {
+ val += *s;
+ if (*s == '(')
+ {
+ /* Skip the file number. */
+ ++s;
+ while (isdigit ((unsigned char) *s))
+ ++s;
+ --s;
+ }
+ }
+ }
+ }
+
+ /* If we have already included a header file with the
+ same value, then replace this one with an N_EXCL
+ symbol. */
+ copy = ! finfo->info->keep_memory;
+ incl_entry = aout_link_includes_lookup (&finfo->includes,
+ name, true, copy);
+ if (incl_entry == NULL)
+ return false;
+ for (t = incl_entry->totals; t != NULL; t = t->next)
+ if (t->total == val)
+ break;
+ if (t == NULL)
+ {
+ /* This is the first time we have seen this header
+ file with this set of stabs strings. */
+ t = ((struct aout_link_includes_totals *)
+ bfd_hash_allocate (&finfo->includes.root,
+ sizeof *t));
+ if (t == NULL)
+ return false;
+ t->total = val;
+ t->next = incl_entry->totals;
+ incl_entry->totals = t;
+ }
+ else
+ {
+ int *incl_map;
+
+ /* This is a duplicate header file. We must change
+ it to be an N_EXCL entry, and mark all the
+ included symbols to prevent outputting them. */
+ type = N_EXCL;
+
+ nest = 0;
+ for (incl_sym = sym + 1, incl_map = symbol_map + 1;
+ incl_sym < sym_end;
+ incl_sym++, incl_map++)
+ {
+ int incl_type;
+
+ incl_type = bfd_h_get_8 (input_bfd, incl_sym->e_type);
+ if (incl_type == N_EINCL)
+ {
+ if (nest == 0)
+ {
+ *incl_map = -1;
+ break;
+ }
+ --nest;
+ }
+ else if (incl_type == N_BINCL)
+ ++nest;
+ else if (nest == 0)
+ *incl_map = -1;
+ }
+ }
+ }
+ }
+
+ /* Copy this symbol into the list of symbols we are going to
+ write out. */
+ bfd_h_put_8 (output_bfd, type, outsym->e_type);
+ copy = false;
+ if (! finfo->info->keep_memory)
+ {
+ /* name points into a string table which we are going to
+ free. If there is a hash table entry, use that string.
+ Otherwise, copy name into memory. */
+ if (h != (struct aout_link_hash_entry *) NULL)
+ name = h->root.root.string;
+ else
+ copy = true;
+ }
+ strtab_index = add_to_stringtab (output_bfd, finfo->strtab,
+ name, copy);
+ if (strtab_index == (bfd_size_type) -1)
+ return false;
+ PUT_WORD (output_bfd, strtab_index, outsym->e_strx);
+ PUT_WORD (output_bfd, val, outsym->e_value);
+ *symbol_map = obj_aout_external_sym_count (output_bfd);
+ ++obj_aout_external_sym_count (output_bfd);
+ ++outsym;
+ }
+
+ /* Write out the output symbols we have just constructed. */
+ if (outsym > finfo->output_syms)
+ {
+ bfd_size_type outsym_count;
+
+ if (bfd_seek (output_bfd, finfo->symoff, SEEK_SET) != 0)
+ return false;
+ outsym_count = outsym - finfo->output_syms;
+ if (bfd_write ((PTR) finfo->output_syms,
+ (bfd_size_type) EXTERNAL_NLIST_SIZE,
+ (bfd_size_type) outsym_count, output_bfd)
+ != outsym_count * EXTERNAL_NLIST_SIZE)
+ return false;
+ finfo->symoff += outsym_count * EXTERNAL_NLIST_SIZE;
+ }
+
+ return true;
+}
+
+/* Write out a symbol that was not associated with an a.out input
+ object. */
+
+static boolean
+aout_link_write_other_symbol (h, data)
+ struct aout_link_hash_entry *h;
+ PTR data;
+{
+ struct aout_final_link_info *finfo = (struct aout_final_link_info *) data;
+ bfd *output_bfd;
+ int type;
+ bfd_vma val;
+ struct external_nlist outsym;
+ bfd_size_type indx;
+
+ output_bfd = finfo->output_bfd;
+
+ if (aout_backend_info (output_bfd)->write_dynamic_symbol != NULL)
+ {
+ if (! ((*aout_backend_info (output_bfd)->write_dynamic_symbol)
+ (output_bfd, finfo->info, h)))
+ {
+ /* FIXME: No way to handle errors. */
+ abort ();
+ }
+ }
+
+ if (h->written)
+ return true;
+
+ h->written = true;
+
+ /* An indx of -2 means the symbol must be written. */
+ if (h->indx != -2
+ && (finfo->info->strip == strip_all
+ || (finfo->info->strip == strip_some
+ && bfd_hash_lookup (finfo->info->keep_hash, h->root.root.string,
+ false, false) == NULL)))
+ return true;
+
+ switch (h->root.type)
+ {
+ default:
+ abort ();
+ /* Avoid variable not initialized warnings. */
+ return true;
+ case bfd_link_hash_new:
+ /* This can happen for set symbols when sets are not being
+ built. */
+ return true;
+ case bfd_link_hash_undefined:
+ type = N_UNDF | N_EXT;
+ val = 0;
+ break;
+ case bfd_link_hash_defined:
+ case bfd_link_hash_defweak:
+ {
+ asection *sec;
+
+ sec = h->root.u.def.section->output_section;
+ BFD_ASSERT (bfd_is_abs_section (sec)
+ || sec->owner == output_bfd);
+ if (sec == obj_textsec (output_bfd))
+ type = h->root.type == bfd_link_hash_defined ? N_TEXT : N_WEAKT;
+ else if (sec == obj_datasec (output_bfd))
+ type = h->root.type == bfd_link_hash_defined ? N_DATA : N_WEAKD;
+ else if (sec == obj_bsssec (output_bfd))
+ type = h->root.type == bfd_link_hash_defined ? N_BSS : N_WEAKB;
+ else
+ type = h->root.type == bfd_link_hash_defined ? N_ABS : N_WEAKA;
+ type |= N_EXT;
+ val = (h->root.u.def.value
+ + sec->vma
+ + h->root.u.def.section->output_offset);
+ }
+ break;
+ case bfd_link_hash_common:
+ type = N_UNDF | N_EXT;
+ val = h->root.u.c.size;
+ break;
+ case bfd_link_hash_undefweak:
+ type = N_WEAKU;
+ val = 0;
+ case bfd_link_hash_indirect:
+ case bfd_link_hash_warning:
+ /* FIXME: Ignore these for now. The circumstances under which
+ they should be written out are not clear to me. */
+ return true;
+ }
+
+ bfd_h_put_8 (output_bfd, type, outsym.e_type);
+ indx = add_to_stringtab (output_bfd, finfo->strtab, h->root.root.string,
+ false);
+ if (indx == (bfd_size_type) -1)
+ {
+ /* FIXME: No way to handle errors. */
+ abort ();
+ }
+ PUT_WORD (output_bfd, indx, outsym.e_strx);
+ PUT_WORD (output_bfd, val, outsym.e_value);
+
+ if (bfd_seek (output_bfd, finfo->symoff, SEEK_SET) != 0
+ || bfd_write ((PTR) &outsym, (bfd_size_type) EXTERNAL_NLIST_SIZE,
+ (bfd_size_type) 1, output_bfd) != EXTERNAL_NLIST_SIZE)
+ {
+ /* FIXME: No way to handle errors. */
+ abort ();
+ }
+
+ finfo->symoff += EXTERNAL_NLIST_SIZE;
+ h->indx = obj_aout_external_sym_count (output_bfd);
+ ++obj_aout_external_sym_count (output_bfd);
+
+ return true;
+}
+
+/* Link an a.out section into the output file. */
+
+static boolean
+aout_link_input_section (finfo, input_bfd, input_section, reloff_ptr,
+ rel_size)
+ struct aout_final_link_info *finfo;
+ bfd *input_bfd;
+ asection *input_section;
+ file_ptr *reloff_ptr;
+ bfd_size_type rel_size;
+{
+ bfd_size_type input_size;
+ PTR relocs;
+
+ /* Get the section contents. */
+ input_size = bfd_section_size (input_bfd, input_section);
+ if (! bfd_get_section_contents (input_bfd, input_section,
+ (PTR) finfo->contents,
+ (file_ptr) 0, input_size))
+ return false;
+
+ /* Read in the relocs if we haven't already done it. */
+ if (aout_section_data (input_section) != NULL
+ && aout_section_data (input_section)->relocs != NULL)
+ relocs = aout_section_data (input_section)->relocs;
+ else
+ {
+ relocs = finfo->relocs;
+ if (rel_size > 0)
+ {
+ if (bfd_seek (input_bfd, input_section->rel_filepos, SEEK_SET) != 0
+ || bfd_read (relocs, 1, rel_size, input_bfd) != rel_size)
+ return false;
+ }
+ }
+
+ /* Relocate the section contents. */
+ if (! pdp11_aout_link_input_section (finfo, input_bfd, input_section,
+ (struct pdp11_aout_reloc_external *) relocs,
+ rel_size, finfo->contents))
+ return false;
+
+ /* Write out the section contents. */
+ if (! bfd_set_section_contents (finfo->output_bfd,
+ input_section->output_section,
+ (PTR) finfo->contents,
+ input_section->output_offset,
+ input_size))
+ return false;
+
+ /* If we are producing relocateable output, the relocs were
+ modified, and we now write them out. */
+ if (finfo->info->relocateable && rel_size > 0)
+ {
+ if (bfd_seek (finfo->output_bfd, *reloff_ptr, SEEK_SET) != 0)
+ return false;
+ if (bfd_write (relocs, (bfd_size_type) 1, rel_size, finfo->output_bfd)
+ != rel_size)
+ return false;
+ *reloff_ptr += rel_size;
+
+ /* Assert that the relocs have not run into the symbols, and
+ that if these are the text relocs they have not run into the
+ data relocs. */
+ BFD_ASSERT (*reloff_ptr <= obj_sym_filepos (finfo->output_bfd)
+ && (reloff_ptr != &finfo->treloff
+ || (*reloff_ptr
+ <= obj_datasec (finfo->output_bfd)->rel_filepos)));
+ }
+
+ return true;
+}
+
+/* Get the section corresponding to a reloc index. */
+
+static INLINE asection *
+aout_reloc_type_to_section (abfd, type)
+ bfd *abfd;
+ int type;
+{
+ switch (type)
+ {
+ case RTEXT:
+ return obj_textsec (abfd);
+ case RDATA:
+ return obj_datasec (abfd);
+ case RBSS:
+ return obj_bsssec (abfd);
+ case RABS:
+ return bfd_abs_section_ptr;
+ case REXT:
+ return bfd_und_section_ptr;
+ default:
+ abort ();
+ }
+}
+
+static boolean
+pdp11_aout_link_input_section (finfo, input_bfd, input_section, relocs,
+ rel_size, contents)
+ struct aout_final_link_info *finfo;
+ bfd *input_bfd;
+ asection *input_section;
+ struct pdp11_aout_reloc_external *relocs;
+ bfd_size_type rel_size;
+ bfd_byte *contents;
+{
+ boolean (*check_dynamic_reloc) PARAMS ((struct bfd_link_info *,
+ bfd *, asection *,
+ struct aout_link_hash_entry *,
+ PTR, bfd_byte *, boolean *,
+ bfd_vma *));
+ bfd *output_bfd;
+ boolean relocateable;
+ struct external_nlist *syms;
+ char *strings;
+ struct aout_link_hash_entry **sym_hashes;
+ int *symbol_map;
+ bfd_size_type reloc_count;
+ register struct pdp11_aout_reloc_external *rel;
+ struct pdp11_aout_reloc_external *rel_end;
+
+ output_bfd = finfo->output_bfd;
+ check_dynamic_reloc = aout_backend_info (output_bfd)->check_dynamic_reloc;
+
+ BFD_ASSERT (obj_reloc_entry_size (input_bfd) == RELOC_SIZE);
+ BFD_ASSERT (input_bfd->xvec->header_byteorder
+ == output_bfd->xvec->header_byteorder);
+
+ relocateable = finfo->info->relocateable;
+ syms = obj_aout_external_syms (input_bfd);
+ strings = obj_aout_external_strings (input_bfd);
+ sym_hashes = obj_aout_sym_hashes (input_bfd);
+ symbol_map = finfo->symbol_map;
+
+ reloc_count = rel_size / RELOC_SIZE;
+ rel = relocs;
+ rel_end = (struct pdp11_aout_reloc_external *)(((char *)rel) + rel_size);
+ for (; rel < rel_end; ((char *)rel) += RELOC_SIZE)
+ {
+ bfd_vma r_addr;
+ int r_index;
+ int r_type;
+ int r_pcrel;
+ int r_extern;
+ reloc_howto_type *howto;
+ struct aout_link_hash_entry *h = NULL;
+ bfd_vma relocation;
+ bfd_reloc_status_type r;
+ int reloc_entry;
+
+ reloc_entry = GET_WORD (input_bfd, (PTR)rel);
+ if (reloc_entry == 0)
+ continue;
+
+ {
+ unsigned int howto_idx;
+
+ r_index = (reloc_entry & RIDXMASK) >> 4;
+ r_type = reloc_entry & RTYPE;
+ r_pcrel = reloc_entry & RELFLG;
+ r_addr = (char *)rel - (char *)relocs;
+
+ r_extern = (r_type == REXT);
+
+ howto_idx = r_pcrel;
+ BFD_ASSERT (howto_idx < TABLE_SIZE (howto_table_pdp11));
+ howto = howto_table_pdp11 + howto_idx;
+ }
+
+ if (relocateable)
+ {
+ /* We are generating a relocateable output file, and must
+ modify the reloc accordingly. */
+ if (r_extern)
+ {
+ /* If we know the symbol this relocation is against,
+ convert it into a relocation against a section. This
+ is what the native linker does. */
+ h = sym_hashes[r_index];
+ if (h != (struct aout_link_hash_entry *) NULL
+ && (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak))
+ {
+ asection *output_section;
+
+ /* Compute a new r_index. */
+ output_section = h->root.u.def.section->output_section;
+ if (output_section == obj_textsec (output_bfd))
+ r_type = N_TEXT;
+ else if (output_section == obj_datasec (output_bfd))
+ r_type = N_DATA;
+ else if (output_section == obj_bsssec (output_bfd))
+ r_type = N_BSS;
+ else
+ r_type = N_ABS;
+
+ /* Add the symbol value and the section VMA to the
+ addend stored in the contents. */
+ relocation = (h->root.u.def.value
+ + output_section->vma
+ + h->root.u.def.section->output_offset);
+ }
+ else
+ {
+ /* We must change r_index according to the symbol
+ map. */
+ r_index = symbol_map[r_index];
+
+ if (r_index == -1)
+ {
+ if (h != NULL)
+ {
+ /* We decided to strip this symbol, but it
+ turns out that we can't. Note that we
+ lose the other and desc information here.
+ I don't think that will ever matter for a
+ global symbol. */
+ if (h->indx < 0)
+ {
+ h->indx = -2;
+ h->written = false;
+ if (! aout_link_write_other_symbol (h,
+ (PTR) finfo))
+ return false;
+ }
+ r_index = h->indx;
+ }
+ else
+ {
+ const char *name;
+
+ name = strings + GET_WORD (input_bfd,
+ syms[r_index].e_strx);
+ if (! ((*finfo->info->callbacks->unattached_reloc)
+ (finfo->info, name, input_bfd, input_section,
+ r_addr)))
+ return false;
+ r_index = 0;
+ }
+ }
+
+ relocation = 0;
+ }
+
+ /* Write out the new r_index value. */
+ reloc_entry = GET_WORD (input_bfd, rel->e_reloc_entry);
+ reloc_entry &= RIDXMASK;
+ reloc_entry |= r_index << 4;
+ PUT_WORD (input_bfd, reloc_entry, rel->e_reloc_entry);
+ }
+ else
+ {
+ asection *section;
+
+ /* This is a relocation against a section. We must
+ adjust by the amount that the section moved. */
+ section = aout_reloc_type_to_section (input_bfd, r_type);
+ relocation = (section->output_section->vma
+ + section->output_offset
+ - section->vma);
+ }
+
+ /* Change the address of the relocation. */
+#if 0
+ PUT_WORD (output_bfd,
+ r_addr + input_section->output_offset,
+ rel->r_address);
+#else
+fprintf (stderr, "TODO: change the address of the relocation\n");
+#endif
+
+ /* Adjust a PC relative relocation by removing the reference
+ to the original address in the section and including the
+ reference to the new address. */
+ if (r_pcrel)
+ relocation -= (input_section->output_section->vma
+ + input_section->output_offset
+ - input_section->vma);
+
+#ifdef MY_relocatable_reloc
+ MY_relocatable_reloc (howto, output_bfd, rel, relocation, r_addr);
+#endif
+
+ if (relocation == 0)
+ r = bfd_reloc_ok;
+ else
+ r = MY_relocate_contents (howto,
+ input_bfd, relocation,
+ contents + r_addr);
+ }
+ else
+ {
+ boolean hundef;
+
+ /* We are generating an executable, and must do a full
+ relocation. */
+ hundef = false;
+ if (r_extern)
+ {
+ h = sym_hashes[r_index];
+
+ if (h != (struct aout_link_hash_entry *) NULL
+ && (h->root.type == bfd_link_hash_defined
+ || h->root.type == bfd_link_hash_defweak))
+ {
+ relocation = (h->root.u.def.value
+ + h->root.u.def.section->output_section->vma
+ + h->root.u.def.section->output_offset);
+ }
+ else if (h != (struct aout_link_hash_entry *) NULL
+ && h->root.type == bfd_link_hash_undefweak)
+ relocation = 0;
+ else
+ {
+ hundef = true;
+ relocation = 0;
+ }
+ }
+ else
+ {
+ asection *section;
+
+ section = aout_reloc_type_to_section (input_bfd, r_type);
+ relocation = (section->output_section->vma
+ + section->output_offset
+ - section->vma);
+ if (r_pcrel)
+ relocation += input_section->vma;
+ }
+
+ if (check_dynamic_reloc != NULL)
+ {
+ boolean skip;
+
+ if (! ((*check_dynamic_reloc)
+ (finfo->info, input_bfd, input_section, h,
+ (PTR) rel, contents, &skip, &relocation)))
+ return false;
+ if (skip)
+ continue;
+ }
+
+ /* Now warn if a global symbol is undefined. We could not
+ do this earlier, because check_dynamic_reloc might want
+ to skip this reloc. */
+ if (hundef && ! finfo->info->shared)
+ {
+ const char *name;
+
+ if (h != NULL)
+ name = h->root.root.string;
+ else
+ name = strings + GET_WORD (input_bfd, syms[r_index].e_strx);
+ if (! ((*finfo->info->callbacks->undefined_symbol)
+ (finfo->info, name, input_bfd, input_section,
+ r_addr, true)))
+ return false;
+ }
+
+ r = MY_final_link_relocate (howto,
+ input_bfd, input_section,
+ contents, r_addr, relocation,
+ (bfd_vma) 0);
+ }
+
+ if (r != bfd_reloc_ok)
+ {
+ switch (r)
+ {
+ default:
+ case bfd_reloc_outofrange:
+ abort ();
+ case bfd_reloc_overflow:
+ {
+ const char *name;
+
+ if (h != NULL)
+ name = h->root.root.string;
+ else if (r_extern)
+ name = strings + GET_WORD (input_bfd,
+ syms[r_index].e_strx);
+ else
+ {
+ asection *s;
+
+ s = aout_reloc_type_to_section (input_bfd, r_type);
+ name = bfd_section_name (input_bfd, s);
+ }
+ if (! ((*finfo->info->callbacks->reloc_overflow)
+ (finfo->info, name, howto->name,
+ (bfd_vma) 0, input_bfd, input_section, r_addr)))
+ return false;
+ }
+ break;
+ }
+ }
+ }
+
+ return true;
+}
+
+/* Handle a link order which is supposed to generate a reloc. */
+
+static boolean
+aout_link_reloc_link_order (finfo, o, p)
+ struct aout_final_link_info *finfo;
+ asection *o;
+ struct bfd_link_order *p;
+{
+ struct bfd_link_order_reloc *pr;
+ int r_index;
+ int r_extern;
+ reloc_howto_type *howto;
+ file_ptr *reloff_ptr;
+ struct reloc_std_external srel;
+ PTR rel_ptr;
+
+ pr = p->u.reloc.p;
+
+ if (p->type == bfd_section_reloc_link_order)
+ {
+ r_extern = 0;
+ if (bfd_is_abs_section (pr->u.section))
+ r_index = N_ABS | N_EXT;
+ else
+ {
+ BFD_ASSERT (pr->u.section->owner == finfo->output_bfd);
+ r_index = pr->u.section->target_index;
+ }
+ }
+ else
+ {
+ struct aout_link_hash_entry *h;
+
+ BFD_ASSERT (p->type == bfd_symbol_reloc_link_order);
+ r_extern = 1;
+ h = ((struct aout_link_hash_entry *)
+ bfd_wrapped_link_hash_lookup (finfo->output_bfd, finfo->info,
+ pr->u.name, false, false, true));
+ if (h != (struct aout_link_hash_entry *) NULL
+ && h->indx >= 0)
+ r_index = h->indx;
+ else if (h != NULL)
+ {
+ /* We decided to strip this symbol, but it turns out that we
+ can't. Note that we lose the other and desc information
+ here. I don't think that will ever matter for a global
+ symbol. */
+ h->indx = -2;
+ h->written = false;
+ if (! aout_link_write_other_symbol (h, (PTR) finfo))
+ return false;
+ r_index = h->indx;
+ }
+ else
+ {
+ if (! ((*finfo->info->callbacks->unattached_reloc)
+ (finfo->info, pr->u.name, (bfd *) NULL,
+ (asection *) NULL, (bfd_vma) 0)))
+ return false;
+ r_index = 0;
+ }
+ }
+
+ howto = bfd_reloc_type_lookup (finfo->output_bfd, pr->reloc);
+ if (howto == 0)
+ {
+ bfd_set_error (bfd_error_bad_value);
+ return false;
+ }
+
+ if (o == obj_textsec (finfo->output_bfd))
+ reloff_ptr = &finfo->treloff;
+ else if (o == obj_datasec (finfo->output_bfd))
+ reloff_ptr = &finfo->dreloff;
+ else
+ abort ();
+
+#ifdef MY_put_reloc
+ MY_put_reloc(finfo->output_bfd, r_extern, r_index, p->offset, howto,
+ &srel);
+#else
+ {
+ int r_pcrel;
+ int r_baserel;
+ int r_jmptable;
+ int r_relative;
+ int r_length;
+
+ fprintf (stderr, "TODO: line %d in bfd/pdp11.c\n", __LINE__);
+
+ r_pcrel = howto->pc_relative;
+ r_baserel = (howto->type & 8) != 0;
+ r_jmptable = (howto->type & 16) != 0;
+ r_relative = (howto->type & 32) != 0;
+ r_length = howto->size;
+
+ PUT_WORD (finfo->output_bfd, p->offset, srel.r_address);
+ if (bfd_header_big_endian (finfo->output_bfd))
+ {
+ srel.r_index[0] = r_index >> 16;
+ srel.r_index[1] = r_index >> 8;
+ srel.r_index[2] = r_index;
+ srel.r_type[0] =
+ ((r_extern ? RELOC_STD_BITS_EXTERN_BIG : 0)
+ | (r_pcrel ? RELOC_STD_BITS_PCREL_BIG : 0)
+ | (r_baserel ? RELOC_STD_BITS_BASEREL_BIG : 0)
+ | (r_jmptable ? RELOC_STD_BITS_JMPTABLE_BIG : 0)
+ | (r_relative ? RELOC_STD_BITS_RELATIVE_BIG : 0)
+ | (r_length << RELOC_STD_BITS_LENGTH_SH_BIG));
+ }
+ else
+ {
+ srel.r_index[2] = r_index >> 16;
+ srel.r_index[1] = r_index >> 8;
+ srel.r_index[0] = r_index;
+ srel.r_type[0] =
+ ((r_extern ? RELOC_STD_BITS_EXTERN_LITTLE : 0)
+ | (r_pcrel ? RELOC_STD_BITS_PCREL_LITTLE : 0)
+ | (r_baserel ? RELOC_STD_BITS_BASEREL_LITTLE : 0)
+ | (r_jmptable ? RELOC_STD_BITS_JMPTABLE_LITTLE : 0)
+ | (r_relative ? RELOC_STD_BITS_RELATIVE_LITTLE : 0)
+ | (r_length << RELOC_STD_BITS_LENGTH_SH_LITTLE));
+ }
+ }
+#endif
+ rel_ptr = (PTR) &srel;
+
+ /* We have to write the addend into the object file, since
+ standard a.out relocs are in place. It would be more
+ reliable if we had the current contents of the file here,
+ rather than assuming zeroes, but we can't read the file since
+ it was opened using bfd_openw. */
+ if (pr->addend != 0)
+ {
+ bfd_size_type size;
+ bfd_reloc_status_type r;
+ bfd_byte *buf;
+ boolean ok;
+
+ size = bfd_get_reloc_size (howto);
+ buf = (bfd_byte *) bfd_zmalloc (size);
+ if (buf == (bfd_byte *) NULL)
+ return false;
+ r = MY_relocate_contents (howto, finfo->output_bfd,
+ pr->addend, buf);
+ switch (r)
+ {
+ case bfd_reloc_ok:
+ break;
+ default:
+ case bfd_reloc_outofrange:
+ abort ();
+ case bfd_reloc_overflow:
+ if (! ((*finfo->info->callbacks->reloc_overflow)
+ (finfo->info,
+ (p->type == bfd_section_reloc_link_order
+ ? bfd_section_name (finfo->output_bfd,
+ pr->u.section)
+ : pr->u.name),
+ howto->name, pr->addend, (bfd *) NULL,
+ (asection *) NULL, (bfd_vma) 0)))
+ {
+ free (buf);
+ return false;
+ }
+ break;
+ }
+ ok = bfd_set_section_contents (finfo->output_bfd, o,
+ (PTR) buf,
+ (file_ptr) p->offset,
+ size);
+ free (buf);
+ if (! ok)
+ return false;
+ }
+
+ if (bfd_seek (finfo->output_bfd, *reloff_ptr, SEEK_SET) != 0
+ || (bfd_write (rel_ptr, (bfd_size_type) 1,
+ obj_reloc_entry_size (finfo->output_bfd),
+ finfo->output_bfd)
+ != obj_reloc_entry_size (finfo->output_bfd)))
+ return false;
+
+ *reloff_ptr += obj_reloc_entry_size (finfo->output_bfd);
+
+ /* Assert that the relocs have not run into the symbols, and that n
+ the text relocs have not run into the data relocs. */
+ BFD_ASSERT (*reloff_ptr <= obj_sym_filepos (finfo->output_bfd)
+ && (reloff_ptr != &finfo->treloff
+ || (*reloff_ptr
+ <= obj_datasec (finfo->output_bfd)->rel_filepos)));
+
+ return true;
+}
+/* end of modified aoutx.h */
+
+bfd_vma
+bfd_getp32 (addr)
+ const bfd_byte *addr;
+{
+ return (((((bfd_vma)addr[1] << 8) | addr[0]) << 8)
+ | addr[3]) << 8 | addr[2];
+}
+
+#define COERCE32(x) (((bfd_signed_vma) (x) ^ 0x80000000) - 0x80000000)
+
+bfd_signed_vma
+bfd_getp_signed_32 (addr)
+ const bfd_byte *addr;
+{
+ return COERCE32((((((bfd_vma)addr[1] << 8) | addr[0]) << 8)
+ | addr[3]) << 8 | addr[2]);
+}
+
+void
+bfd_putp32 (data, addr)
+ bfd_vma data;
+ bfd_byte *addr;
+{
+ addr[0] = (bfd_byte)(data >> 16);
+ addr[1] = (bfd_byte)(data >> 24);
+ addr[2] = (bfd_byte)data;
+ addr[3] = (bfd_byte)(data >> 8);
+}
cpu-mcore.c
cpu-mips.c
cpu-ns32k.c
+cpu-pdp11.c
cpu-pj.c
cpu-powerpc.c
cpu-rs6000.c
opncls.c
osf-core.c
pc532-mach.c
+pdp11.c
pe-arm.c
pe-i386.c
pei-arm.c
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-02-18 14:28-0800\n"
+"POT-Creation-Date: 2001-02-18 15:14-0800\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"
msgid "%s: could not find output section %s for input section %s"
msgstr ""
+#: elflink.h:5559
+#, c-format
+msgid "%s: invalid section symbol index 0x%x (%s) ingored"
+msgstr ""
+
#: i386linux.c:450 m68klinux.c:454 sparclinux.c:452
#, c-format
msgid "Output file requires shared library `%s'\n"
msgid "Object module NOT error-free !\n"
msgstr ""
-#: vms-misc.c:540
+#: vms-misc.c:536
#, c-format
msgid "Stack overflow (%d) in _bfd_vms_push"
msgstr ""
-#: vms-misc.c:558
+#: vms-misc.c:554
msgid "Stack underflow in _bfd_vms_pop"
msgstr ""
-#: vms-misc.c:916
+#: vms-misc.c:910
msgid "_bfd_vms_output_counted called with zero bytes"
msgstr ""
-#: vms-misc.c:921
+#: vms-misc.c:915
msgid "_bfd_vms_output_counted called with too many bytes"
msgstr ""
-#: vms-misc.c:1052
+#: vms-misc.c:1046
#, c-format
msgid "Symbol %s replaced by %s\n"
msgstr ""
-#: vms-misc.c:1114
+#: vms-misc.c:1108
#, c-format
msgid "failed to enter %s"
msgstr ""
ENUMDOC
ns32k relocations
+ENUM
+ BFD_RELOC_PDP11_DISP_8_PCREL
+ENUMX
+ BFD_RELOC_PDP11_DISP_6_PCREL
+ENUMDOC
+ PDP11 relocations
+
ENUM
BFD_RELOC_PJ_CODE_HI16
ENUMX
extern const bfd_target oasys_vec;
extern const bfd_target pc532machaout_vec;
extern const bfd_target pc532netbsd_vec;
+extern const bfd_target pdp11_aout_vec;
extern const bfd_target pmac_xcoff_vec;
extern const bfd_target ppcboot_vec;
extern const bfd_target riscix_vec;
&oasys_vec,
#endif
&pc532machaout_vec,
+ &pdp11_aout_vec,
#if 0
/* We have no way of distinguishing these from other a.out variants */
&aout_arm_big_vec,
-*- text -*-
+* Support for PDP-11 by Lars Brinkhoff.
+
* Add support for ARM v5t and v5te architectures and Intel's XScale ARM
extenstions.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-02-09 16:01-0800\n"
+"POT-Creation-Date: 2001-02-18 11:44-0800\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"
msgstr ""
#: addr2line.c:83 ar.c:288 nlmconv.c:1119 objcopy.c:373 objcopy.c:405
-#: readelf.c:1973 size.c:91 strings.c:530 windres.c:737
+#: readelf.c:1976 size.c:91 strings.c:530 windres.c:737
#, c-format
msgid "Report bugs to %s\n"
msgstr ""
msgid "<string table index %3ld>"
msgstr ""
-#: readelf.c:1191
+#: readelf.c:1194
#, c-format
msgid "Processor Specific: %lx"
msgstr ""
-#: readelf.c:1210
+#: readelf.c:1213
#, c-format
msgid "Operating System specific: %lx"
msgstr ""
-#: readelf.c:1213 readelf.c:1755
+#: readelf.c:1216 readelf.c:1758
#, c-format
msgid "<unknown>: %lx"
msgstr ""
-#: readelf.c:1227
+#: readelf.c:1230
msgid "NONE (None)"
msgstr ""
-#: readelf.c:1228
+#: readelf.c:1231
msgid "REL (Relocatable file)"
msgstr ""
-#: readelf.c:1229
+#: readelf.c:1232
msgid "EXEC (Executable file)"
msgstr ""
-#: readelf.c:1230
+#: readelf.c:1233
msgid "DYN (Shared object file)"
msgstr ""
-#: readelf.c:1231
+#: readelf.c:1234
msgid "CORE (Core file)"
msgstr ""
-#: readelf.c:1235
+#: readelf.c:1238
#, c-format
msgid "Processor Specific: (%x)"
msgstr ""
-#: readelf.c:1237
+#: readelf.c:1240
#, c-format
msgid "OS Specific: (%x)"
msgstr ""
-#: readelf.c:1239 readelf.c:1326 readelf.c:1906
+#: readelf.c:1242 readelf.c:1329 readelf.c:1909
#, c-format
msgid "<unknown>: %x"
msgstr ""
-#: readelf.c:1252
+#: readelf.c:1255
msgid "None"
msgstr ""
-#: readelf.c:1945
+#: readelf.c:1948
msgid "Usage: readelf {options} elf-file(s)\n"
msgstr ""
-#: readelf.c:1946
+#: readelf.c:1949
msgid " Options are:\n"
msgstr ""
-#: readelf.c:1947
+#: readelf.c:1950
msgid " -a or --all Equivalent to: -h -l -S -s -r -d -V -A -I\n"
msgstr ""
-#: readelf.c:1948
+#: readelf.c:1951
msgid " -h or --file-header Display the ELF file header\n"
msgstr ""
-#: readelf.c:1949
+#: readelf.c:1952
msgid " -l or --program-headers or --segments\n"
msgstr ""
-#: readelf.c:1950
+#: readelf.c:1953
msgid " Display the program headers\n"
msgstr ""
-#: readelf.c:1951
+#: readelf.c:1954
msgid " -S or --section-headers or --sections\n"
msgstr ""
-#: readelf.c:1952
+#: readelf.c:1955
msgid " Display the sections' header\n"
msgstr ""
-#: readelf.c:1953
+#: readelf.c:1956
msgid " -e or --headers Equivalent to: -h -l -S\n"
msgstr ""
-#: readelf.c:1954
+#: readelf.c:1957
msgid " -s or --syms or --symbols Display the symbol table\n"
msgstr ""
-#: readelf.c:1955
+#: readelf.c:1958
msgid " -n or --notes Display the core notes (if present)\n"
msgstr ""
-#: readelf.c:1956
+#: readelf.c:1959
msgid " -r or --relocs Display the relocations (if present)\n"
msgstr ""
-#: readelf.c:1957
+#: readelf.c:1960
msgid " -u or --unwind Display the unwind info (if present)\n"
msgstr ""
-#: readelf.c:1958
+#: readelf.c:1961
msgid " -d or --dynamic Display the dynamic segment (if present)\n"
msgstr ""
-#: readelf.c:1959
+#: readelf.c:1962
msgid " -V or --version-info Display the version sections (if present)\n"
msgstr ""
-#: readelf.c:1960
+#: readelf.c:1963
msgid ""
" -A or --arch-specific Display architecture specific information (if "
"any).\n"
msgstr ""
-#: readelf.c:1961
+#: readelf.c:1964
msgid ""
" -D or --use-dynamic Use the dynamic section info when displaying "
"symbols\n"
msgstr ""
-#: readelf.c:1962
+#: readelf.c:1965
msgid " -x <number> or --hex-dump=<number>\n"
msgstr ""
-#: readelf.c:1963
+#: readelf.c:1966
msgid " Dump the contents of section <number>\n"
msgstr ""
-#: readelf.c:1964
+#: readelf.c:1967
msgid ""
" -w[liaprf] or --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=frames]\n"
msgstr ""
-#: readelf.c:1965
+#: readelf.c:1968
msgid ""
" Display the contents of DWARF2 debug sections\n"
msgstr ""
-#: readelf.c:1967
+#: readelf.c:1970
msgid " -i <number> or --instruction-dump=<number>\n"
msgstr ""
-#: readelf.c:1968
+#: readelf.c:1971
msgid ""
" Disassemble the contents of section <number>\n"
msgstr ""
-#: readelf.c:1970
+#: readelf.c:1973
msgid " -I or --histogram Display histogram of bucket list lengths\n"
msgstr ""
-#: readelf.c:1971
+#: readelf.c:1974
msgid " -v or --version Display the version number of readelf\n"
msgstr ""
-#: readelf.c:1972
+#: readelf.c:1975
msgid " -H or --help Display this information\n"
msgstr ""
-#: readelf.c:1990
+#: readelf.c:1993
msgid "Out of memory allocating dump request table."
msgstr ""
-#: readelf.c:2134
+#: readelf.c:2137
#, c-format
msgid "Unrecognised debug option '%s'\n"
msgstr ""
-#: readelf.c:2159
+#: readelf.c:2162
#, c-format
msgid "Invalid option '-%c'\n"
msgstr ""
-#: readelf.c:2172
+#: readelf.c:2175
msgid "Nothing to do.\n"
msgstr ""
-#: readelf.c:2185 readelf.c:2202 readelf.c:4199
+#: readelf.c:2188 readelf.c:2205 readelf.c:4201
msgid "none"
msgstr ""
-#: readelf.c:2186
+#: readelf.c:2189
msgid "ELF32"
msgstr ""
-#: readelf.c:2187
+#: readelf.c:2190
msgid "ELF64"
msgstr ""
-#: readelf.c:2189 readelf.c:2206 readelf.c:2234
+#: readelf.c:2192 readelf.c:2209 readelf.c:2237
#, c-format
msgid "<unknown: %x>"
msgstr ""
-#: readelf.c:2203
+#: readelf.c:2206
msgid "2's complement, little endian"
msgstr ""
-#: readelf.c:2204
+#: readelf.c:2207
msgid "2's complement, big endian"
msgstr ""
-#: readelf.c:2219
+#: readelf.c:2222
msgid "UNIX - System V"
msgstr ""
-#: readelf.c:2220
+#: readelf.c:2223
msgid "UNIX - HP-UX"
msgstr ""
-#: readelf.c:2221
+#: readelf.c:2224
msgid "UNIX - NetBSD"
msgstr ""
-#: readelf.c:2222
+#: readelf.c:2225
msgid "UNIX - Linux"
msgstr ""
-#: readelf.c:2223
+#: readelf.c:2226
msgid "GNU/Hurd"
msgstr ""
-#: readelf.c:2224
+#: readelf.c:2227
msgid "UNIX - Solaris"
msgstr ""
-#: readelf.c:2225
+#: readelf.c:2228
msgid "UNIX - AIX"
msgstr ""
-#: readelf.c:2226
+#: readelf.c:2229
msgid "UNIX - IRIX"
msgstr ""
-#: readelf.c:2227
+#: readelf.c:2230
msgid "UNIX - FreeBSD"
msgstr ""
-#: readelf.c:2228
+#: readelf.c:2231
msgid "UNIX - TRU64"
msgstr ""
-#: readelf.c:2229
+#: readelf.c:2232
msgid "Novell - Modesto"
msgstr ""
-#: readelf.c:2230
+#: readelf.c:2233
msgid "UNIX - OpenBSD"
msgstr ""
-#: readelf.c:2231
+#: readelf.c:2234
msgid "Standalone App"
msgstr ""
-#: readelf.c:2232
+#: readelf.c:2235
msgid "ARM"
msgstr ""
-#: readelf.c:2249
+#: readelf.c:2252
msgid "Not an ELF file - it has the wrong magic bytes at the start\n"
msgstr ""
-#: readelf.c:2257
+#: readelf.c:2260
msgid "ELF Header:\n"
msgstr ""
-#: readelf.c:2258
+#: readelf.c:2261
msgid " Magic: "
msgstr ""
-#: readelf.c:2262
+#: readelf.c:2265
#, c-format
msgid " Class: %s\n"
msgstr ""
-#: readelf.c:2264
+#: readelf.c:2267
#, c-format
msgid " Data: %s\n"
msgstr ""
-#: readelf.c:2266
+#: readelf.c:2269
#, c-format
msgid " Version: %d %s\n"
msgstr ""
-#: readelf.c:2273
+#: readelf.c:2276
#, c-format
msgid " OS/ABI: %s\n"
msgstr ""
-#: readelf.c:2275
+#: readelf.c:2278
#, c-format
msgid " ABI Version: %d\n"
msgstr ""
-#: readelf.c:2277
+#: readelf.c:2280
#, c-format
msgid " Type: %s\n"
msgstr ""
-#: readelf.c:2279
+#: readelf.c:2282
#, c-format
msgid " Machine: %s\n"
msgstr ""
-#: readelf.c:2281
+#: readelf.c:2284
#, c-format
msgid " Version: 0x%lx\n"
msgstr ""
-#: readelf.c:2284
+#: readelf.c:2287
msgid " Entry point address: "
msgstr ""
-#: readelf.c:2286
+#: readelf.c:2289
msgid ""
"\n"
" Start of program headers: "
msgstr ""
-#: readelf.c:2288
+#: readelf.c:2291
msgid ""
" (bytes into file)\n"
" Start of section headers: "
msgstr ""
-#: readelf.c:2290
+#: readelf.c:2293
msgid " (bytes into file)\n"
msgstr ""
-#: readelf.c:2292
+#: readelf.c:2295
#, c-format
msgid " Flags: 0x%lx%s\n"
msgstr ""
-#: readelf.c:2295
+#: readelf.c:2298
#, c-format
msgid " Size of this header: %ld (bytes)\n"
msgstr ""
-#: readelf.c:2297
+#: readelf.c:2300
#, c-format
msgid " Size of program headers: %ld (bytes)\n"
msgstr ""
-#: readelf.c:2299
+#: readelf.c:2302
#, c-format
msgid " Number of program headers: %ld\n"
msgstr ""
-#: readelf.c:2301
+#: readelf.c:2304
#, c-format
msgid " Size of section headers: %ld (bytes)\n"
msgstr ""
-#: readelf.c:2303
+#: readelf.c:2306
#, c-format
msgid " Number of section headers: %ld\n"
msgstr ""
-#: readelf.c:2305
+#: readelf.c:2308
#, c-format
msgid " Section header string table index: %ld\n"
msgstr ""
-#: readelf.c:2390
+#: readelf.c:2393
msgid ""
"\n"
"There are no program headers in this file.\n"
msgstr ""
-#: readelf.c:2396
+#: readelf.c:2399
#, c-format
msgid ""
"\n"
"Elf file type is %s\n"
msgstr ""
-#: readelf.c:2397
+#: readelf.c:2400
msgid "Entry point "
msgstr ""
-#: readelf.c:2399
+#: readelf.c:2402
#, c-format
msgid ""
"\n"
"There are %d program headers, starting at offset "
msgstr ""
-#: readelf.c:2410 readelf.c:2586 readelf.c:2628 readelf.c:2671 readelf.c:2712
-#: readelf.c:3592 readelf.c:3633 readelf.c:3809 readelf.c:4730 readelf.c:4744
-#: readelf.c:8115 readelf.c:8155
+#: readelf.c:2413 readelf.c:2589 readelf.c:2631 readelf.c:2674 readelf.c:2715
+#: readelf.c:3594 readelf.c:3635 readelf.c:3811 readelf.c:4732 readelf.c:4746
+#: readelf.c:8117 readelf.c:8157
msgid "Out of memory\n"
msgstr ""
-#: readelf.c:2428
+#: readelf.c:2431
#, c-format
msgid ""
"\n"
"Program Header%s:\n"
msgstr ""
-#: readelf.c:2432
+#: readelf.c:2435
msgid ""
" Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align\n"
msgstr ""
-#: readelf.c:2436
+#: readelf.c:2439
msgid " Type Offset VirtAddr PhysAddr\n"
msgstr ""
-#: readelf.c:2438
+#: readelf.c:2441
msgid " FileSiz MemSiz Flags Align\n"
msgstr ""
-#: readelf.c:2496
+#: readelf.c:2499
msgid "more than one dynamic segment\n"
msgstr ""
-#: readelf.c:2504
+#: readelf.c:2507
msgid "Unable to find program interpreter name\n"
msgstr ""
-#: readelf.c:2511
+#: readelf.c:2514
#, c-format
msgid ""
"\n"
" [Requesting program interpreter: %s]"
msgstr ""
-#: readelf.c:2529
+#: readelf.c:2532
msgid ""
"\n"
" Section to Segment mapping:\n"
msgstr ""
-#: readelf.c:2530
+#: readelf.c:2533
msgid " Segment Sections...\n"
msgstr ""
-#: readelf.c:2794
+#: readelf.c:2797
msgid ""
"\n"
"There are no sections in this file.\n"
msgstr ""
-#: readelf.c:2800
+#: readelf.c:2803
#, c-format
msgid "There are %d section headers, starting at offset 0x%lx:\n"
msgstr ""
-#: readelf.c:2838
+#: readelf.c:2841
msgid "File contains multiple dynamic symbol tables\n"
msgstr ""
-#: readelf.c:2851
+#: readelf.c:2854
msgid "File contains multiple dynamic string tables\n"
msgstr ""
-#: readelf.c:2885
+#: readelf.c:2888
#, c-format
msgid ""
"\n"
"Section Header%s:\n"
msgstr ""
-#: readelf.c:2889
+#: readelf.c:2892
msgid ""
" [Nr] Name Type Addr Off Size ES Flg Lk "
"Inf Al\n"
msgstr ""
-#: readelf.c:2892
+#: readelf.c:2895
msgid " [Nr] Name Type Address Offset\n"
msgstr ""
-#: readelf.c:2893
+#: readelf.c:2896
msgid " Size EntSize Flags Link Info Align\n"
msgstr ""
-#: readelf.c:2940
+#: readelf.c:2943
msgid "Key to Flags:\n"
msgstr ""
-#: readelf.c:2941
+#: readelf.c:2944
msgid " W (write), A (alloc), X (execute), M (merge), S (strings)\n"
msgstr ""
-#: readelf.c:2942
+#: readelf.c:2945
msgid " I (info), L (link order), G (group), x (unknown)\n"
msgstr ""
-#: readelf.c:2943
+#: readelf.c:2946
msgid ""
" O (extra OS processing required) o (OS specific), p (processor specific)\n"
msgstr ""
-#: readelf.c:3001
+#: readelf.c:3004
#, c-format
msgid ""
"\n"
"Relocation section at offset 0x%lx contains %ld bytes:\n"
msgstr ""
-#: readelf.c:3008
+#: readelf.c:3011
msgid ""
"\n"
"There are no dynamic relocations in this file.\n"
msgstr ""
-#: readelf.c:3036
+#: readelf.c:3039
msgid ""
"\n"
"Relocation section "
msgstr ""
-#: readelf.c:3043 readelf.c:3414
+#: readelf.c:3046 readelf.c:3417
#, c-format
msgid " at offset 0x%lx contains %lu entries:\n"
msgstr ""
-#: readelf.c:3071
+#: readelf.c:3074
msgid ""
"\n"
"There are no relocations in this file.\n"
msgstr ""
-#: readelf.c:3315 readelf.c:3327
+#: readelf.c:3318 readelf.c:3330
#, c-format
msgid "Skipping unexpected symbol type %u"
msgstr ""
-#: readelf.c:3335
+#: readelf.c:3338
#, c-format
msgid "Skipping unexpected relocation type %s"
msgstr ""
-#: readelf.c:3407
+#: readelf.c:3410
msgid ""
"\n"
"Unwind section "
msgstr ""
-#: readelf.c:3423
+#: readelf.c:3426
msgid ""
"\n"
"There are no unwind sections in this file.\n"
msgstr ""
-#: readelf.c:3686
+#: readelf.c:3688
msgid ""
"\n"
"There is no dynamic segment in this file.\n"
msgstr ""
-#: readelf.c:3720
+#: readelf.c:3722
msgid "Unable to seek to end of file!"
msgstr ""
-#: readelf.c:3729
+#: readelf.c:3731
msgid "Unable to determine the number of symbols to load\n"
msgstr ""
-#: readelf.c:3759
+#: readelf.c:3761
msgid "Unable to seek to end of file\n"
msgstr ""
-#: readelf.c:3765
+#: readelf.c:3767
msgid "Unable to determine the length of the dynamic string table\n"
msgstr ""
-#: readelf.c:3826
+#: readelf.c:3828
#, c-format
msgid ""
"\n"
"Dynamic segment at offset 0x%x contains %ld entries:\n"
msgstr ""
-#: readelf.c:3829
+#: readelf.c:3831
msgid " Tag Type Name/Value\n"
msgstr ""
-#: readelf.c:3865
+#: readelf.c:3867
msgid "Auxiliary library"
msgstr ""
-#: readelf.c:3869
+#: readelf.c:3871
msgid "Filter library"
msgstr ""
-#: readelf.c:3873
+#: readelf.c:3875
msgid "Configuration file"
msgstr ""
-#: readelf.c:3877
+#: readelf.c:3879
msgid "Dependency audit library"
msgstr ""
-#: readelf.c:3881
+#: readelf.c:3883
msgid "Audit library"
msgstr ""
-#: readelf.c:3899 readelf.c:3925 readelf.c:3951
+#: readelf.c:3901 readelf.c:3927 readelf.c:3953
msgid "Flags:"
msgstr ""
-#: readelf.c:3901 readelf.c:3927 readelf.c:3953
+#: readelf.c:3903 readelf.c:3929 readelf.c:3955
msgid " None\n"
msgstr ""
-#: readelf.c:4072
+#: readelf.c:4074
#, c-format
msgid "Shared library: [%s]"
msgstr ""
-#: readelf.c:4075
+#: readelf.c:4077
msgid " program interpreter"
msgstr ""
-#: readelf.c:4079
+#: readelf.c:4081
#, c-format
msgid "Library soname: [%s]"
msgstr ""
-#: readelf.c:4083
+#: readelf.c:4085
#, c-format
msgid "Library rpath: [%s]"
msgstr ""
-#: readelf.c:4087
+#: readelf.c:4089
#, c-format
msgid "Library runpath: [%s]"
msgstr ""
-#: readelf.c:4148
+#: readelf.c:4150
#, c-format
msgid "Not needed object: [%s]\n"
msgstr ""
-#: readelf.c:4245
+#: readelf.c:4247
#, c-format
msgid ""
"\n"
"Version definition section '%s' contains %ld entries:\n"
msgstr ""
-#: readelf.c:4248
+#: readelf.c:4250
msgid " Addr: 0x"
msgstr ""
-#: readelf.c:4250 readelf.c:4438
+#: readelf.c:4252 readelf.c:4440
#, c-format
msgid " Offset: %#08lx Link: %lx (%s)\n"
msgstr ""
-#: readelf.c:4280
+#: readelf.c:4282
#, c-format
msgid " %#06x: Rev: %d Flags: %s"
msgstr ""
-#: readelf.c:4283
+#: readelf.c:4285
#, c-format
msgid " Index: %d Cnt: %d "
msgstr ""
-#: readelf.c:4294
+#: readelf.c:4296
#, c-format
msgid "Name: %s\n"
msgstr ""
-#: readelf.c:4296
+#: readelf.c:4298
#, c-format
msgid "Name index: %ld\n"
msgstr ""
-#: readelf.c:4311
+#: readelf.c:4313
#, c-format
msgid " %#06x: Parent %d: %s\n"
msgstr ""
-#: readelf.c:4314
+#: readelf.c:4316
#, c-format
msgid " %#06x: Parent %d, name index: %ld\n"
msgstr ""
-#: readelf.c:4333
+#: readelf.c:4335
#, c-format
msgid ""
"\n"
"Version needs section '%s' contains %ld entries:\n"
msgstr ""
-#: readelf.c:4336
+#: readelf.c:4338
msgid " Addr: 0x"
msgstr ""
-#: readelf.c:4338
+#: readelf.c:4340
#, c-format
msgid " Offset: %#08lx Link to section: %ld (%s)\n"
msgstr ""
-#: readelf.c:4364
+#: readelf.c:4366
#, c-format
msgid " %#06x: Version: %d"
msgstr ""
-#: readelf.c:4367
+#: readelf.c:4369
#, c-format
msgid " File: %s"
msgstr ""
-#: readelf.c:4369
+#: readelf.c:4371
#, c-format
msgid " File: %lx"
msgstr ""
-#: readelf.c:4371
+#: readelf.c:4373
#, c-format
msgid " Cnt: %d\n"
msgstr ""
-#: readelf.c:4389
+#: readelf.c:4391
#, c-format
msgid " %#06x: Name: %s"
msgstr ""
-#: readelf.c:4392
+#: readelf.c:4394
#, c-format
msgid " %#06x: Name index: %lx"
msgstr ""
-#: readelf.c:4395
+#: readelf.c:4397
#, c-format
msgid " Flags: %s Version: %d\n"
msgstr ""
-#: readelf.c:4433
+#: readelf.c:4435
#, c-format
msgid ""
"\n"
"Version symbols section '%s' contains %d entries:\n"
msgstr ""
-#: readelf.c:4436
+#: readelf.c:4438
msgid " Addr: "
msgstr ""
-#: readelf.c:4467
+#: readelf.c:4469
msgid " 0 (*local*) "
msgstr ""
-#: readelf.c:4471
+#: readelf.c:4473
msgid " 1 (*global*) "
msgstr ""
-#: readelf.c:4605
+#: readelf.c:4607
msgid ""
"\n"
"No version information found in this file.\n"
msgstr ""
-#: readelf.c:4623 readelf.c:4658
+#: readelf.c:4625 readelf.c:4660
#, c-format
msgid "<processor specific>: %d"
msgstr ""
-#: readelf.c:4625 readelf.c:4670
+#: readelf.c:4627 readelf.c:4672
#, c-format
msgid "<OS specific>: %d"
msgstr ""
-#: readelf.c:4627 readelf.c:4673
+#: readelf.c:4629 readelf.c:4675
#, c-format
msgid "<unknown>: %d"
msgstr ""
-#: readelf.c:4736
+#: readelf.c:4738
msgid "Unable to read in dynamic data\n"
msgstr ""
-#: readelf.c:4778
+#: readelf.c:4780
msgid "Unable to seek to start of dynamic information"
msgstr ""
-#: readelf.c:4784
+#: readelf.c:4786
msgid "Failed to read in number of buckets\n"
msgstr ""
-#: readelf.c:4790
+#: readelf.c:4792
msgid "Failed to read in number of chains\n"
msgstr ""
-#: readelf.c:4810
+#: readelf.c:4812
msgid ""
"\n"
"Symbol table for image:\n"
msgstr ""
-#: readelf.c:4812
+#: readelf.c:4814
msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:4814
+#: readelf.c:4816
msgid " Num Buc: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:4858
+#: readelf.c:4860
#, c-format
msgid ""
"\n"
"Symbol table '%s' contains %lu entries:\n"
msgstr ""
-#: readelf.c:4862
+#: readelf.c:4864
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:4864
+#: readelf.c:4866
msgid " Num: Value Size Type Bind Vis Ndx Name\n"
msgstr ""
-#: readelf.c:4974
+#: readelf.c:4976
msgid "bad dynamic symbol"
msgstr ""
-#: readelf.c:5034
+#: readelf.c:5036
msgid ""
"\n"
"Dynamic symbol information is not available for displaying symbols.\n"
msgstr ""
-#: readelf.c:5046
+#: readelf.c:5048
#, c-format
msgid ""
"\n"
"Histogram for bucket list length (total of %d buckets):\n"
msgstr ""
-#: readelf.c:5048
+#: readelf.c:5050
msgid " Length Number %% of total Coverage\n"
msgstr ""
-#: readelf.c:5053 readelf.c:5072 readelf.c:7797 readelf.c:7990
+#: readelf.c:5055 readelf.c:5074 readelf.c:7799 readelf.c:7992
msgid "Out of memory"
msgstr ""
-#: readelf.c:5121
+#: readelf.c:5123
#, c-format
msgid ""
"\n"
"Dynamic info segment at offset 0x%lx contains %d entries:\n"
msgstr ""
-#: readelf.c:5124
+#: readelf.c:5126
msgid " Num: Name BoundTo Flags\n"
msgstr ""
-#: readelf.c:5172
+#: readelf.c:5174
#, c-format
msgid ""
"\n"
"Assembly dump of section %s\n"
msgstr ""
-#: readelf.c:5195
+#: readelf.c:5197
#, c-format
msgid ""
"\n"
"Section '%s' has no data to dump.\n"
msgstr ""
-#: readelf.c:5200
+#: readelf.c:5202
#, c-format
msgid ""
"\n"
"Hex dump of section '%s':\n"
msgstr ""
-#: readelf.c:5352
+#: readelf.c:5354
msgid "badly formed extended line op encountered!"
msgstr ""
-#: readelf.c:5359
+#: readelf.c:5361
#, c-format
msgid " Extended opcode %d: "
msgstr ""
-#: readelf.c:5364
+#: readelf.c:5366
msgid ""
"End of Sequence\n"
"\n"
msgstr ""
-#: readelf.c:5370
+#: readelf.c:5372
#, c-format
msgid "set Address to 0x%lx\n"
msgstr ""
-#: readelf.c:5375
+#: readelf.c:5377
msgid " define new File Table entry\n"
msgstr ""
-#: readelf.c:5376 readelf.c:5498
+#: readelf.c:5378 readelf.c:5500
msgid " Entry\tDir\tTime\tSize\tName\n"
msgstr ""
-#: readelf.c:5378
+#: readelf.c:5380
#, c-format
msgid " %d\t"
msgstr ""
-#: readelf.c:5381 readelf.c:5383 readelf.c:5385 readelf.c:5510 readelf.c:5512
-#: readelf.c:5514
+#: readelf.c:5383 readelf.c:5385 readelf.c:5387 readelf.c:5512 readelf.c:5514
+#: readelf.c:5516
#, c-format
msgid "%lu\t"
msgstr ""
-#: readelf.c:5386
+#: readelf.c:5388
#, c-format
msgid ""
"%s\n"
"\n"
msgstr ""
-#: readelf.c:5390
+#: readelf.c:5392
#, c-format
msgid "UNKNOWN: length %d\n"
msgstr ""
-#: readelf.c:5416
+#: readelf.c:5418
#, c-format
msgid ""
"\n"
"\n"
msgstr ""
-#: readelf.c:5428
+#: readelf.c:5430
msgid "The line info appears to be corrupt - the section is too small\n"
msgstr ""
-#: readelf.c:5436
+#: readelf.c:5438
msgid "Only DWARF version 2 line info is currently supported.\n"
msgstr ""
-#: readelf.c:5451
+#: readelf.c:5453
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: readelf.c:5452
+#: readelf.c:5454
#, c-format
msgid " DWARF Version: %d\n"
msgstr ""
-#: readelf.c:5453
+#: readelf.c:5455
#, c-format
msgid " Prolgue Length: %d\n"
msgstr ""
-#: readelf.c:5454
+#: readelf.c:5456
#, c-format
msgid " Minimum Instruction Length: %d\n"
msgstr ""
-#: readelf.c:5455
+#: readelf.c:5457
#, c-format
msgid " Initial value of 'is_stmt': %d\n"
msgstr ""
-#: readelf.c:5456
+#: readelf.c:5458
#, c-format
msgid " Line Base: %d\n"
msgstr ""
-#: readelf.c:5457
+#: readelf.c:5459
#, c-format
msgid " Line Range: %d\n"
msgstr ""
-#: readelf.c:5458
+#: readelf.c:5460
#, c-format
msgid " Opcode Base: %d\n"
msgstr ""
-#: readelf.c:5467
+#: readelf.c:5469
msgid ""
"\n"
" Opcodes:\n"
msgstr ""
-#: readelf.c:5470
+#: readelf.c:5472
#, c-format
msgid " Opcode %d has %d args\n"
msgstr ""
-#: readelf.c:5476
+#: readelf.c:5478
msgid ""
"\n"
" The Directory Table is empty.\n"
msgstr ""
-#: readelf.c:5479
+#: readelf.c:5481
msgid ""
"\n"
" The Directory Table:\n"
msgstr ""
-#: readelf.c:5483
+#: readelf.c:5485
#, c-format
msgid " %s\n"
msgstr ""
-#: readelf.c:5494
+#: readelf.c:5496
msgid ""
"\n"
" The File Name Table is empty.\n"
msgstr ""
-#: readelf.c:5497
+#: readelf.c:5499
msgid ""
"\n"
" The File Name Table:\n"
msgstr ""
-#: readelf.c:5505
+#: readelf.c:5507
#, c-format
msgid " %d\t"
msgstr ""
-#: readelf.c:5516
+#: readelf.c:5518
#, c-format
msgid "%s\n"
msgstr ""
#. Now display the statements.
-#: readelf.c:5524
+#: readelf.c:5526
msgid ""
"\n"
" Line Number Statements:\n"
msgstr ""
-#: readelf.c:5543
+#: readelf.c:5545
msgid " Copy\n"
msgstr ""
-#: readelf.c:5550
+#: readelf.c:5552
#, c-format
msgid " Advance PC by %d to %lx\n"
msgstr ""
-#: readelf.c:5558
+#: readelf.c:5560
#, c-format
msgid " Advance Line by %d to %d\n"
msgstr ""
-#: readelf.c:5565
+#: readelf.c:5567
#, c-format
msgid " Set File Name to entry %d in the File Name Table\n"
msgstr ""
-#: readelf.c:5573
+#: readelf.c:5575
#, c-format
msgid " Set column to %d\n"
msgstr ""
-#: readelf.c:5580
+#: readelf.c:5582
#, c-format
msgid " Set is_stmt to %d\n"
msgstr ""
-#: readelf.c:5585
+#: readelf.c:5587
msgid " Set basic block\n"
msgstr ""
-#: readelf.c:5593
+#: readelf.c:5595
#, c-format
msgid " Advance PC by constant %d to 0x%lx\n"
msgstr ""
-#: readelf.c:5601
+#: readelf.c:5603
#, c-format
msgid " Advance PC by fixed size amount %d to 0x%lx\n"
msgstr ""
-#: readelf.c:5609
+#: readelf.c:5611
#, c-format
msgid " Special opcode %d: advance Address by %d to 0x%lx"
msgstr ""
-#: readelf.c:5613
+#: readelf.c:5615
#, c-format
msgid " and Line by %d to %d\n"
msgstr ""
-#: readelf.c:5636 readelf.c:6065
+#: readelf.c:5638 readelf.c:6067
#, c-format
msgid ""
"Contents of the %s section:\n"
"\n"
msgstr ""
-#: readelf.c:5659
+#: readelf.c:5661
msgid "Only DWARF 2 pubnames are currently supported\n"
msgstr ""
-#: readelf.c:5666
+#: readelf.c:5668
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: readelf.c:5668
+#: readelf.c:5670
#, c-format
msgid " Version: %d\n"
msgstr ""
-#: readelf.c:5670
+#: readelf.c:5672
#, c-format
msgid " Offset into .debug_info section: %ld\n"
msgstr ""
-#: readelf.c:5672
+#: readelf.c:5674
#, c-format
msgid " Size of area in .debug_info section: %ld\n"
msgstr ""
-#: readelf.c:5675
+#: readelf.c:5677
msgid ""
"\n"
" Offset\tName\n"
msgstr ""
-#: readelf.c:5757
+#: readelf.c:5759
#, c-format
msgid "Unknown TAG value: %lx"
msgstr ""
-#: readelf.c:5852
+#: readelf.c:5854
#, c-format
msgid "Unknown AT value: %lx"
msgstr ""
-#: readelf.c:5889
+#: readelf.c:5891
#, c-format
msgid "Unknown FORM value: %lx"
msgstr ""
-#: readelf.c:6071
+#: readelf.c:6073
msgid " Number TAG\n"
msgstr ""
-#: readelf.c:6077
+#: readelf.c:6079
#, c-format
msgid " %ld %s [%s]\n"
msgstr ""
-#: readelf.c:6080
+#: readelf.c:6082
msgid "has children"
msgstr ""
-#: readelf.c:6080
+#: readelf.c:6082
msgid "no children"
msgstr ""
-#: readelf.c:6084
+#: readelf.c:6086
#, c-format
msgid " %-18s %s\n"
msgstr ""
-#: readelf.c:6103
+#: readelf.c:6105
#, c-format
msgid " %lu byte block: "
msgstr ""
-#: readelf.c:6410
+#: readelf.c:6412
msgid "(User defined location op)"
msgstr ""
-#: readelf.c:6412
+#: readelf.c:6414
msgid "(Unknown location op)"
msgstr ""
-#: readelf.c:6539
+#: readelf.c:6541
#, c-format
msgid "Unable to handle FORM: %d"
msgstr ""
-#: readelf.c:6543
+#: readelf.c:6545
#, c-format
msgid "Unrecognised form: %d"
msgstr ""
-#: readelf.c:6556
+#: readelf.c:6558
msgid "(not inlined)"
msgstr ""
-#: readelf.c:6557
+#: readelf.c:6559
msgid "(inlined)"
msgstr ""
-#: readelf.c:6558
+#: readelf.c:6560
msgid "(declared as inline but ignored)"
msgstr ""
-#: readelf.c:6559
+#: readelf.c:6561
msgid "(declared as inline and inlined)"
msgstr ""
-#: readelf.c:6560
+#: readelf.c:6562
#, c-format
msgid " (Unknown inline attribute value: %lx)"
msgstr ""
-#: readelf.c:6689 readelf.c:6815
+#: readelf.c:6691 readelf.c:6817
#, c-format
msgid ""
"The section %s contains:\n"
"\n"
msgstr ""
-#: readelf.c:6711
+#: readelf.c:6713
#, c-format
msgid " Compilation Unit @ %lx:\n"
msgstr ""
-#: readelf.c:6712
+#: readelf.c:6714
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: readelf.c:6713
+#: readelf.c:6715
#, c-format
msgid " Version: %d\n"
msgstr ""
-#: readelf.c:6714
+#: readelf.c:6716
#, c-format
msgid " Abbrev Offset: %ld\n"
msgstr ""
-#: readelf.c:6715
+#: readelf.c:6717
#, c-format
msgid " Pointer Size: %d\n"
msgstr ""
-#: readelf.c:6719
+#: readelf.c:6721
msgid "Only version 2 DWARF debug information is currently supported.\n"
msgstr ""
-#: readelf.c:6741
+#: readelf.c:6743
msgid "Unable to locate .debug_abbrev section!\n"
msgstr ""
-#: readelf.c:6781
+#: readelf.c:6783
#, c-format
msgid "Unable to locate entry %lu in the abbreviation table\n"
msgstr ""
-#: readelf.c:6786
+#: readelf.c:6788
#, c-format
msgid " <%d><%x>: Abbrev Number: %lu (%s)\n"
msgstr ""
-#: readelf.c:6836
+#: readelf.c:6838
msgid "Only DWARF 2 aranges are currently supported.\n"
msgstr ""
-#: readelf.c:6840
+#: readelf.c:6842
#, c-format
msgid " Length: %ld\n"
msgstr ""
-#: readelf.c:6841
+#: readelf.c:6843
#, c-format
msgid " Version: %d\n"
msgstr ""
-#: readelf.c:6842
+#: readelf.c:6844
#, c-format
msgid " Offset into .debug_info: %lx\n"
msgstr ""
-#: readelf.c:6843
+#: readelf.c:6845
#, c-format
msgid " Pointer Size: %d\n"
msgstr ""
-#: readelf.c:6844
+#: readelf.c:6846
#, c-format
msgid " Segment Size: %d\n"
msgstr ""
-#: readelf.c:6846
+#: readelf.c:6848
msgid ""
"\n"
" Address Length\n"
msgstr ""
-#: readelf.c:7008
+#: readelf.c:7010
#, c-format
msgid "The section %s contains:\n"
msgstr ""
-#: readelf.c:7483
+#: readelf.c:7485
#, c-format
msgid "Displaying the debug contents of section %s is not yet supported.\n"
msgstr ""
-#: readelf.c:7547
+#: readelf.c:7549
#, c-format
msgid ""
"\n"
"Section '%s' has no debugging data.\n"
msgstr ""
-#: readelf.c:7566
+#: readelf.c:7568
#, c-format
msgid "Unrecognised debug section: %s\n"
msgstr ""
-#: readelf.c:7638
+#: readelf.c:7640
msgid "Some sections were not dumped because they do not exist!\n"
msgstr ""
-#: readelf.c:7821
+#: readelf.c:7823
#, c-format
msgid ""
"\n"
"Section '%s' contains %d entries:\n"
msgstr ""
-#: readelf.c:7983
+#: readelf.c:7985
msgid "conflict list with without table"
msgstr ""
-#: readelf.c:8011
+#: readelf.c:8013
#, c-format
msgid ""
"\n"
"Section '.conflict' contains %d entries:\n"
msgstr ""
-#: readelf.c:8012
+#: readelf.c:8014
msgid " Num: Index Value Name"
msgstr ""
-#: readelf.c:8037
+#: readelf.c:8039
msgid "NT_PRSTATUS (prstatus structure)"
msgstr ""
-#: readelf.c:8038
+#: readelf.c:8040
msgid "NT_FPREGSET (floating point registers)"
msgstr ""
-#: readelf.c:8039
+#: readelf.c:8041
msgid "NT_PRPSINFO (prpsinfo structure)"
msgstr ""
-#: readelf.c:8040
+#: readelf.c:8042
msgid "NT_TASKSTRUCT (task structure)"
msgstr ""
-#: readelf.c:8041
+#: readelf.c:8043
msgid "NT_PRXFPREG (user_xfpregs structure)"
msgstr ""
-#: readelf.c:8042
+#: readelf.c:8044
msgid "NT_PSTATUS (pstatus structure)"
msgstr ""
-#: readelf.c:8043
+#: readelf.c:8045
msgid "NT_FPREGS (floating point registers)"
msgstr ""
-#: readelf.c:8044
+#: readelf.c:8046
msgid "NT_PSINFO (psinfo structure)"
msgstr ""
-#: readelf.c:8045
+#: readelf.c:8047
msgid "NT_LWPSTATUS (lwpstatus_t structure)"
msgstr ""
-#: readelf.c:8046
+#: readelf.c:8048
msgid "NT_LWPSINFO (lwpsinfo_t structure)"
msgstr ""
-#: readelf.c:8047
+#: readelf.c:8049
msgid "NT_WIN32PSTATUS (win32_pstatus strcuture)"
msgstr ""
-#: readelf.c:8049
+#: readelf.c:8051
#, c-format
msgid "Unknown note type: (0x%08x)"
msgstr ""
-#: readelf.c:8087
+#: readelf.c:8089
#, c-format
msgid ""
"\n"
"Notes at offset 0x%08lx with length 0x%08lx:\n"
msgstr ""
-#: readelf.c:8089
+#: readelf.c:8091
msgid " Owner\t\tData size\tDescription\n"
msgstr ""
-#: readelf.c:8200
+#: readelf.c:8202
msgid "No note segments present in the core file.\n"
msgstr ""
-#: readelf.c:8278
+#: readelf.c:8280
msgid "This instance of readelf has been built without support for a\n"
msgstr ""
-#: readelf.c:8279
+#: readelf.c:8281
msgid "64 bit data type and so it cannot read 64 bit ELF files.\n"
msgstr ""
-#: readelf.c:8314
+#: readelf.c:8316
#, c-format
msgid "Cannot stat input file %s.\n"
msgstr ""
-#: readelf.c:8321
+#: readelf.c:8323
#, c-format
msgid "Input file %s not found.\n"
msgstr ""
-#: readelf.c:8327
+#: readelf.c:8329
#, c-format
msgid "%s: Failed to read file header\n"
msgstr ""
-#: readelf.c:8341
+#: readelf.c:8343
#, c-format
msgid ""
"\n"
The section .debug_info contains:
- Compilation Unit:
+ Compilation Unit @ .*:
Length: .*
Version: 2
Abbrev Offset: 0
+2001-02-18 lars brinkhoff <lars@nocrew.org>
+
+ * Makefile.am: Add PDP-11 target.
+ * configure.in: Likewise.
+ * config/tc-pdp11.c: New file.
+ * config/tc-pdp11.h: New file.
+ * doc/Makefile.am: Add PDP-11 documentation.
+ * doc/all.texi: Likewise.
+ * doc/as.texinfo: Likewise.
+ * doc/c-pdp11.texi: New file.
+
2001-02-16 matthew green <mrg@redhat.com>
* gas/cgen.c (gas_cgen_md_apply_fix3): Support BFD_RELOC_64.
mn10200 \
mn10300 \
ns32k \
+ pdp11 \
pj \
ppc \
s390 \
z8k
# Object format types. This is only used for dependency information.
-# We deliberately omit som, since it does not work as a cross assembler.
+# We deliberately omit some, since it does not work as a cross assembler.
OBJ_FORMATS = \
aout \
case $$o in \
aout) \
case $$c in \
- a29k | arm | cris | i386 | m68k | mips | ns32k | sparc | tahoe | tic30 | vax) \
+ a29k | arm | cris | i386 | m68k | mips | ns32k | pdp11 | sparc | tahoe | tic30 | vax) \
valid=yes ;; \
esac ;; \
bout) \
config/tc-mn10200.c \
config/tc-mn10300.c \
config/tc-ns32k.c \
+ config/tc-pdp11.c \
config/tc-pj.c \
config/tc-ppc.c \
config/tc-s390.c \
config/tc-mn10200.h \
config/tc-mn10300.h \
config/tc-ns32k.h \
+ config/tc-pdp11.h \
config/tc-pj.h \
config/tc-ppc.h \
config/tc-s390.h \
$(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
$(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h $(INCDIR)/opcode/ns32k.h \
$(INCDIR)/obstack.h
+DEPTC_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
+ $(INCDIR)/opcode/pdp11.h
DEPTC_pj_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pj.h \
$(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
$(INCDIR)/opcode/pj.h
$(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
$(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h subsegs.h \
$(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
+DEPOBJ_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
DEPOBJ_pj_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pj.h \
$(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
$(INCDIR)/obstack.h subsegs.h
DEP_ns32k_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
$(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
$(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h
+DEP_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
DEP_pj_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pj.h \
$(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
DEP_pj_elf = $(srcdir)/config/obj-elf.h $(BFDDIR)/elf-bfd.h \
mn10200 \
mn10300 \
ns32k \
+ pdp11 \
pj \
ppc \
s390 \
# Object format types. This is only used for dependency information.
-# We deliberately omit som, since it does not work as a cross assembler.
+# We deliberately omit some, since it does not work as a cross assembler.
OBJ_FORMATS = \
aout \
case $$o in \
aout) \
case $$c in \
- a29k | arm | cris | i386 | m68k | mips | ns32k | sparc | tahoe | tic30 | vax) \
+ a29k | arm | cris | i386 | m68k | mips | ns32k | pdp11 | sparc | tahoe | tic30 | vax) \
valid=yes ;; \
esac ;; \
bout) \
config/tc-mn10200.c \
config/tc-mn10300.c \
config/tc-ns32k.c \
+ config/tc-pdp11.c \
config/tc-pj.c \
config/tc-ppc.c \
config/tc-s390.c \
config/tc-mn10200.h \
config/tc-mn10300.h \
config/tc-ns32k.h \
+ config/tc-pdp11.h \
config/tc-pj.h \
config/tc-ppc.h \
config/tc-s390.h \
$(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h $(INCDIR)/opcode/ns32k.h \
$(INCDIR)/obstack.h
+DEPTC_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/obstack.h \
+ $(INCDIR)/opcode/pdp11.h
+
DEPTC_pj_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pj.h \
$(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
$(INCDIR)/opcode/pj.h
$(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h subsegs.h \
$(INCDIR)/obstack.h $(INCDIR)/aout/aout64.h
+DEPOBJ_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h $(INCDIR)/aout/aout64.h \
+ $(INCDIR)/obstack.h
+
DEPOBJ_pj_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pj.h \
$(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h \
$(INCDIR)/obstack.h subsegs.h
$(INCDIR)/elf/common.h $(INCDIR)/elf/internal.h $(INCDIR)/elf/external.h \
$(INCDIR)/bfdlink.h $(srcdir)/config/tc-ns32k.h
+DEP_pdp11_aout = $(srcdir)/config/obj-aout.h $(srcdir)/config/tc-pdp11.h \
+ $(BFDDIR)/libaout.h $(INCDIR)/bfdlink.h
+
DEP_pj_coff = $(srcdir)/config/obj-coff.h $(srcdir)/config/tc-pj.h \
$(INCDIR)/coff/internal.h $(BFDDIR)/libcoff.h $(INCDIR)/bfdlink.h
--- /dev/null
+/* tc-pdp11.c - pdp11-specific -
+ Copyright (C) 2001 Free Software Foundation, Inc.
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to
+ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+/*
+ Apparently unused functions:
+ md_convert_frag
+ md_estimate_size_before_relax
+ md_create_short_jump
+ md_create_long_jump
+*/
+
+#include "as.h"
+#include "opcode/pdp11.h"
+
+static int set_option PARAMS ((char *arg));
+static int set_cpu_model PARAMS ((char *arg));
+static int set_machine_model PARAMS ((char *arg));
+
+#define TRUE 1
+#define FALSE 0
+
+/*
+ * A representation for PDP-11 machine code.
+ */
+struct pdp11_code
+{
+ char *error;
+ int code;
+ int additional; /* is there an additional word? */
+ int word; /* additional word, if any */
+ struct
+ {
+ bfd_reloc_code_real_type type;
+ expressionS exp;
+ int pc_rel;
+ } reloc;
+};
+
+/*
+ * Instruction set extensions.
+ *
+ * If you change this from an array to something else, please update
+ * the "PDP-11 instruction set extensions" comment in pdp11.h.
+ */
+int pdp11_extension[PDP11_EXT_NUM];
+
+/*
+ * Assembly options.
+ */
+
+#define ASM_OPT_PIC 1
+#define ASM_OPT_NUM 2
+
+int asm_option[ASM_OPT_NUM];
+
+/* These chars start a comment anywhere in a source file (except inside
+ another comment */
+CONST char comment_chars[] = "#/";
+
+/* These chars only start a comment at the beginning of a line. */
+CONST char line_comment_chars[] = "#/";
+
+CONST char line_separator_chars[] = ";";
+
+/* Chars that can be used to separate mant from exp in floating point nums */
+CONST char EXP_CHARS[] = "eE";
+
+/* Chars that mean this number is a floating point constant */
+/* as in 0f123.456 */
+/* or 0H1.234E-12 (see exp chars above) */
+CONST char FLT_CHARS[] = "dDfFgGhH";
+
+void pseudo_even (int);
+void pseudo_bss (int);
+
+CONST pseudo_typeS md_pseudo_table[] =
+{
+ { "bss", pseudo_bss, 0 },
+ { "even", pseudo_even, 0 },
+ { 0, 0, 0 },
+};
+
+
+static void
+init_defaults ()
+{
+ static int first = 1;
+
+ if (first)
+ {
+ set_option ("all-extensions");
+ set_option ("pic");
+ first = 0;
+ }
+}
+
+static struct hash_control *insn_hash = NULL;
+
+void
+md_begin ()
+{
+ int i;
+
+ init_defaults ();
+
+ insn_hash = hash_new ();
+ if (insn_hash == NULL)
+ as_fatal ("Virtual memory exhausted");
+
+ for (i = 0; i < pdp11_num_opcodes; i++)
+ hash_insert (insn_hash, pdp11_opcodes[i].name, (PTR)(pdp11_opcodes + i));
+ for (i = 0; i < pdp11_num_aliases; i++)
+ hash_insert (insn_hash, pdp11_aliases[i].name, (PTR)(pdp11_aliases + i));
+}
+
+void
+md_number_to_chars (con, value, nbytes)
+ char con[];
+ valueT value;
+ int nbytes;
+{
+ /* On a PDP-11, 0x1234 is stored as "\x12\x34", and
+ * 0x12345678 is stored as "\x56\x78\x12\x34". It's
+ * anyones guess what 0x123456 would be stored like.
+ */
+
+ switch (nbytes)
+ {
+ case 0:
+ break;
+ case 1:
+ con[0] = value & 0xff;
+ break;
+ case 2:
+ con[0] = value & 0xff;
+ con[1] = (value >> 8) & 0xff;
+ break;
+ case 4:
+ con[0] = (value >> 16) & 0xff;
+ con[1] = (value >> 24) & 0xff;
+ con[2] = value & 0xff;
+ con[3] = (value >> 8) & 0xff;
+ break;
+ default:
+ BAD_CASE (nbytes);
+ }
+}
+
+/* Fix up some data or instructions after we find out the value of a symbol
+ that they reference. */
+
+int /* Knows about order of bytes in address. */
+md_apply_fix (fixP, value)
+ fixS *fixP;
+ valueT *value;
+{
+ valueT code;
+ valueT mask;
+ char *buf;
+ int shift;
+ int size;
+
+ buf = fixP->fx_where + fixP->fx_frag->fr_literal;
+ size = fixP->fx_size;
+ code = md_chars_to_number (buf, size);
+
+ switch (fixP->fx_r_type)
+ {
+ case BFD_RELOC_16:
+ case BFD_RELOC_16_PCREL:
+ mask = 0xffff;
+ shift = 0;
+ break;
+ case BFD_RELOC_PDP11_DISP_8_PCREL:
+ mask = 0x00ff;
+ shift = 1;
+ break;
+ case BFD_RELOC_PDP11_DISP_6_PCREL:
+ mask = 0x003f;
+ shift = 1;
+ break;
+ default:
+ BAD_CASE (fixP->fx_r_type);
+ }
+
+ if (fixP->fx_addsy != NULL)
+ *value += symbol_get_bfdsym (fixP->fx_addsy)->section->vma;
+ /* *value += fixP->fx_addsy->bsym->section->vma; */
+
+ code &= ~mask;
+ code |= (*value >> shift) & mask;
+ number_to_chars_littleendian (buf, code, size);
+ return 0;
+}
+
+long
+md_chars_to_number (con, nbytes)
+ unsigned char con[]; /* Low order byte 1st. */
+ int nbytes; /* Number of bytes in the input. */
+{
+ /* On a PDP-11, 0x1234 is stored as "\x12\x34", and
+ * 0x12345678 is stored as "\x56\x78\x12\x34". It's
+ * anyones guess what 0x123456 would be stored like.
+ */
+
+ switch (nbytes)
+ {
+ case 0:
+ return 0;
+ case 1:
+ return con[0];
+ case 2:
+ return (con[1] << BITS_PER_CHAR) | con[0];
+ case 4:
+ return
+ (((con[1] << BITS_PER_CHAR) | con[0]) << (2 * BITS_PER_CHAR)) |
+ ((con[3] << BITS_PER_CHAR) | con[2]);
+ default:
+ BAD_CASE (nbytes);
+ return 0;
+ }
+}
+\f
+static char *
+skip_whitespace (char *str)
+{
+ while (*str == ' ' || *str == '\t')
+ str++;
+ return str;
+}
+
+static char *
+find_whitespace (char *str)
+{
+ while (*str != ' ' && *str != '\t' && *str != 0)
+ str++;
+ return str;
+}
+
+static char
+mklower (char c)
+{
+ if (isupper (c))
+ return tolower (c);
+ return c;
+}
+
+static char *
+parse_reg (char *str, struct pdp11_code *operand)
+{
+ str = skip_whitespace (str);
+ if (mklower (*str) == 'r')
+ {
+ str++;
+ switch (*str)
+ {
+ case '0': case '1': case '2': case '3':
+ case '4': case '5': case '6': case '7':
+ operand->code = *str - '0';
+ str++;
+ break;
+ default:
+ operand->error = "Bad register name";
+ return str - 1;
+ }
+ }
+ else if (strncmp (str, "sp", 2) == 0 ||
+ strncmp (str, "SP", 2) == 0)
+ {
+ operand->code = 6;
+ str += 2;
+ }
+ else if (strncmp (str, "pc", 2) == 0 ||
+ strncmp (str, "PC", 2) == 0)
+ {
+ operand->code = 7;
+ str += 2;
+ }
+ else
+ {
+ operand->error = "Bad register name";
+ return str;
+ }
+
+ return str;
+}
+
+static char *
+parse_ac (char *str, struct pdp11_code *operand)
+{
+ str = skip_whitespace (str);
+ if (strncmp (str, "fr", 2) == 0 ||
+ strncmp (str, "FR", 2) == 0 ||
+ strncmp (str, "ac", 2) == 0 ||
+ strncmp (str, "AC", 2) == 0)
+ {
+ str += 2;
+ switch (*str)
+ {
+ case '0': case '1': case '2': case '3':
+ operand->code = *str - '0';
+ str++;
+ break;
+ default:
+ operand->error = "Bad register name";
+ return str - 2;
+ }
+ }
+ else
+ {
+ operand->error = "Bad register name";
+ return str;
+ }
+
+ return str;
+}
+
+static char *
+parse_expression (char *str, struct pdp11_code *operand)
+{
+ char *save_input_line_pointer;
+ segT seg;
+
+ save_input_line_pointer = input_line_pointer;
+ input_line_pointer = str;
+ seg = expression (&operand->reloc.exp);
+ if (seg == NULL)
+ {
+ input_line_pointer = save_input_line_pointer;
+ operand->error = "Error in expression";
+ return str;
+ }
+
+ str = input_line_pointer;
+ input_line_pointer = save_input_line_pointer;
+
+ operand->reloc.pc_rel = 0;
+
+ if (operand->reloc.exp.X_op == O_constant)
+ {
+ if (*str == '.')
+ str++;
+ else
+ {
+ /* FIXME: buffer overflow! */
+ char buf[100];
+ char *end;
+
+ sprintf (buf, "%ld", operand->reloc.exp.X_add_number);
+ operand->reloc.exp.X_add_number = strtol (buf, &end, 8);
+ }
+ }
+
+ return str;
+}
+
+static char *
+parse_op_no_deferred (char *str, struct pdp11_code *operand)
+{
+ str = skip_whitespace (str);
+
+ switch (*str)
+ {
+ case '(': /* (rn) and (rn)+ */
+ str = parse_reg (str + 1, operand);
+ if (operand->error)
+ return str;
+ str = skip_whitespace (str);
+ if (*str != ')')
+ {
+ operand->error = "Missing ')'";
+ return str;
+ }
+ str++;
+ if (*str == '+')
+ {
+ operand->code |= 020;
+ str++;
+ }
+ else
+ {
+ operand->code |= 010;
+ }
+ break;
+
+ case '#': /* immediate */
+ case '$':
+ str = parse_expression (str + 1, operand);
+ if (operand->error)
+ return str;
+ operand->additional = TRUE;
+ operand->word = operand->reloc.exp.X_add_number;
+ switch (operand->reloc.exp.X_op)
+ {
+ case O_constant:
+ break;
+ case O_symbol:
+ case O_add:
+ case O_subtract:
+ operand->reloc.type = BFD_RELOC_16;
+ operand->reloc.pc_rel = 0;
+ break;
+ default:
+ operand->error = "Error in expression";
+ break;
+ }
+ operand->code = 027;
+ break;
+
+ default: /* label, d(rn), -(rn) */
+ {
+ char *old = str;
+
+ if (strncmp (str, "-(", 2) == 0) /* -(rn) */
+ {
+ str = parse_reg (str + 2, operand);
+ if (operand->error)
+ return str;
+ str = skip_whitespace (str);
+ if (*str != ')')
+ {
+ operand->error = "Missing ')'";
+ return str;
+ }
+ operand->code |= 040;
+ str++;
+ break;
+ }
+
+ str = parse_expression (str, operand);
+ if (operand->error)
+ return str;
+
+ str = skip_whitespace (str);
+
+ if (*str != '(') /* label */
+ {
+ if (operand->reloc.exp.X_op != O_symbol)
+ {
+ operand->error = "Label expected";
+ return old;
+ }
+ operand->code = 067;
+ operand->additional = 1;
+ operand->word = 0;
+ operand->reloc.type = BFD_RELOC_16_PCREL;
+ operand->reloc.pc_rel = 1;
+ break;
+ }
+
+ str++; /* d(rn) */
+ str = parse_reg (str, operand);
+ if (operand->error)
+ return str;
+
+ str = skip_whitespace (str);
+
+ if (*str != ')')
+ {
+ operand->error = "Missing ')'";
+ return str;
+ }
+
+ str++;
+ operand->additional = TRUE;
+ operand->code |= 060;
+ switch (operand->reloc.exp.X_op)
+ {
+ case O_symbol:
+ operand->word = 0;
+ operand->reloc.pc_rel = 1;
+ break;
+ case O_constant:
+ if ((operand->code & 7) == 7)
+ {
+ operand->reloc.pc_rel = 1;
+ operand->word = operand->reloc.exp.X_add_number;
+ }
+ else
+ {
+ operand->word = operand->reloc.exp.X_add_number;
+ }
+ break;
+ default:
+ BAD_CASE (operand->reloc.exp.X_op);
+ }
+ break;
+ }
+ }
+
+ return str;
+}
+
+static char *
+parse_op (char *str, struct pdp11_code *operand)
+{
+ str = skip_whitespace (str);
+
+ str = parse_reg (str, operand);
+ if (!operand->error)
+ return str;
+ operand->error = NULL;
+
+ if (*str == '@' || *str == '*')
+ {
+ str = parse_op_no_deferred (str + 1, operand);
+ if (operand->error)
+ return str;
+ operand->code |= 010;
+ }
+ else
+ str = parse_op_no_deferred (str, operand);
+
+ return str;
+}
+
+static char *
+parse_separator (char *str, int *error)
+{
+ str = skip_whitespace (str);
+ *error = (*str != ',');
+ if (!*error)
+ str++;
+ return str;
+}
+
+void
+md_assemble (instruction_string)
+ char *instruction_string;
+{
+ CONST struct pdp11_opcode *op;
+ struct pdp11_code insn, op1, op2;
+ int error;
+ int size;
+ char *err = NULL;
+ char *str;
+ char *p;
+ char c;
+
+ str = skip_whitespace (instruction_string);
+ p = find_whitespace (str);
+ if (p - str == 0)
+ {
+ as_bad ("No instruction found");
+ return;
+ }
+
+ c = *p;
+ *p = '\0';
+ op = (struct pdp11_opcode *)hash_find (insn_hash, str);
+ *p = c;
+ if (op == 0)
+ {
+#if 0
+ op1.error = NULL;
+ op1.additional = FALSE;
+ op1.reloc.type = BFD_RELOC_NONE;
+ op1.code = 0;
+ op1.word = 0;
+ str = parse_expression (str, &op1);
+ if (op1.error)
+ {
+ as_bad (op1.error);
+ return;
+ }
+
+ {
+ char *to = frag_more (2);
+
+ md_number_to_chars (to, op1.code, 2);
+ if (insn.reloc.type != BFD_RELOC_NONE)
+ fix_new_exp (frag_now, to - frag_now->fr_literal, 2,
+ &insn.reloc.exp, insn.reloc.pc_rel, insn.reloc.type);
+ }
+#else
+ as_warn ("Unknown instruction");
+#endif
+
+ return;
+ }
+
+ if (!pdp11_extension[op->extension])
+ {
+ as_warn ("Unsupported instruction set extension: %s", op->name);
+ return;
+ }
+
+ insn.error = NULL;
+ insn.code = op->opcode;
+ insn.reloc.type = BFD_RELOC_NONE;
+ op1.error = NULL;
+ op1.additional = FALSE;
+ op1.reloc.type = BFD_RELOC_NONE;
+ op2.error = NULL;
+ op2.additional = FALSE;
+ op2.reloc.type = BFD_RELOC_NONE;
+
+ str = p;
+ size = 2;
+
+ switch (op->type)
+ {
+ case PDP11_OPCODE_NO_OPS:
+ str = skip_whitespace (str);
+ if (*str == 0)
+ str = "";
+ break;
+
+ case PDP11_OPCODE_IMM3:
+ case PDP11_OPCODE_IMM6:
+ case PDP11_OPCODE_IMM8:
+ str = skip_whitespace (str);
+ if (*str == '#' || *str == '$')
+ str++;
+ str = parse_expression (str, &op1);
+ if (op1.error)
+ break;
+ switch (op->type)
+ {
+ case PDP11_OPCODE_IMM3:
+ if (op1.code & ~7)
+ {
+ op1.error = "3-bit immediate out of range";
+ break;
+ }
+ break;
+ case PDP11_OPCODE_IMM6:
+ if (op1.code & ~0x3f)
+ {
+ op1.error = "6-bit immediate out of range";
+ break;
+ }
+ break;
+ case PDP11_OPCODE_IMM8:
+ if (op1.code & ~0xff)
+ {
+ op1.error = "8-bit immediate out of range";
+ break;
+ }
+ break;
+ }
+ insn.code |= op1.code;
+ break;
+
+ case PDP11_OPCODE_DISPL:
+ {
+ char *new;
+ new = parse_expression (str, &op1);
+ op1.code = 0;
+ op1.reloc.pc_rel = 1;
+ op1.reloc.type = BFD_RELOC_PDP11_DISP_8_PCREL;
+ if (op1.reloc.exp.X_op != O_symbol)
+ {
+ op1.error = "Symbol expected";
+ break;
+ }
+ if (op1.code & ~0xff)
+ {
+ err = "8-bit displacement out of range";
+ break;
+ }
+ str = new;
+ insn.code |= op1.code;
+ insn.reloc = op1.reloc;
+ }
+ break;
+
+ case PDP11_OPCODE_REG:
+ str = parse_reg (str, &op1);
+ if (op1.error)
+ break;
+ insn.code |= op1.code;
+ break;
+
+ case PDP11_OPCODE_OP:
+ str = parse_op (str, &op1);
+ if (op1.error)
+ break;
+ insn.code |= op1.code;
+ if (op1.additional)
+ size += 2;
+ break;
+
+ case PDP11_OPCODE_REG_OP:
+ str = parse_reg (str, &op2);
+ if (op2.error)
+ break;
+ insn.code |= op2.code << 6;
+ str = parse_separator (str, &error);
+ if (error)
+ {
+ op2.error = "Missing ','";
+ break;
+ }
+ str = parse_op (str, &op1);
+ if (op1.error)
+ break;
+ insn.code |= op1.code;
+ if (op1.additional)
+ size += 2;
+ break;
+
+ case PDP11_OPCODE_REG_OP_REV:
+ str = parse_op (str, &op1);
+ if (op1.error)
+ break;
+ insn.code |= op1.code;
+ if (op1.additional)
+ size += 2;
+ str = parse_separator (str, &error);
+ if (error)
+ {
+ op2.error = "Missing ','";
+ break;
+ }
+ str = parse_reg (str, &op2);
+ if (op2.error)
+ break;
+ insn.code |= op2.code << 6;
+ break;
+
+ case PDP11_OPCODE_AC_OP:
+ str = parse_ac (str, &op2);
+ if (op2.error)
+ break;
+ insn.code |= op2.code << 6;
+ str = parse_separator (str, &error);
+ if (error)
+ {
+ op1.error = "Missing ','";
+ break;
+ }
+ str = parse_op (str, &op1);
+ if (op1.error)
+ break;
+ insn.code |= op1.code;
+ if (op1.additional)
+ size += 2;
+ break;
+
+ case PDP11_OPCODE_OP_OP:
+ str = parse_op (str, &op1);
+ if (op1.error)
+ break;
+ insn.code |= op1.code << 6;
+ if (op1.additional)
+ size += 2;
+ str = parse_separator (str, &error);
+ if (error)
+ {
+ op2.error = "Missing ','";
+ break;
+ }
+ str = parse_op (str, &op2);
+ if (op2.error)
+ break;
+ insn.code |= op2.code;
+ if (op2.additional)
+ size += 2;
+ break;
+
+ case PDP11_OPCODE_REG_DISPL:
+ {
+ char *new;
+ str = parse_reg (str, &op2);
+ if (op2.error)
+ break;
+ insn.code |= op2.code << 6;
+ str = parse_separator (str, &error);
+ if (error)
+ {
+ op1.error = "Missing ','";
+ break;
+ }
+ new = parse_expression (str, &op1);
+ op1.code = 0;
+ op1.reloc.pc_rel = 1;
+ op1.reloc.type = BFD_RELOC_PDP11_DISP_6_PCREL;
+ if (op1.reloc.exp.X_op != O_symbol)
+ {
+ op1.error = "Symbol expected";
+ break;
+ }
+ if (op1.code & ~0x3f)
+ {
+ err = "6-bit displacement out of range";
+ break;
+ }
+ str = new;
+ insn.code |= op1.code;
+ insn.reloc = op1.reloc;
+ }
+ break;
+
+ default:
+ BAD_CASE (op->type);
+ }
+
+ if (op1.error)
+ err = op1.error;
+ else if (op2.error)
+ err = op2.error;
+ else
+ {
+ str = skip_whitespace (str);
+ if (*str)
+ err = "Too many operands";
+ }
+
+ {
+ char *to = NULL;
+
+ if (err)
+ {
+ as_bad (err);
+ return;
+ }
+
+ to = frag_more (size);
+
+ md_number_to_chars (to, insn.code, 2);
+ if (insn.reloc.type != BFD_RELOC_NONE)
+ fix_new_exp (frag_now, to - frag_now->fr_literal, 2,
+ &insn.reloc.exp, insn.reloc.pc_rel, insn.reloc.type);
+ to += 2;
+
+ if (op1.additional)
+ {
+ md_number_to_chars (to, op1.word, 2);
+ if (op1.reloc.type != BFD_RELOC_NONE)
+ fix_new_exp (frag_now, to - frag_now->fr_literal, 2,
+ &op1.reloc.exp, op1.reloc.pc_rel, op1.reloc.type);
+ to += 2;
+ }
+
+ if (op2.additional)
+ {
+ md_number_to_chars (to, op2.word, 2);
+ if (op2.reloc.type != BFD_RELOC_NONE)
+ fix_new_exp (frag_now, to - frag_now->fr_literal, 2,
+ &op2.reloc.exp, op2.reloc.pc_rel, op2.reloc.type);
+ }
+ }
+}
+
+int
+md_estimate_size_before_relax (fragP, segment)
+ fragS *fragP ATTRIBUTE_UNUSED;
+ segT segment ATTRIBUTE_UNUSED;
+{
+ return 0;
+}
+
+void
+md_convert_frag (headers, seg, fragP)
+ bfd *headers ATTRIBUTE_UNUSED;
+ segT seg ATTRIBUTE_UNUSED;
+ fragS *fragP ATTRIBUTE_UNUSED;
+{
+}
+
+CONST int md_short_jump_size = 2;
+CONST int md_long_jump_size = 4;
+
+void
+md_create_short_jump (ptr, from_addr, to_addr, frag, to_symbol)
+ char *ptr ATTRIBUTE_UNUSED;
+ addressT from_addr ATTRIBUTE_UNUSED;
+ addressT to_addr ATTRIBUTE_UNUSED;
+ fragS *frag ATTRIBUTE_UNUSED;
+ symbolS *to_symbol ATTRIBUTE_UNUSED;
+{
+}
+
+void
+md_create_long_jump (ptr, from_addr, to_addr, frag, to_symbol)
+ char *ptr ATTRIBUTE_UNUSED;
+ addressT from_addr ATTRIBUTE_UNUSED;
+ addressT to_addr ATTRIBUTE_UNUSED;
+ fragS *frag ATTRIBUTE_UNUSED;
+ symbolS *to_symbol ATTRIBUTE_UNUSED;
+{
+}
+
+static int
+set_option (arg)
+ char *arg;
+{
+ int yes = 1;
+
+ if (strcmp (arg, "all-extensions") == 0 ||
+ strcmp (arg, "all") == 0)
+ {
+ memset (pdp11_extension, ~0, sizeof pdp11_extension);
+ pdp11_extension[PDP11_NONE] = 0;
+ return 1;
+ }
+ else if (strcmp (arg, "no-extensions") == 0)
+ {
+ memset (pdp11_extension, 0, sizeof pdp11_extension);
+ pdp11_extension[PDP11_BASIC] = 1;
+ return 1;
+ }
+
+ if (strncmp (arg, "no-", 3) == 0)
+ {
+ yes = 0;
+ arg += 3;
+ }
+
+ if (strcmp (arg, "cis") == 0) /* commersial instructions */
+ pdp11_extension[PDP11_CIS] = yes;
+ else if (strcmp (arg, "csm") == 0) /* call supervisor mode */
+ pdp11_extension[PDP11_CSM] = yes;
+ else if (strcmp (arg, "eis") == 0) /* extended instruction set */
+ pdp11_extension[PDP11_EIS] = pdp11_extension[PDP11_LEIS] = yes;
+ else if (strcmp (arg, "fis") == 0 || /* KEV11 floating-point */
+ strcmp (arg, "kev11") == 0 ||
+ strcmp (arg, "kev-11") == 0)
+ pdp11_extension[PDP11_FIS] = yes;
+ else if (strcmp (arg, "fpp") == 0 || /* FP-11 floating-point */
+ strcmp (arg, "fpu") == 0 ||
+ strcmp (arg, "fp11") == 0 ||
+ strcmp (arg, "fp-11") == 0 ||
+ strcmp (arg, "fpj11") == 0 ||
+ strcmp (arg, "fp-j11") == 0 ||
+ strcmp (arg, "fpj-11") == 0)
+ pdp11_extension[PDP11_FPP] = yes;
+ else if (strcmp (arg, "limited-eis") == 0) /* limited extended insns */
+ {
+ pdp11_extension[PDP11_LEIS] = yes;
+ if (!pdp11_extension[PDP11_LEIS])
+ pdp11_extension[PDP11_EIS] = 0;
+ }
+ else if (strcmp (arg, "mfpt") == 0) /* move from processor type */
+ pdp11_extension[PDP11_MFPT] = yes;
+ else if (strncmp (arg, "mproc", 5) == 0 || /* multiprocessor insns: */
+ strncmp (arg, "multiproc", 9) == 0 ) /* TSTSET, WRTLCK */
+ pdp11_extension[PDP11_MPROC] = yes;
+ else if (strcmp (arg, "mxps") == 0) /* move from/to proc status */
+ pdp11_extension[PDP11_MXPS] = yes;
+ else if (strcmp (arg, "pic") == 0) /* position-independent code */
+ asm_option[ASM_OPT_PIC] = yes;
+ else if (strcmp (arg, "spl") == 0) /* set priority level */
+ pdp11_extension[PDP11_SPL] = yes;
+ else if (strcmp (arg, "ucode") == 0 || /* microcode instructions: */
+ strcmp (arg, "microcode") == 0) /* LDUB, MED, XFC */
+ pdp11_extension[PDP11_UCODE] = yes;
+ else
+ return 0;
+
+ return 1;
+}
+
+static int
+set_cpu_model (arg)
+ char *arg;
+{
+ char buf[4];
+ char *model = buf;
+
+ if (arg[0] == 'k')
+ arg++;
+
+ *model++ = *arg++;
+
+ if (strchr ("abdx", model[-1]) == NULL)
+ return 0;
+
+ if (model[-1] == 'd')
+ {
+ if (arg[0] == 'f' ||
+ arg[0] == 'j')
+ model[-1] = *arg++;
+ }
+ else if (model[-1] == 'x')
+ {
+ if (arg[0] == 't')
+ model[-1] = *arg++;
+ }
+
+ if (arg[0] == '-')
+ arg++;
+
+ if (strncmp (arg, "11", 2) != 0)
+ return 0;
+ arg += 2;
+
+ if (arg[0] == '-')
+ {
+ if (*++arg == 0)
+ return 0;
+ }
+
+ /* allow up to two revision letters */
+ if (arg[0] != 0)
+ *model++ = *arg++;
+ if (arg[0] != 0)
+ *model++ = *arg++;
+
+ *model++ = 0;
+
+ set_option ("no-extensions");
+
+ if (strncmp (buf, "a", 1) == 0) /* KA11 (11/15/20) */
+ return 1; /* no extensions */
+
+ else if (strncmp (buf, "b", 1) == 0) /* KB11 (11/45/50/55/70) */
+ return set_option ("eis") &&
+ set_option ("spl");
+
+ else if (strncmp (buf, "da", 2) == 0) /* KD11-A (11/35/40) */
+ return set_option ("limited-eis");
+
+ else if (strncmp (buf, "db", 2) == 0 || /* KD11-B (11/05/10) */
+ strncmp (buf, "dd", 2) == 0) /* KD11-D (11/04) */
+ return 1; /* no extensions */
+
+ else if (strncmp (buf, "de", 2) == 0) /* KD11-E (11/34) */
+ return set_option ("eis") &&
+ set_option ("mxps");
+
+ else if (strncmp (buf, "df", 2) == 0 || /* KD11-F (11/03) */
+ strncmp (buf, "dh", 2) == 0 || /* KD11-H (11/03) */
+ strncmp (buf, "dq", 2) == 0) /* KD11-Q (11/03) */
+ return set_option ("limited-eis") &&
+ set_option ("mxps");
+
+ else if (strncmp (buf, "dk", 2) == 0) /* KD11-K (11/60) */
+ return set_option ("eis") &&
+ set_option ("mxps") &&
+ set_option ("ucode");
+
+ else if (strncmp (buf, "dz", 2) == 0) /* KD11-Z (11/44) */
+ return set_option ("csm") &&
+ set_option ("eis") &&
+ set_option ("mfpt") &&
+ set_option ("mxps") &&
+ set_option ("spl");
+
+ else if (strncmp (buf, "f", 1) == 0) /* F11 (11/23/24) */
+ return set_option ("eis") &&
+ set_option ("mfpt") &&
+ set_option ("mxps");
+
+ else if (strncmp (buf, "j", 1) == 0) /* J11 (11/53/73/83/84/93/94)*/
+ return set_option ("csm") &&
+ set_option ("eis") &&
+ set_option ("mfpt") &&
+ set_option ("multiproc") &&
+ set_option ("mxps") &&
+ set_option ("spl");
+
+ else if (strncmp (buf, "t", 1) == 0) /* T11 (11/21) */
+ return set_option ("limited-eis") &&
+ set_option ("mxps");
+
+ else
+ return 0;
+}
+
+static int
+set_machine_model (arg)
+ char *arg;
+{
+ if (strncmp (arg, "pdp-11/", 7) != 0 &&
+ strncmp (arg, "pdp11/", 6) != 0 &&
+ strncmp (arg, "11/", 3) != 0)
+ return 0;
+
+ if (strncmp (arg, "pdp", 3) == 0)
+ arg += 3;
+ if (arg[0] == '-')
+ arg++;
+ if (strncmp (arg, "11/", 3) == 0)
+ arg += 3;
+
+ if (strcmp (arg, "03") == 0) /* 11/03 */
+ return set_cpu_model ("kd11f"); /* KD11-F */
+
+ else if (strcmp (arg, "04") == 0) /* 11/04 */
+ return set_cpu_model ("kd11d"); /* KD11-D */
+
+ else if (strcmp (arg, "05") == 0 || /* 11/05 or 11/10 */
+ strcmp (arg, "10") == 0)
+ return set_cpu_model ("kd11b"); /* KD11-B */
+
+ else if (strcmp (arg, "15") == 0 || /* 11/15 or 11/20 */
+ strcmp (arg, "20") == 0)
+ return set_cpu_model ("ka11"); /* KA11 */
+
+ else if (strcmp (arg, "21") == 0) /* 11/21 */
+ return set_cpu_model ("t11"); /* T11 */
+
+ else if (strcmp (arg, "23") == 0 || /* 11/23 or 11/24 */
+ strcmp (arg, "24") == 0)
+ return set_cpu_model ("f11"); /* F11 */
+
+ else if (strcmp (arg, "34") == 0 || /* 11/34 or 11/34a */
+ strcmp (arg, "34a") == 0)
+ return set_cpu_model ("kd11e"); /* KD11-E */
+
+ else if (strcmp (arg, "35") == 0 || /* 11/35 or 11/40 */
+ strcmp (arg, "40") == 0)
+ return set_cpu_model ("kd11da"); /* KD11-A */
+
+ else if (strcmp (arg, "44") == 0) /* 11/44 */
+ return set_cpu_model ("kd11dz"); /* KD11-Z */
+
+ else if (strcmp (arg, "45") == 0 || /* 11/45/50/55/70 */
+ strcmp (arg, "50") == 0 ||
+ strcmp (arg, "55") == 0 ||
+ strcmp (arg, "70") == 0)
+ return set_cpu_model ("kb11"); /* KB11 */
+
+ else if (strcmp (arg, "60") == 0) /* 11/60 */
+ return set_cpu_model ("kd11k"); /* KD11-K */ /* FPP? */
+
+ else if (strcmp (arg, "53") == 0 || /* 11/53/73/83/84/93/94 */
+ strcmp (arg, "73") == 0 ||
+ strcmp (arg, "83") == 0 ||
+ strcmp (arg, "84") == 0 ||
+ strcmp (arg, "93") == 0 ||
+ strcmp (arg, "94") == 0)
+ return set_cpu_model ("j11") && /* J11 */
+ set_option ("fpp"); /* All J11 machines come */
+ /* with FPP installed. */
+ else
+ return 0;
+}
+
+CONST char *md_shortopts = "m:";
+
+struct option md_longopts[] =
+{
+#define OPTION_CPU 257
+ { "cpu", required_argument, NULL, OPTION_CPU },
+#define OPTION_MACHINE 258
+ { "machine", required_argument, NULL, OPTION_MACHINE },
+#define OPTION_PIC 259
+ { "pic", no_argument, NULL, OPTION_PIC },
+ { NULL, no_argument, NULL, 0 }
+};
+
+size_t md_longopts_size = sizeof(md_longopts);
+
+/*
+ * md_parse_option
+ * Invocation line includes a switch not recognized by the base assembler.
+ * See if it's a processor-specific option.
+ */
+
+int
+md_parse_option (c, arg)
+ int c;
+ char *arg;
+{
+ init_defaults ();
+
+ switch (c)
+ {
+ case 'm':
+ if (set_option (arg))
+ return 1;
+ if (set_cpu_model (arg))
+ return 1;
+ if (set_machine_model (arg))
+ return 1;
+ break;
+
+ case OPTION_CPU:
+ if (set_cpu_model (arg))
+ return 1;
+ break;
+
+ case OPTION_MACHINE:
+ if (set_machine_model (arg))
+ return 1;
+ break;
+
+ case OPTION_PIC:
+ if (set_option ("pic"))
+ return 1;
+ break;
+
+ default:
+ break;
+ }
+
+ as_bad ("unrecognized option `-%c%s'", c, arg ? arg : "");
+
+ return 0;
+}
+
+/*
+One possible way of parsing options.
+
+enum
+{
+ OPTION_CSM,
+ OPTION_CIS,
+ ...
+};
+
+struct
+{
+ CONST char *pattern;
+ int opt;
+ CONST char *description;
+} options;
+
+static struct options extension_opts[] =
+{
+ { "Ncsm", OPTION_CSM,
+ "allow (disallow) CSM instruction" },
+ { "Ncis", OPTION_CIS,
+ "allow (disallow) commersial instruction set" },
+ { "Neis", OPTION_EIS,
+ "allow (disallow) extended instruction set" },
+ ...
+ { "all-extensions", OPTION_ALL_EXTENSIONS,
+ "allow all instruction set extensions\n\
+ (this is the default)" },
+ { "no-extensions", OPTION_NO_EXTENSIONS,
+ "disallow all instruction set extensions" },
+ { "pic", OPTION_PIC,
+ "position-independent code" },
+};
+
+static struct options cpu_opts[] =
+{
+ { "Ka_11_*", OPTION_KA11, "KA11 CPU. ..." },
+ { "Kb_11_*", OPTION_KB11, "KB11 CPU. ..." },
+ { "Kd_11_a*", OPTION_KD11A, "KD11-A CPU. ..." },
+ { "Kd_11_b*", OPTION_KD11B, "KD11-B CPU. ..." },
+ { "Kd_11_d*", OPTION_KD11D, "KD11-D CPU. ..." },
+ { "Kd_11_e*", OPTION_KD11E, "KD11-E CPU. ..." },
+ { "Kd_11_f*", OPTION_KD11F, "KD11-F CPU. ..." },
+ { "Kd_11_h*", OPTION_KD11H, "KD11-H CPU. ..." },
+ { "Kd_11_q*", OPTION_KD11Q, "KD11-Q CPU. ..." },
+ { "Kd_11_z*", OPTION_KD11Z, "KD11-Z CPU. ..." },
+ { "Df_11_*", OPTION_F11, "F11 CPU. ..." },
+ { "Dj_11_*", OPTION_J11, "J11 CPU. ..." },
+ { "Dt_11_*", OPTION_T11, "T11 CPU. ..." },
+};
+
+static struct options model_opts[] =
+{
+ { "P03", OPTION_PDP11_03, "same as ..." },
+ { "P04", OPTION_PDP11_04, "same as ..." },
+ { "P05", OPTION_PDP11_05, "same as ..." },
+ { "P10", OPTION_PDP11_10, "same as ..." },
+ { "P15", OPTION_PDP11_15, "same as ..." },
+ { "P20", OPTION_PDP11_20, "same as ..." },
+ { "P21", OPTION_PDP11_21, "same as ..." },
+ { "P24", OPTION_PDP11_24, "same as ..." },
+ { "P34", OPTION_PDP11_34, "same as ..." },
+ { "P34a", OPTION_PDP11_34A, "same as ..." },
+ { "P40", OPTION_PDP11_40, "same as ..." },
+ { "P44", OPTION_PDP11_44, "same as ..." },
+ { "P45", OPTION_PDP11_45, "same as ..." },
+ { "P50", OPTION_PDP11_50, "same as ..." },
+ { "P53", OPTION_PDP11_53, "same as ..." },
+ { "P55", OPTION_PDP11_55, "same as ..." },
+ { "P60", OPTION_PDP11_60, "same as ..." },
+ { "P70", OPTION_PDP11_70, "same as ..." },
+ { "P73", OPTION_PDP11_73, "same as ..." },
+ { "P83", OPTION_PDP11_83, "same as ..." },
+ { "P84", OPTION_PDP11_84, "same as ..." },
+ { "P93", OPTION_PDP11_93, "same as ..." },
+ { "P94", OPTION_PDP11_94, "same as ..." },
+};
+
+struct
+{
+ CONST char *title;
+ struct options *opts;
+ int num;
+} all_opts[] =
+{
+ { "PDP-11 instruction set extentions",
+ extension_opts,
+ sizeof extension_opts / sizeof extension_opts[0] },
+ { "PDP-11 CPU model options",
+ cpu_opts,
+ sizeof cpu_opts / sizeof cpu_opts[0] },
+ { "PDP-11 machine model options",
+ model_opts,
+ sizeof model_opts / sizeof model_opts[0] },
+};
+
+int
+parse_match (char *arg, char *pattern)
+{
+ int yes = 1;
+
+ while (*pattern)
+ {
+ switch (*pattern++)
+ {
+ case 'N':
+ if (strncmp (arg, "no-") == 0)
+ {
+ yes = 0;
+ arg += 3;
+ }
+ break;
+
+ case 'K':
+ if (arg[0] == 'k')
+ arg++;
+ break;
+
+ case 'D':
+ if (strncmp (arg, "kd", 2) == 0)
+ arg +=2;
+ break;
+
+ case 'P':
+ if (strncmp (arg, "pdp-11/", 7) == 0)
+ arg += 7;
+ else if (strncmp (arg, "pdp11/", 6) == 0)
+ arg += 6;
+ else if (strncmp (arg, "11/", 3) == 0)
+ arg += 3;
+ break;
+
+ case '_':
+ if (arg[0] == "-")
+ {
+ if (*++arg == 0)
+ return 0;
+ }
+ break;
+
+ case '*':
+ return 1;
+
+ default:
+ if (*arg++ != pattern[-1])
+ return 0;
+ }
+ }
+
+ return arg[0] == 0;
+}
+
+int
+fprint_opt (stream, pattern)
+ FILE *stream;
+ CONST char *pattern;
+{
+ int n;
+
+ while (*pattern)
+ {
+ switch (*pattern++)
+ {
+ case 'N':
+ n += fprintf (stream, "(no-)");
+ break;
+
+ case 'K':
+ n += fprintf (stream, "k");
+ break;
+
+ case 'P':
+ n += fprintf (stream "11/");
+ break;
+
+ case 'D':
+ case '_':
+ case '*':
+ break;
+
+ default:
+ fputc (pattern[-1], stream);
+ n++;
+ }
+ }
+
+ return n;
+}
+
+int
+parse_option (char *arg)
+{
+ int i, j;
+
+ for (i = 0; i < sizeof all_opts / sizeof all_opts[0]; i++)
+ {
+ for (j = 0; j < all_opts[i].num; j++)
+ {
+ if (parse_match (arg, all_opts[i].opts[j].pattern))
+ {
+ set_option (all_opts[i].opts[j].opt);
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+static void
+fprint_space (stream, n)
+ FILE *stream;
+ int n;
+{
+ while (n--)
+ fputc (' ', stream);
+}
+
+void
+md_show_usage (stream)
+ FILE *stream;
+{
+ int i, j, n;
+
+ for (i = 0; i < sizeof all_opts / sizeof all_opts[0]; i++)
+ {
+ fprintf (stream "\n%s:\n\n", all_opts[i].title);
+
+ for (j = 0; j < all_opts[i].num; j++)
+ {
+ fprintf (stream, "-m");
+ n = fprintf_opt (stream, all_opts[i].opts[j].pattern);
+ fprint_space (stream, 22 - n);
+ fprintf (stream, "%s\n", all_opts[i].opts[j].description);
+ }
+ }
+}
+*/
+
+void
+md_show_usage (stream)
+ FILE *stream;
+{
+ fprintf (stream, "\
+\n\
+PDP-11 instruction set extentions:\n\
+\n\
+-m(no-)cis allow (disallow) commersial instruction set\n\
+-m(no-)csm allow (disallow) CSM instruction\n\
+-m(no-)eis allow (disallow) full extended instruction set\n\
+-m(no-)fis allow (disallow) KEV11 floating-point instructions\n\
+-m(no-)fpp allow (disallow) FP-11 floating-point instructions\n\
+-m(no-)fpu allow (disallow) FP-11 floating-point instructions\n\
+-m(no-)limited-eis allow (disallow) limited extended instruction set\n\
+-m(no-)mfpt allow (disallow) processor type instruction\n\
+-m(no-)multiproc allow (disallow) multiprocessor instructions\n\
+-m(no-)mxps allow (disallow) processor status instructions\n\
+-m(no-)spl allow (disallow) SPL instruction\n\
+-m(no-)ucode allow (disallow) microcode instructions\n\
+-mall-extensions allow all instruction set extensions\n\
+ (this is the default)\n\
+-mno-extentions disallow all instruction set extensions\n\
+-pic generate position-indepenent code\n\
+\n\
+PDP-11 CPU model options:\n\
+\n\
+-mka11* KA11 CPU. base line instruction set only\n\
+-mkb11* KB11 CPU. enable full EIS and SPL\n\
+-mkd11a* KD11-A CPU. enable limited EIS\n\
+-mkd11b* KD11-B CPU. base line instruction set only\n\
+-mkd11d* KD11-D CPU. base line instruction set only\n\
+-mkd11e* KD11-E CPU. enable full EIS, MTPS, and MFPS\n\
+-mkd11f* KD11-F CPU. enable limited EIS, MTPS, and MFPS\n\
+-mkd11h* KD11-H CPU. enable limited EIS, MTPS, and MFPS\n\
+-mkd11q* KD11-Q CPU. enable limited EIS, MTPS, and MFPS\n\
+-mkd11k* KD11-K CPU. enable full EIS, MTPS, MFPS, LDUB, MED,\n\
+ XFC, and MFPT\n\
+-mkd11z* KD11-Z CPU. enable full EIS, MTPS, MFPS, MFPT, SPL,\n\
+ and CSM\n\
+-mf11* F11 CPU. enable full EIS, MFPS, MTPS, and MFPT\n\
+-mj11* J11 CPU. enable full EIS, MTPS, MFPS, MFPT, SPL,\n\
+ CSM, TSTSET, and WRTLCK\n\
+-mt11* T11 CPU. enable limited EIS, MTPS, and MFPS\n\
+\n\
+PDP-11 machine model options:\n\
+\n\
+-m11/03 same as -mkd11f\n\
+-m11/04 same as -mkd11d\n\
+-m11/05 same as -mkd11b\n\
+-m11/10 same as -mkd11b\n\
+-m11/15 same as -mka11\n\
+-m11/20 same as -mka11\n\
+-m11/21 same as -mt11\n\
+-m11/23 same as -mf11\n\
+-m11/24 same as -mf11\n\
+-m11/34 same as -mkd11e\n\
+-m11/34a same as -mkd11e -mfpp\n\
+-m11/35 same as -mkd11a\n\
+-m11/40 same as -mkd11a\n\
+-m11/44 same as -mkd11z\n\
+-m11/45 same as -mkb11\n\
+-m11/50 same as -mkb11\n\
+-m11/53 same as -mj11\n\
+-m11/55 same as -mkb11\n\
+-m11/60 same as -mkd11k\n\
+-m11/70 same as -mkb11\n\
+-m11/73 same as -mj11\n\
+-m11/83 same as -mj11\n\
+-m11/84 same as -mj11\n\
+-m11/93 same as -mj11\n\
+-m11/94 same as -mj11\n\
+");
+}
+
+symbolS *
+md_undefined_symbol (name)
+ char *name ATTRIBUTE_UNUSED;
+{
+ return 0;
+}
+
+valueT
+md_section_align (segment, size)
+ segT segment ATTRIBUTE_UNUSED;
+ valueT size;
+{
+ return (size + 1) & ~1;
+}
+
+long
+md_pcrel_from (fixP)
+ fixS *fixP;
+{
+ return fixP->fx_frag->fr_address + fixP->fx_where + fixP->fx_size;
+}
+
+/* Translate internal representation of relocation info to BFD target
+ format. */
+arelent *
+tc_gen_reloc (section, fixp)
+ asection *section ATTRIBUTE_UNUSED;
+ fixS *fixp;
+{
+ arelent *reloc;
+ bfd_reloc_code_real_type code;
+
+ reloc = (arelent *) xmalloc (sizeof (arelent));
+
+ reloc->sym_ptr_ptr = (asymbol **) xmalloc (sizeof (asymbol *));
+ *reloc->sym_ptr_ptr = symbol_get_bfdsym (fixp->fx_addsy);
+ reloc->address = fixp->fx_frag->fr_address + fixp->fx_where;
+
+ /* this is taken account for in md_apply_fix() */
+ reloc->addend = -symbol_get_bfdsym (fixp->fx_addsy)->section->vma;
+
+ switch (fixp->fx_r_type)
+ {
+ case BFD_RELOC_16:
+ if (fixp->fx_pcrel)
+ code = BFD_RELOC_16_PCREL;
+ else
+ code = BFD_RELOC_16;
+ break;
+
+ case BFD_RELOC_16_PCREL:
+ code = BFD_RELOC_16_PCREL;
+ break;
+
+ default:
+ BAD_CASE (fixp->fx_r_type);
+ return NULL;
+ }
+
+ reloc->howto = bfd_reloc_type_lookup (stdoutput, code);
+
+ if (reloc->howto == NULL)
+ {
+ as_bad_where (fixp->fx_file, fixp->fx_line,
+ "Can not represent %s relocation in this object file format",
+ bfd_get_reloc_code_name (code));
+ return NULL;
+ }
+
+ return reloc;
+}
+
+void
+pseudo_bss (c)
+ int c ATTRIBUTE_UNUSED;
+{
+ int temp;
+
+ temp = get_absolute_expression ();
+ subseg_set (bss_section, temp);
+ demand_empty_rest_of_line ();
+}
+
+void
+pseudo_even (c)
+ int c ATTRIBUTE_UNUSED;
+{
+ int alignment = 1; /* 2^1 */
+ frag_align (alignment, 0, 1);
+ record_alignment (now_seg, alignment);
+}
+
+/* end of tc-pdp11.c */
--- /dev/null
+/* tc-pdp11.h -- Header file for tc-pdp11.c.
+ Copyright (C) 2001 Free Software Foundation, Inc.
+
+ This file is part of GAS, the GNU Assembler.
+
+ GAS is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GAS is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GAS; see the file COPYING. If not, write to the Free
+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+ 02111-1307, USA. */
+
+#define TC_PDP11 1
+
+#define TARGET_FORMAT "a.out-pdp11"
+#define TARGET_ARCH bfd_arch_pdp11
+#define TARGET_BYTES_BIG_ENDIAN 0
+
+#define LEX_TILDE (LEX_BEGIN_NAME | LEX_NAME)
+
+#define md_operand(x)
+
+long md_chars_to_number PARAMS ((unsigned char *, int));
+
+/* end of tc-pdp11.h */
program_transform_name=s,x,x,
silent=
site=
+sitefile=
srcdir=
target=NONE
verbose=
--help print this message
--no-create do not create output files
--quiet, --silent do not print \`checking...' messages
+ --site-file=FILE use FILE as the site file
--version print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
-site=* | --site=* | --sit=*)
site="$ac_optarg" ;;
+ -site-file | --site-file | --site-fil | --site-fi | --site-f)
+ ac_prev=sitefile ;;
+ -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*)
+ sitefile="$ac_optarg" ;;
+
-srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
ac_prev=srcdir ;;
-srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
# Prefer explicitly selected file to automatically selected ones.
-if test -z "$CONFIG_SITE"; then
- if test "x$prefix" != xNONE; then
- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
- else
- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+if test -z "$sitefile"; then
+ if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
fi
+else
+ CONFIG_SITE="$sitefile"
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
fi
echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-echo "configure:552: checking for Cygwin environment" >&5
+echo "configure:563: checking for Cygwin environment" >&5
if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 557 "configure"
+#line 568 "configure"
#include "confdefs.h"
int main() {
return __CYGWIN__;
; return 0; }
EOF
-if { (eval echo configure:568: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:579: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_cygwin=yes
else
CYGWIN=
test "$ac_cv_cygwin" = yes && CYGWIN=yes
echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-echo "configure:585: checking for mingw32 environment" >&5
+echo "configure:596: checking for mingw32 environment" >&5
if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 590 "configure"
+#line 601 "configure"
#include "confdefs.h"
int main() {
return __MINGW32__;
; return 0; }
EOF
-if { (eval echo configure:597: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:608: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_mingw32=yes
else
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:662: checking host system type" >&5
+echo "configure:673: checking host system type" >&5
host_alias=$host
case "$host_alias" in
echo "$ac_t""$host" 1>&6
echo $ac_n "checking target system type""... $ac_c" 1>&6
-echo "configure:683: checking target system type" >&5
+echo "configure:694: checking target system type" >&5
target_alias=$target
case "$target_alias" in
echo "$ac_t""$target" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:701: checking build system type" >&5
+echo "configure:712: checking build system type" >&5
build_alias=$build
case "$build_alias" in
echo $ac_n "checking for strerror in -lcposix""... $ac_c" 1>&6
-echo "configure:725: checking for strerror in -lcposix" >&5
+echo "configure:736: checking for strerror in -lcposix" >&5
ac_lib_var=`echo cposix'_'strerror | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lcposix $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 733 "configure"
+#line 744 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
strerror()
; return 0; }
EOF
-if { (eval echo configure:744: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:755: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:779: checking for a BSD compatible install" >&5
+echo "configure:790: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6
-echo "configure:832: checking whether build environment is sane" >&5
+echo "configure:843: checking whether build environment is sane" >&5
# Just in case
sleep 1
echo timestamp > conftestfile
test "$program_transform_name" = "" && program_transform_name="s,x,x,"
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:889: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:900: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
missing_dir=`cd $ac_aux_dir && pwd`
echo $ac_n "checking for working aclocal""... $ac_c" 1>&6
-echo "configure:935: checking for working aclocal" >&5
+echo "configure:946: checking for working aclocal" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
fi
echo $ac_n "checking for working autoconf""... $ac_c" 1>&6
-echo "configure:948: checking for working autoconf" >&5
+echo "configure:959: checking for working autoconf" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
fi
echo $ac_n "checking for working automake""... $ac_c" 1>&6
-echo "configure:961: checking for working automake" >&5
+echo "configure:972: checking for working automake" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
fi
echo $ac_n "checking for working autoheader""... $ac_c" 1>&6
-echo "configure:974: checking for working autoheader" >&5
+echo "configure:985: checking for working autoheader" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
fi
echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6
-echo "configure:987: checking for working makeinfo" >&5
+echo "configure:998: checking for working makeinfo" >&5
# Run test in a subshell; some versions of sh will print an error if
# an executable is not found, even if stderr is redirected.
# Redirect stdin to placate older versions of autoconf. Sigh.
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1073: checking for $ac_word" >&5
+echo "configure:1084: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1103: checking for $ac_word" >&5
+echo "configure:1114: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1154: checking for $ac_word" >&5
+echo "configure:1165: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1186: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1197: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
cat > conftest.$ac_ext << EOF
-#line 1197 "configure"
+#line 1208 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:1202: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1213: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1228: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1239: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:1233: checking whether we are using GNU C" >&5
+echo "configure:1244: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1242: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1253: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1261: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1272: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$ac_cv_prog_gcc" = yes; then
# Check if gcc -print-prog-name=ld gives a path.
echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6
-echo "configure:1304: checking for ld used by GCC" >&5
+echo "configure:1315: checking for ld used by GCC" >&5
case $host in
*-*-mingw*)
# gcc leaves a trailing carriage return which upsets mingw
esac
elif test "$with_gnu_ld" = yes; then
echo $ac_n "checking for GNU ld""... $ac_c" 1>&6
-echo "configure:1334: checking for GNU ld" >&5
+echo "configure:1345: checking for GNU ld" >&5
else
echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6
-echo "configure:1337: checking for non-GNU ld" >&5
+echo "configure:1348: checking for non-GNU ld" >&5
fi
if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
fi
test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; }
echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6
-echo "configure:1372: checking if the linker ($LD) is GNU ld" >&5
+echo "configure:1383: checking if the linker ($LD) is GNU ld" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6
-echo "configure:1389: checking for $LD option to reload object files" >&5
+echo "configure:1400: checking for $LD option to reload object files" >&5
if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
test -n "$reload_flag" && reload_flag=" $reload_flag"
echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6
-echo "configure:1401: checking for BSD-compatible nm" >&5
+echo "configure:1412: checking for BSD-compatible nm" >&5
if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
echo "$ac_t""$NM" 1>&6
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1439: checking whether ln -s works" >&5
+echo "configure:1450: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fi
echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6
-echo "configure:1460: checking how to recognise dependant libraries" >&5
+echo "configure:1471: checking how to recognise dependant libraries" >&5
if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
deplibs_check_method=$lt_cv_deplibs_check_method
echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:1603: checking for object suffix" >&5
+echo "configure:1614: checking for object suffix" >&5
if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
rm -f conftest*
echo 'int i = 1;' > conftest.$ac_ext
-if { (eval echo configure:1609: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1620: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
for ac_file in conftest.*; do
case $ac_file in
*.c) ;;
echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1629: checking for executable suffix" >&5
+echo "configure:1640: checking for executable suffix" >&5
if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
rm -f conftest*
echo 'int main () { return 0; }' > conftest.$ac_ext
ac_cv_exeext=
- if { (eval echo configure:1639: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+ if { (eval echo configure:1650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
for file in conftest.*; do
case $file in
- *.c | *.o | *.obj) ;;
+ *.c | *.o | *.obj | *.ilk | *.pdb) ;;
*) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
esac
done
file_magic*)
if test "$file_magic_cmd" = '$MAGIC_CMD'; then
echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6
-echo "configure:1672: checking for ${ac_tool_prefix}file" >&5
+echo "configure:1683: checking for ${ac_tool_prefix}file" >&5
if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -z "$lt_cv_path_MAGIC_CMD"; then
if test -n "$ac_tool_prefix"; then
echo $ac_n "checking for file""... $ac_c" 1>&6
-echo "configure:1734: checking for file" >&5
+echo "configure:1745: checking for file" >&5
if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
set dummy ${ac_tool_prefix}ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1805: checking for $ac_word" >&5
+echo "configure:1816: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1837: checking for $ac_word" >&5
+echo "configure:1848: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1872: checking for $ac_word" >&5
+echo "configure:1883: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1904: checking for $ac_word" >&5
+echo "configure:1915: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
case "$host" in
*-*-irix6*)
# Find out which ABI we are using.
- echo '#line 1971 "configure"' > conftest.$ac_ext
- if { (eval echo configure:1972: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ echo '#line 1982 "configure"' > conftest.$ac_ext
+ if { (eval echo configure:1983: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
case "`/usr/bin/file conftest.o`" in
*32-bit*)
LD="${LD-ld} -32"
SAVE_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -belf"
echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6
-echo "configure:1993: checking whether the C compiler needs -belf" >&5
+echo "configure:2004: checking whether the C compiler needs -belf" >&5
if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext <<EOF
-#line 2006 "configure"
+#line 2017 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:2013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
lt_cv_cc_needs_belf=yes
else
sh-*-linux*) fmt=elf em=linux ;;
sh-*-elf*) fmt=elf ;;
- sh-*-coff*) fmt=coff ;;
+ sh-*-coff*) fmt=coff bfd_gas=yes;;
sh-*-pe*) fmt=coff em=pe bfd_gas=yes;;
sh-*-rtemself*) fmt=elf ;;
- sh-*-rtems*) fmt=coff ;;
+ sh-*-rtems*) fmt=coff bfd_gas=yes;;
ns32k-pc532-mach* | ns32k-pc532-ux*) fmt=aout em=pc532mach ;;
ns32k-pc532-netbsd* | ns32k-pc532-lites*) fmt=aout em=nbsd532 ;;
ia64*-*) bfd_gas=yes ;;
mips-*) bfd_gas=yes ;;
ns32k-*) bfd_gas=yes ;;
+ pdp11-*) bfd_gas=yes ;;
ppc-*) bfd_gas=yes ;;
sparc-*) bfd_gas=yes ;;
strongarm-*) bfd_gas=yes ;;
# is emulated.
case ${target_cpu} in
vax | tahoe ) atof=${target_cpu} ;;
+ pdp11) atof=vax ;;
*) atof=ieee ;;
esac
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3087: checking for $ac_word" >&5
+echo "configure:3100: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3117: checking for $ac_word" >&5
+echo "configure:3130: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "cl", so it can be a program name with args.
set dummy cl; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3168: checking for $ac_word" >&5
+echo "configure:3181: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:3200: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:3213: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
cat > conftest.$ac_ext << EOF
-#line 3211 "configure"
+#line 3224 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
-if { (eval echo configure:3216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:3242: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:3255: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:3247: checking whether we are using GNU C" >&5
+echo "configure:3260: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:3256: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:3269: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:3275: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:3288: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3312: checking for $ac_word" >&5
+echo "configure:3325: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_YACC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
test -n "$YACC" || YACC="yacc"
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:3343: checking how to run the C preprocessor" >&5
+echo "configure:3356: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 3358 "configure"
+#line 3371 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3364: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3377: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 3375 "configure"
+#line 3388 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3381: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3394: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
rm -rf conftest*
CPP="${CC-cc} -nologo -E"
cat > conftest.$ac_ext <<EOF
-#line 3392 "configure"
+#line 3405 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3398: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3411: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3428: checking for $ac_word" >&5
+echo "configure:3441: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "flex", so it can be a program name with args.
set dummy flex; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3461: checking for $ac_word" >&5
+echo "configure:3474: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LEX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
*) ac_lib=l ;;
esac
echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
-echo "configure:3495: checking for yywrap in -l$ac_lib" >&5
+echo "configure:3508: checking for yywrap in -l$ac_lib" >&5
ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-l$ac_lib $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3503 "configure"
+#line 3516 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
yywrap()
; return 0; }
EOF
-if { (eval echo configure:3514: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
echo $ac_n "checking lex output file root""... $ac_c" 1>&6
-echo "configure:3537: checking lex output file root" >&5
+echo "configure:3550: checking lex output file root" >&5
if eval "test \"`echo '$''{'ac_cv_prog_lex_root'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root
echo $ac_n "checking whether yytext is a pointer""... $ac_c" 1>&6
-echo "configure:3558: checking whether yytext is a pointer" >&5
+echo "configure:3571: checking whether yytext is a pointer" >&5
if eval "test \"`echo '$''{'ac_cv_prog_lex_yytext_pointer'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
LIBS="$LIBS $LEXLIB"
cat > conftest.$ac_ext <<EOF
-#line 3570 "configure"
+#line 3583 "configure"
#include "confdefs.h"
`cat $LEX_OUTPUT_ROOT.c`
int main() {
; return 0; }
EOF
-if { (eval echo configure:3577: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_prog_lex_yytext_pointer=yes
else
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3603: checking for $ac_word" >&5
+echo "configure:3616: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fi
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3631: checking for ANSI C header files" >&5
+echo "configure:3644: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3636 "configure"
+#line 3649 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3644: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3657: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 3661 "configure"
+#line 3674 "configure"
#include "confdefs.h"
#include <string.h>
EOF
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 3679 "configure"
+#line 3692 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
:
else
cat > conftest.$ac_ext <<EOF
-#line 3700 "configure"
+#line 3713 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
exit (0); }
EOF
-if { (eval echo configure:3711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
fi
echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:3735: checking for working const" >&5
+echo "configure:3748: checking for working const" >&5
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3740 "configure"
+#line 3753 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:3789: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3802: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_const=yes
else
fi
echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:3810: checking for inline" >&5
+echo "configure:3823: checking for inline" >&5
if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do
cat > conftest.$ac_ext <<EOF
-#line 3817 "configure"
+#line 3830 "configure"
#include "confdefs.h"
int main() {
} $ac_kw foo() {
; return 0; }
EOF
-if { (eval echo configure:3824: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3837: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_inline=$ac_kw; break
else
esac
echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:3850: checking for off_t" >&5
+echo "configure:3863: checking for off_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3855 "configure"
+#line 3868 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
fi
echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:3883: checking for size_t" >&5
+echo "configure:3896: checking for size_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3888 "configure"
+#line 3901 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
# for constant arguments. Useless!
echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:3918: checking for working alloca.h" >&5
+echo "configure:3931: checking for working alloca.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3923 "configure"
+#line 3936 "configure"
#include "confdefs.h"
#include <alloca.h>
int main() {
char *p = alloca(2 * sizeof(int));
; return 0; }
EOF
-if { (eval echo configure:3930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3943: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_header_alloca_h=yes
else
fi
echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:3951: checking for alloca" >&5
+echo "configure:3964: checking for alloca" >&5
if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3956 "configure"
+#line 3969 "configure"
#include "confdefs.h"
#ifdef __GNUC__
char *p = (char *) alloca(1);
; return 0; }
EOF
-if { (eval echo configure:3984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3997: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_func_alloca_works=yes
else
echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:4016: checking whether alloca needs Cray hooks" >&5
+echo "configure:4029: checking whether alloca needs Cray hooks" >&5
if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4021 "configure"
+#line 4034 "configure"
#include "confdefs.h"
#if defined(CRAY) && ! defined(CRAY2)
webecray
if test $ac_cv_os_cray = yes; then
for ac_func in _getb67 GETB67 getb67; do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4046: checking for $ac_func" >&5
+echo "configure:4059: checking for $ac_func" >&5
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 4051 "configure"
+#line 4064 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:4074: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
fi
echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:4101: checking stack direction for C alloca" >&5
+echo "configure:4114: checking stack direction for C alloca" >&5
if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_stack_direction=0
else
cat > conftest.$ac_ext <<EOF
-#line 4109 "configure"
+#line 4122 "configure"
#include "confdefs.h"
find_stack_direction ()
{
exit (find_stack_direction() < 0);
}
EOF
-if { (eval echo configure:4128: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4141: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_c_stack_direction=1
else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4153: checking for $ac_hdr" >&5
+echo "configure:4166: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4158 "configure"
+#line 4171 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4163: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4176: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
for ac_func in getpagesize
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4192: checking for $ac_func" >&5
+echo "configure:4205: checking for $ac_func" >&5
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 4197 "configure"
+#line 4210 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:4220: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4233: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
done
echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:4245: checking for working mmap" >&5
+echo "configure:4258: checking for working mmap" >&5
if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_func_mmap_fixed_mapped=no
else
cat > conftest.$ac_ext <<EOF
-#line 4253 "configure"
+#line 4266 "configure"
#include "confdefs.h"
/* Thanks to Mike Haertel and Jim Avera for this test.
}
EOF
-if { (eval echo configure:4393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4406: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_fixed_mapped=yes
else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4421: checking for $ac_hdr" >&5
+echo "configure:4434: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4426 "configure"
+#line 4439 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4431: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4444: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
__argz_count __argz_stringify __argz_next
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4461: checking for $ac_func" >&5
+echo "configure:4474: checking for $ac_func" >&5
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 4466 "configure"
+#line 4479 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:4489: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4502: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
for ac_func in stpcpy
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4518: checking for $ac_func" >&5
+echo "configure:4531: checking for $ac_func" >&5
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 4523 "configure"
+#line 4536 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:4546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
if test $ac_cv_header_locale_h = yes; then
echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:4580: checking for LC_MESSAGES" >&5
+echo "configure:4593: checking for LC_MESSAGES" >&5
if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4585 "configure"
+#line 4598 "configure"
#include "confdefs.h"
#include <locale.h>
int main() {
return LC_MESSAGES
; return 0; }
EOF
-if { (eval echo configure:4592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
am_cv_val_LC_MESSAGES=yes
else
fi
fi
echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:4613: checking whether NLS is requested" >&5
+echo "configure:4626: checking whether NLS is requested" >&5
# Check whether --enable-nls or --disable-nls was given.
if test "${enable_nls+set}" = set; then
enableval="$enable_nls"
EOF
echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:4633: checking whether included gettext is requested" >&5
+echo "configure:4646: checking whether included gettext is requested" >&5
# Check whether --with-included-gettext or --without-included-gettext was given.
if test "${with_included_gettext+set}" = set; then
withval="$with_included_gettext"
ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:4652: checking for libintl.h" >&5
+echo "configure:4665: checking for libintl.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4657 "configure"
+#line 4670 "configure"
#include "confdefs.h"
#include <libintl.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4662: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:4675: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6
-echo "configure:4679: checking for gettext in libc" >&5
+echo "configure:4692: checking for gettext in libc" >&5
if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4684 "configure"
+#line 4697 "configure"
#include "confdefs.h"
#include <libintl.h>
int main() {
return (int) gettext ("")
; return 0; }
EOF
-if { (eval echo configure:4691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4704: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gt_cv_func_gettext_libc=yes
else
if test "$gt_cv_func_gettext_libc" != "yes"; then
echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6
-echo "configure:4707: checking for bindtextdomain in -lintl" >&5
+echo "configure:4720: checking for bindtextdomain in -lintl" >&5
ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lintl $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 4715 "configure"
+#line 4728 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
bindtextdomain()
; return 0; }
EOF
-if { (eval echo configure:4726: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4739: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6
-echo "configure:4742: checking for gettext in libintl" >&5
+echo "configure:4755: checking for gettext in libintl" >&5
if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4747 "configure"
+#line 4760 "configure"
#include "confdefs.h"
int main() {
return (int) gettext ("")
; return 0; }
EOF
-if { (eval echo configure:4754: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gt_cv_func_gettext_libintl=yes
else
# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4782: checking for $ac_word" >&5
+echo "configure:4795: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
for ac_func in dcgettext
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4816: checking for $ac_func" >&5
+echo "configure:4829: checking for $ac_func" >&5
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 4821 "configure"
+#line 4834 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:4844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
# Extract the first word of "gmsgfmt", so it can be a program name with args.
set dummy gmsgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4871: checking for $ac_word" >&5
+echo "configure:4884: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4907: checking for $ac_word" >&5
+echo "configure:4920: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fi
cat > conftest.$ac_ext <<EOF
-#line 4939 "configure"
+#line 4952 "configure"
#include "confdefs.h"
int main() {
return _nl_msg_cat_cntr
; return 0; }
EOF
-if { (eval echo configure:4947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
CATOBJEXT=.gmo
DATADIRNAME=share
# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4979: checking for $ac_word" >&5
+echo "configure:4992: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "gmsgfmt", so it can be a program name with args.
set dummy gmsgfmt; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5013: checking for $ac_word" >&5
+echo "configure:5026: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "xgettext", so it can be a program name with args.
set dummy xgettext; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5049: checking for $ac_word" >&5
+echo "configure:5062: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
LINGUAS=
else
echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:5139: checking for catalogs to be installed" >&5
+echo "configure:5152: checking for catalogs to be installed" >&5
NEW_LINGUAS=
for lang in ${LINGUAS=$ALL_LINGUAS}; do
case "$ALL_LINGUAS" in
if test "$CATOBJEXT" = ".cat"; then
ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6
-echo "configure:5167: checking for linux/version.h" >&5
+echo "configure:5180: checking for linux/version.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5172 "configure"
+#line 5185 "configure"
#include "confdefs.h"
#include <linux/version.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5177: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5190: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6
-echo "configure:5240: checking whether to enable maintainer-specific portions of Makefiles" >&5
+echo "configure:5253: checking whether to enable maintainer-specific portions of Makefiles" >&5
# Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
if test "${enable_maintainer_mode+set}" = set; then
enableval="$enable_maintainer_mode"
echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:5265: checking for executable suffix" >&5
+echo "configure:5278: checking for executable suffix" >&5
if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
rm -f conftest*
echo 'int main () { return 0; }' > conftest.$ac_ext
ac_cv_exeext=
- if { (eval echo configure:5275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+ if { (eval echo configure:5288: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
for file in conftest.*; do
case $file in
- *.c | *.o | *.obj) ;;
+ *.c | *.o | *.obj | *.ilk | *.pdb) ;;
*) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
esac
done
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5300: checking for $ac_hdr" >&5
+echo "configure:5313: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5305 "configure"
+#line 5318 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5310: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5323: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
# Put this here so that autoconf's "cross-compiling" message doesn't confuse
# people who are not cross-compiling but are compiling cross-assemblers.
echo $ac_n "checking whether compiling a cross-assembler""... $ac_c" 1>&6
-echo "configure:5340: checking whether compiling a cross-assembler" >&5
+echo "configure:5353: checking whether compiling a cross-assembler" >&5
if test "${host}" = "${target}"; then
cross_gas=no
else
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
# for constant arguments. Useless!
echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:5355: checking for working alloca.h" >&5
+echo "configure:5368: checking for working alloca.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5360 "configure"
+#line 5373 "configure"
#include "confdefs.h"
#include <alloca.h>
int main() {
char *p = alloca(2 * sizeof(int));
; return 0; }
EOF
-if { (eval echo configure:5367: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5380: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_header_alloca_h=yes
else
fi
echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:5388: checking for alloca" >&5
+echo "configure:5401: checking for alloca" >&5
if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5393 "configure"
+#line 5406 "configure"
#include "confdefs.h"
#ifdef __GNUC__
char *p = (char *) alloca(1);
; return 0; }
EOF
-if { (eval echo configure:5421: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
ac_cv_func_alloca_works=yes
else
echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:5453: checking whether alloca needs Cray hooks" >&5
+echo "configure:5466: checking whether alloca needs Cray hooks" >&5
if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5458 "configure"
+#line 5471 "configure"
#include "confdefs.h"
#if defined(CRAY) && ! defined(CRAY2)
webecray
if test $ac_cv_os_cray = yes; then
for ac_func in _getb67 GETB67 getb67; do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5483: checking for $ac_func" >&5
+echo "configure:5496: checking for $ac_func" >&5
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 5488 "configure"
+#line 5501 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:5511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5524: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
fi
echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:5538: checking stack direction for C alloca" >&5
+echo "configure:5551: checking stack direction for C alloca" >&5
if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_stack_direction=0
else
cat > conftest.$ac_ext <<EOF
-#line 5546 "configure"
+#line 5559 "configure"
#include "confdefs.h"
find_stack_direction ()
{
exit (find_stack_direction() < 0);
}
EOF
-if { (eval echo configure:5565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_c_stack_direction=1
else
fi
echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:5587: checking for inline" >&5
+echo "configure:5600: checking for inline" >&5
if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do
cat > conftest.$ac_ext <<EOF
-#line 5594 "configure"
+#line 5607 "configure"
#include "confdefs.h"
int main() {
} $ac_kw foo() {
; return 0; }
EOF
-if { (eval echo configure:5601: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5614: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_inline=$ac_kw; break
else
for ac_func in unlink remove
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5631: checking for $ac_func" >&5
+echo "configure:5644: checking for $ac_func" >&5
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 5636 "configure"
+#line 5649 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:5659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5672: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
for ac_func in sbrk
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:5688: checking for $ac_func" >&5
+echo "configure:5701: checking for $ac_func" >&5
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 5693 "configure"
+#line 5706 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:5716: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5729: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
;;
*-ncr-sysv4.3*)
echo $ac_n "checking for _mwvalidcheckl in -lmw""... $ac_c" 1>&6
-echo "configure:5751: checking for _mwvalidcheckl in -lmw" >&5
+echo "configure:5764: checking for _mwvalidcheckl in -lmw" >&5
ac_lib_var=`echo mw'_'_mwvalidcheckl | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lmw $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5759 "configure"
+#line 5772 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
_mwvalidcheckl()
; return 0; }
EOF
-if { (eval echo configure:5770: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5783: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:5791: checking for main in -lm" >&5
+echo "configure:5804: checking for main in -lm" >&5
ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5799 "configure"
+#line 5812 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:5806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
;;
*)
echo $ac_n "checking for main in -lm""... $ac_c" 1>&6
-echo "configure:5829: checking for main in -lm" >&5
+echo "configure:5842: checking for main in -lm" >&5
ac_lib_var=`echo m'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 5837 "configure"
+#line 5850 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:5844: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
# enough, but on some of those systems, the assert macro relies on requoting
# working properly!
echo $ac_n "checking for working assert macro""... $ac_c" 1>&6
-echo "configure:5875: checking for working assert macro" >&5
+echo "configure:5888: checking for working assert macro" >&5
if eval "test \"`echo '$''{'gas_cv_assert_ok'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5880 "configure"
+#line 5893 "configure"
#include "confdefs.h"
#include <assert.h>
#include <stdio.h>
; return 0; }
EOF
-if { (eval echo configure:5896: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5909: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gas_cv_assert_ok=yes
else
"
echo $ac_n "checking whether declaration is required for strstr""... $ac_c" 1>&6
-echo "configure:5937: checking whether declaration is required for strstr" >&5
+echo "configure:5950: checking whether declaration is required for strstr" >&5
if eval "test \"`echo '$''{'gas_cv_decl_needed_strstr'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5942 "configure"
+#line 5955 "configure"
#include "confdefs.h"
$gas_test_headers
int main() {
; return 0; }
EOF
-if { (eval echo configure:5953: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5966: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gas_cv_decl_needed_strstr=no
else
echo $ac_n "checking whether declaration is required for malloc""... $ac_c" 1>&6
-echo "configure:5974: checking whether declaration is required for malloc" >&5
+echo "configure:5987: checking whether declaration is required for malloc" >&5
if eval "test \"`echo '$''{'gas_cv_decl_needed_malloc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 5979 "configure"
+#line 5992 "configure"
#include "confdefs.h"
$gas_test_headers
int main() {
; return 0; }
EOF
-if { (eval echo configure:5990: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6003: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gas_cv_decl_needed_malloc=no
else
echo $ac_n "checking whether declaration is required for free""... $ac_c" 1>&6
-echo "configure:6011: checking whether declaration is required for free" >&5
+echo "configure:6024: checking whether declaration is required for free" >&5
if eval "test \"`echo '$''{'gas_cv_decl_needed_free'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6016 "configure"
+#line 6029 "configure"
#include "confdefs.h"
$gas_test_headers
int main() {
; return 0; }
EOF
-if { (eval echo configure:6027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6040: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gas_cv_decl_needed_free=no
else
echo $ac_n "checking whether declaration is required for sbrk""... $ac_c" 1>&6
-echo "configure:6048: checking whether declaration is required for sbrk" >&5
+echo "configure:6061: checking whether declaration is required for sbrk" >&5
if eval "test \"`echo '$''{'gas_cv_decl_needed_sbrk'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6053 "configure"
+#line 6066 "configure"
#include "confdefs.h"
$gas_test_headers
int main() {
; return 0; }
EOF
-if { (eval echo configure:6064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6077: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gas_cv_decl_needed_sbrk=no
else
echo $ac_n "checking whether declaration is required for environ""... $ac_c" 1>&6
-echo "configure:6085: checking whether declaration is required for environ" >&5
+echo "configure:6098: checking whether declaration is required for environ" >&5
if eval "test \"`echo '$''{'gas_cv_decl_needed_environ'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6090 "configure"
+#line 6103 "configure"
#include "confdefs.h"
$gas_test_headers
int main() {
; return 0; }
EOF
-if { (eval echo configure:6101: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6114: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gas_cv_decl_needed_environ=no
else
# for it?
echo $ac_n "checking whether declaration is required for errno""... $ac_c" 1>&6
-echo "configure:6125: checking whether declaration is required for errno" >&5
+echo "configure:6138: checking whether declaration is required for errno" >&5
if eval "test \"`echo '$''{'gas_cv_decl_needed_errno'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 6130 "configure"
+#line 6143 "configure"
#include "confdefs.h"
#ifdef HAVE_ERRNO_H
; return 0; }
EOF
-if { (eval echo configure:6145: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6158: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
gas_cv_decl_needed_errno=no
else
sh-*-linux*) fmt=elf em=linux ;;
sh-*-elf*) fmt=elf ;;
- sh-*-coff*) fmt=coff ;;
+ sh-*-coff*) fmt=coff bfd_gas=yes;;
sh-*-pe*) fmt=coff em=pe bfd_gas=yes;;
sh-*-rtemself*) fmt=elf ;;
- sh-*-rtems*) fmt=coff ;;
+ sh-*-rtems*) fmt=coff bfd_gas=yes;;
ns32k-pc532-mach* | ns32k-pc532-ux*) fmt=aout em=pc532mach ;;
ns32k-pc532-netbsd* | ns32k-pc532-lites*) fmt=aout em=nbsd532 ;;
ia64*-*) bfd_gas=yes ;;
mips-*) bfd_gas=yes ;;
ns32k-*) bfd_gas=yes ;;
+ pdp11-*) bfd_gas=yes ;;
ppc-*) bfd_gas=yes ;;
sparc-*) bfd_gas=yes ;;
strongarm-*) bfd_gas=yes ;;
# is emulated.
case ${target_cpu} in
vax | tahoe ) atof=${target_cpu} ;;
+ pdp11) atof=vax ;;
*) atof=ieee ;;
esac
c-m68k.texi \
c-mips.texi \
c-ns32k.texi \
+ c-pdp11.texi \
c-pj.texi \
c-sh.texi \
c-sparc.texi \
c-m68k.texi \
c-mips.texi \
c-ns32k.texi \
+ c-pdp11.texi \
c-pj.texi \
c-sh.texi \
c-sparc.texi \
@set M680X0
@set MCORE
@set MIPS
+@set PDP11
@set PJ
@set SH
@set SPARC
@end table
@end ifset
+@ifset PDP11
+
+For details about the PDP-11 machine dependent features options,
+see @ref{PDP-11-Options}.
+
+@table @code
+@item -mpic | -mno-pic
+Generate position-independent (or position-dependent) code. The
+default is @code{-mpic}.
+
+@item -mall
+@itemx -mall-extensions
+Enable all instruction set extensions. This is the default.
+
+@item -mno-extensions
+Disable all instruction set extensions.
+
+@item -m@var{extension} | -mno-@var{extension}
+Enable (or disable) a particular instruction set extension.
+
+@item -m@var{cpu}
+Enable the instruction set extensions supported by a particular CPU, and
+disable all other extensions.
+
+@item -m@var{machine}
+Enable the instruction set extensions supported by a particular machine
+model, and disable all other extensions.
+@end table
+
+@end ifset
+
@ifset PJ
The following options are available when @value{AS} is configured for
a picoJava processor.
@ifset I960
@samp{#} on the i960;
@end ifset
+@ifset PDP11
+@samp{;} for the PDP-11;
+@end ifset
@ifset PJ
@samp{;} for picoJava;
@end ifset
@ifset SH
* SH-Dependent:: Hitachi SH Dependent Features
@end ifset
+@ifset PDP11
+* PDP-11-Dependent:: PDP-11 Dependent Features
+@end ifset
@ifset PJ
* PJ-Dependent:: picoJava Dependent Features
@end ifset
@include c-ns32k.texi
@end ifset
+@ifset PDP11
+@include c-pdp11.texi
+@end ifset
+
@ifset PJ
@include c-pj.texi
@end ifset
--- /dev/null
+@c Copyright (C) 2001 Free Software Foundation, Inc.
+@c This is part of the GAS manual.
+@c For copying conditions, see the file as.texinfo.
+@ifset GENERIC
+@page
+@node PDP-11-Dependent
+@chapter PDP-11 Dependent Features
+@end ifset
+@ifclear GENERIC
+@node Machine Dependencies
+@chapter PDP-11 Dependent Features
+@end ifclear
+
+@cindex PDP-11 support
+
+@menu
+* PDP-11-Options:: Options
+* PDP-11-Pseudos:: Assembler Directives
+* PDP-11-Syntax:: DEC Syntax versus BSD Syntax
+* PDP-11-Mnemonics:: Instruction Naming
+* PDP-11-Synthetic:: Synthetic Instructions
+@end menu
+
+@node PDP-11-Options
+@section Options
+
+@cindex options for PDP-11
+
+The PDP-11 version of @code{@value{AS}} has a rich set of machine
+dependent options.
+
+@subsection Code Generation Options
+
+@table @code
+@cindex -mpic
+@cindex -mno-pic
+@item -mpic | -mno-pic
+Generate position-independent (or position-dependent) code.
+
+The default is to generate position-independent code.
+@end table
+
+@subsection Instruction Set Extention Options
+
+These options enables or disables the use of extensions over the base
+line instruction set as introduced by the first PDP-11 CPU: the KA11.
+Most options come in two variants: a @code{-m}@var{extension} that
+enables @var{extension}, and a @code{-mno-}@var{extension} that disables
+@var{extension}.
+
+The default is to enable all extensions.
+
+@table @code
+@cindex -mall
+@cindex -mall-extensions
+@item -mall | -mall-extensions
+Enable all instruction set extensions.
+
+@cindex -mno-extensions
+@item -mno-extensions
+Disable all instruction set extensions.
+
+@cindex -mcis
+@cindex -mno-cis
+@item -mcis | -mno-cis
+Enable (or disable) the use of the commersial instruction set, which
+consists of these instructions: @code{ADDNI}, @code{ADDN}, @code{ADDPI},
+@code{ADDP}, @code{ASHNI}, @code{ASHN}, @code{ASHPI}, @code{ASHP},
+@code{CMPCI}, @code{CMPC}, @code{CMPNI}, @code{CMPN}, @code{CMPPI},
+@code{CMPP}, @code{CVTLNI}, @code{CVTLN}, @code{CVTLPI}, @code{CVTLP},
+@code{CVTNLI}, @code{CVTNL}, @code{CVTNPI}, @code{CVTNP}, @code{CVTPLI},
+@code{CVTPL}, @code{CVTPNI}, @code{CVTPN}, @code{DIVPI}, @code{DIVP},
+@code{L2DR}, @code{L3DR}, @code{LOCCI}, @code{LOCC}, @code{MATCI},
+@code{MATC}, @code{MOVCI}, @code{MOVC}, @code{MOVRCI}, @code{MOVRC},
+@code{MOVTCI}, @code{MOVTC}, @code{MULPI}, @code{MULP}, @code{SCANCI},
+@code{SCANC}, @code{SKPCI}, @code{SKPC}, @code{SPANCI}, @code{SPANC},
+@code{SUBNI}, @code{SUBN}, @code{SUBPI}, and @code{SUBP}.
+
+@cindex -mcsm
+@cindex -mno-csm
+@item -mcsm | -mno-csm
+Enable (or disable) the use of the @code{CSM} instruction.
+
+@cindex -meis
+@cindex -mno-eis
+@item -meis | -mno-eis
+Enable (or disable) the use of the extended instruction set, which
+consists of these instructions: @code{ASHC}, @code{ASH}, @code{DIV},
+@code{MARK}, @code{MUL}, @code{RTT}, @code{SOB} @code{SXT}, and
+@code{XOR}.
+
+@cindex -mfis
+@cindex -mno-fis
+@cindex -mkev11
+@cindex -mkev11
+@cindex -mno-kev11
+@item -mfis | -mkev11
+@itemx -mno-fis | -mno-kev11
+Enable (or diasble) the use of the KEV11 floating-point instructions:
+@code{FADD}, @code{FDIV}, @code{FMUL}, and @code{FSUB}.
+
+@cindex -mfpp
+@cindex -mno-fpp
+@cindex -mfpu
+@cindex -mno-fpu
+@cindex -mfp-11
+@cindex -mno-fp-11
+@item -mfpp | -mfpu | -mfp-11
+@itemx -mno-fpp | -mno-fpu | -mno-fp-11
+Enable (or disable) the use of FP-11 floating-point instructions:
+@code{ABSF}, @code{ADDF}, @code{CFCC}, @code{CLRF}, @code{CMPF},
+@code{DIVF}, @code{LDCFF}, @code{LDCIF}, @code{LDEXP}, @code{LDF},
+@code{LDFPS}, @code{MODF}, @code{MULF}, @code{NEGF}, @code{SETD},
+@code{SETF}, @code{SETI}, @code{SETL}, @code{STCFF}, @code{STCFI},
+@code{STEXP}, @code{STF}, @code{STFPS}, @code{STST}, @code{SUBF}, and
+@code{TSTF}.
+
+@cindex -mlimited-eis
+@cindex -mno-limited-eis
+@item -mlimited-eis | -mno-limited-eis
+Enable (or disable) the use of the limited extended instruction set:
+@code{MARK}, @code{RTT}, @code{SOB}, @code{SXT}, and @code{XOR}.
+
+The -mno-limited-eis options also implies -mno-eis.
+
+@cindex -mmfpt
+@cindex -mno-mfpt
+@item -mmfpt | -mno-mfpt
+Enable (or disable) the use of the @code{MFPT} instruction.
+
+@cindex -mmutiproc
+@cindex -mno-mutiproc
+@item -mmultiproc | -mno-multiproc
+Enable (or disable) the use of multiprocessor instructions: @code{TSTSET} and
+@code{WRTLCK}.
+
+@cindex -mmxps
+@cindex -mno-mxps
+@item -mmxps | -mno-mxps
+Enable (or disable) the use of the @code{MFPS} and @code{MTPS} instructions.
+
+@cindex -mspl
+@cindex -mno-spl
+@item -mspl | -mno-spl
+Enable (or disable) the use of the @code{SPL} instruction.
+
+@cindex -mmicrocode
+@cindex -mno-microcode
+Enable (or disable) the use of the microcode instructions: @code{LDUB},
+@code{MED}, and @code{XFC}.
+@end table
+
+@subsection CPU Model Options
+
+These options enable the instruction set extensions supported by a
+particular CPU, and disables all other extensions.
+
+@table @code
+@cindex -mka11
+@item -mka11
+KA11 CPU. Base line instruction set only.
+
+@cindex -mkb11
+@item -mkb11
+KB11 CPU. Enable extended instruction set and @code{SPL}.
+
+@cindex -mkd11a
+@item -mkd11a
+KD11-A CPU. Enable limited extended instruction set.
+
+@cindex -mkd11b
+@item -mkd11b
+KD11-B CPU. Base line instruction set only.
+
+@cindex -mkd11d
+@item -mkd11d
+KD11-D CPU. Base line instruction set only.
+
+@cindex -mkd11e
+@item -mkd11e
+KD11-E CPU. Enable extended instruction set, @code{MFPS}, and @code{MTPS}.
+
+@cindex -mkd11f
+@cindex -mkd11h
+@cindex -mkd11q
+@item -mkd11f | -mkd11h | -mkd11q
+KD11-F, KD11-H, or KD11-Q CPU. Enable limited extended instruction set,
+@code{MFPS}, and @code{MTPS}.
+
+@cindex -mkd11k
+@item -mkd11k
+KD11-K CPU. Enable extended instruction set, @code{LDUB}, @code{MED},
+@code{MFPS}, @code{MFPT}, @code{MTPS}, and @code{XFC}.
+
+@cindex -mkd11z
+@item -mkd11z
+KD11-Z CPU. Enable extended instruction set, @code{CSM}, @code{MFPS},
+@code{MFPT}, @code{MTPS}, and @code{SPL}.
+
+@cindex -mf11
+@item -mf11
+F11 CPU. Enable extended instruction set, @code{MFPS}, @code{MFPT}, and
+@code{MTPS}.
+
+@cindex -mj11
+@item -mj11
+J11 CPU. Enable extended instruction set, @code{CSM}, @code{MFPS},
+@code{MFPT}, @code{MTPS}, @code{SPL}, @code{TSTSET}, and @code{WRTLCK}.
+
+@cindex -mt11
+@item -mt11
+T11 CPU. Enable limited extended instruction set, @code{MFPS}, and
+@code{MTPS}.
+@end table
+
+@subsection Machine Model Options
+
+These options enable the instruction set extensions supported by a
+particular machine model, and disables all other extensions.
+
+@table @code
+@cindex -m11/03
+@item -m11/03
+Same as @code{-mkd11f}.
+
+@cindex -m11/04
+@item -m11/04
+Same as @code{-mkd11d}.
+
+@cindex -m11/05
+@cindex -m11/10
+@item -m11/05 | -m11/10
+Same as @code{-mkd11b}.
+
+@cindex -m11/15
+@cindex -m11/20
+@item -m11/15 | -m11/20
+Same as @code{-mka11}.
+
+@cindex -m11/21
+@item -m11/21
+Same as @code{-mt11}.
+
+@cindex -m11/23
+@cindex -m11/24
+@item -m11/23 | -m11/24
+Same as @code{-mf11}.
+
+@cindex -m11/34
+@item -m11/34
+Same as @code{-mkd11e}.
+
+@cindex -m11/34a
+@item -m11/34a
+Ame as @code{-mkd11e} @code{-mfpp}.
+
+@cindex -m11/35
+@cindex -m11/40
+@item -m11/35 | -m11/40
+Same as @code{-mkd11a}.
+
+@cindex -m11/44
+@item -m11/44
+Same as @code{-mkd11z}.
+
+@cindex -m11/45
+@cindex -m11/50
+@cindex -m11/55
+@cindex -m11/70
+@item -m11/45 | -m11/50 | -m11/55 | -m11/70
+Same as @code{-mkb11}.
+
+@cindex -m11/53
+@cindex -m11/73
+@cindex -m11/83
+@cindex -m11/84
+@cindex -m11/93
+@cindex -m11/94
+@item -m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94
+Same as @code{-mj11}.
+
+@cindex -m11/60
+@item -m11/60
+Same as @code{-mkd11k}.
+@end table
+
+@node PDP-11-Pseudos
+@section Assembler Directives
+
+The PDP-11 version of @code{@value{AS}} has a few machine
+dependent assembler directives.
+
+@table @code
+@item .bss
+Switch to the @code{bss} section.
+
+@item .even
+Align the location counter to an even number.
+@end table
+
+@node PDP-11-Syntax
+@section PDP-11 Assembly Language Syntax
+
+@cindex PDP-11 syntax
+
+@cindex DEC syntax
+@cindex BSD syntax
+@code{@value{AS}} supports both DEC syntax and BSD syntax. The only
+difference is that in DEC syntax, a @code{#} character is used to denote
+an immediate constants, while in BSD syntax the character for this
+purpose is @code{$}.
+
+@cindex PDP-11 general-purpose register syntax
+eneral-purpose registers are named @code{r0} through @code{r7}.
+Mnemonic alternatives for @code{r6} and @code{r7} are @code{sp} and
+@code{pc}, respectively.
+
+@cindex PDP-11 floating-point register syntax
+Floating-point registers are named @code{ac0} through @code{ac3}, or
+alternatively @code{fr0} through @code{fr3}.
+
+@cindex PDP-11 comments
+Comments are started with a @code{#} or a @code{/} character, and extend
+to the end of the line. (FIXME: clash with immediates?)
+
+@node PDP-11-Mnemonics
+@section Instruction Naming
+
+@cindex PDP-11 instruction naming
+
+Some instructions have alternative names.
+
+@table @code
+@item BCC
+@code{BHIS}
+
+@item BCS
+@code{BLO}
+
+@item L2DR
+@code{L2D}
+
+@item L3DR
+@code{L3D}
+
+@item SYS
+@code{TRAP}
+@end table
+
+@node PDP-11-Synthetic
+@section Synthetic Instructions
+
+The @code{JBR} and @code{J}@var{CC} synthetic instructions are not
+supported yet.
config/tc-mn10300.h
config/tc-ns32k.c
config/tc-ns32k.h
+config/tc-pdp11.c
+config/tc-pdp11.h
config/tc-pj.c
config/tc-pj.h
config/tc-ppc.c
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-02-09 16:34-0800\n"
+"POT-Creation-Date: 2001-02-18 15:18-0800\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"
msgid "No 'bal' entry point for leafproc %s"
msgstr ""
-#: config/obj-coff.c:4255 write.c:2575
+#: config/obj-coff.c:4255 write.c:2589
#, c-format
msgid "Negative of non-absolute symbol %s"
msgstr ""
-#: config/obj-coff.c:4276 write.c:2589
+#: config/obj-coff.c:4276 write.c:2603
msgid "callj to difference of 2 symbols"
msgstr ""
#. This is a COBR instruction. They have only a 13-bit
#. displacement and are only to be used for local branches:
#. flag as error, don't generate relocation.
-#: config/obj-coff.c:4411 config/tc-i960.c:3234 write.c:2733
+#: config/obj-coff.c:4411 config/tc-i960.c:3234 write.c:2747
msgid "can't use COBR format with external label"
msgstr ""
msgid "Value of %ld too large for field of %d bytes at 0x%lx"
msgstr ""
-#: config/obj-coff.c:4504 write.c:2823
+#: config/obj-coff.c:4504 write.c:2837
#, c-format
msgid "Signed .word overflow; switch may be too large; %ld at 0x%lx"
msgstr ""
msgid "syntax error"
msgstr ""
-#: config/tc-alpha.c:1019 config/tc-arm.c:6629 config/tc-h8300.c:1373
+#: config/tc-alpha.c:1019 config/tc-arm.c:6643 config/tc-h8300.c:1373
#: config/tc-h8500.c:1197 config/tc-hppa.c:3990 config/tc-i860.c:931
#: config/tc-m68hc11.c:481 config/tc-m68k.c:4189 config/tc-m88k.c:1105
#: config/tc-ns32k.c:1663 config/tc-sparc.c:2830 config/tc-z8k.c:1324
msgid "type %d reloc done?\n"
msgstr ""
-#: config/tc-alpha.c:1374 config/tc-alpha.c:1381 config/tc-mips.c:7356
+#: config/tc-alpha.c:1374 config/tc-alpha.c:1381 config/tc-mips.c:7372
msgid "Used $at without \".set noat\""
msgstr ""
msgid "Chose GP value of %lx\n"
msgstr ""
-#: config/tc-arc.c:1608 config/tc-arm.c:7532
+#: config/tc-arc.c:1608 config/tc-arm.c:7546
msgid "md_estimate_size_before_relax\n"
msgstr ""
msgid "Invalid syntax for .req directive."
msgstr ""
-#: config/tc-arm.c:1506 config/tc-mips.c:9916 read.c:2035
+#: config/tc-arm.c:1506 config/tc-mips.c:9936 read.c:2035
#, c-format
msgid "Alignment too large: %d. assumed."
msgstr ""
msgstr ""
#: config/tc-arm.c:2125 config/tc-arm.c:2578 config/tc-arm.c:3438
-#: config/tc-arm.c:4358
+#: config/tc-arm.c:4372
msgid "pre-indexed expression expected"
msgstr ""
#: config/tc-arm.c:2138 config/tc-arm.c:2591 config/tc-arm.c:3449
-#: config/tc-arm.c:4370 config/tc-arm.c:4716
+#: config/tc-arm.c:4384 config/tc-arm.c:4730
msgid "missing ]"
msgstr ""
msgid "Warning: Instruction unpredictable when using r15"
msgstr ""
-#: config/tc-arm.c:3063 config/tc-arm.c:3255 config/tc-arm.c:5503
-#: config/tc-arm.c:5536 config/tc-arm.c:5546
+#: config/tc-arm.c:3063 config/tc-arm.c:3255 config/tc-arm.c:5517
+#: config/tc-arm.c:5550 config/tc-arm.c:5560
msgid "immediate value out of range"
msgstr ""
msgid "Invalid immediate shift"
msgstr ""
-#: config/tc-arm.c:3930 config/tc-arm.c:4400
+#: config/tc-arm.c:3930 config/tc-arm.c:4414
msgid "Constant expression expected"
msgstr ""
msgid "Address expected"
msgstr ""
-#: config/tc-arm.c:4326 config/tc-arm.c:4341 config/tc-arm.c:4379
+#: config/tc-arm.c:4328 config/tc-arm.c:4359
+#, c-format
+msgid "Rn and Rd must be different in %s"
+msgstr ""
+
+#: config/tc-arm.c:4332 config/tc-arm.c:4348 config/tc-arm.c:4393
#, c-format
msgid "%s register same as write-back base"
msgstr ""
-#: config/tc-arm.c:4328 config/tc-arm.c:4343 config/tc-arm.c:4381
+#: config/tc-arm.c:4334 config/tc-arm.c:4350 config/tc-arm.c:4395
msgid "destination"
msgstr ""
-#: config/tc-arm.c:4328 config/tc-arm.c:4343 config/tc-arm.c:4381
+#: config/tc-arm.c:4334 config/tc-arm.c:4350 config/tc-arm.c:4395
msgid "source"
msgstr ""
-#: config/tc-arm.c:4420
+#: config/tc-arm.c:4434
msgid "literal pool insertion failed"
msgstr ""
-#: config/tc-arm.c:4459
+#: config/tc-arm.c:4473
msgid "Pre-increment instruction with translate"
msgstr ""
-#: config/tc-arm.c:4500
+#: config/tc-arm.c:4514
msgid "Bad range in register list"
msgstr ""
-#: config/tc-arm.c:4508 config/tc-arm.c:4517 config/tc-arm.c:4559
+#: config/tc-arm.c:4522 config/tc-arm.c:4531 config/tc-arm.c:4573
#, c-format
msgid "Warning: Duplicated register (r%d) in register list"
msgstr ""
-#: config/tc-arm.c:4520
+#: config/tc-arm.c:4534
msgid "Warning: Register range not in ascending order"
msgstr ""
-#: config/tc-arm.c:4532
+#: config/tc-arm.c:4546
msgid "Missing `}'"
msgstr ""
-#: config/tc-arm.c:4548
+#: config/tc-arm.c:4562
msgid "invalid register mask"
msgstr ""
-#: config/tc-arm.c:4569 config/tc-avr.c:852 config/tc-cris.c:2733
+#: config/tc-arm.c:4583 config/tc-avr.c:852 config/tc-cris.c:2733
#: config/tc-d10v.c:1560 config/tc-d30v.c:1865 config/tc-mips.c:3230
-#: config/tc-mips.c:4162 config/tc-mips.c:4947 config/tc-mips.c:5493
+#: config/tc-mips.c:4162 config/tc-mips.c:4963 config/tc-mips.c:5509
#: config/tc-ppc.c:4853 config/tc-v850.c:2385
msgid "expression too complex"
msgstr ""
-#: config/tc-arm.c:4608
+#: config/tc-arm.c:4622
msgid "r15 not allowed as base register"
msgstr ""
-#: config/tc-arm.c:4676 config/tc-arm.c:4690
+#: config/tc-arm.c:4690 config/tc-arm.c:4704
msgid "r15 not allowed in swap"
msgstr ""
-#: config/tc-arm.c:4788
+#: config/tc-arm.c:4802
msgid "Use of r15 in bx in ARM mode is not really useful"
msgstr ""
-#: config/tc-arm.c:5044 config/tc-v850.c:1959 config/tc-v850.c:1980
+#: config/tc-arm.c:5058 config/tc-v850.c:1959 config/tc-v850.c:1980
msgid "constant expression expected"
msgstr ""
-#: config/tc-arm.c:5050
+#: config/tc-arm.c:5064
msgid "Constant value required for number of registers"
msgstr ""
-#: config/tc-arm.c:5058
+#: config/tc-arm.c:5072
msgid "number of registers must be in the range [1:4]"
msgstr ""
-#: config/tc-arm.c:5119
+#: config/tc-arm.c:5133
msgid "R15 not allowed as base register with write-back"
msgstr ""
-#: config/tc-arm.c:5367
+#: config/tc-arm.c:5381
msgid "lo register required"
msgstr ""
-#: config/tc-arm.c:5375
+#: config/tc-arm.c:5389
msgid "hi register required"
msgstr ""
-#: config/tc-arm.c:5445
+#: config/tc-arm.c:5459
msgid "dest and source1 must be the same register"
msgstr ""
-#: config/tc-arm.c:5452
+#: config/tc-arm.c:5466
msgid "subtract valid only on lo regs"
msgstr ""
-#: config/tc-arm.c:5476
+#: config/tc-arm.c:5490
msgid "invalid Hi register with immediate"
msgstr ""
-#: config/tc-arm.c:5514
+#: config/tc-arm.c:5528
msgid "invalid immediate value for stack adjust"
msgstr ""
-#: config/tc-arm.c:5525
+#: config/tc-arm.c:5539
msgid "invalid immediate for address calculation"
msgstr ""
-#: config/tc-arm.c:5612
+#: config/tc-arm.c:5626
msgid "source1 and dest must be same register"
msgstr ""
-#: config/tc-arm.c:5646
+#: config/tc-arm.c:5660
msgid "Invalid immediate for shift"
msgstr ""
-#: config/tc-arm.c:5725
+#: config/tc-arm.c:5739
msgid "only lo regs allowed with immediate"
msgstr ""
-#: config/tc-arm.c:5744
+#: config/tc-arm.c:5758
msgid "invalid immediate"
msgstr ""
-#: config/tc-arm.c:5798
+#: config/tc-arm.c:5812
msgid "expected ']'"
msgstr ""
-#: config/tc-arm.c:5865
+#: config/tc-arm.c:5879
msgid "byte or halfword not valid for base register"
msgstr ""
-#: config/tc-arm.c:5870
+#: config/tc-arm.c:5884
msgid "R15 based store not allowed"
msgstr ""
-#: config/tc-arm.c:5875
+#: config/tc-arm.c:5889
msgid "Invalid base register for register offset"
msgstr ""
-#: config/tc-arm.c:5893
+#: config/tc-arm.c:5907
msgid "invalid offset"
msgstr ""
-#: config/tc-arm.c:5904
+#: config/tc-arm.c:5918
msgid "invalid base register in load/store"
msgstr ""
-#: config/tc-arm.c:5928
+#: config/tc-arm.c:5942
msgid "Invalid offset"
msgstr ""
-#: config/tc-arm.c:6003
+#: config/tc-arm.c:6017
msgid "dest and source1 one must be the same register"
msgstr ""
-#: config/tc-arm.c:6011
+#: config/tc-arm.c:6025
msgid "Rs and Rd must be different in MUL"
msgstr ""
-#: config/tc-arm.c:6155
+#: config/tc-arm.c:6169
msgid ""
"Inserted missing '!': load/store multiple always writes back base register"
msgstr ""
-#: config/tc-arm.c:6171 config/tc-arm.c:6271
+#: config/tc-arm.c:6185 config/tc-arm.c:6285
msgid "Expression too complex"
msgstr ""
-#: config/tc-arm.c:6177
+#: config/tc-arm.c:6191
msgid "only lo-regs valid in load/store multiple"
msgstr ""
-#: config/tc-arm.c:6223
+#: config/tc-arm.c:6237
msgid "Syntax: ldrs[b] Rd, [Rb, Ro]"
msgstr ""
-#: config/tc-arm.c:6287
+#: config/tc-arm.c:6301
msgid "invalid register list to push/pop instruction"
msgstr ""
-#: config/tc-arm.c:6429 config/tc-cris.c:664
+#: config/tc-arm.c:6443 config/tc-cris.c:664
msgid "Virtual memory exhausted"
msgstr ""
-#: config/tc-arm.c:6835
+#: config/tc-arm.c:6849
#, c-format
msgid "invalid constant (%lx) after fixup"
msgstr ""
-#: config/tc-arm.c:6871
+#: config/tc-arm.c:6885
#, c-format
msgid "Unable to compute ADRL instructions for PC offset of 0x%lx"
msgstr ""
-#: config/tc-arm.c:6901
+#: config/tc-arm.c:6915
#, c-format
msgid "bad immediate value for offset (%ld)"
msgstr ""
-#: config/tc-arm.c:6923 config/tc-arm.c:6945
+#: config/tc-arm.c:6937 config/tc-arm.c:6959
msgid "invalid literal constant: pool needs to be closer"
msgstr ""
-#: config/tc-arm.c:6925
+#: config/tc-arm.c:6939
#, c-format
msgid "bad immediate value for half-word offset (%ld)"
msgstr ""
-#: config/tc-arm.c:6962
+#: config/tc-arm.c:6976
msgid "shift expression is too large"
msgstr ""
-#: config/tc-arm.c:6981 config/tc-arm.c:6990
+#: config/tc-arm.c:6995 config/tc-arm.c:7004
msgid "Invalid swi expression"
msgstr ""
-#: config/tc-arm.c:7000
+#: config/tc-arm.c:7014
msgid "Invalid expression in load/store multiple"
msgstr ""
-#: config/tc-arm.c:7053
+#: config/tc-arm.c:7067
msgid "gas can't handle same-section branch dest >= 0x04000000"
msgstr ""
-#: config/tc-arm.c:7062
+#: config/tc-arm.c:7076
msgid "out of range branch"
msgstr ""
-#: config/tc-arm.c:7095 config/tc-arm.c:7111 config/tc-mips.c:9743
+#: config/tc-arm.c:7109 config/tc-arm.c:7125 config/tc-mips.c:9763
msgid "Branch out of range"
msgstr ""
-#: config/tc-arm.c:7134
+#: config/tc-arm.c:7148
msgid "Branch with link out of range"
msgstr ""
-#: config/tc-arm.c:7201
+#: config/tc-arm.c:7215
msgid "Illegal value for co-processor offset"
msgstr ""
-#: config/tc-arm.c:7225
+#: config/tc-arm.c:7239
#, c-format
msgid "Invalid offset, target not word aligned (0x%08X)"
msgstr ""
-#: config/tc-arm.c:7231 config/tc-arm.c:7240 config/tc-arm.c:7247
-#: config/tc-arm.c:7254 config/tc-arm.c:7261
+#: config/tc-arm.c:7245 config/tc-arm.c:7254 config/tc-arm.c:7261
+#: config/tc-arm.c:7268 config/tc-arm.c:7275
#, c-format
msgid "Invalid offset, value too big (0x%08lX)"
msgstr ""
-#: config/tc-arm.c:7300
+#: config/tc-arm.c:7314
msgid "Invalid immediate for stack address calculation"
msgstr ""
-#: config/tc-arm.c:7309
+#: config/tc-arm.c:7323
#, c-format
msgid "Invalid immediate for address calculation (value = 0x%08lX)"
msgstr ""
-#: config/tc-arm.c:7319
+#: config/tc-arm.c:7333
msgid "Invalid 8bit immediate"
msgstr ""
-#: config/tc-arm.c:7327
+#: config/tc-arm.c:7341
msgid "Invalid 3bit immediate"
msgstr ""
-#: config/tc-arm.c:7343
+#: config/tc-arm.c:7357
#, c-format
msgid "Invalid immediate: %ld is too large"
msgstr ""
-#: config/tc-arm.c:7358
+#: config/tc-arm.c:7372
#, c-format
msgid "Illegal Thumb shift value: %ld"
msgstr ""
-#: config/tc-arm.c:7372 config/tc-mn10300.c:1961
+#: config/tc-arm.c:7386 config/tc-mn10300.c:1961
#, c-format
msgid "Bad relocation fixup type (%d)"
msgstr ""
-#: config/tc-arm.c:7445
+#: config/tc-arm.c:7459
msgid "Literal referenced across section boundary (Implicit dump?)"
msgstr ""
-#: config/tc-arm.c:7458
+#: config/tc-arm.c:7472
#, c-format
msgid "Internal_relocation (type %d) not fixed up (IMMEDIATE)"
msgstr ""
-#: config/tc-arm.c:7464
+#: config/tc-arm.c:7478
msgid "ADRL used for a symbol not defined in the same file"
msgstr ""
-#: config/tc-arm.c:7469
+#: config/tc-arm.c:7483
#, c-format
msgid "Internal_relocation (type %d) not fixed up (OFFSET_IMM)"
msgstr ""
-#: config/tc-arm.c:7490 config/tc-cris.c:2672 config/tc-mcore.c:2109
+#: config/tc-arm.c:7504 config/tc-cris.c:2672 config/tc-mcore.c:2109
#: config/tc-ns32k.c:2369
msgid "<unknown>"
msgstr ""
-#: config/tc-arm.c:7493
+#: config/tc-arm.c:7507
#, c-format
msgid "Cannot represent %s relocation in this object file format"
msgstr ""
-#: config/tc-arm.c:7514 config/tc-mips.c:11261 config/tc-sh.c:3182
+#: config/tc-arm.c:7528 config/tc-mips.c:11281 config/tc-sh.c:3182
#, c-format
msgid "Can not represent %s relocation in this object file format"
msgstr ""
-#: config/tc-arm.c:7611
+#: config/tc-arm.c:7625
#, c-format
msgid "No operator -- statement `%s'\n"
msgstr ""
-#: config/tc-arm.c:7629
+#: config/tc-arm.c:7643
msgid "selected processor does not support this opcode"
msgstr ""
-#: config/tc-arm.c:7675
+#: config/tc-arm.c:7689
#, c-format
msgid "Opcode `%s' must have suffix from list: <%s>"
msgstr ""
-#: config/tc-arm.c:7706
+#: config/tc-arm.c:7720
msgid "Warning: Use of the 'nv' conditional is deprecated\n"
msgstr ""
-#: config/tc-arm.c:7723
+#: config/tc-arm.c:7737
#, c-format
msgid "Opcode `%s' is unconditional\n"
msgstr ""
-#: config/tc-arm.c:7747
+#: config/tc-arm.c:7761
#, c-format
msgid "Opcode `%s' must have suffix from <%s>\n"
msgstr ""
-#: config/tc-arm.c:7838
+#: config/tc-arm.c:7852
#, c-format
msgid "register '%s' does not exist\n"
msgstr ""
-#: config/tc-arm.c:7843
+#: config/tc-arm.c:7857
#, c-format
msgid "ignoring redefinition of register alias '%s'"
msgstr ""
-#: config/tc-arm.c:7849
+#: config/tc-arm.c:7863
#, c-format
msgid ""
"ignoring redefinition of register alias '%s' to non-existant register '%s'"
msgstr ""
-#: config/tc-arm.c:7853
+#: config/tc-arm.c:7867
msgid "ignoring incomplete .req pseuso op"
msgstr ""
-#: config/tc-arm.c:7860
+#: config/tc-arm.c:7874
#, c-format
msgid "bad instruction `%s'"
msgstr ""
-#: config/tc-arm.c:8035
+#: config/tc-arm.c:8049
#, c-format
msgid "Unrecognised APCS switch -m%s"
msgstr ""
-#: config/tc-arm.c:8192 config/tc-arm.c:8205 config/tc-arm.c:8218
-#: config/tc-arm.c:8231 config/tc-arm.c:8237
+#: config/tc-arm.c:8206 config/tc-arm.c:8219 config/tc-arm.c:8232
+#: config/tc-arm.c:8245 config/tc-arm.c:8251
#, c-format
msgid "Invalid architecture variant -m%s"
msgstr ""
-#: config/tc-arm.c:8244
+#: config/tc-arm.c:8258
#, c-format
msgid "Invalid processor variant -m%s"
msgstr ""
-#: config/tc-arm.c:8267
+#: config/tc-arm.c:8281
msgid ""
" ARM Specific Assembler Options:\n"
" -m[arm][<processor name>] select processor variant\n"
" -k generate PIC code.\n"
msgstr ""
-#: config/tc-arm.c:8279
+#: config/tc-arm.c:8293
msgid ""
" -mapcs-32, -mapcs-26 specify which ARM Procedure Calling Standard to "
"use\n"
" -mapcs-reentrant the code is position independent/reentrant\n"
msgstr ""
-#: config/tc-arm.c:8286
+#: config/tc-arm.c:8300
msgid " -moabi support the old ELF ABI\n"
msgstr ""
-#: config/tc-arm.c:8290
+#: config/tc-arm.c:8304
msgid ""
" -EB assemble code for a big endian cpu\n"
" -EL assemble code for a little endian cpu\n"
msgstr ""
-#: config/tc-arm.c:8443
+#: config/tc-arm.c:8457
#, c-format
msgid "%s: unexpected function type: %d"
msgstr ""
msgstr ""
#: config/tc-avr.c:372 config/tc-d10v.c:313 config/tc-d30v.c:366
-#: config/tc-mips.c:8789 config/tc-mn10200.c:375 config/tc-pj.c:356
+#: config/tc-mips.c:8805 config/tc-mn10200.c:375 config/tc-pj.c:356
#: config/tc-ppc.c:4518 config/tc-sh.c:2063 config/tc-v850.c:1291
msgid "bad call to md_atof"
msgstr ""
msgid "Instruction %s not allowed in a delay slot."
msgstr ""
-#: config/tc-fr30.c:380 config/tc-m32r.c:1556
+#: config/tc-fr30.c:381 config/tc-m32r.c:1557
msgid "Addend to unresolved symbol not on word boundary."
msgstr ""
-#: config/tc-fr30.c:538 config/tc-i960.c:772 config/tc-m32r.c:1864
+#: config/tc-fr30.c:539 config/tc-i960.c:772 config/tc-m32r.c:1866
msgid "Bad call to md_atof()"
msgstr ""
msgid "invalid operands"
msgstr ""
-#: config/tc-h8300.c:1250 config/tc-h8500.c:1104 config/tc-mips.c:7984
+#: config/tc-h8300.c:1250 config/tc-h8500.c:1104 config/tc-mips.c:8000
#: config/tc-sh.c:1882 config/tc-w65.c:740 config/tc-z8k.c:1205
msgid "unknown opcode"
msgstr ""
msgid "No memory for symbol name."
msgstr ""
-#: config/tc-i386.c:581
+#: config/tc-i386.c:599
#, c-format
msgid "%s shortened to %s"
msgstr ""
-#: config/tc-i386.c:636
+#: config/tc-i386.c:654
msgid "same type of prefix used twice"
msgstr ""
-#: config/tc-i386.c:654
+#: config/tc-i386.c:672
msgid "64bit mode not supported on this CPU."
msgstr ""
-#: config/tc-i386.c:658
+#: config/tc-i386.c:676
msgid "32bit mode not supported on this CPU."
msgstr ""
-#: config/tc-i386.c:691
+#: config/tc-i386.c:709
msgid "bad argument to syntax directive."
msgstr ""
-#: config/tc-i386.c:734
+#: config/tc-i386.c:753
#, c-format
msgid "no such architecture: `%s'"
msgstr ""
-#: config/tc-i386.c:739
+#: config/tc-i386.c:758
msgid "missing cpu architecture"
msgstr ""
-#: config/tc-i386.c:790 config/tc-i386.c:4492
+#: config/tc-i386.c:772
+#, c-format
+msgid "no such architecture modifier: `%s'"
+msgstr ""
+
+#: config/tc-i386.c:826 config/tc-i386.c:4571
msgid "Unknown architecture"
msgstr ""
-#: config/tc-i386.c:825 config/tc-i386.c:848 config/tc-m68k.c:3812
+#: config/tc-i386.c:861 config/tc-i386.c:884 config/tc-m68k.c:3812
#, c-format
msgid "Internal Error: Can't hash %s: %s"
msgstr ""
-#: config/tc-i386.c:1101
+#: config/tc-i386.c:1137
msgid "There are no unsigned pc-relative relocations"
msgstr ""
-#: config/tc-i386.c:1108 config/tc-i386.c:4639
+#: config/tc-i386.c:1144 config/tc-i386.c:4727
#, c-format
msgid "can not do %d byte pc-relative relocation"
msgstr ""
-#: config/tc-i386.c:1125
+#: config/tc-i386.c:1161
#, c-format
msgid "can not do %s %d byte relocation"
msgstr ""
-#: config/tc-i386.c:1234 config/tc-i386.c:1327
+#: config/tc-i386.c:1271 config/tc-i386.c:1364
#, c-format
msgid "no such instruction: `%s'"
msgstr ""
-#: config/tc-i386.c:1243
+#: config/tc-i386.c:1280
#, c-format
msgid "invalid character %s in mnemonic"
msgstr ""
-#: config/tc-i386.c:1250
+#: config/tc-i386.c:1287
msgid "expecting prefix; got nothing"
msgstr ""
-#: config/tc-i386.c:1252
+#: config/tc-i386.c:1289
msgid "expecting mnemonic; got nothing"
msgstr ""
-#: config/tc-i386.c:1270
+#: config/tc-i386.c:1307
#, c-format
msgid "redundant %s prefix"
msgstr ""
-#: config/tc-i386.c:1338
+#: config/tc-i386.c:1375
#, c-format
msgid "`%s' is not supported on `%s'"
msgstr ""
-#: config/tc-i386.c:1343
+#: config/tc-i386.c:1380
msgid "use .code16 to ensure correct addressing mode"
msgstr ""
-#: config/tc-i386.c:1351
+#: config/tc-i386.c:1388
#, c-format
msgid "expecting string instruction after `%s'"
msgstr ""
-#: config/tc-i386.c:1372
+#: config/tc-i386.c:1409
#, c-format
msgid "invalid character %s before operand %d"
msgstr ""
-#: config/tc-i386.c:1386
+#: config/tc-i386.c:1423
#, c-format
msgid "unbalanced parenthesis in operand %d."
msgstr ""
-#: config/tc-i386.c:1389
+#: config/tc-i386.c:1426
#, c-format
msgid "unbalanced brackets in operand %d."
msgstr ""
-#: config/tc-i386.c:1398
+#: config/tc-i386.c:1435
#, c-format
msgid "invalid character %s in operand %d"
msgstr ""
-#: config/tc-i386.c:1425
+#: config/tc-i386.c:1462
#, c-format
msgid "spurious operands; (%d operands/instruction max)"
msgstr ""
-#: config/tc-i386.c:1448
+#: config/tc-i386.c:1485
msgid "expecting operand after ','; got nothing"
msgstr ""
-#: config/tc-i386.c:1453
+#: config/tc-i386.c:1490
msgid "expecting operand before ','; got nothing"
msgstr ""
#. We found no match.
-#: config/tc-i386.c:1801
+#: config/tc-i386.c:1838
#, c-format
msgid "suffix or operands invalid for `%s'"
msgstr ""
-#: config/tc-i386.c:1812
+#: config/tc-i386.c:1849
#, c-format
msgid "indirect %s without `*'"
msgstr ""
#. Warn them that a data or address size prefix doesn't
#. affect assembly of the next line of code.
-#: config/tc-i386.c:1820
+#: config/tc-i386.c:1857
#, c-format
msgid "stand-alone `%s' prefix"
msgstr ""
-#: config/tc-i386.c:1856 config/tc-i386.c:1871
+#: config/tc-i386.c:1893 config/tc-i386.c:1908
msgid "`%s' operand %d must use `%%es' segment"
msgstr ""
-#: config/tc-i386.c:1886
+#: config/tc-i386.c:1923
msgid "Extended register `%%%s' available only in 64bit mode."
msgstr ""
#. Prohibit these changes in the 64bit mode, since
#. the lowering is more complicated.
-#: config/tc-i386.c:1957 config/tc-i386.c:2008 config/tc-i386.c:2023
-#: config/tc-i386.c:2051 config/tc-i386.c:2079
+#: config/tc-i386.c:1994 config/tc-i386.c:2045 config/tc-i386.c:2060
+#: config/tc-i386.c:2088 config/tc-i386.c:2116
msgid "Incorrect register `%%%s' used with`%c' suffix"
msgstr ""
-#: config/tc-i386.c:1963 config/tc-i386.c:2013 config/tc-i386.c:2084
+#: config/tc-i386.c:2000 config/tc-i386.c:2050 config/tc-i386.c:2121
msgid "using `%%%s' instead of `%%%s' due to `%c' suffix"
msgstr ""
-#: config/tc-i386.c:1976 config/tc-i386.c:1994 config/tc-i386.c:2038
-#: config/tc-i386.c:2065
+#: config/tc-i386.c:2013 config/tc-i386.c:2031 config/tc-i386.c:2075
+#: config/tc-i386.c:2102
msgid "`%%%s' not allowed with `%s%c'"
msgstr ""
-#: config/tc-i386.c:2125
+#: config/tc-i386.c:2162
msgid "no instruction mnemonic suffix given; can't determine immediate size"
msgstr ""
-#: config/tc-i386.c:2151
+#: config/tc-i386.c:2188
#, c-format
msgid ""
"no instruction mnemonic suffix given; can't determine immediate size %x %c"
msgstr ""
-#: config/tc-i386.c:2176
+#: config/tc-i386.c:2213
msgid ""
"no instruction mnemonic suffix given and no register operands; can't size "
"instruction"
msgstr ""
-#: config/tc-i386.c:2224
+#: config/tc-i386.c:2261
msgid "64bit operations available only in 64bit modes."
msgstr ""
#. Reversed arguments on faddp, fsubp, etc.
-#: config/tc-i386.c:2292
+#: config/tc-i386.c:2329
msgid "translating to `%s %%%s,%%%s'"
msgstr ""
#. Extraneous `l' suffix on fp insn.
-#: config/tc-i386.c:2299
+#: config/tc-i386.c:2336
msgid "translating to `%s %%%s'"
msgstr ""
-#: config/tc-i386.c:2572
+#: config/tc-i386.c:2609
msgid "you can't `pop %%cs'"
msgstr ""
#. UnixWare fsub no args is alias for fsubp, fadd -> faddp, etc.
-#: config/tc-i386.c:2605
+#: config/tc-i386.c:2642
#, c-format
msgid "translating to `%sp'"
msgstr ""
-#: config/tc-i386.c:2648
+#: config/tc-i386.c:2685
msgid ""
"Can't encode registers '%%%s' in the instruction requiring REX prefix.\n"
msgstr ""
-#: config/tc-i386.c:2700 config/tc-i386.c:2772 config/tc-i386.c:2819
+#: config/tc-i386.c:2732 config/tc-i386.c:2806 config/tc-i386.c:2853
msgid "skipping prefixes on this instruction"
msgstr ""
-#: config/tc-i386.c:2840
+#: config/tc-i386.c:2874
msgid "16-bit jump out of range"
msgstr ""
-#: config/tc-i386.c:2849
+#: config/tc-i386.c:2883
#, c-format
msgid "can't handle non absolute segment in `%s'"
msgstr ""
-#: config/tc-i386.c:3106
+#: config/tc-i386.c:3140
msgid "only 1 or 2 immediate operands are allowed"
msgstr ""
-#: config/tc-i386.c:3136 config/tc-i386.c:3374
+#: config/tc-i386.c:3170 config/tc-i386.c:3408
msgid "GOT relocations not supported in 16 bit mode"
msgstr ""
-#: config/tc-i386.c:3173 config/tc-i386.c:3410
+#: config/tc-i386.c:3207 config/tc-i386.c:3444
msgid "bad reloc specifier in expression"
msgstr ""
-#: config/tc-i386.c:3191 config/tc-i386.c:3445
+#: config/tc-i386.c:3225 config/tc-i386.c:3482
#, c-format
msgid "ignoring junk `%s' after expression"
msgstr ""
#. Missing or bad expr becomes absolute 0.
-#: config/tc-i386.c:3198
+#: config/tc-i386.c:3232
#, c-format
msgid "missing or invalid immediate expression `%s' taken as 0"
msgstr ""
-#: config/tc-i386.c:3229 config/tc-i386.c:3475
+#: config/tc-i386.c:3263 config/tc-i386.c:3512
#, c-format
msgid "unimplemented segment %s in operand"
msgstr ""
-#: config/tc-i386.c:3231 config/tc-i386.c:3477
+#: config/tc-i386.c:3265 config/tc-i386.c:3514
#, c-format
msgid "unimplemented segment type %d in operand"
msgstr ""
-#: config/tc-i386.c:3273 config/tc-i386.c:5407
+#: config/tc-i386.c:3307 config/tc-i386.c:5495
#, c-format
msgid "expecting scale factor of 1, 2, 4, or 8: got `%s'"
msgstr ""
-#: config/tc-i386.c:3279
+#: config/tc-i386.c:3313
#, c-format
msgid "scale factor of %d without an index register"
msgstr ""
#. Missing or bad expr becomes absolute 0.
-#: config/tc-i386.c:3456
+#: config/tc-i386.c:3493
#, c-format
msgid "missing or invalid displacement expression `%s' taken as 0"
msgstr ""
-#: config/tc-i386.c:3562
+#: config/tc-i386.c:3599
#, c-format
msgid "`%s' is not a valid base/index expression"
msgstr ""
-#: config/tc-i386.c:3566
+#: config/tc-i386.c:3603
#, c-format
msgid "`%s' is not a valid %s bit base/index expression"
msgstr ""
-#: config/tc-i386.c:3641
+#: config/tc-i386.c:3678
#, c-format
msgid "bad memory operand `%s'"
msgstr ""
-#: config/tc-i386.c:3656
+#: config/tc-i386.c:3693
#, c-format
msgid "junk `%s' after register"
msgstr ""
-#: config/tc-i386.c:3665 config/tc-i386.c:3780 config/tc-i386.c:3816
+#: config/tc-i386.c:3702 config/tc-i386.c:3817 config/tc-i386.c:3853
#, c-format
msgid "bad register name `%s'"
msgstr ""
-#: config/tc-i386.c:3673
+#: config/tc-i386.c:3710
msgid "immediate operand illegal with absolute jump"
msgstr ""
-#: config/tc-i386.c:3695
+#: config/tc-i386.c:3732
#, c-format
msgid "too many memory references for `%s'"
msgstr ""
-#: config/tc-i386.c:3773
+#: config/tc-i386.c:3810
#, c-format
msgid "expecting `,' or `)' after index register in `%s'"
msgstr ""
-#: config/tc-i386.c:3795
+#: config/tc-i386.c:3832
#, c-format
msgid "expecting `)' after scale factor in `%s'"
msgstr ""
-#: config/tc-i386.c:3802
+#: config/tc-i386.c:3839
#, c-format
msgid "expecting index register or scale factor after `,'; got '%c'"
msgstr ""
-#: config/tc-i386.c:3809
+#: config/tc-i386.c:3846
#, c-format
msgid "expecting `,' or `)' after base register in `%s'"
msgstr ""
#. It's not a memory operand; argh!
-#: config/tc-i386.c:3850
+#: config/tc-i386.c:3887
#, c-format
msgid "invalid char %s beginning operand %d `%s'"
msgstr ""
-#: config/tc-i386.c:4288
+#: config/tc-i386.c:4061
+msgid "long jump required"
+msgstr ""
+
+#: config/tc-i386.c:4367
msgid "Bad call to md_atof ()"
msgstr ""
-#: config/tc-i386.c:4445
+#: config/tc-i386.c:4524
msgid "No compiled in support for x86_64"
msgstr ""
-#: config/tc-i386.c:4466
+#: config/tc-i386.c:4545
msgid ""
" -Q ignored\n"
" -V print assembler version number\n"
" -s ignored\n"
msgstr ""
-#: config/tc-i386.c:4473
+#: config/tc-i386.c:4552
msgid " -q quieten some warnings\n"
msgstr ""
-#: config/tc-i386.c:4532 config/tc-s390.c:1446
+#: config/tc-i386.c:4611 config/tc-s390.c:1446
msgid "GOT already in symbol table"
msgstr ""
-#: config/tc-i386.c:4653
+#: config/tc-i386.c:4741
#, c-format
msgid "can not do %d byte relocation"
msgstr ""
-#: config/tc-i386.c:4713 config/tc-s390.c:1746
+#: config/tc-i386.c:4801 config/tc-s390.c:1746
#, c-format
msgid "cannot represent relocation type %s"
msgstr ""
-#: config/tc-i386.c:5009
+#: config/tc-i386.c:5097
#, c-format
msgid "too many memory references for '%s'"
msgstr ""
-#: config/tc-i386.c:5172
+#: config/tc-i386.c:5260
#, c-format
msgid "Unknown operand modifier `%s'\n"
msgstr ""
-#: config/tc-i386.c:5379
+#: config/tc-i386.c:5467
#, c-format
msgid "`%s' is not a valid segment register"
msgstr ""
-#: config/tc-i386.c:5389 config/tc-i386.c:5510
+#: config/tc-i386.c:5477 config/tc-i386.c:5598
msgid "Register scaling only allowed in memory operands."
msgstr ""
-#: config/tc-i386.c:5420
+#: config/tc-i386.c:5508
msgid "Too many register references in memory operand.\n"
msgstr ""
-#: config/tc-i386.c:5489
+#: config/tc-i386.c:5577
#, c-format
msgid "Syntax error. Expecting a constant. Got `%s'.\n"
msgstr ""
-#: config/tc-i386.c:5559
+#: config/tc-i386.c:5647
#, c-format
msgid "Unrecognized token '%s'"
msgstr ""
-#: config/tc-i386.c:5576
+#: config/tc-i386.c:5664
#, c-format
msgid "Unexpected token `%s'\n"
msgstr ""
-#: config/tc-i386.c:5720
+#: config/tc-i386.c:5808
#, c-format
msgid "Unrecognized token `%s'\n"
msgstr ""
msgid "callj to difference of two symbols"
msgstr ""
-#: config/tc-ia64.c:952
+#: config/tc-ia64.c:988
msgid "Unwind directive not followed by an instruction."
msgstr ""
-#: config/tc-ia64.c:4094
+#: config/tc-ia64.c:4243
msgid "Register name expected"
msgstr ""
-#: config/tc-ia64.c:4099 config/tc-ia64.c:4385
+#: config/tc-ia64.c:4248 config/tc-ia64.c:4534
msgid "Comma expected"
msgstr ""
-#: config/tc-ia64.c:4107
+#: config/tc-ia64.c:4256
msgid "Register value annotation ignored"
msgstr ""
-#: config/tc-ia64.c:4131
+#: config/tc-ia64.c:4280
msgid "Directive invalid within a bundle"
msgstr ""
-#: config/tc-ia64.c:4198
+#: config/tc-ia64.c:4347
msgid "Missing predicate relation type"
msgstr ""
-#: config/tc-ia64.c:4214
+#: config/tc-ia64.c:4363
msgid "Unrecognized predicate relation type"
msgstr ""
-#: config/tc-ia64.c:4234 config/tc-ia64.c:4259
+#: config/tc-ia64.c:4383 config/tc-ia64.c:4408
msgid "Predicate register expected"
msgstr ""
-#: config/tc-ia64.c:4246
+#: config/tc-ia64.c:4395
msgid "Duplicate predicate register ignored"
msgstr ""
-#: config/tc-ia64.c:4268
+#: config/tc-ia64.c:4417
msgid "Bad register range"
msgstr ""
-#: config/tc-ia64.c:4296
+#: config/tc-ia64.c:4445
msgid "Predicate source and target required"
msgstr ""
-#: config/tc-ia64.c:4298 config/tc-ia64.c:4310
+#: config/tc-ia64.c:4447 config/tc-ia64.c:4459
msgid "Use of p0 is not valid in this context"
msgstr ""
-#: config/tc-ia64.c:4305
+#: config/tc-ia64.c:4454
msgid "At least two PR arguments expected"
msgstr ""
-#: config/tc-ia64.c:4319
+#: config/tc-ia64.c:4468
msgid "At least one PR argument expected"
msgstr ""
-#: config/tc-ia64.c:4355
+#: config/tc-ia64.c:4504
#, c-format
msgid "Inserting \"%s\" into entry hint table failed: %s"
msgstr ""
#. FIXME -- need 62-bit relocation type
-#: config/tc-ia64.c:4775
+#: config/tc-ia64.c:4924
msgid "62-bit relocation not yet implemented"
msgstr ""
-#: config/tc-ia64.c:4837
+#: config/tc-ia64.c:4986
msgid "lower 16 bits of mask ignored"
msgstr ""
-#: config/tc-ia64.c:5337
+#: config/tc-ia64.c:5489
msgid "Value truncated to 62 bits"
msgstr ""
-#: config/tc-ia64.c:5688
+#: config/tc-ia64.c:5840
msgid ""
"Additional NOP may be necessary to workaround Itanium processor A/B step "
"errata"
msgstr ""
-#: config/tc-ia64.c:5870
+#: config/tc-ia64.c:6022
#, c-format
msgid "Unrecognized option '-x%s'"
msgstr ""
-#: config/tc-ia64.c:5898
+#: config/tc-ia64.c:6050
msgid ""
"IA-64 options:\n"
" -milp32|-milp64|-mlp64|-mp64\tselect data model (default -mlp64)\n"
" -xdebug\t\t debug dependency violation checker\n"
msgstr ""
-#: config/tc-ia64.c:6168 config/tc-mips.c:1014
+#: config/tc-ia64.c:6320 config/tc-mips.c:1014
msgid "Could not set architecture and machine"
msgstr ""
-#: config/tc-ia64.c:6244
+#: config/tc-ia64.c:6396
msgid "Explicit stops are ignored in auto mode"
msgstr ""
-#: config/tc-ia64.c:6294
+#: config/tc-ia64.c:6446
msgid "Found '{' after explicit switch to automatic mode"
msgstr ""
-#: config/tc-ia64.c:6707
+#: config/tc-ia64.c:6859
#, c-format
msgid "Unhandled dependency %s for %s (%s), note %d"
msgstr ""
-#: config/tc-ia64.c:7983
+#: config/tc-ia64.c:8135
#, c-format
msgid "Unrecognized dependency specifier %d\n"
msgstr ""
-#: config/tc-ia64.c:8774
+#: config/tc-ia64.c:8926
msgid "Only the first path encountering the conflict is reported"
msgstr ""
-#: config/tc-ia64.c:8777
+#: config/tc-ia64.c:8929
msgid "This is the location of the conflicting usage"
msgstr ""
msgid "Length of .scomm \"%s\" is already %ld. Not changed to %ld."
msgstr ""
-#: config/tc-m32r.c:1786
+#: config/tc-m32r.c:1788
msgid "Unmatched high/shigh reloc"
msgstr ""
msgid "Unable to produce reloc against symbol '%s'"
msgstr ""
-#: config/tc-m68k.c:929 config/tc-mips.c:11242
+#: config/tc-m68k.c:929 config/tc-mips.c:11262
#, c-format
msgid "Cannot make %s relocation PC relative"
msgstr ""
msgid "returned from mips_ip(%s) insn_opcode = 0x%x\n"
msgstr ""
-#: config/tc-mips.c:1782 config/tc-mips.c:11374
+#: config/tc-mips.c:1782 config/tc-mips.c:11394
msgid "extended instruction in delay slot"
msgstr ""
msgid "Number larger than 64 bits"
msgstr ""
-#: config/tc-mips.c:3304 config/tc-mips.c:3376 config/tc-mips.c:5055
-#: config/tc-mips.c:5106 config/tc-mips.c:5642 config/tc-mips.c:5705
+#: config/tc-mips.c:3304 config/tc-mips.c:3376 config/tc-mips.c:5071
+#: config/tc-mips.c:5122 config/tc-mips.c:5658 config/tc-mips.c:5721
msgid "PIC code offset overflow (max 16 signed bits)"
msgstr ""
msgstr ""
#: config/tc-mips.c:3627 config/tc-mips.c:3701 config/tc-mips.c:3804
-#: config/tc-mips.c:3859 config/tc-mips.c:6742 config/tc-mips.c:6751
-#: config/tc-mips.c:6759 config/tc-mips.c:6868
+#: config/tc-mips.c:3859 config/tc-mips.c:6758 config/tc-mips.c:6767
+#: config/tc-mips.c:6775 config/tc-mips.c:6884
msgid "Unsupported large constant"
msgstr ""
msgid "Divide by zero."
msgstr ""
-#: config/tc-mips.c:4626
+#: config/tc-mips.c:4642
msgid "MIPS PIC call to register other than $25"
msgstr ""
-#: config/tc-mips.c:4631 config/tc-mips.c:4743
+#: config/tc-mips.c:4647 config/tc-mips.c:4759
msgid "No .cprestore pseudo-op used in PIC code"
msgstr ""
-#: config/tc-mips.c:4816 config/tc-mips.c:4905 config/tc-mips.c:5393
-#: config/tc-mips.c:5434 config/tc-mips.c:5452 config/tc-mips.c:6081
+#: config/tc-mips.c:4832 config/tc-mips.c:4921 config/tc-mips.c:5409
+#: config/tc-mips.c:5450 config/tc-mips.c:5468 config/tc-mips.c:6097
msgid "opcode not supported on this processor"
msgstr ""
-#: config/tc-mips.c:5912 config/tc-mips.c:6636
+#: config/tc-mips.c:5928 config/tc-mips.c:6652
msgid "Macro used $at after \".set noat\""
msgstr ""
-#: config/tc-mips.c:6052 config/tc-mips.c:6070
+#: config/tc-mips.c:6068 config/tc-mips.c:6086
msgid "rotate count too large"
msgstr ""
-#: config/tc-mips.c:6121
+#: config/tc-mips.c:6137
#, c-format
msgid "Instruction %s: result is always false"
msgstr ""
-#: config/tc-mips.c:6290
+#: config/tc-mips.c:6306
#, c-format
msgid "Instruction %s: result is always true"
msgstr ""
-#: config/tc-mips.c:6429 config/tc-mips.c:6456 config/tc-mips.c:6528
-#: config/tc-mips.c:6553
+#: config/tc-mips.c:6445 config/tc-mips.c:6472 config/tc-mips.c:6544
+#: config/tc-mips.c:6569
msgid "operand overflow"
msgstr ""
#. FIXME: Check if this is one of the itbl macros, since they
#. are added dynamically.
-#: config/tc-mips.c:6632
+#: config/tc-mips.c:6648
#, c-format
msgid "Macro %s not implemented yet"
msgstr ""
-#: config/tc-mips.c:6902
+#: config/tc-mips.c:6918
#, c-format
msgid "internal: bad mips opcode (mask error): %s %s"
msgstr ""
-#: config/tc-mips.c:6958
+#: config/tc-mips.c:6974
#, c-format
msgid "internal: bad mips opcode (unknown operand type `%c'): %s %s"
msgstr ""
-#: config/tc-mips.c:6965
+#: config/tc-mips.c:6981
#, c-format
msgid "internal: bad mips opcode (bits 0x%lx undefined): %s %s"
msgstr ""
-#: config/tc-mips.c:7073
+#: config/tc-mips.c:7089
#, c-format
msgid "opcode not supported on this processor: %s (%s)"
msgstr ""
-#: config/tc-mips.c:7144
+#: config/tc-mips.c:7160
#, c-format
msgid "Improper shift amount (%ld)"
msgstr ""
-#: config/tc-mips.c:7170 config/tc-mips.c:8324 config/tc-mips.c:8439
+#: config/tc-mips.c:7186 config/tc-mips.c:8340 config/tc-mips.c:8455
#, c-format
msgid "Invalid value for `%s' (%lu)"
msgstr ""
-#: config/tc-mips.c:7188
+#: config/tc-mips.c:7204
#, c-format
msgid "Illegal break code (%ld)"
msgstr ""
-#: config/tc-mips.c:7202
+#: config/tc-mips.c:7218
#, c-format
msgid "Illegal lower break code (%ld)"
msgstr ""
-#: config/tc-mips.c:7215
+#: config/tc-mips.c:7231
#, c-format
msgid "Illegal 20-bit code (%ld)"
msgstr ""
-#: config/tc-mips.c:7227
+#: config/tc-mips.c:7243
#, c-format
msgid "Coproccesor code > 25 bits (%ld)"
msgstr ""
-#: config/tc-mips.c:7240
+#: config/tc-mips.c:7256
#, c-format
msgid "Illegal 19-bit code (%ld)"
msgstr ""
-#: config/tc-mips.c:7252
+#: config/tc-mips.c:7268
#, c-format
msgid "Invalidate performance regster (%ld)"
msgstr ""
-#: config/tc-mips.c:7289
+#: config/tc-mips.c:7305
#, c-format
msgid "Invalid register number (%d)"
msgstr ""
-#: config/tc-mips.c:7453
+#: config/tc-mips.c:7469
#, c-format
msgid "Invalid float register number (%d)"
msgstr ""
-#: config/tc-mips.c:7463
+#: config/tc-mips.c:7479
#, c-format
msgid "Float register should be even, was %d"
msgstr ""
-#: config/tc-mips.c:7514
+#: config/tc-mips.c:7530
msgid "absolute expression required"
msgstr ""
-#: config/tc-mips.c:7575
+#: config/tc-mips.c:7591
#, c-format
msgid "Bad floating point constant: %s"
msgstr ""
-#: config/tc-mips.c:7697
+#: config/tc-mips.c:7713
msgid "Can't use floating point insn in this section"
msgstr ""
-#: config/tc-mips.c:7751
+#: config/tc-mips.c:7767
msgid "16 bit expression not in range 0..65535"
msgstr ""
-#: config/tc-mips.c:7788
+#: config/tc-mips.c:7804
msgid "16 bit expression not in range -32768..32767"
msgstr ""
-#: config/tc-mips.c:7859
+#: config/tc-mips.c:7875
msgid "lui expression not in range 0..65535"
msgstr ""
-#: config/tc-mips.c:7883
+#: config/tc-mips.c:7899
#, c-format
msgid "invalid condition code register $fcc%d"
msgstr ""
-#: config/tc-mips.c:7908
+#: config/tc-mips.c:7924
msgid "invalid coprocessor sub-selection value (0-7)"
msgstr ""
-#: config/tc-mips.c:7913
+#: config/tc-mips.c:7929
#, c-format
msgid "bad char = '%c'\n"
msgstr ""
-#: config/tc-mips.c:7926 config/tc-mips.c:8464
+#: config/tc-mips.c:7942 config/tc-mips.c:8480
msgid "illegal operands"
msgstr ""
-#: config/tc-mips.c:7993
+#: config/tc-mips.c:8009
msgid "unrecognized opcode"
msgstr ""
-#: config/tc-mips.c:8102
+#: config/tc-mips.c:8118
#, c-format
msgid "invalid register number (%d)"
msgstr ""
-#: config/tc-mips.c:8183
+#: config/tc-mips.c:8199
msgid "used $at without \".set noat\""
msgstr ""
-#: config/tc-mips.c:8358
+#: config/tc-mips.c:8374
msgid "can't parse register list"
msgstr ""
-#: config/tc-mips.c:8392 config/tc-mips.c:8422
+#: config/tc-mips.c:8408 config/tc-mips.c:8438
msgid "invalid register list"
msgstr ""
-#: config/tc-mips.c:8590
+#: config/tc-mips.c:8606
msgid "extended operand requested but not required"
msgstr ""
-#: config/tc-mips.c:8592
+#: config/tc-mips.c:8608
msgid "invalid unextended operand value"
msgstr ""
-#: config/tc-mips.c:8620
+#: config/tc-mips.c:8636
msgid "operand value out of range for instruction"
msgstr ""
-#: config/tc-mips.c:9005
+#: config/tc-mips.c:9021
#, c-format
msgid "invalid architecture -mcpu=%s"
msgstr ""
-#: config/tc-mips.c:9054
+#: config/tc-mips.c:9070
msgid "-G may not be used with embedded PIC code"
msgstr ""
-#: config/tc-mips.c:9066
+#: config/tc-mips.c:9083
msgid "-call_shared is supported only for ELF format"
msgstr ""
-#: config/tc-mips.c:9072 config/tc-mips.c:10158 config/tc-mips.c:10332
+#: config/tc-mips.c:9089 config/tc-mips.c:10178 config/tc-mips.c:10352
msgid "-G may not be used with SVR4 PIC code"
msgstr ""
-#: config/tc-mips.c:9081
+#: config/tc-mips.c:9098
msgid "-non_shared is supported only for ELF format"
msgstr ""
-#: config/tc-mips.c:9097
+#: config/tc-mips.c:9115
msgid "-G is not supported for this configuration"
msgstr ""
-#: config/tc-mips.c:9102
+#: config/tc-mips.c:9120
msgid "-G may not be used with SVR4 or embedded PIC code"
msgstr ""
-#: config/tc-mips.c:9126
+#: config/tc-mips.c:9145
msgid "No compiled in support for 64 bit object file format"
msgstr ""
-#: config/tc-mips.c:9218
+#: config/tc-mips.c:9238
msgid ""
"MIPS options:\n"
"-membedded-pic\t\tgenerate embedded position independent code\n"
"\t\t\timplicitly with the gp register [default 8]\n"
msgstr ""
-#: config/tc-mips.c:9226
+#: config/tc-mips.c:9246
msgid ""
"-mips1\t\t\tgenerate MIPS ISA I instructions\n"
"-mips2\t\t\tgenerate MIPS ISA II instructions\n"
"-mcpu=CPU\t\tgenerate code for CPU, where CPU is one of:\n"
msgstr ""
-#: config/tc-mips.c:9257
+#: config/tc-mips.c:9277
msgid ""
"-mCPU\t\t\tequivalent to -mcpu=CPU.\n"
"-no-mCPU\t\tdon't generate code specific to CPU.\n"
"\t\t\tFor -mCPU and -no-mCPU, CPU must be one of:\n"
msgstr ""
-#: config/tc-mips.c:9270
+#: config/tc-mips.c:9290
msgid ""
"-mips16\t\t\tgenerate mips16 instructions\n"
"-no-mips16\t\tdo not generate mips16 instructions\n"
msgstr ""
-#: config/tc-mips.c:9273
+#: config/tc-mips.c:9293
msgid ""
"-O0\t\t\tremove unneeded NOPs, do not swap branches\n"
"-O\t\t\tremove unneeded NOPs and swap branches\n"
"--break, --no-trap\tbreak exception on div by 0 and mult overflow\n"
msgstr ""
-#: config/tc-mips.c:9280
+#: config/tc-mips.c:9300
msgid ""
"-KPIC, -call_shared\tgenerate SVR4 position independent code\n"
"-non_shared\t\tdo not generate position independent code\n"
"-64\t\t\tcreate 64 bit object file\n"
msgstr ""
-#: config/tc-mips.c:9337
+#: config/tc-mips.c:9357
#, c-format
msgid "Unsupported reloc size %d"
msgstr ""
-#: config/tc-mips.c:9440
+#: config/tc-mips.c:9460
msgid "Unmatched %%hi reloc"
msgstr ""
-#: config/tc-mips.c:9563
+#: config/tc-mips.c:9583
msgid "Invalid PC relative reloc"
msgstr ""
-#: config/tc-mips.c:9673 config/tc-sparc.c:3101 config/tc-sparc.c:3108
+#: config/tc-mips.c:9693 config/tc-sparc.c:3101 config/tc-sparc.c:3108
#: config/tc-sparc.c:3115 config/tc-sparc.c:3122 config/tc-sparc.c:3129
#: config/tc-sparc.c:3138 config/tc-sparc.c:3149 config/tc-sparc.c:3175
#: config/tc-sparc.c:3203 write.c:992 write.c:1056
msgid "relocation overflow"
msgstr ""
-#: config/tc-mips.c:9689
+#: config/tc-mips.c:9709
#, c-format
msgid "Branch to odd address (%lx)"
msgstr ""
-#: config/tc-mips.c:9853
+#: config/tc-mips.c:9873
#, c-format
msgid "%08lx UNDEFINED\n"
msgstr ""
-#: config/tc-mips.c:9919
+#: config/tc-mips.c:9939
msgid "Alignment negative: 0 assumed."
msgstr ""
-#: config/tc-mips.c:10007
+#: config/tc-mips.c:10027
msgid "No read only data section in this object file format"
msgstr ""
-#: config/tc-mips.c:10030
+#: config/tc-mips.c:10050
msgid "Global pointers not supported; recompile -G 0"
msgstr ""
-#: config/tc-mips.c:10116
+#: config/tc-mips.c:10136
#, c-format
msgid "%s: no such section"
msgstr ""
-#: config/tc-mips.c:10153
+#: config/tc-mips.c:10173
#, c-format
msgid ".option pic%d not supported"
msgstr ""
-#: config/tc-mips.c:10164
+#: config/tc-mips.c:10184
#, c-format
msgid "Unrecognized option \"%s\""
msgstr ""
-#: config/tc-mips.c:10227
+#: config/tc-mips.c:10247
msgid "`noreorder' must be set before `nomacro'"
msgstr ""
-#: config/tc-mips.c:10269
+#: config/tc-mips.c:10289
msgid "unknown ISA level"
msgstr ""
-#: config/tc-mips.c:10291
+#: config/tc-mips.c:10311
msgid ".set pop with no .set push"
msgstr ""
-#: config/tc-mips.c:10315
+#: config/tc-mips.c:10335
#, c-format
msgid "Tried to set unrecognized symbol: %s\n"
msgstr ""
-#: config/tc-mips.c:10365
+#: config/tc-mips.c:10385
msgid ".cpload not in noreorder section"
msgstr ""
-#: config/tc-mips.c:10447
+#: config/tc-mips.c:10467
msgid "Unsupported use of .gpword"
msgstr ""
-#: config/tc-mips.c:10584
+#: config/tc-mips.c:10604
msgid "expected `$'"
msgstr ""
-#: config/tc-mips.c:10592
+#: config/tc-mips.c:10612
msgid "Bad register number"
msgstr ""
-#: config/tc-mips.c:10608
+#: config/tc-mips.c:10628
msgid "Unrecognized register name"
msgstr ""
-#: config/tc-mips.c:10807
+#: config/tc-mips.c:10827
msgid "unsupported PC relative reference to different section"
msgstr ""
-#: config/tc-mips.c:10916
+#: config/tc-mips.c:10936
msgid "unsupported relocation"
msgstr ""
-#: config/tc-mips.c:11020
+#: config/tc-mips.c:11040
msgid "AT used after \".set noat\" or macro used after \".set nomacro\""
msgstr ""
-#: config/tc-mips.c:11083
+#: config/tc-mips.c:11103
msgid "Double check fx_r_type in tc-mips.c:tc_gen_reloc"
msgstr ""
-#: config/tc-mips.c:11596
+#: config/tc-mips.c:11616
msgid "missing `.end' at end of assembly"
msgstr ""
-#: config/tc-mips.c:11611
+#: config/tc-mips.c:11631
msgid "Expected simple number."
msgstr ""
-#: config/tc-mips.c:11637
+#: config/tc-mips.c:11657
#, c-format
msgid " *input_line_pointer == '%c' 0x%02x\n"
msgstr ""
-#: config/tc-mips.c:11639
+#: config/tc-mips.c:11659
msgid "Invalid number"
msgstr ""
-#: config/tc-mips.c:11693
+#: config/tc-mips.c:11713
msgid ".end not in text section"
msgstr ""
-#: config/tc-mips.c:11697
+#: config/tc-mips.c:11717
msgid ".end directive without a preceding .ent directive."
msgstr ""
-#: config/tc-mips.c:11706
+#: config/tc-mips.c:11726
msgid ".end symbol does not match .ent symbol."
msgstr ""
-#: config/tc-mips.c:11709
+#: config/tc-mips.c:11729
msgid ".end directive missing or unknown symbol"
msgstr ""
-#: config/tc-mips.c:11784
+#: config/tc-mips.c:11804
msgid ".ent or .aent not in text section."
msgstr ""
-#: config/tc-mips.c:11787
+#: config/tc-mips.c:11807
msgid "missing `.end'"
msgstr ""
-#: config/tc-mips.c:11820 ecoff.c:3205
+#: config/tc-mips.c:11840 ecoff.c:3205
msgid ".frame outside of .ent"
msgstr ""
-#: config/tc-mips.c:11831 ecoff.c:3216
+#: config/tc-mips.c:11851 ecoff.c:3216
msgid "Bad .frame directive"
msgstr ""
-#: config/tc-mips.c:11861
+#: config/tc-mips.c:11881
msgid ".mask/.fmask outside of .ent"
msgstr ""
-#: config/tc-mips.c:11868
+#: config/tc-mips.c:11888
msgid "Bad .mask/.fmask directive"
msgstr ""
msgid "Bad expression"
msgstr ""
-#: expr.c:1674
+#: expr.c:1677
msgid "missing operand; zero assumed"
msgstr ""
-#: expr.c:1707
+#: expr.c:1710
msgid "operation combines symbols in different segments"
msgstr ""
-#: expr.c:1724
+#: expr.c:1727
msgid "left operand is a bignum; integer 0 assumed"
msgstr ""
-#: expr.c:1726
+#: expr.c:1729
msgid "left operand is a float; integer 0 assumed"
msgstr ""
-#: expr.c:1735
+#: expr.c:1738
msgid "right operand is a bignum; integer 0 assumed"
msgstr ""
-#: expr.c:1737
+#: expr.c:1740
msgid "right operand is a float; integer 0 assumed"
msgstr ""
-#: expr.c:1793 symbols.c:1089
+#: expr.c:1796 symbols.c:1089
msgid "division by zero"
msgstr ""
msgid "local label %s is not defined"
msgstr ""
-#: write.c:2187
+#: write.c:2201
#, c-format
msgid "alignment padding (%lu bytes) not a multiple of %ld"
msgstr ""
-#: write.c:2297
+#: write.c:2311
#, c-format
msgid ".word %s-%s+%s didn't fit"
msgstr ""
-#: write.c:2378
+#: write.c:2392
msgid "attempt to .org backwards ignored"
msgstr ""
-#: write.c:2402
+#: write.c:2416
msgid ".space specifies non-absolute value"
msgstr ""
-#: write.c:2406
+#: write.c:2420
msgid ".space or .fill with negative value, ignored"
msgstr ""
-#: write.c:2657
+#: write.c:2671
#, c-format
msgid ""
"Subtraction of two symbols in different sections \"%s\" {%s section} - "
"\"%s\" {%s section} at file address %s."
msgstr ""
-#: write.c:2811
+#: write.c:2825
#, c-format
msgid "Value of %s too large for field of %d bytes at %s"
msgstr ""
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-07-27 16:32-0700\n"
+"POT-Creation-Date: 2001-02-06 18:02-0800\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"
msgid "[find_call] 0x%lx: bsr"
msgstr ""
-#: basic_blocks.c:123 call_graph.c:86 hist.c:122
+#: basic_blocks.c:125 call_graph.c:86 hist.c:122
#, c-format
msgid "%s: %s: unexpected end of file\n"
msgstr ""
-#: basic_blocks.c:198
+#: basic_blocks.c:200
#, c-format
msgid "%s: warning: ignoring basic-block exec counts (use -l or --line)\n"
msgstr ""
#. FIXME: This only works if bfd_vma is unsigned long.
-#: basic_blocks.c:296 basic_blocks.c:306
+#: basic_blocks.c:298 basic_blocks.c:308
#, c-format
msgid "%s:%d: (%s:0x%lx) %lu executions\n"
msgstr ""
-#: basic_blocks.c:297 basic_blocks.c:307
+#: basic_blocks.c:299 basic_blocks.c:309
msgid "<unknown>"
msgstr ""
-#: basic_blocks.c:551
+#: basic_blocks.c:553
#, c-format
msgid ""
"\n"
"\n"
msgstr ""
-#: basic_blocks.c:575
+#: basic_blocks.c:577
msgid ""
"\n"
"Execution Summary:\n"
"\n"
msgstr ""
-#: basic_blocks.c:576
+#: basic_blocks.c:578
#, c-format
msgid "%9ld Executable lines in this file\n"
msgstr ""
-#: basic_blocks.c:578
+#: basic_blocks.c:580
#, c-format
msgid "%9ld Lines executed\n"
msgstr ""
-#: basic_blocks.c:579
+#: basic_blocks.c:581
#, c-format
msgid "%9.2f Percent of the file executed\n"
msgstr ""
-#: basic_blocks.c:583
+#: basic_blocks.c:585
#, c-format
msgid ""
"\n"
"%9lu Total number of line executions\n"
msgstr ""
-#: basic_blocks.c:585
+#: basic_blocks.c:587
#, c-format
msgid "%9.2f Average executions per line\n"
msgstr ""
+2001-02-18 lars brinkhoff <lars@nocrew.org>
+
+ * dis-asm.h: Add PDP-11 target.
+
2001-02-09 Martin Schwidefsky <schwidefsky@de.ibm.com>
* dis-asm.h: Add linux target for S/390.
extern int print_insn_mn10200 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_mn10300 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_ns32k PARAMS ((bfd_vma, disassemble_info*));
+extern int print_insn_pdp11 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_big_powerpc PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_little_powerpc PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_rs6000 PARAMS ((bfd_vma, disassemble_info*));
-Mon Feb 12 17:40:54 CET 2001 Jan Hubicka <jh@suse.cz>
+2001-02-18 lars brinkhoff <lars@nocrew.org>
+
+ * pdp11.h: New file.
+
+2001-02-12 Jan Hubicka <jh@suse.cz>
* i386.h (i386_optab): SSE integer converison instructions have
64bit versions on x86-64.
(pa_opcodes): Add entries for missing wide mode ldi,ldo,ldw,stw.
Remove duplicate "ldw j(s,b),x". Sort some entries.
-Sat Jan 13 09:56:32 MET 2001 Jan Hubicka <jh@suse.cz>
+2001-01-13 Jan Hubicka <jh@suse.cz>
* i386.h (i386_optab): Fix pusha and ret templates.
* cgen.h (enum cgen_mode): Add CGEN_MODE_TARGET_MAX, CGEN_MODE_INT,
CGEN_MODE_UINT.
-Sat Jan 16 01:29:25 1999 Jeffrey A Law (law@cygnus.com)
+1999-01-16 Jeffrey A Law (law@cygnus.com)
* hppa.h (bv): Fix mask.
* tic30.h: New file.
-Thu Jan 22 17:54:56 1998 Nick Clifton <nickc@cygnus.com>
+Jan 22 17:54:56 1998 Nick Clifton <nickc@cygnus.com>
* cgen.h: Add prototypes for cgen_save_fixups(),
cgen_restore_fixups(), and cgen_swap_fixups(). Change prototype
--- /dev/null
+/* PDP-11 opcde list.
+ Copyright (C) 2001 Free Software Foundation, Inc.
+
+This file is part of GDB and GAS.
+
+GDB and GAS are free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 1, or (at your option)
+any later version.
+
+GDB and GAS are distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GDB or GAS; see the file COPYING. If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+/*
+ * PDP-11 opcode types.
+ */
+
+#define PDP11_OPCODE_NO_OPS 0
+#define PDP11_OPCODE_REG 1 /* register */
+#define PDP11_OPCODE_OP 2 /* generic operand */
+#define PDP11_OPCODE_REG_OP 3 /* register and generic operand */
+#define PDP11_OPCODE_REG_OP_REV 4 /* register and generic operand,
+ reversed syntax */
+#define PDP11_OPCODE_AC_OP 5 /* fpu accumulator and generic
+ operand */
+#define PDP11_OPCODE_OP_OP 6 /* two generic operands */
+#define PDP11_OPCODE_DISPL 7 /* pc-relative displacement */
+#define PDP11_OPCODE_REG_DISPL 8 /* redister and pc-relative
+ displacement */
+#define PDP11_OPCODE_IMM8 9 /* 8-bit immediate */
+#define PDP11_OPCODE_IMM6 10 /* 6-bit immediate */
+#define PDP11_OPCODE_IMM3 11 /* 3-bit immediate */
+#define PDP11_OPCODE_ILLEGAL 12 /* illegal instruction */
+
+/*
+ * PDP-11 instruction set extensions.
+ *
+ * Please keep the numbers low, as they are used as indices into
+ * an array.
+ */
+
+#define PDP11_NONE 0 /* not in instruction set */
+#define PDP11_BASIC 1 /* basic instruction set (11/20 etc) */
+#define PDP11_CSM 2 /* commercial instruction set */
+#define PDP11_CIS 3 /* commercial instruction set */
+#define PDP11_EIS 4 /* extended instruction set (11/45 etc) */
+#define PDP11_FIS 5 /* KEV11 floating-point instructions */
+#define PDP11_FPP 6 /* FP-11 floating-point instructions */
+#define PDP11_LEIS 7 /* limited extended instruction set
+ (11/40 etc) */
+#define PDP11_MFPT 8 /* move from processor type */
+#define PDP11_MPROC 9 /* multiprocessor instructions: tstset,
+ wrtlck */
+#define PDP11_MXPS 10 /* move from/to processor status */
+#define PDP11_SPL 11 /* set priority level */
+#define PDP11_UCODE 12 /* microcode instructions: ldub, med, xfc */
+#define PDP11_EXT_NUM 13 /* total number of extension types */
+
+struct pdp11_opcode
+{
+ const char *name;
+ int opcode;
+ int mask;
+ int type;
+ int extension;
+};
+
+extern const struct pdp11_opcode pdp11_opcodes[];
+extern const struct pdp11_opcode pdp11_aliases[];
+extern const int pdp11_num_opcodes, pdp11_num_aliases;
+
+/* end of pdp11.h */
+2001-02-18 lars brinkhoff <lars@nocrew.org>
+
+ * Makefile.am: Add PDP-11 target.
+ * configure.tgt: Likewise.
+ * emulparams/pdp11.sh: New file.
+
2001-02-17 David O'Brien <obrien@FreeBSD.org>
* configure.host: Add a generic FreeBSD configuration entry such that
enews.o \
ens32knbsd.o \
epc532macha.o \
+ epdp11.o \
epjelf.o \
epjlelf.o \
eppcmacos.o \
epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
${GENSCRIPTS} pc532macha "$(tdir_pc532macha)"
+epdp11.c: $(srcdir)/emulparams/pdp11.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} pdp11 "$(tdir_pdp11)"
epjelf.c: $(srcdir)/emulparams/pjelf.sh \
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} pjelf "$(tdir_pjelf)"
enews.o \
ens32knbsd.o \
epc532macha.o \
+ epdp11.o \
epjelf.o \
epjlelf.o \
eppcmacos.o \
epc532macha.c: $(srcdir)/emulparams/pc532macha.sh \
$(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
${GENSCRIPTS} pc532macha "$(tdir_pc532macha)"
+epdp11.c: $(srcdir)/emulparams/pdp11.sh \
+ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS}
+ ${GENSCRIPTS} pdp11 "$(tdir_pdp11)"
epjelf.c: $(srcdir)/emulparams/pjelf.sh \
$(srcdir)/emultempl/elf32.em $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS}
${GENSCRIPTS} pjelf "$(tdir_pjelf)"
powerpc-*-linux-gnu*) targ_emul=elf32ppclinux;
targ_extra_emuls="elf32ppc elf32ppcsim";
targ_extra_libpath=elf32ppc ;;
+pdp11-*-*) targ_emul=pdp11 ;;
pjl*-*-*) targ_emul=pjlelf ; targ_extra_emuls="elf_i386" ;;
pj*-*-*) targ_emul=pjelf ;;
powerpc-*-elf* | powerpc-*-eabi* | powerpc-*-sysv* \
--- /dev/null
+SCRIPT_NAME=aout
+OUTPUT_FORMAT="a.out-pdp11"
+TEXT_START_ADDR=0
+TARGET_PAGE_SIZE=256
+ARCH=pdp11
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-02-06 18:03-0800\n"
+"POT-Creation-Date: 2001-02-18 11:47-0800\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"
msgid "%F%S: undefined symbol `%s' referenced in expression\n"
msgstr ""
-#: ldexp.c:600
+#: ldexp.c:601
msgid "%F%S can not PROVIDE assignment to location counter\n"
msgstr ""
-#: ldexp.c:610
+#: ldexp.c:611
msgid "%F%S invalid assignment to location counter\n"
msgstr ""
-#: ldexp.c:614
+#: ldexp.c:615
msgid "%F%S assignment to location counter invalid outside of SECTION\n"
msgstr ""
-#: ldexp.c:624
+#: ldexp.c:625
msgid "%F%S cannot move location counter backwards (from %V to %V)\n"
msgstr ""
-#: ldexp.c:652
+#: ldexp.c:653
msgid "%P%F:%s: hash creation failed\n"
msgstr ""
-#: ldexp.c:951
+#: ldexp.c:955
msgid "%F%S nonconstant expression for %s\n"
msgstr ""
-#: ldexp.c:984
+#: ldexp.c:988
msgid "%F%S non constant expression for %s\n"
msgstr ""
+2001-02-18 lars brinkhoff <lars@nocrew.org>
+
+ * Makefile.am: Add PDP-11 target.
+ * configure.in: Likewise.
+ * disassemble.c: Likewise.
+ * pdp11-dis.c: New file.
+ * pdp11-opc.c: New file.
+
2001-02-14 Jim Wilson <wilson@redhat.com>
* ia64-ic.tbl: Update from Intel. Add setf to fr-writers.
m10300-dis.c \
m10300-opc.c \
ns32k-dis.c \
+ pdp11-dis.c \
+ pdp11-opc.c \
pj-dis.c \
pj-opc.c \
ppc-dis.c \
mips-dis.lo \
mips-opc.lo \
mips16-opc.lo \
+ ns32k-dis.lo \
+ pdp11-dis.lo \
+ pdp11-opc.lo \
pj-dis.lo \
pj-opc.lo \
ppc-dis.lo \
ppc-opc.lo \
- ns32k-dis.lo \
s390-dis.lo \
s390-opc.lo \
sh-dis.lo \
ns32k-dis.lo: ns32k-dis.c $(BFD_H) $(INCDIR)/ansidecl.h \
sysdep.h config.h $(INCDIR)/dis-asm.h $(INCDIR)/opcode/ns32k.h \
opintl.h
+pdp11-dis.lo: pdp11-dis.c $(INCDIR)/dis-asm.h $(INCDIR)/opcode/pdp11.h
+pdp11-opc.lo: pdp11-opc.c $(INCDIR)/opcode/pdp11.h
pj-dis.lo: pj-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/pj.h $(INCDIR)/dis-asm.h $(BFD_H)
pj-opc.lo: pj-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
m10300-dis.c \
m10300-opc.c \
ns32k-dis.c \
+ pdp11-dis.c \
+ pdp11-opc.c \
pj-dis.c \
pj-opc.c \
ppc-dis.c \
mips-dis.lo \
mips-opc.lo \
mips16-opc.lo \
+ ns32k-dis.lo \
+ pdp11-dis.lo \
+ pdp11-opc.lo \
pj-dis.lo \
pj-opc.lo \
ppc-dis.lo \
ppc-opc.lo \
- ns32k-dis.lo \
s390-dis.lo \
s390-opc.lo \
sh-dis.lo \
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
-TAR = tar
+TAR = gtar
GZIP_ENV = --best
SOURCES = libopcodes.a.c $(libopcodes_la_SOURCES)
OBJECTS = libopcodes.a.$(OBJEXT) $(libopcodes_la_OBJECTS)
ns32k-dis.lo: ns32k-dis.c $(BFD_H) $(INCDIR)/ansidecl.h \
sysdep.h config.h $(INCDIR)/dis-asm.h $(INCDIR)/opcode/ns32k.h \
opintl.h
+pdp11-dis.lo: pdp11-dis.c $(INCDIR)/dis-asm.h $(INCDIR)/opcode/pdp11.h
+pdp11-opc.lo: pdp11-opc.c $(INCDIR)/opcode/pdp11.h
pj-dis.lo: pj-dis.c sysdep.h config.h $(INCDIR)/ansidecl.h \
$(INCDIR)/opcode/pj.h $(INCDIR)/dis-asm.h $(BFD_H)
pj-opc.lo: pj-opc.c sysdep.h config.h $(INCDIR)/ansidecl.h \
bfd_mn10200_arch) ta="$ta m10200-dis.lo m10200-opc.lo" ;;
bfd_mn10300_arch) ta="$ta m10300-dis.lo m10300-opc.lo" ;;
bfd_ns32k_arch) ta="$ta ns32k-dis.lo" ;;
+ bfd_pdp11_arch) ta="$ta pdp11-dis.lo pdp11-opc.lo" ;;
bfd_pj_arch) ta="$ta pj-dis.lo pj-opc.lo" ;;
bfd_powerpc_arch) ta="$ta ppc-dis.lo ppc-opc.lo" ;;
bfd_pyramid_arch) ;;
bfd_mn10200_arch) ta="$ta m10200-dis.lo m10200-opc.lo" ;;
bfd_mn10300_arch) ta="$ta m10300-dis.lo m10300-opc.lo" ;;
bfd_ns32k_arch) ta="$ta ns32k-dis.lo" ;;
+ bfd_pdp11_arch) ta="$ta pdp11-dis.lo pdp11-opc.lo" ;;
bfd_pj_arch) ta="$ta pj-dis.lo pj-opc.lo" ;;
bfd_powerpc_arch) ta="$ta ppc-dis.lo ppc-opc.lo" ;;
bfd_pyramid_arch) ;;
#define ARCH_mn10200
#define ARCH_mn10300
#define ARCH_ns32k
+#define ARCH_pdp11
#define ARCH_pj
#define ARCH_powerpc
#define ARCH_rs6000
disassemble = print_insn_mn10300;
break;
#endif
+#ifdef ARCH_pdp11
+ case bfd_arch_pdp11:
+ disassemble = print_insn_pdp11;
+ break;
+#endif
#ifdef ARCH_pj
case bfd_arch_pj:
disassemble = print_insn_pj;
--- /dev/null
+/* Print DEC PDP-11 instructions.
+ Copyright 2001 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 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 "dis-asm.h"
+#include "opcode/pdp11.h"
+
+#define AFTER_INSTRUCTION "\t"
+#define OPERAND_SEPARATOR ", "
+
+#define JUMP 0x1000 /* flag that this operand is used in a jump */
+
+#define FPRINTF (*info->fprintf_func)
+#define F info->stream
+
+/* sign-extend a 16-bit number in an int */
+#define SIGN_BITS (8 * sizeof (int) - 16)
+#define sign_extend(x) (((x) << SIGN_BITS) >> SIGN_BITS)
+
+static int read_word PARAMS ((bfd_vma memaddr, int *word,
+ disassemble_info *info));
+static void print_signed_octal PARAMS ((int n, disassemble_info *info));
+static void print_reg PARAMS ((int reg, disassemble_info *info));
+static void print_freg PARAMS ((int freg, disassemble_info *info));
+static int print_operand PARAMS ((bfd_vma *memaddr, int code,
+ disassemble_info *info));
+int print_insn_pdp11 PARAMS ((bfd_vma memaddr, disassemble_info *info));
+
+static int
+read_word (memaddr, word, info)
+ bfd_vma memaddr;
+ int *word;
+ disassemble_info *info;
+{
+ int status;
+ bfd_byte x[2];
+
+ status = (*info->read_memory_func) (memaddr, x, 2, info);
+ if (status != 0)
+ return -1;
+
+ *word = x[1] << 8 | x[0];
+ return 0;
+}
+
+static void
+print_signed_octal (n, info)
+ int n;
+ disassemble_info *info;
+{
+ if (n < 0)
+ FPRINTF (F, "-%o", -n);
+ else
+ FPRINTF (F, "%o", n);
+}
+
+static void
+print_reg (reg, info)
+ int reg;
+ disassemble_info *info;
+{
+ /* mask off the addressing mode, if any */
+ reg &= 7;
+
+ switch (reg)
+ {
+ case 0: case 1: case 2: case 3: case 4: case 5:
+ FPRINTF (F, "r%d", reg); break;
+ case 6: FPRINTF (F, "sp"); break;
+ case 7: FPRINTF (F, "pc"); break;
+ default: /* error */
+ }
+}
+
+static void
+print_freg (freg, info)
+ int freg;
+ disassemble_info *info;
+{
+ FPRINTF (F, "fr%d", freg);
+}
+
+static int
+print_operand (memaddr, code, info)
+ bfd_vma *memaddr;
+ int code;
+ disassemble_info *info;
+{
+ int mode = (code >> 3) & 7;
+ int reg = code & 7;
+ int disp;
+
+ switch (mode)
+ {
+ case 0:
+ print_reg (reg, info);
+ break;
+ case 1:
+ FPRINTF (F, "(");
+ print_reg (reg, info);
+ FPRINTF (F, ")");
+ break;
+ case 2:
+ if (reg == 7)
+ {
+ int data;
+ if (read_word (*memaddr, &data, info) < 0)
+ return -1;
+ FPRINTF (F, "$");
+ print_signed_octal (sign_extend (data), info);
+ *memaddr += 2;
+ }
+ else
+ {
+ FPRINTF (F, "(");
+ print_reg (reg, info);
+ FPRINTF (F, ")+");
+ }
+ break;
+ case 3:
+ if (reg == 7)
+ {
+ int address;
+ if (read_word (*memaddr, &address, info) < 0)
+ return -1;
+ FPRINTF (F, "*$%o", address);
+ *memaddr += 2;
+ }
+ else
+ {
+ FPRINTF (F, "*(");
+ print_reg (reg, info);
+ FPRINTF (F, ")+");
+ }
+ break;
+ case 4:
+ FPRINTF (F, "-(");
+ print_reg (reg, info);
+ FPRINTF (F, ")");
+ break;
+ case 5:
+ FPRINTF (F, "*-(");
+ print_reg (reg, info);
+ FPRINTF (F, ")");
+ break;
+ case 6:
+ case 7:
+ if (read_word (*memaddr, &disp, info) < 0)
+ return -1;
+ *memaddr += 2;
+ if (reg == 7)
+ {
+ bfd_vma address = *memaddr + sign_extend (disp);
+ if (!(code & JUMP))
+ FPRINTF (F, "*$");
+ (*info->print_address_func) (address, info);
+ }
+ else
+ {
+ if (mode == 7)
+ FPRINTF (F, "*");
+ print_signed_octal (sign_extend (disp), info);
+ FPRINTF (F, "(");
+ print_reg (reg, info);
+ FPRINTF (F, ")");
+ }
+ break;
+ }
+
+ return 0;
+}
+
+/* Print the PDP-11 instruction at address MEMADDR in debugged memory,
+ on INFO->STREAM. Returns length of the instruction, in bytes. */
+
+int
+print_insn_pdp11 (memaddr, info)
+ bfd_vma memaddr;
+ disassemble_info *info;
+{
+ bfd_vma start_memaddr = memaddr;
+ int opcode;
+ int src, dst;
+ int i;
+
+ info->bytes_per_line = 6;
+ info->bytes_per_chunk = 2;
+ info->display_endian = BFD_ENDIAN_LITTLE;
+
+ if (read_word (memaddr, &opcode, info) != 0)
+ return -1;
+ memaddr += 2;
+
+ src = (opcode >> 6) & 0x3f;
+ dst = opcode & 0x3f;
+
+ for (i = 0; i < pdp11_num_opcodes; i++)
+ {
+#define OP pdp11_opcodes[i]
+ if ((opcode & OP.mask) == OP.opcode)
+ switch (OP.type)
+ {
+ case PDP11_OPCODE_NO_OPS:
+ FPRINTF (F, OP.name);
+ break;
+ case PDP11_OPCODE_REG:
+ FPRINTF (F, OP.name);
+ FPRINTF (F, AFTER_INSTRUCTION);
+ print_reg (dst, info);
+ break;
+ case PDP11_OPCODE_OP:
+ FPRINTF (F, OP.name);
+ FPRINTF (F, AFTER_INSTRUCTION);
+ if (strcmp (OP.name, "jmp") == 0)
+ dst |= JUMP;
+ if (print_operand (&memaddr, dst, info) < 0)
+ return -1;
+ break;
+ case PDP11_OPCODE_REG_OP:
+ FPRINTF (F, OP.name);
+ FPRINTF (F, AFTER_INSTRUCTION);
+ print_reg (src, info);
+ FPRINTF (F, OPERAND_SEPARATOR);
+ if (strcmp (OP.name, "jsr") == 0)
+ dst |= JUMP;
+ if (print_operand (&memaddr, dst, info) < 0)
+ return -1;
+ break;
+ case PDP11_OPCODE_REG_OP_REV:
+ FPRINTF (F, OP.name);
+ FPRINTF (F, AFTER_INSTRUCTION);
+ if (print_operand (&memaddr, dst, info) < 0)
+ return -1;
+ FPRINTF (F, OPERAND_SEPARATOR);
+ print_reg (src, info);
+ break;
+ case PDP11_OPCODE_AC_OP:
+ {
+ int ac = (opcode & 0xe0) >> 6;
+ FPRINTF (F, OP.name);
+ FPRINTF (F, AFTER_INSTRUCTION);
+ print_freg (ac, info);
+ FPRINTF (F, OPERAND_SEPARATOR);
+ if (print_operand (&memaddr, dst, info) < 0)
+ return -1;
+ break;
+ }
+ case PDP11_OPCODE_OP_OP:
+ FPRINTF (F, OP.name);
+ FPRINTF (F, AFTER_INSTRUCTION);
+ if (print_operand (&memaddr, src, info) < 0)
+ return -1;
+ FPRINTF (F, OPERAND_SEPARATOR);
+ if (print_operand (&memaddr, dst, info) < 0)
+ return -1;
+ break;
+ case PDP11_OPCODE_DISPL:
+ {
+ int displ = (opcode & 0xff) << 8;
+ bfd_vma address = memaddr + (sign_extend (displ) >> 7);
+ FPRINTF (F, OP.name);
+ FPRINTF (F, AFTER_INSTRUCTION);
+ (*info->print_address_func) (address, info);
+ break;
+ }
+ case PDP11_OPCODE_REG_DISPL:
+ {
+ int displ = (opcode & 0x3f) << 10;
+ bfd_vma address = memaddr + (sign_extend (displ) >> 9);
+ FPRINTF (F, OP.name);
+ FPRINTF (F, AFTER_INSTRUCTION);
+ print_reg (src, info);
+ FPRINTF (F, OPERAND_SEPARATOR);
+ (*info->print_address_func) (address, info);
+ break;
+ }
+ case PDP11_OPCODE_IMM8:
+ {
+ int code = opcode & 0xff;
+ FPRINTF (F, OP.name);
+ FPRINTF (F, AFTER_INSTRUCTION);
+ FPRINTF (F, "%o", code);
+ break;
+ }
+ case PDP11_OPCODE_IMM6:
+ {
+ int code = opcode & 0x3f;
+ FPRINTF (F, OP.name);
+ FPRINTF (F, AFTER_INSTRUCTION);
+ FPRINTF (F, "%o", code);
+ break;
+ }
+ case PDP11_OPCODE_IMM3:
+ {
+ int code = opcode & 7;
+ FPRINTF (F, OP.name);
+ FPRINTF (F, AFTER_INSTRUCTION);
+ FPRINTF (F, "%o", code);
+ break;
+ }
+ default:
+ /* TODO: is this a proper way of signalling an error? */
+ FPRINTF (F, "<internal error: unrecognized instruction type>");
+ return -1;
+ }
+#undef OP
+ }
+
+ return memaddr - start_memaddr;
+}
--- /dev/null
+/* Opcode table for PDP-11.
+ Copyright 2001 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 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 "opcode/pdp11.h"
+
+const struct pdp11_opcode pdp11_opcodes[] =
+{
+ /* name, pattern, mask, opcode type, insn type, alias */
+ { "halt", 0x0000, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "wait", 0x0001, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "rti", 0x0002, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "bpt", 0x0003, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "iot", 0x0004, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "reset", 0x0005, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "rtt", 0x0006, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_LEIS },
+ { "mfpt", 0x0007, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_MFPT },
+ { "jmp", 0x0040, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "rts", 0x0080, 0xfff8, PDP11_OPCODE_REG, PDP11_BASIC },
+ { "", 0x0088, 0xfff8, PDP11_OPCODE_ILLEGAL, PDP11_NONE },
+ { "", 0x0090, 0xfff8, PDP11_OPCODE_ILLEGAL, PDP11_NONE },
+ { "spl", 0x0098, 0xfff8, PDP11_OPCODE_IMM3, PDP11_SPL },
+ { "nop", 0x00a0, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "clc", 0x00a1, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "clv", 0x00a2, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "cl_3", 0x00a3, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "clz", 0x00a4, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "cl_5", 0x00a5, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "cl_6", 0x00a6, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "cl_7", 0x00a7, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "cln", 0x00a8, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "cl_9", 0x00a9, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "cl_a", 0x00aa, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "cl_b", 0x00ab, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "cl_c", 0x00ac, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "cl_d", 0x00ad, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "cl_e", 0x00ae, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "ccc", 0x00af, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "se_0", 0x00b0, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "sec", 0x00a1, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "sev", 0x00b2, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "se_3", 0x00b3, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "sez", 0x00b4, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "se_5", 0x00b5, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "se_6", 0x00b6, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "se_7", 0x00b7, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "sen", 0x00b8, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "se_9", 0x00b9, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "se_a", 0x00ba, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "se_b", 0x00bb, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "se_c", 0x00bc, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "se_d", 0x00bd, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "se_e", 0x00be, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "scc", 0x00bf, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_BASIC },
+ { "swab", 0x00c0, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "br", 0x0100, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "bne", 0x0200, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "beq", 0x0300, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "bge", 0x0400, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "blt", 0x0500, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "bgt", 0x0600, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "ble", 0x0700, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "jsr", 0x0800, 0xfe00, PDP11_OPCODE_REG_OP, PDP11_BASIC },
+ { "clr", 0x0a00, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "com", 0x0a40, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "inc", 0x0a80, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "dec", 0x0ac0, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "neg", 0x0b00, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "adc", 0x0b40, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "sbc", 0x0b80, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "tst", 0x0bc0, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "ror", 0x0c00, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "rol", 0x0c40, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "asr", 0x0c80, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "asl", 0x0cc0, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "mark", 0x0d00, 0xffc0, PDP11_OPCODE_OP, PDP11_LEIS },
+ { "mfpi", 0x0d40, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "mtpi", 0x0d80, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "sxt", 0x0dc0, 0xffc0, PDP11_OPCODE_OP, PDP11_LEIS },
+ { "csm", 0x0e00, 0xffc0, PDP11_OPCODE_OP, PDP11_CSM },
+ { "tstset", 0x0e40, 0xffc0, PDP11_OPCODE_OP, PDP11_MPROC },
+ { "wrtlck", 0x0e80, 0xffc0, PDP11_OPCODE_OP, PDP11_MPROC },
+/*{ "", 0x0ec0, 0xffe0, PDP11_OPCODE_ILLEGAL, PDP11_NONE },*/
+ { "mov", 0x1000, 0xf000, PDP11_OPCODE_OP_OP, PDP11_BASIC },
+ { "cmp", 0x2000, 0xf000, PDP11_OPCODE_OP_OP, PDP11_BASIC },
+ { "bit", 0x3000, 0xf000, PDP11_OPCODE_OP_OP, PDP11_BASIC },
+ { "bic", 0x4000, 0xf000, PDP11_OPCODE_OP_OP, PDP11_BASIC },
+ { "bis", 0x5000, 0xf000, PDP11_OPCODE_OP_OP, PDP11_BASIC },
+ { "add", 0x6000, 0xf000, PDP11_OPCODE_OP_OP, PDP11_BASIC },
+ { "mul", 0x7000, 0xfe00, PDP11_OPCODE_REG_OP_REV,PDP11_EIS },
+ { "div", 0x7200, 0xfe00, PDP11_OPCODE_REG_OP_REV,PDP11_EIS },
+ { "ash", 0x7400, 0xfe00, PDP11_OPCODE_REG_OP_REV,PDP11_EIS },
+ { "ashc", 0x7600, 0xfe00, PDP11_OPCODE_REG_OP_REV,PDP11_EIS },
+ { "xor", 0x7800, 0xfe00, PDP11_OPCODE_REG_OP, PDP11_LEIS },
+ { "fadd", 0x7a00, 0xfff8, PDP11_OPCODE_REG, PDP11_FIS },
+ { "fsub", 0x7a08, 0xfff8, PDP11_OPCODE_REG, PDP11_FIS },
+ { "fmul", 0x7a10, 0xfff8, PDP11_OPCODE_REG, PDP11_FIS },
+ { "fdiv", 0x7a18, 0xfff8, PDP11_OPCODE_REG, PDP11_FIS },
+/*{ "", 0x7a20, 0xffe0, PDP11_OPCODE_ILLEGAL, PDP11_NONE },*/
+/*{ "", 0x7a40, 0xffc0, PDP11_OPCODE_ILLEGAL, PDP11_NONE },*/
+/*{ "", 0x7a80, 0xff80, PDP11_OPCODE_ILLEGAL, PDP11_NONE },*/
+/*{ "", 0x7b00, 0xffe0, PDP11_OPCODE_ILLEGAL, PDP11_NONE },*/
+ { "l2dr", 0x7c10, 0xfff8, PDP11_OPCODE_REG, PDP11_CIS },/*l2d*/
+ { "movc", 0x7c18, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "movrc", 0x7c19, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "movtc", 0x7c1a, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "locc", 0x7c20, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "skpc", 0x7c21, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "scanc", 0x7c22, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "spanc", 0x7c23, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cmpc", 0x7c24, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "matc", 0x7c25, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "addn", 0x7c28, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "subn", 0x7c29, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cmpn", 0x7c2a, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cvtnl", 0x7c2b, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cvtpn", 0x7c2c, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cvtnp", 0x7c2d, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "ashn", 0x7c2e, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cvtln", 0x7c2f, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "l3dr", 0x7c30, 0xfff8, PDP11_OPCODE_REG, PDP11_CIS },/*l3d*/
+ { "addp", 0x7c38, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "subp", 0x7c39, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cmpp", 0x7c3a, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cvtpl", 0x7c3b, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "mulp", 0x7c3c, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "divp", 0x7c3d, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "ashp", 0x7c3e, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cvtlp", 0x7c3f, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "movci", 0x7c58, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "movrci", 0x7c59, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "movtci", 0x7c5a, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "locci", 0x7c60, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "skpci", 0x7c61, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "scanci", 0x7c62, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "spanci", 0x7c63, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cmpci", 0x7c64, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "matci", 0x7c65, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "addni", 0x7c68, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "subni", 0x7c69, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cmpni", 0x7c6a, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cvtnli", 0x7c6b, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cvtpni", 0x7c6c, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cvtnpi", 0x7c6d, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "ashni", 0x7c6e, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cvtlni", 0x7c6f, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "addpi", 0x7c78, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "subpi", 0x7c79, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cmppi", 0x7c7a, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cvtpli", 0x7c7b, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "mulpi", 0x7c7c, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "divpi", 0x7c7d, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "ashpi", 0x7c7e, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "cvtlpi", 0x7c7f, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_CIS },
+ { "med", 0x7d80, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_UCODE },
+ { "xfc", 0x7dc0, 0xffc0, PDP11_OPCODE_IMM6, PDP11_UCODE },
+ { "sob", 0x7e00, 0xfe00, PDP11_OPCODE_REG_DISPL, PDP11_LEIS },
+ { "bpl", 0x8000, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "bmi", 0x8100, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "bhi", 0x8200, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "blos", 0x8300, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "bvc", 0x8400, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "bvs", 0x8500, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "bcc", 0x8600, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },/*bhis*/
+ { "bcs", 0x8700, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },/*blo*/
+ { "emt", 0x8800, 0xff00, PDP11_OPCODE_IMM8, PDP11_BASIC },
+ { "sys", 0x8900, 0xff00, PDP11_OPCODE_IMM8, PDP11_BASIC },/*trap*/
+ { "clrb", 0x8a00, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "comb", 0x8a40, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "incb", 0x8a80, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "decb", 0x8ac0, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "negb", 0x8b00, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "adcb", 0x8b40, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "sbcb", 0x8b80, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "tstb", 0x8bc0, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "rorb", 0x8c00, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "rolb", 0x8c40, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "asrb", 0x8c80, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "aslb", 0x8cc0, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "mtps", 0x8d00, 0xffc0, PDP11_OPCODE_OP, PDP11_MXPS },
+ { "mfpd", 0x8d40, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "mtpd", 0x8d80, 0xffc0, PDP11_OPCODE_OP, PDP11_BASIC },
+ { "mfps", 0x8dc0, 0xffc0, PDP11_OPCODE_OP, PDP11_MXPS },
+ { "movb", 0x9000, 0xf000, PDP11_OPCODE_OP_OP, PDP11_BASIC },
+ { "cmpb", 0xa000, 0xf000, PDP11_OPCODE_OP_OP, PDP11_BASIC },
+ { "bitb", 0xb000, 0xf000, PDP11_OPCODE_OP_OP, PDP11_BASIC },
+ { "bicb", 0xc000, 0xf000, PDP11_OPCODE_OP_OP, PDP11_BASIC },
+ { "bisb", 0xd000, 0xf000, PDP11_OPCODE_OP_OP, PDP11_BASIC },
+ { "sub", 0xe000, 0xf000, PDP11_OPCODE_OP_OP, PDP11_BASIC },
+ { "cfcc", 0xf000, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_FPP },
+ { "setf", 0xf001, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_FPP },
+ { "seti", 0xf002, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_FPP },
+ { "ldub", 0xf003, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_UCODE },
+ /* fpp trap 0xf004..0xf008 */
+ { "setd", 0xf009, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_FPP },
+ { "setl", 0xf00a, 0xffff, PDP11_OPCODE_NO_OPS, PDP11_FPP },
+ /* fpp trap 0xf00b..0xf03f */
+ { "ldfps", 0xf040, 0xffc0, PDP11_OPCODE_OP, PDP11_FPP },
+ { "stfps", 0xf080, 0xffc0, PDP11_OPCODE_OP, PDP11_FPP },
+ { "stst", 0xf0c0, 0xffc0, PDP11_OPCODE_OP, PDP11_FPP },
+ { "clrf", 0xf100, 0xffc0, PDP11_OPCODE_OP, PDP11_FPP },
+ { "tstf", 0xf140, 0xffc0, PDP11_OPCODE_OP, PDP11_FPP },
+ { "absf", 0xf180, 0xffc0, PDP11_OPCODE_OP, PDP11_FPP },
+ { "negf", 0xf1c0, 0xffc0, PDP11_OPCODE_OP, PDP11_FPP },
+ { "mulf", 0xf200, 0xff00, PDP11_OPCODE_AC_OP, PDP11_FPP },
+ { "modf", 0xf300, 0xff00, PDP11_OPCODE_AC_OP, PDP11_FPP },
+ { "addf", 0xf400, 0xff00, PDP11_OPCODE_AC_OP, PDP11_FPP },
+ { "ldf", 0xf500, 0xff00, PDP11_OPCODE_AC_OP, PDP11_FPP },/*movif*/
+ { "subf", 0xf600, 0xff00, PDP11_OPCODE_AC_OP, PDP11_FPP },
+ { "cmpf", 0xf700, 0xff00, PDP11_OPCODE_AC_OP, PDP11_FPP },
+ { "stf", 0xf800, 0xff00, PDP11_OPCODE_AC_OP, PDP11_FPP },/*movfi*/
+ { "divf", 0xf900, 0xff00, PDP11_OPCODE_AC_OP, PDP11_FPP },
+ { "stexp", 0xfa00, 0xff00, PDP11_OPCODE_AC_OP, PDP11_FPP },
+ { "stcfi", 0xfb00, 0xff00, PDP11_OPCODE_AC_OP, PDP11_FPP },
+ { "stcff", 0xfc00, 0xff00, PDP11_OPCODE_AC_OP, PDP11_FPP },/* ? */
+ { "ldexp", 0xfd00, 0xff00, PDP11_OPCODE_AC_OP, PDP11_FPP },
+ { "ldcif", 0xfe00, 0xff00, PDP11_OPCODE_AC_OP, PDP11_FPP },
+ { "ldcff", 0xff00, 0xff00, PDP11_OPCODE_AC_OP, PDP11_FPP },/* ? */
+};
+
+const struct pdp11_opcode pdp11_aliases[] =
+{
+ /* name, pattern, mask, opcode type, insn type */
+ { "l2d", 0x7c10, 0xfff8, PDP11_OPCODE_REG, PDP11_CIS },
+ { "l3d", 0x7c30, 0xfff8, PDP11_OPCODE_REG, PDP11_CIS },
+ { "bhis", 0x8600, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "blo", 0x8700, 0xff00, PDP11_OPCODE_DISPL, PDP11_BASIC },
+ { "trap", 0x8900, 0xff00, PDP11_OPCODE_IMM8, PDP11_BASIC },
+};
+
+const int pdp11_num_opcodes = sizeof pdp11_opcodes / sizeof pdp11_opcodes[0];
+const int pdp11_num_aliases = sizeof pdp11_aliases / sizeof pdp11_aliases[0];
mips-dis.c
mips-opc.c
ns32k-dis.c
+pdp11-dis.c
+pdp11-opc.c
pj-dis.c
pj-opc.c
ppc-dis.c
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-02-09 16:04-0800\n"
+"POT-Creation-Date: 2001-02-18 14:44-0800\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"
msgid "%02x\t\t*unknown*"
msgstr ""
-#: i386-dis.c:2741
+#: i386-dis.c:2742
msgid "<internal disassembler error>"
msgstr ""