#include "bsd-uthread.h"
#include "fbsd-tdep.h"
#include "solib-svr4.h"
+#include "inferior.h"
/* Support for signal handlers. */
}
static void
-amd64fbsd_supply_uthread (struct regcache *regcache,
+amd64fbsd_supply_uthread (struct regcache *regcache, ptid_t ptid,
int regnum, CORE_ADDR addr)
{
gdb_byte buf[8];
int i;
+ struct cleanup *cleanup = save_inferior_ptid ();
+ inferior_ptid = ptid;
gdb_assert (regnum >= -1);
regcache_raw_supply (regcache, i, buf);
}
}
+
+ do_cleanups (cleanup);
}
static void
-amd64fbsd_collect_uthread (const struct regcache *regcache,
+amd64fbsd_collect_uthread (const struct regcache *regcache, ptid_t ptid,
int regnum, CORE_ADDR addr)
{
gdb_byte buf[8];
int i;
+ struct cleanup *cleanup = save_inferior_ptid ();
+ inferior_ptid = ptid;
gdb_assert (regnum >= -1);
write_memory (addr + amd64fbsd_jmp_buf_reg_offset[i], buf, 8);
}
}
+
+ do_cleanups (cleanup);
}
static void
#include "i387-tdep.h"
#include "solib-svr4.h"
#include "bsd-uthread.h"
+#include "inferior.h"
/* Support for signal handlers. */
#define AMD64OBSD_UTHREAD_RSP_OFFSET 400
static void
-amd64obsd_supply_uthread (struct regcache *regcache,
+amd64obsd_supply_uthread (struct regcache *regcache, ptid_t ptid,
int regnum, CORE_ADDR addr)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
CORE_ADDR sp = 0;
gdb_byte buf[8];
int i;
+ struct cleanup *cleanup = save_inferior_ptid ();
+ inferior_ptid = ptid;
gdb_assert (regnum >= -1);
regcache_raw_supply (regcache, i, buf);
}
}
+
+ do_cleanups (cleanup);
}
static void
-amd64obsd_collect_uthread (const struct regcache *regcache,
+amd64obsd_collect_uthread (const struct regcache *regcache, ptid_t ptid,
int regnum, CORE_ADDR addr)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
CORE_ADDR sp = 0;
gdb_byte buf[8];
int i;
+ struct cleanup *cleanup = save_inferior_ptid ();
+ inferior_ptid = ptid;
gdb_assert (regnum >= -1);
write_memory (sp + amd64obsd_uthread_reg_offset[i], buf, 8);
}
}
+
+ do_cleanups (cleanup);
}
/* Kernel debugging support. */
struct gdbarch *gdbarch = get_regcache_arch (regcache);
struct bsd_uthread_ops *uthread_ops
= (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data);
- CORE_ADDR addr = ptid_get_tid (inferior_ptid);
+ ptid_t ptid = inferior_ptid;
+ CORE_ADDR addr = ptid_get_tid (ptid);
struct target_ops *beneath = find_target_beneath (ops);
CORE_ADDR active_addr;
if (addr != 0 && addr != active_addr)
{
bsd_uthread_check_magic (addr);
- uthread_ops->supply_uthread (regcache, regnum,
+ uthread_ops->supply_uthread (regcache, ptid, regnum,
addr + bsd_uthread_thread_ctx_offset);
}
}
struct bsd_uthread_ops *uthread_ops
= (struct bsd_uthread_ops *) gdbarch_data (gdbarch, bsd_uthread_data);
struct target_ops *beneath = find_target_beneath (ops);
- CORE_ADDR addr = ptid_get_tid (inferior_ptid);
+ ptid_t ptid = inferior_ptid;
+ CORE_ADDR addr = ptid_get_tid (ptid);
CORE_ADDR active_addr;
active_addr = bsd_uthread_read_memory_address (bsd_uthread_thread_run_addr);
if (addr != 0 && addr != active_addr)
{
bsd_uthread_check_magic (addr);
- uthread_ops->collect_uthread (regcache, regnum,
+ uthread_ops->collect_uthread (regcache, ptid, regnum,
addr + bsd_uthread_thread_ctx_offset);
}
else
#ifndef BSD_UTHREAD_H
#define BSD_UTHREAD_H 1
-typedef void (*bsd_uthread_supply_register_ftype) (struct regcache *, int,
- CORE_ADDR);
+typedef void (*bsd_uthread_supply_register_ftype) (struct regcache *, ptid_t,
+ int, CORE_ADDR);
typedef void (*bsd_uthread_collect_register_ftype) (const struct regcache *,
- int, CORE_ADDR);
+ ptid_t ptid, int, CORE_ADDR);
/* Set the function that supplies registers for an inactive thread for
architecture GDBARCH to FUNC. */
#include "bsd-uthread.h"
#include "fbsd-tdep.h"
#include "solib-svr4.h"
+#include "inferior.h"
/* Support for signal handlers. */
}
static void
-i386fbsd_supply_uthread (struct regcache *regcache,
+i386fbsd_supply_uthread (struct regcache *regcache, ptid_t ptid,
int regnum, CORE_ADDR addr)
{
gdb_byte buf[4];
int i;
+ struct cleanup *cleanup = save_inferior_ptid ();
+ inferior_ptid = ptid;
gdb_assert (regnum >= -1);
regcache_raw_supply (regcache, i, buf);
}
}
+
+ do_cleanups (cleanup);
}
static void
-i386fbsd_collect_uthread (const struct regcache *regcache,
+i386fbsd_collect_uthread (const struct regcache *regcache, ptid_t ptid,
int regnum, CORE_ADDR addr)
{
gdb_byte buf[4];
int i;
+ struct cleanup *cleanup = save_inferior_ptid ();
+ inferior_ptid = ptid;
gdb_assert (regnum >= -1);
write_memory (addr + i386fbsd_jmp_buf_reg_offset[i], buf, 4);
}
}
+
+ do_cleanups (cleanup);
}
static void
#include "i387-tdep.h"
#include "solib-svr4.h"
#include "bsd-uthread.h"
+#include "inferior.h"
/* Support for signal handlers. */
#define I386OBSD_UTHREAD_ESP_OFFSET 176
static void
-i386obsd_supply_uthread (struct regcache *regcache,
+i386obsd_supply_uthread (struct regcache *regcache, ptid_t ptid,
int regnum, CORE_ADDR addr)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
CORE_ADDR sp = 0;
gdb_byte buf[4];
int i;
+ struct cleanup *cleanup = save_inferior_ptid ();
+ inferior_ptid = ptid;
gdb_assert (regnum >= -1);
regcache_raw_supply (regcache, i, buf);
}
}
+
+ do_cleanups (cleanup);
}
static void
-i386obsd_collect_uthread (const struct regcache *regcache,
+i386obsd_collect_uthread (const struct regcache *regcache, ptid_t ptid,
int regnum, CORE_ADDR addr)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
CORE_ADDR sp = 0;
gdb_byte buf[4];
int i;
+ struct cleanup *cleanup = save_inferior_ptid ();
+ inferior_ptid = ptid;
gdb_assert (regnum >= -1);
write_memory (sp + i386obsd_uthread_reg_offset[i], buf, 4);
}
}
+
+ do_cleanups (cleanup);
}
\f
/* Kernel debugging support. */
#include "sparc-tdep.h"
#include "solib-svr4.h"
#include "bsd-uthread.h"
+#include "inferior.h"
/* Signal trampolines. */
#define SPARC32OBSD_UTHREAD_PC_OFFSET 132
static void
-sparc32obsd_supply_uthread (struct regcache *regcache,
+sparc32obsd_supply_uthread (struct regcache *regcache, ptid_t ptid,
int regnum, CORE_ADDR addr)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
CORE_ADDR fp, fp_addr = addr + SPARC32OBSD_UTHREAD_FP_OFFSET;
gdb_byte buf[4];
+ struct cleanup *cleanup = save_inferior_ptid ();
+ inferior_ptid = ptid;
gdb_assert (regnum >= -1);
}
sparc_supply_rwindow (regcache, fp, regnum);
+
+ do_cleanups (cleanup);
}
static void
-sparc32obsd_collect_uthread(const struct regcache *regcache,
+sparc32obsd_collect_uthread(const struct regcache *regcache, ptid_t ptid,
int regnum, CORE_ADDR addr)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
CORE_ADDR sp;
gdb_byte buf[4];
+ struct cleanup *cleanup = save_inferior_ptid ();
+ inferior_ptid = ptid;
gdb_assert (regnum >= -1);
regcache_raw_collect (regcache, SPARC_SP_REGNUM, buf);
sp = extract_unsigned_integer (buf, 4, byte_order);
sparc_collect_rwindow (regcache, sp, regnum);
+
+ do_cleanups (cleanup);
}
\f
#include "sparc64-tdep.h"
#include "solib-svr4.h"
#include "bsd-uthread.h"
+#include "inferior.h"
/* Older OpenBSD versions used the traditional NetBSD core file
format, even for ports that use ELF. These core files don't use
#define SPARC64OBSD_UTHREAD_PC_OFFSET 240
static void
-sparc64obsd_supply_uthread (struct regcache *regcache,
+sparc64obsd_supply_uthread (struct regcache *regcache, ptid_t ptid,
int regnum, CORE_ADDR addr)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
CORE_ADDR fp, fp_addr = addr + SPARC64OBSD_UTHREAD_FP_OFFSET;
gdb_byte buf[8];
+ struct cleanup *cleanup = save_inferior_ptid ();
+ inferior_ptid = ptid;
gdb_assert (regnum >= -1);
}
sparc_supply_rwindow (regcache, fp, regnum);
+
+ do_cleanups (cleanup);
}
static void
-sparc64obsd_collect_uthread(const struct regcache *regcache,
+sparc64obsd_collect_uthread(const struct regcache *regcache, ptid_t ptid,
int regnum, CORE_ADDR addr)
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
CORE_ADDR sp;
gdb_byte buf[8];
+ struct cleanup *cleanup = save_inferior_ptid ();
+ inferior_ptid = ptid;
gdb_assert (regnum >= -1);
regcache_raw_collect (regcache, SPARC_SP_REGNUM, buf);
sp = extract_unsigned_integer (buf, 8, byte_order);
sparc_collect_rwindow (regcache, sp, regnum);
+
+ do_cleanups (cleanup);
}
\f