diff options
author | nobody <> | 2003-05-20 21:35:29 +0000 |
---|---|---|
committer | nobody <> | 2003-05-20 21:35:29 +0000 |
commit | d5ba3fe094903763b7462e773b9d7e0291773d6c (patch) | |
tree | 74d273a1568648c0b5f108a6439a322735873c28 | |
parent | ec153107db6dd8b739f5d270196a5a39b1b14d4f (diff) | |
download | gdb-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.mt | 4 | ||||
-rw-r--r-- | gdb/config/i386/tm-nto.h | 33 | ||||
-rw-r--r-- | gdb/config/tm-nto.h | 61 | ||||
-rw-r--r-- | gdb/i386-nto-tdep.c | 298 | ||||
-rw-r--r-- | gdb/mi/mi-symbol-cmds.c | 67 | ||||
-rw-r--r-- | gdb/nto-tdep.c | 335 | ||||
-rw-r--r-- | gdb/nto-tdep.h | 156 | ||||
-rw-r--r-- | gdb/testsuite/gdb.asm/s390x.inc | 68 | ||||
-rw-r--r-- | gdb/testsuite/gdb.mi/mi1-symbol.exp | 61 | ||||
-rw-r--r-- | opcodes/po/ro.po | 446 |
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 *) ®set, core_reg_sect, + min (core_reg_size, sizeof (regset))); + nto_supply_gregset ((char *) ®set); + } + else if (which == 2) + { + memcpy ((char *) ®set, core_reg_sect, + min (core_reg_size, sizeof (regset))); + nto_supply_fpregset ((char *) ®set); + } +} + +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 (®set_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)" |