From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Jacobowitz To: gdb-patches@sources.redhat.com Cc: scottb@netwinder.org Subject: [PATCH/arm-linux] Fix thread debugging on ARM/Linux Date: Wed, 24 Oct 2001 12:25:00 -0000 Message-id: <20011024152535.A24994@nevyn.them.org> X-SW-Source: 2001-10/msg00315.html I'm going to commit the attached as obvious in a day or two, unless someone objects. fill_gregset () shouldn't just fill in the registers we already have; it should fetch registers we don't have, and fill in all registers, like it does on every other target. With this, thread debugging appears to work on my ARM/Linux target (although the testsuite results are really quite awful). -- Daniel Jacobowitz Carnegie Mellon University MontaVista Software Debian GNU/Linux Developer 2001-10-24 Daniel Jacobowitz * arm-linux-nat.c (fill_gregset): Do not check register_valid[]. (fill_fpregset): Likewise. --- gdb-5.0.20010802/gdb/arm-linux-nat.c.orig Wed Oct 24 12:05:51 2001 +++ gdb-5.0.20010802/gdb/arm-linux-nat.c Wed Oct 24 12:11:41 2001 @@ -579,26 +579,18 @@ fill_gregset (gdb_gregset_t *gregsetp, i { int regnum; for (regnum = A1_REGNUM; regnum <= PC_REGNUM; regnum++) - if (register_valid[regnum]) - read_register_gen (regnum, (char *) &(*gregsetp)[regnum]); + read_register_gen (regnum, (char *) &(*gregsetp)[regnum]); } else if (regno >= A1_REGNUM && regno <= PC_REGNUM) - { - if (register_valid[regno]) - read_register_gen (regno, (char *) &(*gregsetp)[regno]); - } + read_register_gen (regno, (char *) &(*gregsetp)[regno]); if (PS_REGNUM == regno || -1 == regno) { - if (register_valid[regno] || -1 == regno) - { - if (arm_apcs_32) - read_register_gen (PS_REGNUM, (char *) &(*gregsetp)[CPSR_REGNUM]); - else - read_register_gen (PC_REGNUM, (char *) &(*gregsetp)[PC_REGNUM]); - } + if (arm_apcs_32) + read_register_gen (PS_REGNUM, (char *) &(*gregsetp)[CPSR_REGNUM]); + else + read_register_gen (PC_REGNUM, (char *) &(*gregsetp)[PC_REGNUM]); } - } /* Fill GDB's register array with the general-purpose register values @@ -643,9 +635,8 @@ fill_fpregset (gdb_fpregset_t *fpregsetp } /* Store fpsr. */ - if (register_valid[FPS_REGNUM]) - if (FPS_REGNUM == regno || -1 == regno) - read_register_gen (FPS_REGNUM, (char *) &fp->fpsr); + if (FPS_REGNUM == regno || -1 == regno) + read_register_gen (FPS_REGNUM, (char *) &fp->fpsr); } /* Fill GDB's register array with the floating-point register values