/* Native-dependent code for PA-RISC HP-UX.
- Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2004, 2005, 2007, 2008, 2009, 2010, 2011
+ Free Software Foundation, Inc.
This file is part of GDB.
#include "gdb_assert.h"
#include <sys/ptrace.h>
+#include <sys/utsname.h>
#include <machine/save_state.h>
#ifdef HAVE_TTRACE
#endif
#include "hppa-tdep.h"
+#include "solib-som.h"
#include "inf-ptrace.h"
#include "inf-ttrace.h"
-/* Non-zero if we should pretend not to be a runnable target. */
-int child_suppress_run = 0;
-
/* Return the offset of register REGNUM within `struct save_state'.
The offset returns depends on the flags in the "flags" register and
the register size (32-bit or 64-bit). These are taken from
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;
`struct save_state', even for 64-bit code. */
if (regnum == HPPA_FLAGS_REGNUM && size == 8)
{
- ULONGEST flags = extract_unsigned_integer ((gdb_byte *)buf, 4);
- store_unsigned_integer ((gdb_byte *)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 (regcache, regnum, buf);
}
static void
-hppa_hpux_fetch_inferior_registers (struct regcache *regcache, int regnum)
+hppa_hpux_fetch_inferior_registers (struct target_ops *ops,
+ struct regcache *regcache, int regnum)
{
if (regnum == -1)
for (regnum = 0;
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;
`struct save_state', even for 64-bit code. */
if (regnum == HPPA_FLAGS_REGNUM && size == 8)
{
- ULONGEST flags = extract_unsigned_integer ((gdb_byte *)buf, 8);
- store_unsigned_integer ((gdb_byte *)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;
}
this for all registers (including the floating point registers). */
static void
-hppa_hpux_store_inferior_registers (struct regcache *regcache, int regnum)
+hppa_hpux_store_inferior_registers (struct target_ops *ops,
+ struct regcache *regcache, int regnum)
{
if (regnum == -1)
for (regnum = 0;
hppa_hpux_store_register (regcache, regnum);
}
-static int
-hppa_hpux_child_can_run (void)
+/* Set hpux_major_release variable to the value retrieved from a call to
+ uname function. */
+
+static void
+set_hpux_major_release (void)
{
- /* This variable is controlled by modules that layer their own
- 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;
+ struct utsname x;
+ char *p;
+
+ uname (&x);
+ p = strchr (x.release, '.');
+ if (p)
+ hpux_major_release = atoi (p + 1);
}
+
\f
/* Prevent warning from -Wmissing-prototypes. */
{
struct target_ops *t;
+ set_hpux_major_release ();
+
#ifdef HAVE_TTRACE
t = inf_ttrace_target ();
#else
t->to_fetch_registers = hppa_hpux_fetch_inferior_registers;
t->to_store_registers = hppa_hpux_store_inferior_registers;
- t->to_can_run = hppa_hpux_child_can_run;
add_target (t);
}