aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobody <>2003-05-20 21:35:29 +0000
committernobody <>2003-05-20 21:35:29 +0000
commitd5ba3fe094903763b7462e773b9d7e0291773d6c (patch)
tree74d273a1568648c0b5f108a6439a322735873c28
parentec153107db6dd8b739f5d270196a5a39b1b14d4f (diff)
downloadgdb-d5ba3fe094903763b7462e773b9d7e0291773d6c.zip
gdb-d5ba3fe094903763b7462e773b9d7e0291773d6c.tar.gz
gdb-d5ba3fe094903763b7462e773b9d7e0291773d6c.tar.bz2
This commit was manufactured by cvs2svn to create branch
'carlton_dictionary-branch'. Cherrypick from master 2003-05-20 21:35:28 UTC Kris Warkentin <kewarken@qnx.com> 'Fix regset numbering.': gdb/config/i386/nto.mt gdb/config/i386/tm-nto.h gdb/config/tm-nto.h gdb/i386-nto-tdep.c gdb/mi/mi-symbol-cmds.c gdb/nto-tdep.c gdb/nto-tdep.h gdb/testsuite/gdb.asm/s390x.inc gdb/testsuite/gdb.mi/mi1-symbol.exp opcodes/po/ro.po
-rw-r--r--gdb/config/i386/nto.mt4
-rw-r--r--gdb/config/i386/tm-nto.h33
-rw-r--r--gdb/config/tm-nto.h61
-rw-r--r--gdb/i386-nto-tdep.c298
-rw-r--r--gdb/mi/mi-symbol-cmds.c67
-rw-r--r--gdb/nto-tdep.c335
-rw-r--r--gdb/nto-tdep.h156
-rw-r--r--gdb/testsuite/gdb.asm/s390x.inc68
-rw-r--r--gdb/testsuite/gdb.mi/mi1-symbol.exp61
-rw-r--r--opcodes/po/ro.po446
10 files changed, 1529 insertions, 0 deletions
diff --git a/gdb/config/i386/nto.mt b/gdb/config/i386/nto.mt
new file mode 100644
index 0000000..6655f3e
--- /dev/null
+++ b/gdb/config/i386/nto.mt
@@ -0,0 +1,4 @@
+# Target: Intel 386 running qnx6.
+TDEPFILES = i386-tdep.o i387-tdep.o corelow.o solib.o solib-svr4.o \
+ i386-nto-tdep.o nto-tdep.o remote-nto.o
+TM_FILE = tm-nto.h
diff --git a/gdb/config/i386/tm-nto.h b/gdb/config/i386/tm-nto.h
new file mode 100644
index 0000000..ff5eb78
--- /dev/null
+++ b/gdb/config/i386/tm-nto.h
@@ -0,0 +1,33 @@
+/* QNX Neutrino target header.
+
+ Copyright 2003 Free Software Foundation, Inc.
+
+ This code was donated by QNX Software Systems Ltd.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 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. */
+
+#ifndef TM_NTO_H
+#define TM_NTO_H 1
+
+/* Pick up most of what we need from the generic i386 target include file. */
+#include "i386/tm-i386.h"
+#include "tm-nto.h"
+
+#include "solib.h"
+
+#endif /* TM_NTO_H */
diff --git a/gdb/config/tm-nto.h b/gdb/config/tm-nto.h
new file mode 100644
index 0000000..359ff06
--- /dev/null
+++ b/gdb/config/tm-nto.h
@@ -0,0 +1,61 @@
+/* Target machine sub-description for QNX Neutrino version 6.
+ This is included by other tm-*.h files to specify nto specific
+ stuff.
+
+ Copyright 2003 Free Software Foundation, Inc.
+
+ This code was donated by QNX Software Systems Ltd.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 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. */
+
+#ifndef _TM_QNXNTO_H
+#define _TM_QNXNTO_H
+
+#include "tm-sysv4.h"
+
+/* Setup the valid realtime signal range. */
+#define REALTIME_LO 41
+#define REALTIME_HI 56
+
+/* Set up the undefined useable signals. */
+#define RAW_SIGNAL_LO 32
+#define RAW_SIGNAL_HI (REALTIME_LO - 1)
+
+#define TARGET_SIGNAL_RAW_VALUES \
+TARGET_SIGNAL_RAW0, \
+TARGET_SIGNAL_RAW1, \
+TARGET_SIGNAL_RAW2, \
+TARGET_SIGNAL_RAW3, \
+TARGET_SIGNAL_RAW4, \
+TARGET_SIGNAL_RAW5, \
+TARGET_SIGNAL_RAW6, \
+TARGET_SIGNAL_RAW7, \
+TARGET_SIGNAL_RAW8
+
+#define TARGET_SIGNAL_RAW_TABLE \
+{"SIGNAL32", "Signal 32"}, \
+{"SIGNAL33", "Signal 33"}, \
+{"SIGNAL34", "Signal 34"}, \
+{"SIGNAL35", "Signal 35"}, \
+{"SIGNAL36", "Signal 36"}, \
+{"SIGNAL37", "Signal 37"}, \
+{"SIGNAL38", "Signal 38"}, \
+{"SIGNAL39", "Signal 39"}, \
+{"SIGNAL40", "Signal 40"}
+
+#endif /* _TM_QNXNTO_H */
diff --git a/gdb/i386-nto-tdep.c b/gdb/i386-nto-tdep.c
new file mode 100644
index 0000000..b35dd2a
--- /dev/null
+++ b/gdb/i386-nto-tdep.c
@@ -0,0 +1,298 @@
+/* i386-nto-tdep.c - i386 specific functionality for QNX Neutrino.
+
+ Copyright 2003 Free Software Foundation, Inc.
+
+ Contributed by QNX Software Systems Ltd.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 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 "gdb_string.h"
+#include "gdb_assert.h"
+#include "defs.h"
+#include "frame.h"
+#include "target.h"
+#include "regcache.h"
+#include "solib-svr4.h"
+#include "i386-tdep.h"
+#include "nto-tdep.h"
+#include "osabi.h"
+#include "i387-tdep.h"
+
+#ifndef X86_CPU_FXSR
+#define X86_CPU_FXSR (1L << 12)
+#endif
+
+/* Why 13? Look in our /usr/include/x86/context.h header at the
+ x86_cpu_registers structure and you'll see an 'exx' junk register
+ that is just filler. Don't ask me, ask the kernel guys. */
+#define NUM_GPREGS 13
+
+/* Map a GDB register number to an offset in the reg structure. */
+static int regmap[] = {
+ (7 * 4), /* eax */
+ (6 * 4), /* ecx */
+ (5 * 4), /* edx */
+ (4 * 4), /* ebx */
+ (11 * 4), /* esp */
+ (2 * 4), /* epb */
+ (1 * 4), /* esi */
+ (0 * 4), /* edi */
+ (8 * 4), /* eip */
+ (10 * 4), /* eflags */
+ (9 * 4), /* cs */
+ (12 * 4), /* ss */
+ (-1 * 4) /* filler */
+};
+
+/* Given a gdb regno, return the offset into Neutrino's register structure
+ or -1 if register is unknown. */
+static int
+nto_reg_offset (int regno)
+{
+ return (regno >= 0 && regno < NUM_GPREGS) ? regmap[regno] : -1;
+}
+
+static void
+i386nto_supply_gregset (char *gpregs)
+{
+ unsigned regno;
+ int empty = 0;
+
+ for (regno = 0; regno < FP0_REGNUM; regno++)
+ {
+ int offset = nto_reg_offset (regno);
+ if (offset == -1)
+ supply_register (regno, (char *) &empty);
+ else
+ supply_register (regno, gpregs + offset);
+ }
+}
+
+static void
+i386nto_supply_fpregset (char *fpregs)
+{
+ if (nto_cpuinfo_valid && nto_cpuinfo_flags | X86_CPU_FXSR)
+ i387_supply_fxsave (fpregs);
+ else
+ i387_supply_fsave (fpregs);
+}
+
+static void
+i386nto_supply_regset (int regset, char *data)
+{
+ switch (regset)
+ {
+ case NTO_REG_GENERAL: /* QNX has different ordering of GP regs than GDB. */
+ i386nto_supply_gregset (data);
+ break;
+ case NTO_REG_FLOAT:
+ i386nto_supply_fpregset (data);
+ break;
+ }
+}
+
+static int
+i386nto_regset_id (int regno)
+{
+ if (regno == -1)
+ return NTO_REG_END;
+ else if (regno < FP0_REGNUM)
+ return NTO_REG_GENERAL;
+ else if (regno < FPC_REGNUM)
+ return NTO_REG_FLOAT;
+
+ return -1; /* Error. */
+}
+
+static int
+i386nto_register_area (int regno, int regset, unsigned *off)
+{
+ int len;
+
+ *off = 0;
+ if (regset == NTO_REG_GENERAL)
+ {
+ if (regno == -1)
+ return NUM_GPREGS * 4;
+
+ *off = nto_reg_offset (regno);
+ if (*off == -1)
+ return 0;
+ return 4;
+ }
+ else if (regset == NTO_REG_FLOAT)
+ {
+ unsigned off_adjust, regsize, regset_size;
+
+ if (nto_cpuinfo_valid && nto_cpuinfo_flags | X86_CPU_FXSR)
+ {
+ off_adjust = 32;
+ regsize = 16;
+ regset_size = 512;
+ }
+ else
+ {
+ off_adjust = 28;
+ regsize = 10;
+ regset_size = 128;
+ }
+
+ if (regno == -1)
+ return regset_size;
+
+ *off = (regno - FP0_REGNUM) * regsize + off_adjust;
+ return 10;
+ /* Why 10 instead of regsize? GDB only stores 10 bytes per FP
+ register so if we're sending a register back to the target,
+ we only want pdebug to write 10 bytes so as not to clobber
+ the reserved 6 bytes in the fxsave structure. */
+ }
+ return -1;
+}
+
+static int
+i386nto_regset_fill (int regset, char *data)
+{
+ if (regset == NTO_REG_GENERAL)
+ {
+ int regno;
+
+ for (regno = 0; regno < NUM_GPREGS; regno++)
+ {
+ int offset = nto_reg_offset (regno);
+ if (offset != -1)
+ regcache_collect (regno, data + offset);
+ }
+ }
+ else if (regset == NTO_REG_FLOAT)
+ {
+ if (nto_cpuinfo_valid && nto_cpuinfo_flags | X86_CPU_FXSR)
+ i387_fill_fxsave (data, -1);
+ else
+ i387_fill_fsave (data, -1);
+ }
+ else
+ return -1;
+
+ return 0;
+}
+
+static struct link_map_offsets *
+i386nto_svr4_fetch_link_map_offsets (void)
+{
+ static struct link_map_offsets lmo;
+ static struct link_map_offsets *lmp = NULL;
+
+ if (lmp == NULL)
+ {
+ lmp = &lmo;
+
+ lmo.r_debug_size = 8; /* The actual size is 20 bytes, but
+ only 8 bytes are used. */
+ lmo.r_map_offset = 4;
+ lmo.r_map_size = 4;
+
+ lmo.link_map_size = 20; /* The actual size is 552 bytes, but
+ only 20 bytes are used. */
+ lmo.l_addr_offset = 0;
+ lmo.l_addr_size = 4;
+
+ lmo.l_name_offset = 4;
+ lmo.l_name_size = 4;
+
+ lmo.l_next_offset = 12;
+ lmo.l_next_size = 4;
+
+ lmo.l_prev_offset = 16;
+ lmo.l_prev_size = 4;
+ }
+
+ return lmp;
+}
+
+static int
+i386nto_pc_in_sigtramp (CORE_ADDR pc, char *name)
+{
+ return name && strcmp ("__signalstub", name) == 0;
+}
+
+#define SIGCONTEXT_OFFSET 136
+static CORE_ADDR
+i386nto_sigcontext_addr (struct frame_info *frame)
+{
+ if (get_next_frame (frame))
+ return get_frame_base (get_next_frame (frame)) + SIGCONTEXT_OFFSET;
+
+ return read_register (SP_REGNUM) + SIGCONTEXT_OFFSET;
+}
+
+static void
+init_i386nto_ops (void)
+{
+ current_nto_target.nto_regset_id = i386nto_regset_id;
+ current_nto_target.nto_supply_gregset = i386nto_supply_gregset;
+ current_nto_target.nto_supply_fpregset = i386nto_supply_fpregset;
+ current_nto_target.nto_supply_altregset = nto_dummy_supply_regset;
+ current_nto_target.nto_supply_regset = i386nto_supply_regset;
+ current_nto_target.nto_register_area = i386nto_register_area;
+ current_nto_target.nto_regset_fill = i386nto_regset_fill;
+ current_nto_target.nto_fetch_link_map_offsets =
+ i386nto_svr4_fetch_link_map_offsets;
+}
+
+static void
+i386nto_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+ /* NTO uses ELF. */
+ i386_elf_init_abi (info, gdbarch);
+
+ /* Neutrino rewinds to look more normal. */
+ set_gdbarch_decr_pc_after_break (gdbarch, 0);
+
+ /* NTO has shared libraries. */
+ set_gdbarch_in_solib_call_trampoline (gdbarch, in_plt_section);
+ set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target);
+
+ set_gdbarch_pc_in_sigtramp (gdbarch, i386nto_pc_in_sigtramp);
+ tdep->sigcontext_addr = i386nto_sigcontext_addr;
+ tdep->sc_pc_offset = 56;
+ tdep->sc_sp_offset = 68;
+
+ /* Setjmp()'s return PC saved in EDX (5). */
+ tdep->jb_pc_offset = 20; /* 5x32 bit ints in. */
+
+ set_solib_svr4_fetch_link_map_offsets (gdbarch,
+ i386nto_svr4_fetch_link_map_offsets);
+
+ /* Our loader handles solib relocations slightly differently than svr4. */
+ TARGET_SO_RELOCATE_SECTION_ADDRESSES = nto_relocate_section_addresses;
+
+ /* Supply a nice function to find our solibs. */
+ TARGET_SO_FIND_AND_OPEN_SOLIB = nto_find_and_open_solib;
+
+ init_i386nto_ops ();
+}
+
+void
+_initialize_i386nto_tdep (void)
+{
+ gdbarch_register_osabi (bfd_arch_i386, 0, GDB_OSABI_QNXNTO,
+ i386nto_init_abi);
+}
diff --git a/gdb/mi/mi-symbol-cmds.c b/gdb/mi/mi-symbol-cmds.c
new file mode 100644
index 0000000..1d86d21
--- /dev/null
+++ b/gdb/mi/mi-symbol-cmds.c
@@ -0,0 +1,67 @@
+/* MI Command Set - symbol commands.
+ Copyright 2003 Free Software Foundation, Inc.
+
+ This file is part of GDB.
+
+ This program is free software; you can 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 "defs.h"
+#include "mi-cmds.h"
+#include "symtab.h"
+#include "ui-out.h"
+
+/* SYMBOL-LIST-LINES:
+
+ Print the list of all pc addresses and lines of code for
+ the provided (full or base) source file name. The entries
+ are sorted in ascending PC order. */
+
+enum mi_cmd_result
+mi_cmd_symbol_list_lines (char *command, char **argv, int argc)
+{
+ char *filename;
+ struct symtab *s;
+ int i;
+ struct cleanup *cleanup_stack, *cleanup_tuple;
+
+ if (argc != 1)
+ error ("mi_cmd_symbol_list_lines: Usage: SOURCE_FILENAME");
+
+ filename = argv[0];
+ s = lookup_symtab (filename);
+
+ if (s == NULL)
+ error ("mi_cmd_symbol_list_lines: Unknown source file name.");
+
+ /* Now, dump the associated line table. The pc addresses are already
+ sorted by increasing values in the symbol table, so no need to
+ perform any other sorting. */
+
+ cleanup_stack = make_cleanup_ui_out_list_begin_end (uiout, "lines");
+
+ if (LINETABLE (s) != NULL && LINETABLE (s)->nitems > 0)
+ for (i = 0; i < LINETABLE (s)->nitems; i++)
+ {
+ cleanup_tuple = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
+ ui_out_field_core_addr (uiout, "pc", LINETABLE (s)->item[i].pc);
+ ui_out_field_int (uiout, "line", LINETABLE (s)->item[i].line);
+ do_cleanups (cleanup_tuple);
+ }
+
+ do_cleanups (cleanup_stack);
+
+ return MI_CMD_DONE;
+}
diff --git a/gdb/nto-tdep.c b/gdb/nto-tdep.c
new file mode 100644
index 0000000..94f156e
--- /dev/null
+++ b/gdb/nto-tdep.c
@@ -0,0 +1,335 @@
+/* nto-tdep.c - general QNX Neutrino target functionality.
+
+ Copyright 2003 Free Software Foundation, Inc.
+
+ Contributed by QNX Software Systems Ltd.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 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 "gdb_stat.h"
+#include "gdb_string.h"
+#include "nto-tdep.h"
+#include "top.h"
+#include "cli/cli-decode.h"
+#include "cli/cli-cmds.h"
+#include "inferior.h"
+#include "gdbarch.h"
+#include "bfd.h"
+#include "elf-bfd.h"
+#include "solib-svr4.h"
+#include "gdbcore.h"
+
+#ifdef __CYGWIN__
+#include <sys/cygwin.h>
+#endif
+
+#ifdef __CYGWIN__
+static char default_nto_target[] = "C:\\QNXsdk\\target\\qnx6";
+#elif defined(__sun__) || defined(linux)
+static char default_nto_target[] = "/opt/QNXsdk/target/qnx6";
+#else
+static char default_nto_target[] = "";
+#endif
+
+struct nto_target_ops current_nto_target;
+
+static char *
+nto_target (void)
+{
+ char *p = getenv ("QNX_TARGET");
+
+#ifdef __CYGWIN__
+ static char buf[PATH_MAX];
+ if (p)
+ cygwin_conv_to_posix_path (p, buf);
+ else
+ cygwin_conv_to_posix_path (default_nto_target, buf);
+ return buf;
+#else
+ return p ? p : default_nto_target;
+#endif
+}
+
+/* Take a string such as i386, rs6000, etc. and map it onto CPUTYPE_X86,
+ CPUTYPE_PPC, etc. as defined in nto-share/dsmsgs.h. */
+int
+nto_map_arch_to_cputype (const char *arch)
+{
+ if (!strcmp (arch, "i386") || !strcmp (arch, "x86"))
+ return CPUTYPE_X86;
+ if (!strcmp (arch, "rs6000") || !strcmp (arch, "ppc"))
+ return CPUTYPE_PPC;
+ if (!strcmp (arch, "mips"))
+ return CPUTYPE_MIPS;
+ if (!strcmp (arch, "arm"))
+ return CPUTYPE_ARM;
+ if (!strcmp (arch, "sh"))
+ return CPUTYPE_SH;
+ return CPUTYPE_UNKNOWN;
+}
+
+int
+nto_find_and_open_solib (char *solib, unsigned o_flags, char **temp_pathname)
+{
+ char *buf, arch_path[PATH_MAX], *nto_root, *endian;
+ const char *arch;
+ char *path_fmt = "%s/lib:%s/usr/lib:%s/usr/photon/lib\
+:%s/usr/photon/dll:%s/lib/dll";
+
+ nto_root = nto_target ();
+ if (strcmp (TARGET_ARCHITECTURE->arch_name, "i386") == 0)
+ {
+ arch = "x86";
+ endian = "";
+ }
+ else if (strcmp (TARGET_ARCHITECTURE->arch_name, "rs6000") == 0)
+ {
+ arch = "ppc";
+ endian = "be";
+ }
+ else
+ {
+ arch = TARGET_ARCHITECTURE->arch_name;
+ endian = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? "be" : "le";
+ }
+
+ sprintf (arch_path, "%s/%s%s", nto_root, arch, endian);
+
+ buf = alloca (strlen (path_fmt) + strlen (arch_path) * 5 + 1);
+ sprintf (buf, path_fmt, arch_path, arch_path, arch_path, arch_path,
+ arch_path);
+
+ return openp (buf, 1, solib, o_flags, 0, temp_pathname);
+}
+
+void
+nto_init_solib_absolute_prefix (void)
+{
+ char buf[PATH_MAX * 2], arch_path[PATH_MAX];
+ char *nto_root, *endian;
+ const char *arch;
+
+ nto_root = nto_target ();
+ if (strcmp (TARGET_ARCHITECTURE->arch_name, "i386") == 0)
+ {
+ arch = "x86";
+ endian = "";
+ }
+ else if (strcmp (TARGET_ARCHITECTURE->arch_name, "rs6000") == 0)
+ {
+ arch = "ppc";
+ endian = "be";
+ }
+ else
+ {
+ arch = TARGET_ARCHITECTURE->arch_name;
+ endian = TARGET_BYTE_ORDER == BFD_ENDIAN_BIG ? "be" : "le";
+ }
+
+ sprintf (arch_path, "%s/%s%s", nto_root, arch, endian);
+
+ sprintf (buf, "set solib-absolute-prefix %s", arch_path);
+ execute_command (buf, 0);
+}
+
+char **
+nto_parse_redirection (char *pargv[], char **pin, char **pout, char **perr)
+{
+ char **argv;
+ char *in, *out, *err, *p;
+ int argc, i, n;
+
+ for (n = 0; pargv[n]; n++);
+ if (n == 0)
+ return NULL;
+ in = "";
+ out = "";
+ err = "";
+
+ argv = xcalloc (n + 1, sizeof argv[0]);
+ argc = n;
+ for (i = 0, n = 0; n < argc; n++)
+ {
+ p = pargv[n];
+ if (*p == '>')
+ {
+ p++;
+ if (*p)
+ out = p;
+ else
+ out = pargv[++n];
+ }
+ else if (*p == '<')
+ {
+ p++;
+ if (*p)
+ in = p;
+ else
+ in = pargv[++n];
+ }
+ else if (*p++ == '2' && *p++ == '>')
+ {
+ if (*p == '&' && *(p + 1) == '1')
+ err = out;
+ else if (*p)
+ err = p;
+ else
+ err = pargv[++n];
+ }
+ else
+ argv[i++] = pargv[n];
+ }
+ *pin = in;
+ *pout = out;
+ *perr = err;
+ return argv;
+}
+
+/* The struct lm_info, LM_ADDR, and nto_truncate_ptr are copied from
+ solib-svr4.c to support nto_relocate_section_addresses
+ which is different from the svr4 version. */
+
+struct lm_info
+{
+ /* Pointer to copy of link map from inferior. The type is char *
+ rather than void *, so that we may use byte offsets to find the
+ various fields without the need for a cast. */
+ char *lm;
+};
+
+static CORE_ADDR
+LM_ADDR (struct so_list *so)
+{
+ struct link_map_offsets *lmo = nto_fetch_link_map_offsets ();
+
+ return (CORE_ADDR) extract_signed_integer (so->lm_info->lm +
+ lmo->l_addr_offset,
+ lmo->l_addr_size);
+}
+
+static CORE_ADDR
+nto_truncate_ptr (CORE_ADDR addr)
+{
+ if (TARGET_PTR_BIT == sizeof (CORE_ADDR) * 8)
+ /* We don't need to truncate anything, and the bit twiddling below
+ will fail due to overflow problems. */
+ return addr;
+ else
+ return addr & (((CORE_ADDR) 1 << TARGET_PTR_BIT) - 1);
+}
+
+Elf_Internal_Phdr *
+find_load_phdr (bfd *abfd)
+{
+ Elf_Internal_Phdr *phdr;
+ unsigned int i;
+
+ if (!elf_tdata (abfd))
+ return NULL;
+
+ phdr = elf_tdata (abfd)->phdr;
+ for (i = 0; i < elf_elfheader (abfd)->e_phnum; i++, phdr++)
+ {
+ if (phdr->p_type == PT_LOAD && (phdr->p_flags & PF_X))
+ return phdr;
+ }
+ return NULL;
+}
+
+void
+nto_relocate_section_addresses (struct so_list *so, struct section_table *sec)
+{
+ /* Neutrino treats the l_addr base address field in link.h as different than
+ the base address in the System V ABI and so the offset needs to be
+ calculated and applied to relocations. */
+ Elf_Internal_Phdr *phdr = find_load_phdr (sec->bfd);
+ unsigned vaddr = phdr ? phdr->p_vaddr : 0;
+
+ sec->addr = nto_truncate_ptr (sec->addr + LM_ADDR (so) - vaddr);
+ sec->endaddr = nto_truncate_ptr (sec->endaddr + LM_ADDR (so) - vaddr);
+}
+
+static void
+fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
+ int which, CORE_ADDR reg_addr)
+{
+ nto_regset_t regset;
+
+/* See corelow.c:get_core_registers for values of WHICH. */
+ if (which == 0)
+ {
+ memcpy ((char *) &regset, core_reg_sect,
+ min (core_reg_size, sizeof (regset)));
+ nto_supply_gregset ((char *) &regset);
+ }
+ else if (which == 2)
+ {
+ memcpy ((char *) &regset, core_reg_sect,
+ min (core_reg_size, sizeof (regset)));
+ nto_supply_fpregset ((char *) &regset);
+ }
+}
+
+void
+nto_dummy_supply_regset (char *regs)
+{
+ /* Do nothing. */
+}
+
+/* Register that we are able to handle ELF file formats using standard
+ procfs "regset" structures. */
+static struct core_fns regset_core_fns = {
+ bfd_target_elf_flavour, /* core_flavour */
+ default_check_format, /* check_format */
+ default_core_sniffer, /* core_sniffer */
+ fetch_core_registers, /* core_read_registers */
+ NULL /* next */
+};
+
+void
+_initialize_nto_tdep (void)
+{
+ add_setshow_cmd ("nto-debug", class_maintenance, var_zinteger,
+ &nto_internal_debugging, "Set QNX NTO internal debugging.\n\
+When non-zero, nto specific debug info is\n\
+displayed. Different information is displayed\n\
+for different positive values.", "Show QNX NTO internal debugging.\n",
+ NULL, NULL, &setdebuglist, &showdebuglist);
+
+ /* We use SIG45 for pulses, or something, so nostop, noprint
+ and pass them. */
+ signal_stop_update (target_signal_from_name ("SIG45"), 0);
+ signal_print_update (target_signal_from_name ("SIG45"), 0);
+ signal_pass_update (target_signal_from_name ("SIG45"), 1);
+
+ /* By default we don't want to stop on these two, but we do want to pass. */
+#if defined(SIGSELECT)
+ signal_stop_update (SIGSELECT, 0);
+ signal_print_update (SIGSELECT, 0);
+ signal_pass_update (SIGSELECT, 1);
+#endif
+
+#if defined(SIGPHOTON)
+ signal_stop_update (SIGPHOTON, 0);
+ signal_print_update (SIGPHOTON, 0);
+ signal_pass_update (SIGPHOTON, 1);
+#endif
+
+ /* Register core file support. */
+ add_core_fns (&regset_core_fns);
+}
diff --git a/gdb/nto-tdep.h b/gdb/nto-tdep.h
new file mode 100644
index 0000000..e22e8fd
--- /dev/null
+++ b/gdb/nto-tdep.h
@@ -0,0 +1,156 @@
+/* nto-tdep.h - QNX Neutrino target header.
+
+ Copyright 2003 Free Software Foundation, Inc.
+
+ Contributed by QNX Software Systems Ltd.
+
+ This file is part of GDB.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 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. */
+
+#ifndef _NTO_TDEP_H
+#define _NTO_TDEP_H
+
+#include "defs.h"
+#include "solist.h"
+
+/* Generic functions in nto-tdep.c. */
+
+extern void nto_init_solib_absolute_prefix (void);
+
+char **nto_parse_redirection (char *start_argv[], char **in,
+ char **out, char **err);
+
+int proc_iterate_over_mappings (int (*func) (int, CORE_ADDR));
+
+void nto_relocate_section_addresses (struct so_list *, struct section_table *);
+
+int nto_map_arch_to_cputype (const char *);
+
+int nto_find_and_open_solib (char *, unsigned, char **);
+
+/* Dummy function for initializing nto_target_ops on targets which do
+ not define a particular regset. */
+void nto_dummy_supply_regset (char *regs);
+
+/* Target operations defined for Neutrino targets (<target>-nto-tdep.c). */
+
+struct nto_target_ops
+{
+ int nto_internal_debugging;
+ unsigned nto_cpuinfo_flags;
+ int nto_cpuinfo_valid;
+
+ int (*nto_regset_id) (int);
+ void (*nto_supply_gregset) (char *);
+ void (*nto_supply_fpregset) (char *);
+ void (*nto_supply_altregset) (char *);
+ void (*nto_supply_regset) (int, char *);
+ int (*nto_register_area) (int, int, unsigned *);
+ int (*nto_regset_fill) (int, char *);
+ struct link_map_offsets *(*nto_fetch_link_map_offsets) (void);
+};
+
+extern struct nto_target_ops current_nto_target;
+
+/* For 'maintenance debug nto-debug' command. */
+#define nto_internal_debugging \
+ (current_nto_target.nto_internal_debugging)
+
+/* The CPUINFO flags from the remote. Currently used by
+ i386 for fxsave but future proofing other hosts.
+ This is initialized in procfs_attach or nto_start_remote
+ depending on our host/target. It would only be invalid
+ if we were talking to an older pdebug which didn't support
+ the cpuinfo message. */
+#define nto_cpuinfo_flags \
+ (current_nto_target.nto_cpuinfo_flags)
+
+/* True if successfully retrieved cpuinfo from remote. */
+#define nto_cpuinfo_valid \
+ (current_nto_target.nto_cpuinfo_valid)
+
+/* Given a register, return an id that represents the Neutrino
+ regset it came from. If reg == -1 update all regsets. */
+#define nto_regset_id(reg) \
+ (*current_nto_target.nto_regset_id) (reg)
+
+#define nto_supply_gregset(regs) \
+ (*current_nto_target.nto_supply_gregset) (regs)
+
+#define nto_supply_fpregset(regs) \
+ (*current_nto_target.nto_supply_fpregset) (regs)
+
+#define nto_supply_altregset(regs) \
+ (*current_nto_target.nto_supply_altregset) (regs)
+
+/* Given a regset, tell gdb about registers stored in data. */
+#define nto_supply_regset(regset, data) \
+ (*current_nto_target.nto_supply_regset) (regset, data)
+
+/* Given a register and regset, calculate the offset into the regset
+ and stuff it into the last argument. If regno is -1, calculate the
+ size of the entire regset. Returns length of data, -1 if unknown
+ regset, 0 if unknown register. */
+#define nto_register_area(reg, regset, off) \
+ (*current_nto_target.nto_register_area) (reg, regset, off)
+
+/* Build the Neutrino register set info into the data buffer.
+ Return -1 if unknown regset, 0 otherwise. */
+#define nto_regset_fill(regset, data) \
+ (*current_nto_target.nto_regset_fill) (regset, data)
+
+/* Gives the fetch_link_map_offsets function exposure outside of
+ solib-svr4.c so that we can override relocate_section_addresses(). */
+#define nto_fetch_link_map_offsets() \
+ (*current_nto_target.nto_fetch_link_map_offsets) ()
+
+/* Keep this consistant with neutrino syspage.h. */
+enum
+{
+ CPUTYPE_X86,
+ CPUTYPE_PPC,
+ CPUTYPE_MIPS,
+ CPUTYPE_SPARE,
+ CPUTYPE_ARM,
+ CPUTYPE_SH,
+ CPUTYPE_UNKNOWN
+};
+
+enum
+{
+ OSTYPE_QNX4,
+ OSTYPE_NTO
+};
+
+/* These correspond to the DSMSG_* versions in dsmsgs.h. */
+enum
+{
+ NTO_REG_GENERAL,
+ NTO_REG_FLOAT,
+ NTO_REG_SYSTEM,
+ NTO_REG_ALT,
+ NTO_REG_END
+};
+
+typedef char qnx_reg64[8];
+
+typedef struct _debug_regs
+{
+ qnx_reg64 padding[1024];
+} nto_regset_t;
+
+#endif
diff --git a/gdb/testsuite/gdb.asm/s390x.inc b/gdb/testsuite/gdb.asm/s390x.inc
new file mode 100644
index 0000000..4e5bf2e
--- /dev/null
+++ b/gdb/testsuite/gdb.asm/s390x.inc
@@ -0,0 +1,68 @@
+### entry point code
+ .macro gdbasm_startup
+
+ # Align the stack pointer to an 8-byte boundary.
+ lghi %r0,-16
+ ngr %r15,%r0
+
+ # Reserve space for the standard stack frame:
+ # back chain, and space for the callee to save its registers.
+ aghi %r15,-168
+
+ # Zero this frame's back chain pointer.
+ xc 0(8,%r15),0(%r15)
+ .endm
+
+
+### Call a function.
+ .macro gdbasm_call subr
+ brasl %r14, \subr
+ .endm
+
+
+### Exit with a zero status.
+ .macro gdbasm_exit0
+ lghi %r2, 0
+ svc 1
+ .endm
+
+### Standard subroutine prologue.
+ .macro gdbasm_enter
+
+ # Save all the callee-saves registers. What the heck.
+ stmg %r6,%r15,48(%r15)
+
+ # Allocate the stack frame, and write the back chain pointer.
+ # Keep the original SP in %r11.
+ lgr %r11,%r15
+ aghi %r15,-168
+ stg %r11,0(%r15)
+ .endm
+
+
+### Standard subroutine epilogue.
+ .macro gdbasm_leave
+
+ # Restore all our registers. This also pops the frame, and
+ # restores our return address.
+ lmg %r6,%r15,216(%r15)
+
+ # Jump to the return address.
+ br %r14
+
+ .endm
+
+### Several nops.
+ .macro gdbasm_several_nops
+ lr %r0, %r0
+ lr %r0, %r0
+ lr %r0, %r0
+ lr %r0, %r0
+ .endm
+
+### Declare an `int' variable.
+ .macro gdbasm_datavar name value
+ .data
+\name:
+ .long \value
+ .endm
diff --git a/gdb/testsuite/gdb.mi/mi1-symbol.exp b/gdb/testsuite/gdb.mi/mi1-symbol.exp
new file mode 100644
index 0000000..f0da197
--- /dev/null
+++ b/gdb/testsuite/gdb.mi/mi1-symbol.exp
@@ -0,0 +1,61 @@
+# Copyright 2003 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU 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.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gdb@prep.ai.mit.edu
+
+#
+# The goal is not to test gdb functionality, which is done by other tests,
+# but to verify the correct output response to MI operations.
+#
+
+load_lib mi-support.exp
+set MIFLAGS "-i=mi1"
+
+gdb_exit
+if [mi_gdb_start] {
+ continue
+}
+
+set testfile "basics"
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug additional_flags=-DFAKEARGV}] != "" } {
+ gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
+}
+
+mi_run_to_main
+
+proc test_list_lines {} {
+ global mi_gdb_prompt
+ global hex
+ global decimal
+ global srcfile
+
+ # Test list-lines.
+ # Tests:
+ # -symbol-list-lines ${srcfile}
+
+ mi_gdb_test "-symbol-list-lines ${srcfile}" \
+ "\\^done,lines=\[\{pc=\"$hex\",line=\"$decimal\"\}.*\]" \
+ "symbol-list-lines for source file ${srcfile}"
+
+}
+
+test_list_lines
+
+mi_gdb_exit
+return 0
diff --git a/opcodes/po/ro.po b/opcodes/po/ro.po
new file mode 100644
index 0000000..72077ed
--- /dev/null
+++ b/opcodes/po/ro.po
@@ -0,0 +1,446 @@
+# Mesajele în limba român? pentru pachetul opcodes
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# Eugen Hoanca <eugenh@urban-grafx.ro>, 2003
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: opcodes 2.12.91\n"
+"POT-Creation-Date: 2002-07-23 15:55-0400\n"
+"PO-Revision-Date: 2003-04-28 08:32+0300\n"
+"Last-Translator: Eugen Hoanca <eugenh@urban-grafx.ro>\n"
+"Language-Team: Romanian <translation-team-ro@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: alpha-opc.c:335
+msgid "branch operand unaligned"
+msgstr "ramură operand nealiniată"
+
+#: alpha-opc.c:358 alpha-opc.c:380
+msgid "jump hint unaligned"
+msgstr "sugestie săritură(jump) nealiniată"
+
+#: arc-dis.c:52
+msgid "Illegal limm reference in last instruction!\n"
+msgstr "referință limm ilegală în ultima instrucțiune!\n"
+
+#: arm-dis.c:507
+msgid "<illegal precision>"
+msgstr "<precizie ilegală>"
+
+#: arm-dis.c:1010
+#, c-format
+msgid "Unrecognised register name set: %s\n"
+msgstr "Setare nume registru necunoscută: %s\n"
+
+#: arm-dis.c:1017
+#, c-format
+msgid "Unrecognised disassembler option: %s\n"
+msgstr "Opțiune dezasamblor necunoscută: %s\n"
+
+#: arm-dis.c:1191
+msgid ""
+"\n"
+"The following ARM specific disassembler options are supported for use with\n"
+"the -M switch:\n"
+msgstr ""
+"\n"
+"Opțiunile ARM de dezasamblor specifice următoare sunt permise cu folosirea\n"
+"switch-ului -M:\n"
+
+#: avr-dis.c:118 avr-dis.c:128
+msgid "undefined"
+msgstr "nedefinit(ă)"
+
+#: avr-dis.c:180
+msgid "Internal disassembler error"
+msgstr "Eroare internă de dezasamblor"
+
+#: avr-dis.c:228
+#, c-format
+msgid "unknown constraint `%c'"
+msgstr "constrângere necunoscută `%c'"
+
+#: cgen-asm.c:346 fr30-ibld.c:195 frv-ibld.c:195 m32r-ibld.c:195
+#: openrisc-ibld.c:195 xstormy16-ibld.c:195
+#, c-format
+msgid "operand out of range (%ld not between %ld and %ld)"
+msgstr "operand în afara intervalului (%ld nu este între %ld și %ld)"
+
+#: cgen-asm.c:367
+#, c-format
+msgid "operand out of range (%lu not between %lu and %lu)"
+msgstr "operand în afara intervalului (%lu nu este între %lu și %lu)"
+
+#: d30v-dis.c:312
+#, c-format
+msgid "<unknown register %d>"
+msgstr "<registru necunoscut %d>"
+
+#. Can't happen.
+#: dis-buf.c:57
+#, c-format
+msgid "Unknown error %d\n"
+msgstr "Eroare necunoscută %d\n"
+
+#: dis-buf.c:62
+#, c-format
+msgid "Address 0x%x is out of bounds.\n"
+msgstr "Adresa 0x%x este în afara limitelor (out of bounds).\n"
+
+#: fr30-asm.c:323 frv-asm.c:595 m32r-asm.c:325 openrisc-asm.c:244
+#: xstormy16-asm.c:231
+#, c-format
+msgid "Unrecognized field %d while parsing.\n"
+msgstr "Câmp necunoscut %d în analiză(parsing).\n"
+
+#: fr30-asm.c:373 frv-asm.c:645 m32r-asm.c:375 openrisc-asm.c:294
+#: xstormy16-asm.c:281
+msgid "missing mnemonic in syntax string"
+msgstr "mnemonică lipsă în sintaxă"
+
+#. We couldn't parse it.
+#: fr30-asm.c:509 fr30-asm.c:513 fr30-asm.c:600 fr30-asm.c:702 frv-asm.c:781
+#: frv-asm.c:785 frv-asm.c:872 frv-asm.c:974 m32r-asm.c:511 m32r-asm.c:515
+#: m32r-asm.c:602 m32r-asm.c:704 openrisc-asm.c:430 openrisc-asm.c:434
+#: openrisc-asm.c:521 openrisc-asm.c:623 xstormy16-asm.c:417
+#: xstormy16-asm.c:421 xstormy16-asm.c:508 xstormy16-asm.c:610
+msgid "unrecognized instruction"
+msgstr "instrucțiune necunoscută"
+
+#: fr30-asm.c:556 frv-asm.c:828 m32r-asm.c:558 openrisc-asm.c:477
+#: xstormy16-asm.c:464
+#, c-format
+msgid "syntax error (expected char `%c', found `%c')"
+msgstr "eroare de sintaxă ( se aștepta %c', s-a primit `%c')"
+
+#: fr30-asm.c:566 frv-asm.c:838 m32r-asm.c:568 openrisc-asm.c:487
+#: xstormy16-asm.c:474
+#, c-format
+msgid "syntax error (expected char `%c', found end of instruction)"
+msgstr "eroare de sintaxă (s-a așteptat char `%c' s-a primit sfârșit de instrucțiune)"
+
+#: fr30-asm.c:594 frv-asm.c:866 m32r-asm.c:596 openrisc-asm.c:515
+#: xstormy16-asm.c:502
+msgid "junk at end of line"
+msgstr "resturi(junk) la sfârșit de linie"
+
+#: fr30-asm.c:701 frv-asm.c:973 m32r-asm.c:703 openrisc-asm.c:622
+#: xstormy16-asm.c:609
+msgid "unrecognized form of instruction"
+msgstr "formă de instrucțiune necunoscută"
+
+#: fr30-asm.c:713 frv-asm.c:985 m32r-asm.c:715 openrisc-asm.c:634
+#: xstormy16-asm.c:621
+#, c-format
+msgid "bad instruction `%.50s...'"
+msgstr "instrucțiune greșită `%.50s...'"
+
+#: fr30-asm.c:716 frv-asm.c:988 m32r-asm.c:718 openrisc-asm.c:637
+#: xstormy16-asm.c:624
+#, c-format
+msgid "bad instruction `%.50s'"
+msgstr "instrucțiune greșită `%.50s'"
+
+#. Default text to print if an instruction isn't recognized.
+#: fr30-dis.c:39 frv-dis.c:39 m32r-dis.c:39 mmix-dis.c:282 openrisc-dis.c:39
+#: xstormy16-dis.c:39
+msgid "*unknown*"
+msgstr "*necunoscut(ă)*"
+
+#: fr30-dis.c:318 frv-dis.c:360 m32r-dis.c:249 openrisc-dis.c:136
+#: xstormy16-dis.c:169
+#, c-format
+msgid "Unrecognized field %d while printing insn.\n"
+msgstr "Câmp necunoscut %d la tipărirea insn.\n"
+
+#: fr30-ibld.c:166 frv-ibld.c:166 m32r-ibld.c:166 openrisc-ibld.c:166
+#: xstormy16-ibld.c:166
+#, c-format
+msgid "operand out of range (%ld not between %ld and %lu)"
+msgstr "operand în afara limitelor (%ld nu este între %ld și %lu)"
+
+#: fr30-ibld.c:179 frv-ibld.c:179 m32r-ibld.c:179 openrisc-ibld.c:179
+#: xstormy16-ibld.c:179
+#, c-format
+msgid "operand out of range (%lu not between 0 and %lu)"
+msgstr "operand în afara limitelor (%lu nu este între 0 și %lu)"
+
+#: fr30-ibld.c:730 frv-ibld.c:820 m32r-ibld.c:659 openrisc-ibld.c:633
+#: xstormy16-ibld.c:678
+#, c-format
+msgid "Unrecognized field %d while building insn.\n"
+msgstr "Câmp necunoscut %d în construire(building) insn.\n"
+
+#: fr30-ibld.c:937 frv-ibld.c:1103 m32r-ibld.c:792 openrisc-ibld.c:735
+#: xstormy16-ibld.c:826
+#, c-format
+msgid "Unrecognized field %d while decoding insn.\n"
+msgstr "Câmp necunoscut %d în decodare insn.\n"
+
+#: fr30-ibld.c:1086 frv-ibld.c:1348 m32r-ibld.c:902 openrisc-ibld.c:815
+#: xstormy16-ibld.c:939
+#, c-format
+msgid "Unrecognized field %d while getting int operand.\n"
+msgstr "Câmp necunoscut %d în preluare operand int.\n"
+
+#: fr30-ibld.c:1215 frv-ibld.c:1573 m32r-ibld.c:992 openrisc-ibld.c:875
+#: xstormy16-ibld.c:1032
+#, c-format
+msgid "Unrecognized field %d while getting vma operand.\n"
+msgstr "Câmp necunoscut %d în preluare operand vma.\n"
+
+#: fr30-ibld.c:1349 frv-ibld.c:1807 m32r-ibld.c:1090 openrisc-ibld.c:944
+#: xstormy16-ibld.c:1134
+#, c-format
+msgid "Unrecognized field %d while setting int operand.\n"
+msgstr "Câmp necunoscut %d în setare operand int.\n"
+
+#: fr30-ibld.c:1471 frv-ibld.c:2029 m32r-ibld.c:1176 openrisc-ibld.c:1001
+#: xstormy16-ibld.c:1224
+#, c-format
+msgid "Unrecognized field %d while setting vma operand.\n"
+msgstr "Câmp necunoscut %d în setare operand vma.\n"
+
+#: h8300-dis.c:385
+#, c-format
+msgid "Hmmmm %x"
+msgstr "Hmmmm %x"
+
+#: h8300-dis.c:396
+#, c-format
+msgid "Don't understand %x \n"
+msgstr "Nu înțeleg %x \n"
+
+#: h8500-dis.c:143
+#, c-format
+msgid "can't cope with insert %d\n"
+msgstr "nu fac față la inserarea %d\n"
+
+#. Couldn't understand anything.
+#: h8500-dis.c:350
+#, c-format
+msgid "%02x\t\t*unknown*"
+msgstr "%02x\t\t*necunoscut(ă)*"
+
+#: i386-dis.c:1649
+msgid "<internal disassembler error>"
+msgstr "<eroare internă de dezasamblor>"
+
+#: m10200-dis.c:199
+#, c-format
+msgid "unknown\t0x%02x"
+msgstr "necunoscut(ă)\t0x%02x"
+
+#: m10200-dis.c:339
+#, c-format
+msgid "unknown\t0x%04lx"
+msgstr "necunoscut(ă)\t0x%04lx"
+
+#: m10300-dis.c:685
+#, c-format
+msgid "unknown\t0x%04x"
+msgstr "necunoscut(ă)\t0x%04x"
+
+#: m68k-dis.c:429
+#, c-format
+msgid "<internal error in opcode table: %s %s>\n"
+msgstr "<eroare internă în tabel opcode: %s %s>\n"
+
+#: m68k-dis.c:1007
+#, c-format
+msgid "<function code %d>"
+msgstr "<cod funcție %d>"
+
+#: m88k-dis.c:255
+#, c-format
+msgid "# <dis error: %08x>"
+msgstr "# <eroare dez: %08x>"
+
+#: mips-dis.c:337
+#, c-format
+msgid "# internal error, undefined modifier(%c)"
+msgstr "# eroare internă, modificator nedefinit(%c)"
+
+#: mips-dis.c:1209
+#, c-format
+msgid "# internal disassembler error, unrecognised modifier (%c)"
+msgstr "# eroare internă de dezasamblor, modificator necunoscut (%c)"
+
+#: mmix-dis.c:34
+#, c-format
+msgid "Bad case %d (%s) in %s:%d\n"
+msgstr "Caz greșit %d (%s) in %s: %d\n"
+
+#: mmix-dis.c:44
+#, c-format
+msgid "Internal: Non-debugged code (test-case missing): %s:%d"
+msgstr "Intern: cod ne-depanat (caz test lipsă) %s:%d"
+
+#: mmix-dis.c:53
+msgid "(unknown)"
+msgstr "(necunoscut)"
+
+#: mmix-dis.c:517
+#, c-format
+msgid "*unknown operands type: %d*"
+msgstr "*tip necunoscut de operanzi: %d*"
+
+#. I and Z are output operands and can`t be immediate
+#. * A is an address and we can`t have the address of
+#. * an immediate either. We don't know how much to increase
+#. * aoffsetp by since whatever generated this is broken
+#. * anyway!
+#.
+#: ns32k-dis.c:628
+msgid "$<undefined>"
+msgstr "$<nedefinit>"
+
+#: ppc-opc.c:777 ppc-opc.c:810
+msgid "invalid conditional option"
+msgstr "opțiune condițională invalidă"
+
+#: ppc-opc.c:812
+msgid "attempt to set y bit when using + or - modifier"
+msgstr "se încearcă setarea bitului y în folosirea modificatorilor + sau -"
+
+#: ppc-opc.c:844 ppc-opc.c:896
+msgid "offset not a multiple of 4"
+msgstr "offsetul nu este multiplu de 4"
+
+#: ppc-opc.c:869
+msgid "offset not between -2048 and 2047"
+msgstr "offsetul nu este între -2048 și 2047"
+
+#: ppc-opc.c:894
+msgid "offset not between -8192 and 8191"
+msgstr "offsetul nu este între -8192 și 8191"
+
+#: ppc-opc.c:922
+msgid "ignoring least significant bits in branch offset"
+msgstr "se ignoră cei mai puțin semnificanți biți în offsetul ramurii(branch)"
+
+#: ppc-opc.c:956 ppc-opc.c:993
+msgid "illegal bitmask"
+msgstr "bitmask ilegal"
+
+#: ppc-opc.c:1066
+msgid "value out of range"
+msgstr "valoare în afara intervalului"
+
+#: ppc-opc.c:1142
+msgid "index register in load range"
+msgstr "registru index în interval de încărcare"
+
+#: ppc-opc.c:1158
+msgid "invalid register operand when updating"
+msgstr "registru de operand invalid în updatare"
+
+#. Mark as non-valid instruction
+#: sparc-dis.c:750
+msgid "unknown"
+msgstr "necunoscut(ă)"
+
+#: sparc-dis.c:825
+#, c-format
+msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
+msgstr "Eroare internă: opcode.h sparc greșit: \"%s\", %#.8lx, %#.8lx\n"
+
+#: sparc-dis.c:836
+#, c-format
+msgid "Internal error: bad sparc-opcode.h: \"%s\", %#.8lx, %#.8lx\n"
+msgstr "Eroare internă: opcode.h sparc greșit: \"%s\", %#.8lx, %#.8lx\n"
+
+#: sparc-dis.c:885
+#, c-format
+msgid "Internal error: bad sparc-opcode.h: \"%s\" == \"%s\"\n"
+msgstr "Eroare internă: opcode.h sparc greșit: \"%s\" == \"%s\"\n"
+
+#: v850-dis.c:224
+#, c-format
+msgid "unknown operand shift: %x\n"
+msgstr "schimbare(shift) de oberand necunoscută: %x\n"
+
+#: v850-dis.c:236
+#, c-format
+msgid "unknown pop reg: %d\n"
+msgstr "pop reg necunoscut: %d\n"
+
+#. The functions used to insert and extract complicated operands.
+#. Note: There is a conspiracy between these functions and
+#. v850_insert_operand() in gas/config/tc-v850.c. Error messages
+#. containing the string 'out of range' will be ignored unless a
+#. specific command line option is given to GAS.
+#: v850-opc.c:68
+msgid "displacement value is not in range and is not aligned"
+msgstr "valoarea deplasării în afara intervalului și nealiniată"
+
+#: v850-opc.c:69
+msgid "displacement value is out of range"
+msgstr "valoare deplasare în afara intervalului"
+
+#: v850-opc.c:70
+msgid "displacement value is not aligned"
+msgstr "valoarea deplasării nu este aliniată"
+
+#: v850-opc.c:72
+msgid "immediate value is out of range"
+msgstr "valoare directă(immediate) în afara intervalului"
+
+#: v850-opc.c:83
+msgid "branch value not in range and to odd offset"
+msgstr "valoare ramură(branch) în afara intervalului și la offset impar"
+
+#: v850-opc.c:85 v850-opc.c:117
+msgid "branch value out of range"
+msgstr "valoare ramură(branch) în afara intervalului"
+
+#: v850-opc.c:88 v850-opc.c:120
+msgid "branch to odd offset"
+msgstr "ramură(branch) la offset impar"
+
+#: v850-opc.c:115
+msgid "branch value not in range and to an odd offset"
+msgstr "valoare ramură(branch) în afara intervalului și la offset impar"
+
+#: v850-opc.c:346
+msgid "invalid register for stack adjustment"
+msgstr "registru invalid pentru modificare stivă"
+
+#: v850-opc.c:370
+msgid "immediate value not in range and not even"
+msgstr "valoare directă(immediate) în afara intervalului și impară"
+
+#: v850-opc.c:375
+msgid "immediate value must be even"
+msgstr "valoarea directă(immediate) trebuie să fie pară"
+
+#: xstormy16-asm.c:74
+msgid "Bad register in preincrement"
+msgstr "Registru greșit în preincrementare"
+
+#: xstormy16-asm.c:79
+msgid "Bad register in postincrement"
+msgstr "Registru greșit în postincrementare"
+
+#: xstormy16-asm.c:81
+msgid "Bad register name"
+msgstr "Nume registru greșit"
+
+#: xstormy16-asm.c:85
+msgid "Label conflicts with register name"
+msgstr "Eticheta(label) se află în conflict cu numele de registru"
+
+#: xstormy16-asm.c:89
+msgid "Label conflicts with `Rx'"
+msgstr "Eticheta(label) se află în conflict cu `Rx'"
+
+#: xstormy16-asm.c:91
+msgid "Bad immediate expression"
+msgstr "Expresie directă(immediate) greșită"
+
+#: xstormy16-asm.c:120
+msgid "Small operand was not an immediate number"
+msgstr "Operandul redus nu a fost un număr direct(immediate)"