diff options
author | Jim Blandy <jimb@codesourcery.com> | 2000-04-19 23:17:18 +0000 |
---|---|---|
committer | Jim Blandy <jimb@codesourcery.com> | 2000-04-19 23:17:18 +0000 |
commit | 4e32685259347bae0453b62a1418395d7771ec25 (patch) | |
tree | 83aa30bf54d858ccb51b304e24936072fda32d30 /gdb/i386v-nat.c | |
parent | 77d2aaae4532d2de3b7d0b79e08c8c3024a87e6b (diff) | |
download | gdb-4e32685259347bae0453b62a1418395d7771ec25.zip gdb-4e32685259347bae0453b62a1418395d7771ec25.tar.gz gdb-4e32685259347bae0453b62a1418395d7771ec25.tar.bz2 |
I figured out what was going on.
Since nobody had made any changes to i386v-nat.c on sourceware since
the repository was started, we were still getting the version from the
vendor branch. (If you don't understand how the vendor branch works,
treasure your innocence.) I naively assumed that, to see what changes
had been introduced in version 1.2, one should diff it with 1.1,
as they say in TV Guide, "with hilarious results".
This change simply restores i386v-nat.c to what it used to be before I
started bungling around. The text of this revision should be
identical to that of revision 1.1.1.3, which was the former head of
the trunk. (Yes, 1.1.1.3 was the head of the trunk. As I said,
treasure your innocence.)
Diffstat (limited to 'gdb/i386v-nat.c')
-rw-r--r-- | gdb/i386v-nat.c | 157 |
1 files changed, 37 insertions, 120 deletions
diff --git a/gdb/i386v-nat.c b/gdb/i386v-nat.c index 5618687..0bf702c 100644 --- a/gdb/i386v-nat.c +++ b/gdb/i386v-nat.c @@ -1,30 +1,31 @@ /* Intel 386 native support for SYSV systems (pre-SVR4). Copyright (C) 1988, 89, 91, 92, 94, 96, 1998 Free Software Foundation, Inc. -This file is part of GDB. + 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 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. + 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. */ + 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" #ifdef HAVE_PTRACE_H -# include <ptrace.h> +#include <ptrace.h> #else -# ifdef HAVE_SYS_PTRACE_H -# include <sys/ptrace.h> -# endif +#ifdef HAVE_SYS_PTRACE_H +#include <sys/ptrace.h> +#endif #endif #include "frame.h" @@ -52,11 +53,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ */ #ifdef TARGET_HAS_HARDWARE_WATCHPOINTS -# ifdef HAVE_ASM_DEBUGREG_H -# include <asm/debugreg.h> -# else -# include <sys/debugreg.h> -# endif +#ifdef HAVE_ASM_DEBUGREG_H +#include <asm/debugreg.h> +#else +#include <sys/debugreg.h> +#endif #endif #include <sys/file.h> @@ -69,11 +70,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "floatformat.h" #include "target.h" - + /* this table must line up with REGISTER_NAMES in tm-i386v.h */ /* symbols like 'EAX' come from <sys/reg.h> */ -static int regmap[] = +static int regmap[] = { EAX, ECX, EDX, EBX, UESP, EBP, ESI, EDI, @@ -96,22 +97,22 @@ i386_register_u_addr (blockend, regnum) ubase = blockend; /* FIXME: Should have better way to test floating point range */ - if (regnum >= FP0_REGNUM && regnum <= (FP0_REGNUM + 7)) + if (regnum >= FP0_REGNUM && regnum <= (FP0_REGNUM + 7)) { -#ifdef KSTKSZ /* SCO, and others? */ +#ifdef KSTKSZ /* SCO, and others? */ ubase += 4 * (SS + 1) - KSTKSZ; - fpstate = ubase + ((char *)&u.u_fps.u_fpstate - (char *)&u); + fpstate = ubase + ((char *) &u.u_fps.u_fpstate - (char *) &u); return (fpstate + 0x1c + 10 * (regnum - FP0_REGNUM)); #else - fpstate = ubase + ((char *)&u.i387.st_space - (char *)&u); + fpstate = ubase + ((char *) &u.i387.st_space - (char *) &u); return (fpstate + 10 * (regnum - FP0_REGNUM)); #endif - } + } else { return (ubase + 4 * regmap[regnum]); } - + } int @@ -134,7 +135,7 @@ static CORE_ADDR address_lookup[DR_LASTADDR - DR_FIRSTADDR + 1]; static int i386_insert_aligned_watchpoint PARAMS ((int, CORE_ADDR, CORE_ADDR, int, - int)); + int)); static int i386_insert_nonaligned_watchpoint PARAMS ((int, CORE_ADDR, CORE_ADDR, int, @@ -164,7 +165,7 @@ i386_insert_aligned_watchpoint (pid, waddr, addr, len, rw) int read_write_bits, len_bits; int free_debug_register; int register_number; - + /* Look for a free debug register. */ for (i = DR_FIRSTADDR; i <= DR_LASTADDR; i++) { @@ -195,7 +196,7 @@ i386_insert_aligned_watchpoint (pid, waddr, addr, len, rw) } else return i386_insert_nonaligned_watchpoint (pid, waddr, addr, len, rw); - + free_debug_register = i; register_number = free_debug_register - DR_FIRSTADDR; debug_control_mirror |= @@ -205,7 +206,7 @@ i386_insert_aligned_watchpoint (pid, waddr, addr, len, rw) (1 << (DR_LOCAL_ENABLE_SHIFT + DR_ENABLE_SIZE * register_number)); debug_control_mirror |= DR_LOCAL_SLOWDOWN; debug_control_mirror &= ~DR_CONTROL_RESERVED; - + ptrace (6, pid, offsetof (struct user, u_debugreg[DR_CONTROL]), debug_control_mirror); ptrace (6, pid, offsetof (struct user, u_debugreg[free_debug_register]), @@ -228,7 +229,8 @@ i386_insert_nonaligned_watchpoint (pid, waddr, addr, len, rw) int size; int rv; - static int size_try_array[16] = { + static int size_try_array[16] = + { 1, 1, 1, 1, /* trying size one */ 2, 1, 2, 1, /* trying size two */ 2, 1, 2, 1, /* trying size three */ @@ -287,7 +289,7 @@ i386_remove_watchpoint (pid, addr, len) CORE_ADDR i386_stopped_by_watchpoint (pid) - int pid; + int pid; { int i; int status; @@ -305,88 +307,3 @@ i386_stopped_by_watchpoint (pid) } #endif /* TARGET_HAS_HARDWARE_WATCHPOINTS */ - -#if 0 -/* using FLOAT_INFO as is would be a problem. FLOAT_INFO is called - via a command xxx and eventually calls ptrace without ever having - traversed the target vector. This would be terribly impolite - behaviour for a sun4 hosted remote gdb. - - A fix might be to move this code into the "info registers" command. - rich@cygnus.com 15 Sept 92. */ -i386_float_info () -{ - struct user u; /* just for address computations */ - int i; - /* fpstate defined in <sys/user.h> */ - struct fpstate *fpstatep; - char buf[sizeof (struct fpstate) + 2 * sizeof (int)]; - unsigned int uaddr; - char fpvalid = 0; - unsigned int rounded_addr; - unsigned int rounded_size; - extern int corechan; - int skip; - - uaddr = (char *)&u.u_fpvalid - (char *)&u; - if (target_has_execution) - { - unsigned int data; - unsigned int mask; - - rounded_addr = uaddr & -sizeof (int); - data = ptrace (3, inferior_pid, (PTRACE_ARG3_TYPE) rounded_addr, 0); - mask = 0xff << ((uaddr - rounded_addr) * 8); - - fpvalid = ((data & mask) != 0); - } -#if 0 - else - { - if (lseek (corechan, uaddr, 0) < 0) - perror ("seek on core file"); - if (myread (corechan, &fpvalid, 1) < 0) - perror ("read on core file"); - - } -#endif /* no core support yet */ - - if (fpvalid == 0) - { - printf_unfiltered ("no floating point status saved\n"); - return; - } - - uaddr = (char *)&U_FPSTATE(u) - (char *)&u; - if (target_has_execution) - { - int *ip; - - rounded_addr = uaddr & -sizeof (int); - rounded_size = (((uaddr + sizeof (struct fpstate)) - uaddr) + - sizeof (int) - 1) / sizeof (int); - skip = uaddr - rounded_addr; - - ip = (int *)buf; - for (i = 0; i < rounded_size; i++) - { - *ip++ = ptrace (3, inferior_pid, (PTRACE_ARG3_TYPE) rounded_addr, 0); - rounded_addr += sizeof (int); - } - } -#if 0 - else - { - if (lseek (corechan, uaddr, 0) < 0) - perror_with_name ("seek on core file"); - if (myread (corechan, buf, sizeof (struct fpstate)) < 0) - perror_with_name ("read from core file"); - skip = 0; - } -#endif /* 0 */ - - fpstatep = (struct fpstate *)(buf + skip); - print_387_status (fpstatep->status, (struct env387 *)fpstatep->state); -} - -#endif /* never */ |