From a536c6d7e617a36585e04cb9b75639aa3d8037cd Mon Sep 17 00:00:00 2001 From: Ulrich Weigand Date: Fri, 6 May 2011 20:48:48 +0000 Subject: [PATCH] ChangeLog: * ppc-linux-tdep.c (ppu2spu_prev_register): Handle pseudo registers. (ppu2spu_unwind_register): Mark pseudo registers unavailable. * spu-tdep.c (op_selb): Use correct value. testsuite/ChangeLog: * gdb.cell/bt.exp: Delete breakpoints before running to signal to avoid race condition. * gdb.cell/coremaker.c: Use small stack size. * gdb.cell/ea-standalone.exp: Use file name without path as argument to c_to. * gdb.cell/fork.exp: Allow other output when continuing to end. --- gdb/ChangeLog | 6 ++++++ gdb/ppc-linux-tdep.c | 11 ++++++++--- gdb/spu-tdep.c | 2 +- gdb/testsuite/ChangeLog | 9 +++++++++ gdb/testsuite/gdb.cell/bt.exp | 1 + gdb/testsuite/gdb.cell/coremaker.c | 9 ++++++++- gdb/testsuite/gdb.cell/ea-standalone.exp | 4 ++-- gdb/testsuite/gdb.cell/fork.exp | 2 +- 8 files changed, 36 insertions(+), 8 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 90fdec510a..c01e09183f 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2011-05-06 Ulrich Weigand + + * ppc-linux-tdep.c (ppu2spu_prev_register): Handle pseudo registers. + (ppu2spu_unwind_register): Mark pseudo registers unavailable. + * spu-tdep.c (op_selb): Use correct value. + 2011-05-06 Ulrich Weigand * spu-linux-nat.c (spu_symbol_file_add_from_memory): Add NULL diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c index c6e4b838c0..e6237422b9 100644 --- a/gdb/ppc-linux-tdep.c +++ b/gdb/ppc-linux-tdep.c @@ -1367,7 +1367,12 @@ ppu2spu_prev_register (struct frame_info *this_frame, gdb_byte *buf; buf = alloca (register_size (gdbarch, regnum)); - regcache_cooked_read (cache->regcache, regnum, buf); + + if (regnum < gdbarch_num_regs (gdbarch)) + regcache_raw_read (cache->regcache, regnum, buf); + else + gdbarch_pseudo_register_read (gdbarch, cache->regcache, regnum, buf); + return frame_unwind_got_bytes (this_frame, regnum, buf); } @@ -1392,9 +1397,9 @@ ppu2spu_unwind_register (void *src, int regnum, gdb_byte *buf) else if (regnum == SPU_PC_REGNUM) store_unsigned_integer (buf, 4, byte_order, data->npc); else - return 0; + return REG_UNAVAILABLE; - return 1; + return REG_VALID; } static int diff --git a/gdb/spu-tdep.c b/gdb/spu-tdep.c index 7f2079474e..236b2056d0 100644 --- a/gdb/spu-tdep.c +++ b/gdb/spu-tdep.c @@ -456,7 +456,7 @@ enum op_a = 0x0c0, op_ai = 0x1c, - op_selb = 0x4, + op_selb = 0x8, op_br = 0x64, op_bra = 0x60, diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index ff015f070a..c920d382b1 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2011-05-06 Ulrich Weigand + + * gdb.cell/bt.exp: Delete breakpoints before running to signal + to avoid race condition. + * gdb.cell/coremaker.c: Use small stack size. + * gdb.cell/ea-standalone.exp: Use file name without path as + argument to c_to. + * gdb.cell/fork.exp: Allow other output when continuing to end. + 2011-05-06 Jan Kratochvil * gdb.threads/corethreads.c: New file. diff --git a/gdb/testsuite/gdb.cell/bt.exp b/gdb/testsuite/gdb.cell/bt.exp index 8bff6f2c81..b1ee45839f 100644 --- a/gdb/testsuite/gdb.cell/bt.exp +++ b/gdb/testsuite/gdb.cell/bt.exp @@ -72,6 +72,7 @@ if ![runto_main] then { return 0 } +delete_breakpoints gdb_test "continue" ".*Program received signal SIGABRT, Aborted.*" gdb_test "backtrace" ".*abort.*crash_handler.*base.*offset.*.*main.*speid.*argp.*envp.*at.*$spu2_file.c.*.*spe_context_run.*indirect_handler.*base.*offset.*.*main.*speid.*argp.*envp.*at.*$spu_file.c.*.*spe_context_run.*spe_thread.*at.*$ppu_file.c.*" diff --git a/gdb/testsuite/gdb.cell/coremaker.c b/gdb/testsuite/gdb.cell/coremaker.c index f1754ceeb4..48ad90c9ee 100644 --- a/gdb/testsuite/gdb.cell/coremaker.c +++ b/gdb/testsuite/gdb.cell/coremaker.c @@ -43,18 +43,25 @@ int main (void) { int thread_id[nr_t]; + pthread_attr_t attr; pthread_t pts[nr_t]; spe_context_ptr_t ctx[nr_t]; unsigned int value; int cnt; + /* Use small thread stacks to speed up writing out core file. */ + pthread_attr_init (&attr); + pthread_attr_setstacksize (&attr, 2*PTHREAD_STACK_MIN); + for (cnt = 0; cnt < nr_t; cnt++) { ctx[cnt] = spe_context_create (0, NULL); thread_id[cnt] - = pthread_create (&pts[cnt], NULL, &spe_thread, &ctx[cnt]); + = pthread_create (&pts[cnt], &attr, &spe_thread, &ctx[cnt]); } + pthread_attr_destroy (&attr); + for (cnt = 0; cnt < nr_t; cnt++) spe_out_intr_mbox_read (ctx[cnt], &value, 1, SPE_MBOX_ALL_BLOCKING); diff --git a/gdb/testsuite/gdb.cell/ea-standalone.exp b/gdb/testsuite/gdb.cell/ea-standalone.exp index 8753fa15c1..fd6f6224c5 100644 --- a/gdb/testsuite/gdb.cell/ea-standalone.exp +++ b/gdb/testsuite/gdb.cell/ea-standalone.exp @@ -44,12 +44,12 @@ if ![runto_main] then { return 0 } -c_to "Marker SPUEA1" $srcfile +c_to "Marker SPUEA1" $testfile.c gdb_test "p myarray\[0\]" \ ".*= 0" \ "p myarray\[0\]" -c_to "Marker SPUEA2" $srcfile +c_to "Marker SPUEA2" $testfile.c gdb_test "p myarray\[0\]" \ ".*= 1" \ "p myarray\[0\]" diff --git a/gdb/testsuite/gdb.cell/fork.exp b/gdb/testsuite/gdb.cell/fork.exp index ad5c75aa77..b8c603dddc 100644 --- a/gdb/testsuite/gdb.cell/fork.exp +++ b/gdb/testsuite/gdb.cell/fork.exp @@ -77,7 +77,7 @@ gdb_test_no_output "delete \$bpnum" "delete watchpoint" gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, func \\(\\) at .*$spu_file.c:.*" \ "run until breakpoint hit" -gdb_continue_to_end +gdb_continue_to_end "" continue 1 gdb_exit -- 2.34.1