X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fhppa-hpux-nat.c;h=e36a1b1086189e3ac64faf74bbea621ef6afb2c3;hb=e17a4113357102b55cfa5b80557d590a46a43300;hp=72a837db200f9c8d5c16b8535da6c3675842f775;hpb=eeca586fd428ea0e776a57bdf2e61553d95c791b;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/hppa-hpux-nat.c b/gdb/hppa-hpux-nat.c index 72a837db20..e36a1b1086 100644 --- a/gdb/hppa-hpux-nat.c +++ b/gdb/hppa-hpux-nat.c @@ -1,12 +1,12 @@ /* Native-dependent code for PA-RISC HP-UX. - Copyright 2004 Free Software Foundation, Inc. + Copyright (C) 2004, 2005, 2007, 2008, 2009 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, @@ -15,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" @@ -87,8 +85,10 @@ hppa_hpux_save_state_offset (struct regcache *regcache, int regnum) #endif static void -hppa_hpux_fetch_register (int regnum) +hppa_hpux_fetch_register (struct regcache *regcache, int regnum) { + struct gdbarch *gdbarch = get_regcache_arch (regcache); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); CORE_ADDR addr; size_t size; PTRACE_TYPE_RET *buf; @@ -98,8 +98,8 @@ hppa_hpux_fetch_register (int regnum) pid = ptid_get_pid (inferior_ptid); /* This isn't really an address, but ptrace thinks of it as one. */ - addr = hppa_hpux_save_state_offset(current_regcache, regnum); - size = register_size (current_gdbarch, regnum); + addr = hppa_hpux_save_state_offset (regcache, regnum); + size = register_size (gdbarch, regnum); gdb_assert (size == 4 || size == 8); buf = alloca (size); @@ -109,8 +109,9 @@ hppa_hpux_fetch_register (int regnum) lwpid_t lwp = ptid_get_lwp (inferior_ptid); if (ttrace (TT_LWP_RUREGS, pid, lwp, addr, size, (uintptr_t)buf) == -1) - error ("Couldn't read register %s (#%d): %s", - REGISTER_NAME (regnum), regnum, safe_strerror (errno)); + error (_("Couldn't read register %s (#%d): %s"), + gdbarch_register_name (gdbarch, regnum), + regnum, safe_strerror (errno)); } #else { @@ -122,8 +123,9 @@ hppa_hpux_fetch_register (int regnum) errno = 0; buf[i] = ptrace (PT_RUREGS, pid, (PTRACE_TYPE_ARG3) addr, 0, 0); if (errno != 0) - error ("Couldn't read register %s (#%d): %s", - REGISTER_NAME (regnum), regnum, safe_strerror (errno)); + error (_("Couldn't read register %s (#%d): %s"), + gdbarch_register_name (gdbarch, regnum), + regnum, safe_strerror (errno)); addr += sizeof (PTRACE_TYPE_RET); } @@ -134,28 +136,34 @@ hppa_hpux_fetch_register (int regnum) `struct save_state', even for 64-bit code. */ if (regnum == HPPA_FLAGS_REGNUM && size == 8) { - ULONGEST flags = extract_unsigned_integer (buf, 4); - store_unsigned_integer (buf, 8, flags); + ULONGEST flags; + flags = extract_unsigned_integer ((gdb_byte *)buf, 4, byte_order); + store_unsigned_integer ((gdb_byte *)buf, 8, byte_order, flags); } - regcache_raw_supply (current_regcache, regnum, buf); + regcache_raw_supply (regcache, regnum, buf); } static void -hppa_hpux_fetch_inferior_registers (int regnum) +hppa_hpux_fetch_inferior_registers (struct target_ops *ops, + struct regcache *regcache, int regnum) { if (regnum == -1) - for (regnum = 0; regnum < NUM_REGS; regnum++) - hppa_hpux_fetch_register (regnum); + for (regnum = 0; + regnum < gdbarch_num_regs (get_regcache_arch (regcache)); + regnum++) + hppa_hpux_fetch_register (regcache, regnum); else - hppa_hpux_fetch_register (regnum); + hppa_hpux_fetch_register (regcache, regnum); } /* Store register REGNUM into the inferior. */ static void -hppa_hpux_store_register (int regnum) +hppa_hpux_store_register (struct regcache *regcache, int regnum) { + struct gdbarch *gdbarch = get_regcache_arch (regcache); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); CORE_ADDR addr; size_t size; PTRACE_TYPE_RET *buf; @@ -164,20 +172,21 @@ hppa_hpux_store_register (int regnum) pid = ptid_get_pid (inferior_ptid); /* This isn't really an address, but ptrace thinks of it as one. */ - addr = hppa_hpux_save_state_offset(current_regcache, regnum); - size = register_size (current_gdbarch, regnum); + addr = hppa_hpux_save_state_offset (regcache, regnum); + size = register_size (gdbarch, regnum); gdb_assert (size == 4 || size == 8); buf = alloca (size); - regcache_raw_collect (current_regcache, regnum, buf); + regcache_raw_collect (regcache, regnum, buf); /* Take care with the "flags" register. It's stored as an `int' in `struct save_state', even for 64-bit code. */ if (regnum == HPPA_FLAGS_REGNUM && size == 8) { - ULONGEST flags = extract_unsigned_integer (buf, 8); - store_unsigned_integer (buf, 4, flags); + ULONGEST flags; + flags = extract_unsigned_integer ((gdb_byte *)buf, 8, byte_order); + store_unsigned_integer ((gdb_byte *)buf, 4, byte_order, flags); size = 4; } @@ -186,8 +195,9 @@ hppa_hpux_store_register (int regnum) lwpid_t lwp = ptid_get_lwp (inferior_ptid); if (ttrace (TT_LWP_WUREGS, pid, lwp, addr, size, (uintptr_t)buf) == -1) - error ("Couldn't write register %s (#%d): %s", - REGISTER_NAME (regnum), regnum, safe_strerror (errno)); + error (_("Couldn't write register %s (#%d): %s"), + gdbarch_register_name (gdbarch, regnum), + regnum, safe_strerror (errno)); } #else { @@ -199,8 +209,9 @@ hppa_hpux_store_register (int regnum) errno = 0; ptrace (PT_WUREGS, pid, (PTRACE_TYPE_ARG3) addr, buf[i], 0); if (errno != 0) - error ("Couldn't write register %s (#%d): %s", - REGISTER_NAME (regnum), regnum, safe_strerror (errno)); + error (_("Couldn't write register %s (#%d): %s"), + gdbarch_register_name (gdbarch, regnum), + regnum, safe_strerror (errno)); addr += sizeof (PTRACE_TYPE_RET); } @@ -212,21 +223,25 @@ hppa_hpux_store_register (int regnum) this for all registers (including the floating point registers). */ static void -hppa_hpux_store_inferior_registers (int regnum) +hppa_hpux_store_inferior_registers (struct target_ops *ops, + struct regcache *regcache, int regnum) { if (regnum == -1) - for (regnum = 0; regnum < NUM_REGS; regnum++) - hppa_hpux_store_register (regnum); + for (regnum = 0; + regnum < gdbarch_num_regs (get_regcache_arch (regcache)); + regnum++) + hppa_hpux_store_register (regcache, regnum); else - hppa_hpux_store_register (regnum); + hppa_hpux_store_register (regcache, regnum); } static int hppa_hpux_child_can_run (void) { /* This variable is controlled by modules that layer their own - process structure atop that provided here. hpux-thread.c does - this because of the HP-UX user-mode level thread model. */ + process structure atop that provided here. The code in + hpux-thread.c does this to support the HP-UX user-mode DCE + threads. */ return !child_suppress_run; }