diff options
| author | skrll <skrll@NetBSD.org> | 2003-10-21 19:07:36 +0000 |
|---|---|---|
| committer | skrll <skrll@NetBSD.org> | 2003-10-21 19:07:36 +0000 |
| commit | a69cb4cc55bb13066eec6f67b2c7710dcb7f054d (patch) | |
| tree | d098f4cc30033ee208f9b26c3b5df74ab06bd1d4 /gnu | |
| parent | e3e6938d924c68780f78b41e264419e032266144 (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.c | 99 | ||||
| -rw-r--r-- | gnu/usr.bin/gdb53/arch/arm/defs.mk | 21 | ||||
| -rw-r--r-- | gnu/usr.bin/gdb53/arch/arm/init.c | 23 |
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 (); } |
