Hi, this is a follow-up to a patch I posted a while ago: http://sourceware.org/ml/gdb-patches/2008-03/msg00012.html When debugging a fortran binary on SPU access to one of the 128-bit registers fails. For example (gdb) p $r0%v2_int64(0) Attempt to take address of value not located in memory. The reason for that is that the value is located in a register instead of inferior memory. This is fixed with the attached patch: (gdb) p $r7%v2_double $3 = (0, 0) (gdb) p $r7%v2_double(0) $4 = 0 (gdb) p $r7%v2_double(1) $5 = 0 (gdb) p $r7%v2_double(2) no such vector element (gdb) p $r7%v2_double(-1) no such vector element (gdb) Internally 128-bit SPU registers are handled as a TYPE_CODE_UNION (__spu_builtin_type_vec128). This patch adds support for TYPE_CODE_UNION in fortran language and also fixes the syntax of "ptype" and "print $reg". (gdb) ptype $r0 type = Type, C_Union :: __spu_builtin_type_vec128 int128_t :: uint128 int64_t :: v2_int64(0:1) int32_t :: v4_int32(0:3) int16_t :: v8_int16(0:7) int8_t :: v16_int8(0:15) double :: v2_double(0:1) float :: v4_float(0:3) End Type __spu_builtin_type_vec128 (gdb) p $r0 $2 = ( 0x00000094000000000000000000000000, (635655159808, 0), (148, 0, 0, 0), (0, 148, 0, 0, 0, 0, 0, 0), (0 '\000', 0 '\000', 0 '\000', -108 '\224', 0 '\000', 0 '\000', 0 '\000', 0 '\000', 0 '\000', 0 '\000', 0 '\000', 0 '\000', 0 '\000', 0 '\000', 0 '\000', 0 '\000'), (3.140553770628603e-312, 0), (2.07392173e-43, 0, 0, 0) ) (gdb) Testsuite showed no regression on SPU. Ok ? ChangeLog: * eval.c (evaluate_subexp_standard): Use value_subscripted_rvalue for multi_f77_subscript to support values from registers. * valarith.c (value_subscripted_rvalue): Remove prototype and static. * value.h (value_subscripted_rvalue): Add prototype. * f-typeprint.c (f_type_print_base): Add support for TYPE_CODE_UNION. Fix output. * f-valprint.c (f_val_print): Likewise. -- Markus Deuling GNU Toolchain for Linux on Cell BE deuling@de.ibm.com