summaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authorskrll <skrll@NetBSD.org>2003-10-21 19:07:36 +0000
committerskrll <skrll@NetBSD.org>2003-10-21 19:07:36 +0000
commita69cb4cc55bb13066eec6f67b2c7710dcb7f054d (patch)
treed098f4cc30033ee208f9b26c3b5df74ab06bd1d4 /gnu
parente3e6938d924c68780f78b41e264419e032266144 (diff)
ARM thread support.
- add or expose {supply,fill}_{fp,g}regset functions - add lwpid to ptrace calls
Diffstat (limited to 'gnu')
-rw-r--r--gnu/dist/gdb/gdb/armnbsd-nat.c99
-rw-r--r--gnu/usr.bin/gdb53/arch/arm/defs.mk21
-rw-r--r--gnu/usr.bin/gdb53/arch/arm/init.c23
3 files changed, 119 insertions, 24 deletions
diff --git a/gnu/dist/gdb/gdb/armnbsd-nat.c b/gnu/dist/gdb/gdb/armnbsd-nat.c
index 88396c06a14..4f92b2815cb 100644
--- a/gnu/dist/gdb/gdb/armnbsd-nat.c
+++ b/gnu/dist/gdb/gdb/armnbsd-nat.c
@@ -35,10 +35,20 @@
#include "regcache.h"
#include "gdbcore.h"
+#ifndef HAVE_GREGSET_T
+typedef struct reg gregset_t;
+#endif
+
+#ifndef HAVE_FPREGSET_T
+typedef struct fpreg fpregset_t;
+#endif
+
+#include "gregset.h"
+
extern int arm_apcs_32;
-static void
-supply_gregset (struct reg *gregset)
+void
+supply_gregset (gregset_t *gregset)
{
int regno;
CORE_ADDR r_pc;
@@ -59,16 +69,63 @@ supply_gregset (struct reg *gregset)
supply_register (ARM_PS_REGNUM, (char *) &gregset->r_pc);
}
-static void
-supply_fparegset (struct fpreg *fparegset)
+void
+supply_fpregset (fpregset_t *fpregsetp)
{
int regno;
for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++)
supply_register
- (regno, (char *) &fparegset->fpr[regno - ARM_F0_REGNUM]);
+ (regno, (char *) &fpregsetp->fpr[regno - ARM_F0_REGNUM]);
+
+ supply_register (ARM_FPS_REGNUM, (char *) &fpregsetp->fpr_fpsr);
+}
+
+void
+fill_gregset (gregset_t *gregsetp, int regno)
+{
+ if (-1 == regno)
+ {
+ int regnum;
+ for (regnum = ARM_A1_REGNUM; regnum < ARM_SP_REGNUM; regnum++)
+ regcache_collect (regnum, (char *) &gregsetp->r[regnum]);
+ }
+ else if (regno >= ARM_A1_REGNUM && regno < ARM_SP_REGNUM)
+ regcache_collect (regno, (char *) &gregsetp->r[regno]);
+
+ if (ARM_SP_REGNUM == regno || -1 == regno)
+ regcache_collect (ARM_SP_REGNUM, (char *) &gregsetp->r_sp);
+
+ if (ARM_LR_REGNUM == regno || -1 == regno)
+ regcache_collect (ARM_LR_REGNUM, (char *) &gregsetp->r_lr);
+
+ /* XXX NH ADDR_BITS_REMOVE ? */
+ if (ARM_PC_REGNUM == regno || -1 == regno)
+ regcache_collect (ARM_PC_REGNUM, (char *) &gregsetp->r_pc);
+
+ if (ARM_PS_REGNUM == regno || -1 == regno)
+ {
+ if (arm_apcs_32)
+ regcache_collect (ARM_PS_REGNUM, (char *) &gregsetp->r_cpsr);
+ else
+ regcache_collect (ARM_PS_REGNUM, (char *) &gregsetp->r_pc);
+ }
+}
+
+void
+fill_fpregset (fpregset_t *fpregsetp, int regno)
+{
+ if (-1 == regno)
+ {
+ int regnum;
+ for (regnum = ARM_F0_REGNUM; regnum <= ARM_F7_REGNUM; regnum++)
+ regcache_collect(regnum, (char *) &fpregsetp->fpr[regnum]);
+ }
+ else if (regno >= ARM_F0_REGNUM && regno <= ARM_F7_REGNUM)
+ regcache_collect(regno, (char *) &fpregsetp->fpr[regno]);
- supply_register (ARM_FPS_REGNUM, (char *) &fparegset->fpr_fpsr);
+ if (ARM_FPS_REGNUM == regno || -1 == regno)
+ regcache_collect (ARM_FPS_REGNUM, (char *) &fpregsetp->fpr_fpsr);
}
static void
@@ -78,7 +135,7 @@ fetch_register (int regno)
int ret;
ret = ptrace (PT_GETREGS, PIDGET (inferior_ptid),
- (PTRACE_ARG3_TYPE) &inferior_registers, 0);
+ (PTRACE_ARG3_TYPE) &inferior_registers, TIDGET (inferior_ptid));
if (ret < 0)
{
@@ -123,7 +180,7 @@ fetch_regs (void)
int regno;
ret = ptrace (PT_GETREGS, PIDGET (inferior_ptid),
- (PTRACE_ARG3_TYPE) &inferior_registers, 0);
+ (PTRACE_ARG3_TYPE) &inferior_registers, TIDGET (inferior_ptid));
if (ret < 0)
{
@@ -141,7 +198,7 @@ fetch_fp_register (int regno)
int ret;
ret = ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
- (PTRACE_ARG3_TYPE) &inferior_fp_registers, 0);
+ (PTRACE_ARG3_TYPE) &inferior_fp_registers, TIDGET (inferior_ptid));
if (ret < 0)
{
@@ -171,7 +228,7 @@ fetch_fp_regs (void)
int regno;
ret = ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
- (PTRACE_ARG3_TYPE) &inferior_fp_registers, 0);
+ (PTRACE_ARG3_TYPE) &inferior_fp_registers, TIDGET (inferior_ptid));
if (ret < 0)
{
@@ -179,7 +236,7 @@ fetch_fp_regs (void)
return;
}
- supply_fparegset (&inferior_fp_registers);
+ supply_fpregset (&inferior_fp_registers);
}
void
@@ -207,7 +264,7 @@ store_register (int regno)
int ret;
ret = ptrace (PT_GETREGS, PIDGET (inferior_ptid),
- (PTRACE_ARG3_TYPE) &inferior_registers, 0);
+ (PTRACE_ARG3_TYPE) &inferior_registers, TIDGET (inferior_ptid));
if (ret < 0)
{
@@ -262,7 +319,7 @@ store_register (int regno)
}
ret = ptrace (PT_SETREGS, PIDGET (inferior_ptid),
- (PTRACE_ARG3_TYPE) &inferior_registers, 0);
+ (PTRACE_ARG3_TYPE) &inferior_registers, TIDGET (inferior_ptid));
if (ret < 0)
warning ("unable to write register %d to inferior", regno);
@@ -302,7 +359,7 @@ store_regs (void)
}
ret = ptrace (PT_SETREGS, PIDGET (inferior_ptid),
- (PTRACE_ARG3_TYPE) &inferior_registers, 0);
+ (PTRACE_ARG3_TYPE) &inferior_registers, TIDGET (inferior_ptid));
if (ret < 0)
warning ("unable to store general registers");
@@ -315,7 +372,7 @@ store_fp_register (int regno)
int ret;
ret = ptrace (PT_GETFPREGS, PIDGET (inferior_ptid),
- (PTRACE_ARG3_TYPE) &inferior_fp_registers, 0);
+ (PTRACE_ARG3_TYPE) &inferior_fp_registers, TIDGET (inferior_ptid));
if (ret < 0)
{
@@ -337,7 +394,7 @@ store_fp_register (int regno)
}
ret = ptrace (PT_SETFPREGS, PIDGET (inferior_ptid),
- (PTRACE_ARG3_TYPE) &inferior_fp_registers, 0);
+ (PTRACE_ARG3_TYPE) &inferior_fp_registers, TIDGET (inferior_ptid));
if (ret < 0)
warning ("unable to write register %d to inferior", regno);
@@ -358,7 +415,7 @@ store_fp_regs (void)
regcache_collect (ARM_FPS_REGNUM, (char *) &inferior_fp_registers.fpr_fpsr);
ret = ptrace (PT_SETFPREGS, PIDGET (inferior_ptid),
- (PTRACE_ARG3_TYPE) &inferior_fp_registers, 0);
+ (PTRACE_ARG3_TYPE) &inferior_fp_registers, TIDGET (inferior_ptid));
if (ret < 0)
warning ("unable to store floating-point registers");
@@ -396,7 +453,7 @@ fetch_core_registers (char *core_reg_sect, unsigned core_reg_size,
CORE_ADDR r_pc;
supply_gregset (&core_reg->intreg);
- supply_fparegset (&core_reg->freg);
+ supply_fpregset (&core_reg->freg);
}
static void
@@ -404,7 +461,7 @@ fetch_elfcore_registers (char *core_reg_sect, unsigned core_reg_size,
int which, CORE_ADDR ignore)
{
struct reg gregset;
- struct fpreg fparegset;
+ struct fpreg fpregset;
switch (which)
{
@@ -427,8 +484,8 @@ fetch_elfcore_registers (char *core_reg_sect, unsigned core_reg_size,
{
/* The memcpy may be unnecessary, but we can't really be sure
of the alignment of the data in the core file. */
- memcpy (&fparegset, core_reg_sect, sizeof (fparegset));
- supply_fparegset (&fparegset);
+ memcpy (&fpregset, core_reg_sect, sizeof (fpregset));
+ supply_fpregset (&fpregset);
}
break;
diff --git a/gnu/usr.bin/gdb53/arch/arm/defs.mk b/gnu/usr.bin/gdb53/arch/arm/defs.mk
index 9eef8f9f987..613c0874bdf 100644
--- a/gnu/usr.bin/gdb53/arch/arm/defs.mk
+++ b/gnu/usr.bin/gdb53/arch/arm/defs.mk
@@ -1,4 +1,4 @@
-# $NetBSD: defs.mk,v 1.1 2003/09/26 19:59:14 skrll Exp $
+# $NetBSD: defs.mk,v 1.2 2003/10/21 19:07:36 skrll Exp $
G_GDB_OBJS=\
annotate.o \
arch-utils.o \
@@ -102,6 +102,7 @@ mi-parse.o \
minsyms.o \
mipsread.o \
nbsd-tdep.o \
+nbsd-thread.o \
nlmread.o \
objfiles.o \
osabi.o \
@@ -190,6 +191,24 @@ syms.o \
targets.o \
tekhex.o
+G_TUI_OBJS= \
+tui-file.o \
+tui-hooks.o \
+tui-out.o \
+tui.o \
+tuiCommand.o \
+tuiData.o \
+tuiDataWin.o \
+tuiDisassem.o \
+tuiGeneralWin.o \
+tuiIO.o \
+tuiLayout.o \
+tuiRegs.o \
+tuiSource.o \
+tuiSourceWin.o \
+tuiStack.o \
+tuiWin.o
+
G_OPCODES_OBJS=\
dis-buf.o \
arm-dis.o
diff --git a/gnu/usr.bin/gdb53/arch/arm/init.c b/gnu/usr.bin/gdb53/arch/arm/init.c
index 874d93d47a9..25f2cff94e4 100644
--- a/gnu/usr.bin/gdb53/arch/arm/init.c
+++ b/gnu/usr.bin/gdb53/arch/arm/init.c
@@ -27,6 +27,7 @@ extern initialize_file_ftype _initialize_gdb_osabi;
extern initialize_file_ftype _initialize_copying;
extern initialize_file_ftype _initialize_arm_tdep;
extern initialize_file_ftype _initialize_arm_netbsd_tdep;
+extern initialize_file_ftype _initialize_corelow;
extern initialize_file_ftype _initialize_solib;
extern initialize_file_ftype _initialize_svr4_solib;
extern initialize_file_ftype _initialize_ser_hardwire;
@@ -35,7 +36,6 @@ extern initialize_file_ftype _initialize_ser_tcp;
extern initialize_file_ftype _initialize_kernel_u_addr;
extern initialize_file_ftype _initialize_infptrace;
extern initialize_file_ftype _initialize_inftarg;
-extern initialize_file_ftype _initialize_corelow;
extern initialize_file_ftype _initialize_arm_netbsd_nat;
extern initialize_file_ftype _initialize_remote;
extern initialize_file_ftype _initialize_dcache;
@@ -85,6 +85,16 @@ extern initialize_file_ftype _initialize_mi_out;
extern initialize_file_ftype _initialize_mi_cmds;
extern initialize_file_ftype _initialize_mi_main;
extern initialize_file_ftype _initialize_mi_parse;
+extern initialize_file_ftype _initialize_nbsd_thread;
+#ifdef USE_TUI
+extern initialize_file_ftype _initialize_tui;
+extern initialize_file_ftype _initialize_tuiLayout;
+extern initialize_file_ftype _initialize_tuiRegs;
+extern initialize_file_ftype _initialize_tuiStack;
+extern initialize_file_ftype _initialize_tuiWin;
+extern initialize_file_ftype _initialize_tui_out;
+#endif
+
void
initialize_all_files (void)
{
@@ -121,7 +131,6 @@ initialize_all_files (void)
_initialize_kernel_u_addr ();
_initialize_infptrace ();
_initialize_inftarg ();
- _initialize_corelow ();
_initialize_arm_netbsd_nat ();
_initialize_remote ();
_initialize_dcache ();
@@ -161,6 +170,7 @@ initialize_all_files (void)
_initialize_nlmread ();
_initialize_serial ();
_initialize_mdebugread ();
+ _initialize_nbsd_thread ();
_initialize_gnu_v2_abi ();
_initialize_gnu_v3_abi ();
_initialize_hpacc_abi ();
@@ -171,4 +181,13 @@ initialize_all_files (void)
_initialize_mi_cmds ();
_initialize_mi_main ();
_initialize_mi_parse ();
+#ifdef USE_TUI
+ _initialize_tui ();
+ _initialize_tuiLayout ();
+ _initialize_tuiRegs ();
+ _initialize_tuiStack ();
+ _initialize_tuiWin ();
+ _initialize_tui_out ();
+#endif
+ _initialize_corelow ();
}