X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fi386bsd-nat.c;h=acae6cbe88fab6fe013c7a7de7e5db07b735dc70;hb=2117c711ae07700adb57ea5b5ca61e4c32d7e3d2;hp=97e330448a5943ba336ad6e5dfbc279a66ae9dea;hpb=8b1ca062713c30f40c1fb4ab889f048a97c38f3b;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/i386bsd-nat.c b/gdb/i386bsd-nat.c index 97e330448a..acae6cbe88 100644 --- a/gdb/i386bsd-nat.c +++ b/gdb/i386bsd-nat.c @@ -1,13 +1,12 @@ /* Native-dependent code for modern i386 BSD's. - Copyright 2000, 2001, 2002, 2003, 2004, 2005 - Free Software Foundation, Inc. + Copyright (C) 2000-2014 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 + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -16,9 +15,7 @@ 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. */ + along with this program. If not, see . */ #include "defs.h" #include "inferior.h" @@ -132,17 +129,18 @@ i386bsd_collect_gregset (const struct regcache *regcache, for all registers (including the floating point registers). */ static void -i386bsd_fetch_inferior_registers (int regnum) +i386bsd_fetch_inferior_registers (struct target_ops *ops, + struct regcache *regcache, int regnum) { if (regnum == -1 || GETREGS_SUPPLIES (regnum)) { struct reg regs; - if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), + if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) ®s, 0) == -1) - perror_with_name ("Couldn't get registers"); + perror_with_name (_("Couldn't get registers")); - i386bsd_supply_gregset (current_regcache, ®s); + i386bsd_supply_gregset (regcache, ®s); if (regnum != -1) return; } @@ -154,26 +152,26 @@ i386bsd_fetch_inferior_registers (int regnum) char xmmregs[512]; if (have_ptrace_xmmregs != 0 - && ptrace(PT_GETXMMREGS, PIDGET (inferior_ptid), + && ptrace(PT_GETXMMREGS, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) xmmregs, 0) == 0) { have_ptrace_xmmregs = 1; - i387_supply_fxsave (current_regcache, -1, xmmregs); + i387_supply_fxsave (regcache, -1, xmmregs); } else { - if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid), + if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) - perror_with_name ("Couldn't get floating point status"); + perror_with_name (_("Couldn't get floating point status")); - i387_supply_fsave (current_regcache, -1, &fpregs); + i387_supply_fsave (regcache, -1, &fpregs); } #else - if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid), + if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) - perror_with_name ("Couldn't get floating point status"); + perror_with_name (_("Couldn't get floating point status")); - i387_supply_fsave (current_regcache, -1, &fpregs); + i387_supply_fsave (regcache, -1, &fpregs); #endif } } @@ -182,21 +180,22 @@ i386bsd_fetch_inferior_registers (int regnum) this for all registers (including the floating point registers). */ static void -i386bsd_store_inferior_registers (int regnum) +i386bsd_store_inferior_registers (struct target_ops *ops, + struct regcache *regcache, int regnum) { if (regnum == -1 || GETREGS_SUPPLIES (regnum)) { struct reg regs; - if (ptrace (PT_GETREGS, PIDGET (inferior_ptid), + if (ptrace (PT_GETREGS, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) ®s, 0) == -1) - perror_with_name ("Couldn't get registers"); + perror_with_name (_("Couldn't get registers")); - i386bsd_collect_gregset (current_regcache, ®s, regnum); + i386bsd_collect_gregset (regcache, ®s, regnum); - if (ptrace (PT_SETREGS, PIDGET (inferior_ptid), + if (ptrace (PT_SETREGS, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) ®s, 0) == -1) - perror_with_name ("Couldn't write registers"); + perror_with_name (_("Couldn't write registers")); if (regnum != -1) return; @@ -209,30 +208,30 @@ i386bsd_store_inferior_registers (int regnum) char xmmregs[512]; if (have_ptrace_xmmregs != 0 - && ptrace(PT_GETXMMREGS, PIDGET (inferior_ptid), + && ptrace(PT_GETXMMREGS, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) xmmregs, 0) == 0) { have_ptrace_xmmregs = 1; - i387_collect_fxsave (current_regcache, regnum, xmmregs); + i387_collect_fxsave (regcache, regnum, xmmregs); - if (ptrace (PT_SETXMMREGS, PIDGET (inferior_ptid), + if (ptrace (PT_SETXMMREGS, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) xmmregs, 0) == -1) - perror_with_name ("Couldn't write XMM registers"); + perror_with_name (_("Couldn't write XMM registers")); } else { have_ptrace_xmmregs = 0; #endif - if (ptrace (PT_GETFPREGS, PIDGET (inferior_ptid), + if (ptrace (PT_GETFPREGS, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) - perror_with_name ("Couldn't get floating point status"); + perror_with_name (_("Couldn't get floating point status")); - i387_collect_fsave (current_regcache, regnum, &fpregs); + i387_collect_fsave (regcache, regnum, &fpregs); - if (ptrace (PT_SETFPREGS, PIDGET (inferior_ptid), + if (ptrace (PT_SETFPREGS, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) &fpregs, 0) == -1) - perror_with_name ("Couldn't write floating point status"); + perror_with_name (_("Couldn't write floating point status")); #ifdef HAVE_PT_GETXMMREGS } #endif @@ -264,14 +263,26 @@ i386bsd_target (void) #define DBREG_DRX(d, x) ((&d->dr0)[x]) #endif +static unsigned long +i386bsd_dr_get (ptid_t ptid, int regnum) +{ + struct dbreg dbregs; + + if (ptrace (PT_GETDBREGS, ptid_get_pid (inferior_ptid), + (PTRACE_TYPE_ARG3) &dbregs, 0) == -1) + perror_with_name (_("Couldn't read debug registers")); + + return DBREG_DRX ((&dbregs), regnum); +} + static void i386bsd_dr_set (int regnum, unsigned int value) { struct dbreg dbregs; - if (ptrace (PT_GETDBREGS, PIDGET (inferior_ptid), + if (ptrace (PT_GETDBREGS, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) &dbregs, 0) == -1) - perror_with_name ("Couldn't get debug registers"); + perror_with_name (_("Couldn't get debug registers")); /* For some mysterious reason, some of the reserved bits in the debug control register get set. Mask these off, otherwise the @@ -280,9 +291,9 @@ i386bsd_dr_set (int regnum, unsigned int value) DBREG_DRX ((&dbregs), regnum) = value; - if (ptrace (PT_SETDBREGS, PIDGET (inferior_ptid), + if (ptrace (PT_SETDBREGS, ptid_get_pid (inferior_ptid), (PTRACE_TYPE_ARG3) &dbregs, 0) == -1) - perror_with_name ("Couldn't write debug registers"); + perror_with_name (_("Couldn't write debug registers")); } void @@ -299,38 +310,30 @@ i386bsd_dr_set_addr (int regnum, CORE_ADDR addr) i386bsd_dr_set (regnum, addr); } -void -i386bsd_dr_reset_addr (int regnum) +CORE_ADDR +i386bsd_dr_get_addr (int regnum) { - gdb_assert (regnum >= 0 && regnum <= 4); - - i386bsd_dr_set (regnum, 0); + return i386bsd_dr_get (inferior_ptid, regnum); } unsigned long i386bsd_dr_get_status (void) { - struct dbreg dbregs; - - /* FIXME: kettenis/2001-03-31: Calling perror_with_name if the - ptrace call fails breaks debugging remote targets. The correct - way to fix this is to add the hardware breakpoint and watchpoint - stuff to the target vector. For now, just return zero if the - ptrace call fails. */ - if (ptrace (PT_GETDBREGS, PIDGET (inferior_ptid), - (PTRACE_TYPE_ARG3) &dbregs, 0) == -1) -#if 0 - perror_with_name ("Couldn't read debug registers"); -#else - return 0; -#endif + return i386bsd_dr_get (inferior_ptid, 6); +} - return DBREG_DRX ((&dbregs), 6); +unsigned long +i386bsd_dr_get_control (void) +{ + return i386bsd_dr_get (inferior_ptid, 7); } #endif /* PT_GETDBREGS */ +/* Provide a prototype to silence -Wmissing-prototypes. */ +void _initialize_i386bsd_nat (void); + void _initialize_i386bsd_nat (void) { @@ -370,9 +373,9 @@ _initialize_i386bsd_nat (void) if (SC_PC_OFFSET != offset) { - warning ("\ + warning (_("\ offsetof (struct sigcontext, sc_pc) yields %d instead of %d.\n\ -Please report this to .", +Please report this to ."), offset, SC_PC_OFFSET); } @@ -383,9 +386,9 @@ Please report this to .", if (SC_SP_OFFSET != offset) { - warning ("\ + warning (_("\ offsetof (struct sigcontext, sc_sp) yields %d instead of %d.\n\ -Please report this to .", +Please report this to ."), offset, SC_SP_OFFSET); } @@ -396,9 +399,9 @@ Please report this to .", if (SC_FP_OFFSET != offset) { - warning ("\ + warning (_("\ offsetof (struct sigcontext, sc_fp) yields %d instead of %d.\n\ -Please report this to .", +Please report this to ."), offset, SC_FP_OFFSET); }