/* 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,
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 <http://www.gnu.org/licenses/>. */
#include "defs.h"
#include "inferior.h"
#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);
CORE_ADDR addr;
size_t size;
PTRACE_TYPE_RET *buf;
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);
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
{
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);
}
`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 = extract_unsigned_integer ((gdb_byte *)buf, 4);
+ store_unsigned_integer ((gdb_byte *)buf, 8, 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);
CORE_ADDR addr;
size_t size;
PTRACE_TYPE_RET *buf;
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 = extract_unsigned_integer ((gdb_byte *)buf, 8);
+ store_unsigned_integer ((gdb_byte *)buf, 4, flags);
size = 4;
}
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
{
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);
}
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;
}
\f