diff --git a/cell-combined.diff b/cell-combined.diff
index bfed2d7..1db94c7 100644
--- a/cell-combined.diff
+++ b/cell-combined.diff
@@ -1,6 +1,6 @@
--- gdb/Makefile.in
+++ gdb/Makefile.in
-@@ -499,7 +499,7 @@ ALL_TARGET_OBS = \
+@@ -502,7 +502,7 @@ ALL_TARGET_OBS = \
sh64-tdep.o sh-linux-tdep.o shnbsd-tdep.o sh-tdep.o \
sparc-linux-tdep.o sparcnbsd-tdep.o sparcobsd-tdep.o \
sparc-sol2-tdep.o sparc-tdep.o \
@@ -9,7 +9,7 @@
v850-tdep.o \
vaxnbsd-tdep.o vaxobsd-tdep.o vax-tdep.o \
xstormy16-tdep.o \
-@@ -1338,7 +1338,7 @@ ALLDEPFILES = \
+@@ -1342,7 +1342,7 @@ ALLDEPFILES = \
sparc64-tdep.c sparc64fbsd-nat.c sparc64fbsd-tdep.c \
sparc64nbsd-nat.c sparc64nbsd-tdep.c sparc64obsd-tdep.c \
sparcnbsd-nat.c sparcnbsd-tdep.c sparcobsd-tdep.c \
@@ -175,7 +175,7 @@
/* In some cases, we might not be able to remove a breakpoint
in a shared library that has already been removed, but we
have not yet processed the shlib unload event. */
-@@ -7552,6 +7568,37 @@ breakpoint_re_set (void)
+@@ -7553,6 +7569,37 @@ breakpoint_re_set (void)
create_overlay_event_breakpoint ("_ovly_debug_event");
}
@@ -269,7 +269,7 @@
;;
--- gdb/corelow.c
+++ gdb/corelow.c
-@@ -542,6 +542,33 @@ core_files_info (struct target_ops *t)
+@@ -560,6 +560,33 @@ core_files_info (struct target_ops *t)
print_section_info (t, core_bfd);
}
@@ -303,7 +303,7 @@
static LONGEST
core_xfer_partial (struct target_ops *ops, enum target_object object,
const char *annex, gdb_byte *readbuf,
-@@ -634,6 +661,53 @@ core_xfer_partial (struct target_ops *op
+@@ -652,6 +679,53 @@ core_xfer_partial (struct target_ops *op
}
/* FALL THROUGH */
@@ -357,7 +357,7 @@
default:
if (ops->beneath != NULL)
return ops->beneath->to_xfer_partial (ops->beneath, object, annex,
-@@ -673,8 +747,8 @@ core_file_thread_alive (ptid_t tid)
+@@ -691,8 +765,8 @@ core_file_thread_alive (ptid_t tid)
static const struct target_desc *
core_read_description (struct target_ops *target)
{
@@ -370,7 +370,7 @@
}
--- gdb/doc/gdb.texinfo
+++ gdb/doc/gdb.texinfo
-@@ -16834,6 +16834,33 @@ and local store addresses and transfer s
+@@ -16910,6 +16910,33 @@ and local store addresses and transfer s
@end table
@@ -404,7 +404,7 @@
@node PowerPC
@subsection PowerPC
@cindex PowerPC architecture
-@@ -28801,6 +28828,7 @@ are explained further below.
+@@ -29271,6 +29298,7 @@ are explained further below.
@r{[}@var{architecture}@r{]}
@@ -412,7 +412,7 @@
@r{[}@var{feature}@dots{}@r{]}
@end smallexample
-@@ -28852,9 +28880,33 @@ An @samp{} element has thi
+@@ -29322,9 +29350,33 @@ An @samp{} element has thi
@var{arch}
@end smallexample
@@ -1047,7 +1047,7 @@
}
else
internal_error (__FILE__, __LINE__, _("No unwind_pc method"));
-@@ -647,19 +663,24 @@ get_frame_register (struct frame_info *f
+@@ -650,19 +666,24 @@ get_frame_register (struct frame_info *f
struct value *
frame_unwind_register_value (struct frame_info *frame, int regnum)
{
@@ -1074,7 +1074,7 @@
/* Find the unwinder. */
if (frame->unwind == NULL)
frame->unwind = frame_unwind_find_by_frame (frame, &frame->prologue_cache);
-@@ -692,7 +713,7 @@ frame_unwind_register_value (struct fram
+@@ -695,7 +716,7 @@ frame_unwind_register_value (struct fram
fprintf_unfiltered (gdb_stdlog, " bytes=");
fprintf_unfiltered (gdb_stdlog, "[");
@@ -1083,7 +1083,7 @@
fprintf_unfiltered (gdb_stdlog, "%02x", buf[i]);
fprintf_unfiltered (gdb_stdlog, "]");
}
-@@ -701,6 +722,7 @@ frame_unwind_register_value (struct fram
+@@ -704,6 +725,7 @@ frame_unwind_register_value (struct fram
fprintf_unfiltered (gdb_stdlog, " }\n");
}
@@ -1091,7 +1091,7 @@
return value;
}
-@@ -715,7 +737,7 @@ frame_unwind_register_signed (struct fra
+@@ -718,7 +740,7 @@ frame_unwind_register_signed (struct fra
{
gdb_byte buf[MAX_REGISTER_SIZE];
frame_unwind_register (frame, regnum, buf);
@@ -1100,7 +1100,7 @@
regnum));
}
-@@ -730,7 +752,7 @@ frame_unwind_register_unsigned (struct f
+@@ -733,7 +755,7 @@ frame_unwind_register_unsigned (struct f
{
gdb_byte buf[MAX_REGISTER_SIZE];
frame_unwind_register (frame, regnum, buf);
@@ -1109,7 +1109,7 @@
regnum));
}
-@@ -1067,6 +1089,8 @@ select_frame (struct frame_info *fi)
+@@ -1070,6 +1092,8 @@ select_frame (struct frame_info *fi)
source language of this frame, and switch to it if desired. */
if (fi)
{
@@ -1118,7 +1118,7 @@
/* We retrieve the frame's symtab by using the frame PC. However
we cannot use the frame PC as-is, because it usually points to
the instruction following the "call", which is sometimes the
-@@ -1721,9 +1745,17 @@ enum frame_type
+@@ -1694,9 +1718,17 @@ enum frame_type
get_frame_type (struct frame_info *frame)
{
if (frame->unwind == NULL)
@@ -1139,7 +1139,7 @@
return frame->unwind->type;
}
-@@ -1790,17 +1822,48 @@ safe_frame_unwind_memory (struct frame_i
+@@ -1731,17 +1763,48 @@ safe_frame_unwind_memory (struct frame_i
return !target_read_memory (addr, buf, len);
}
@@ -1205,7 +1205,7 @@
/* Sentinel or registers frame. This frame obtains register values
direct from the inferior's registers. */
SENTINEL_FRAME
-@@ -518,6 +520,7 @@ extern int safe_frame_unwind_memory (str
+@@ -523,6 +525,7 @@ extern int safe_frame_unwind_memory (str
/* Return this frame's architecture. */
extern struct gdbarch *get_frame_arch (struct frame_info *this_frame);
@@ -1263,15 +1263,15 @@
else
--- gdb/gdbarch.c
+++ gdb/gdbarch.c
-@@ -225,6 +225,7 @@ struct gdbarch
- gdbarch_regset_from_core_section_ftype *regset_from_core_section;
+@@ -226,6 +226,7 @@ struct gdbarch
+ int core_reg_section_encodes_pid;
struct core_regset_section * core_regset_sections;
gdbarch_core_xfer_shared_libraries_ftype *core_xfer_shared_libraries;
+ const char * gcore_bfd_target;
int vtable_function_descriptors;
int vbit_in_delta;
gdbarch_skip_permanent_breakpoint_ftype *skip_permanent_breakpoint;
-@@ -312,8 +313,8 @@ struct gdbarch startup_gdbarch =
+@@ -314,8 +315,8 @@ struct gdbarch startup_gdbarch =
0, /* register_to_value */
0, /* value_to_register */
0, /* value_from_register */
@@ -1282,23 +1282,23 @@
0, /* integer_to_address */
0, /* return_value */
0, /* skip_prologue */
-@@ -357,6 +358,7 @@ struct gdbarch startup_gdbarch =
- 0, /* regset_from_core_section */
+@@ -360,6 +361,7 @@ struct gdbarch startup_gdbarch =
+ 0, /* core_reg_section_encodes_pid */
0, /* core_regset_sections */
0, /* core_xfer_shared_libraries */
+ 0, /* gcore_bfd_target */
0, /* vtable_function_descriptors */
0, /* vbit_in_delta */
0, /* skip_permanent_breakpoint */
-@@ -608,6 +610,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
- /* Skip verify of fetch_pointer_argument, has predicate */
+@@ -613,6 +615,7 @@ verify_gdbarch (struct gdbarch *gdbarch)
/* Skip verify of regset_from_core_section, has predicate */
+ /* Skip verify of core_reg_section_encodes_pid, invalid_p == 0 */
/* Skip verify of core_xfer_shared_libraries, has predicate */
+ /* Skip verify of gcore_bfd_target, has predicate */
/* Skip verify of vtable_function_descriptors, invalid_p == 0 */
/* Skip verify of vbit_in_delta, invalid_p == 0 */
/* Skip verify of skip_permanent_breakpoint, has predicate */
-@@ -829,6 +832,12 @@ gdbarch_dump (struct gdbarch *gdbarch, s
+@@ -838,6 +841,12 @@ gdbarch_dump (struct gdbarch *gdbarch, s
"gdbarch_dump: frame_red_zone_size = %s\n",
plongest (gdbarch->frame_red_zone_size));
fprintf_unfiltered (file,
@@ -1311,7 +1311,7 @@
"gdbarch_dump: gdbarch_get_longjmp_target_p() = %d\n",
gdbarch_get_longjmp_target_p (gdbarch));
fprintf_unfiltered (file,
-@@ -2055,7 +2064,7 @@ gdbarch_pointer_to_address (struct gdbar
+@@ -2070,7 +2079,7 @@ gdbarch_pointer_to_address (struct gdbar
gdb_assert (gdbarch->pointer_to_address != NULL);
if (gdbarch_debug >= 2)
fprintf_unfiltered (gdb_stdlog, "gdbarch_pointer_to_address called\n");
@@ -1320,7 +1320,7 @@
}
void
-@@ -2072,7 +2081,7 @@ gdbarch_address_to_pointer (struct gdbar
+@@ -2087,7 +2096,7 @@ gdbarch_address_to_pointer (struct gdbar
gdb_assert (gdbarch->address_to_pointer != NULL);
if (gdbarch_debug >= 2)
fprintf_unfiltered (gdb_stdlog, "gdbarch_address_to_pointer called\n");
@@ -1329,7 +1329,7 @@
}
void
-@@ -2931,6 +2940,31 @@ set_gdbarch_core_xfer_shared_libraries (
+@@ -2963,6 +2972,31 @@ set_gdbarch_core_xfer_shared_libraries (
}
int
@@ -1361,7 +1361,7 @@
gdbarch_vtable_function_descriptors (struct gdbarch *gdbarch)
{
gdb_assert (gdbarch != NULL);
-@@ -3367,10 +3401,15 @@ gdbarch_data (struct gdbarch *gdbarch, s
+@@ -3423,10 +3457,15 @@ gdbarch_data (struct gdbarch *gdbarch, s
(as all fields are valid), but be careful to also detect
recursive references. */
{
@@ -1393,7 +1393,7 @@
extern void gdbarch_address_to_pointer (struct gdbarch *gdbarch, struct type *type, gdb_byte *buf, CORE_ADDR addr);
extern void set_gdbarch_address_to_pointer (struct gdbarch *gdbarch, gdbarch_address_to_pointer_ftype *address_to_pointer);
-@@ -652,6 +652,13 @@ typedef LONGEST (gdbarch_core_xfer_share
+@@ -661,6 +661,13 @@ typedef LONGEST (gdbarch_core_xfer_share
extern LONGEST gdbarch_core_xfer_shared_libraries (struct gdbarch *gdbarch, gdb_byte *readbuf, ULONGEST offset, LONGEST len);
extern void set_gdbarch_core_xfer_shared_libraries (struct gdbarch *gdbarch, gdbarch_core_xfer_shared_libraries_ftype *core_xfer_shared_libraries);
@@ -1420,7 +1420,7 @@
M:CORE_ADDR:integer_to_address:struct type *type, const gdb_byte *buf:type, buf
# Return the return-value convention that will be used by FUNCTYPE
-@@ -607,6 +607,9 @@ v:struct core_regset_section *:core_regs
+@@ -614,6 +614,9 @@ v:struct core_regset_section *:core_regs
# core file into buffer READBUF with length LEN.
M:LONGEST:core_xfer_shared_libraries:gdb_byte *readbuf, ULONGEST offset, LONGEST len:readbuf, offset, len
@@ -1430,7 +1430,7 @@
# If the elements of C++ vtables are in-place function descriptors rather
# than normal function pointers (which may point to code or a descriptor),
# set this to one.
-@@ -1731,10 +1734,15 @@ gdbarch_data (struct gdbarch *gdbarch, s
+@@ -1743,10 +1746,15 @@ gdbarch_data (struct gdbarch *gdbarch, s
(as all fields are valid), but be careful to also detect
recursive references. */
{
@@ -1530,7 +1530,7 @@
#ifndef PTRACE_GETSIGINFO
# define PTRACE_GETSIGINFO 0x4202
# define PTRACE_SETSIGINFO 0x4203
-@@ -2180,6 +2186,102 @@ linux_qxfer_osdata (const char *annex,
+@@ -2218,6 +2224,102 @@ linux_xfer_siginfo (const char *annex, u
return len;
}
@@ -1633,7 +1633,7 @@
static struct target_ops linux_target_ops = {
linux_create_inferior,
linux_attach,
-@@ -2210,7 +2312,7 @@ static struct target_ops linux_target_op
+@@ -2248,7 +2350,7 @@ static struct target_ops linux_target_op
#else
NULL,
#endif
@@ -1641,7 +1641,7 @@
+ linux_spu_qxfer_partial,
hostio_last_error_from_errno,
linux_qxfer_osdata,
- };
+ linux_xfer_siginfo,
--- gdb/gdbserver/linux-ppc-low.c
+++ gdb/gdbserver/linux-ppc-low.c
@@ -28,6 +28,7 @@
@@ -1847,7 +1847,7 @@
i386_show_dr ("remove_hwbp", addr, 1, hw_execute);
--- gdb/inferior.h
+++ gdb/inferior.h
-@@ -142,13 +142,17 @@ extern CORE_ADDR read_pc (void);
+@@ -156,13 +156,17 @@ extern CORE_ADDR read_pc (void);
extern void write_pc (CORE_ADDR);
@@ -1906,7 +1906,7 @@
#ifdef HAVE_PERSONALITY
# include
-@@ -3429,8 +3435,8 @@ linux_nat_do_thread_registers (bfd *obfd
+@@ -3529,8 +3535,8 @@ linux_nat_do_thread_registers (bfd *obfd
gdb_gregset_t gregs;
gdb_fpregset_t fpregs;
unsigned long lwp = ptid_get_lwp (ptid);
@@ -1917,7 +1917,7 @@
const struct regset *regset;
int core_regset_p;
struct cleanup *old_chain;
-@@ -3540,6 +3546,119 @@ linux_nat_corefile_thread_callback (stru
+@@ -3640,6 +3646,119 @@ linux_nat_corefile_thread_callback (stru
return 0;
}
@@ -2037,7 +2037,7 @@
/* Fills the "to_make_corefile_note" target vector. Builds the note
section for a corefile, and returns it in a malloc buffer. */
-@@ -3600,6 +3719,8 @@ linux_nat_make_corefile_notes (bfd *obfd
+@@ -3700,6 +3819,8 @@ linux_nat_make_corefile_notes (bfd *obfd
xfree (auxv);
}
@@ -2046,7 +2046,7 @@
make_cleanup (xfree, note_data);
return note_data;
}
-@@ -3931,6 +4052,99 @@ linux_proc_xfer_partial (struct target_o
+@@ -4031,6 +4152,99 @@ linux_proc_xfer_partial (struct target_o
return ret;
}
@@ -2146,7 +2146,7 @@
/* Parse LINE as a signal set and add its set bits to SIGS. */
static void
-@@ -4136,6 +4350,10 @@ linux_xfer_partial (struct target_ops *o
+@@ -4236,6 +4450,10 @@ linux_xfer_partial (struct target_ops *o
return linux_nat_xfer_osdata (ops, object, annex, readbuf, writebuf,
offset, len);
@@ -2423,7 +2423,7 @@
return tdesc_powerpc_vsx64l;
else if (altivec)
return tdesc_powerpc_altivec64l;
-@@ -1062,6 +1121,249 @@ ppc_linux_core_read_description (struct
+@@ -1062,6 +1121,258 @@ ppc_linux_core_read_description (struct
}
}
@@ -2481,15 +2481,24 @@
+ if (!ptid_equal (spe_context_cache_ptid, inferior_ptid))
+ {
+ volatile struct gdb_exception ex;
++ struct target_ops *target;
+
-+ if (!target_get_thread_local_address_p ())
++ for (target = current_target.beneath;
++ target != NULL;
++ target = target->beneath)
++ {
++ if (target->to_get_thread_local_address != NULL)
++ break;
++ }
++
++ if (target == NULL)
+ return 0;
+
+ TRY_CATCH (ex, RETURN_MASK_ERROR)
+ {
+ spe_context_cache_address
-+ = target_get_thread_local_address
-+ (inferior_ptid, spe_context_lm_addr, spe_context_offset);
++ = target->to_get_thread_local_address
++ (target, inferior_ptid, spe_context_lm_addr, spe_context_offset);
+
+ spe_context_cache_ptid = inferior_ptid;
+ }
@@ -2673,7 +2682,7 @@
static void
ppc_linux_init_abi (struct gdbarch_info info,
struct gdbarch *gdbarch)
-@@ -1102,6 +1404,12 @@ ppc_linux_init_abi (struct gdbarch_info
+@@ -1102,6 +1413,12 @@ ppc_linux_init_abi (struct gdbarch_info
/* Trampolines. */
tramp_frame_prepend_unwinder (gdbarch, &ppc32_linux_sigaction_tramp_frame);
tramp_frame_prepend_unwinder (gdbarch, &ppc32_linux_sighandler_tramp_frame);
@@ -2686,7 +2695,7 @@
}
if (tdep->wordsize == 8)
-@@ -1119,6 +1427,12 @@ ppc_linux_init_abi (struct gdbarch_info
+@@ -1119,6 +1436,12 @@ ppc_linux_init_abi (struct gdbarch_info
/* Trampolines. */
tramp_frame_prepend_unwinder (gdbarch, &ppc64_linux_sigaction_tramp_frame);
tramp_frame_prepend_unwinder (gdbarch, &ppc64_linux_sighandler_tramp_frame);
@@ -2699,7 +2708,7 @@
}
set_gdbarch_regset_from_core_section (gdbarch, ppc_linux_regset_from_core_section);
set_gdbarch_core_read_description (gdbarch, ppc_linux_core_read_description);
-@@ -1158,6 +1472,22 @@ ppc_linux_init_abi (struct gdbarch_info
+@@ -1158,6 +1481,22 @@ ppc_linux_init_abi (struct gdbarch_info
PPC_TRAP_REGNUM, "trap");
}
}
@@ -2722,7 +2731,7 @@
}
void
-@@ -1172,15 +1502,23 @@ _initialize_ppc_linux_tdep (void)
+@@ -1172,15 +1511,23 @@ _initialize_ppc_linux_tdep (void)
gdbarch_register_osabi (bfd_arch_rs6000, bfd_mach_rs6k, GDB_OSABI_LINUX,
ppc_linux_init_abi);
@@ -2766,7 +2775,7 @@
extern struct target_desc *tdesc_powerpc_isa205_altivec64l;
--- gdb/printcmd.c
+++ gdb/printcmd.c
-@@ -386,7 +386,7 @@ print_scalar_formatted (const void *vala
+@@ -388,7 +388,7 @@ print_scalar_formatted (const void *vala
/* If we are printing it as unsigned, truncate it in case it is actually
a negative signed value (e.g. "print/u (short)-1" should print 65535
(if shorts are 16 bits) instead of 4294967295). */
@@ -3197,7 +3206,7 @@
+32:vrsave
--- gdb/remote.c
+++ gdb/remote.c
-@@ -4523,7 +4523,7 @@ process_stop_reply (struct stop_reply *s
+@@ -4526,7 +4526,7 @@ process_stop_reply (struct stop_reply *s
for (ix = 0;
VEC_iterate(cached_reg_t, stop_reply->regcache, ix, reg);
ix++)
@@ -3206,7 +3215,7 @@
reg->num, reg->data);
VEC_free (cached_reg_t, stop_reply->regcache);
}
-@@ -6781,7 +6781,7 @@ remote_insert_breakpoint (struct bp_targ
+@@ -6785,7 +6785,7 @@ remote_insert_breakpoint (struct bp_targ
switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
{
case PACKET_ERROR:
@@ -3215,7 +3224,7 @@
case PACKET_OK:
bp_tgt->placed_address = addr;
bp_tgt->placed_size = bpsize;
-@@ -6968,7 +6968,7 @@ remote_insert_hw_breakpoint (struct bp_t
+@@ -6972,7 +6972,7 @@ remote_insert_hw_breakpoint (struct bp_t
(target_gdbarch, &bp_tgt->placed_address, &bp_tgt->placed_size);
if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
@@ -3224,7 +3233,7 @@
rs = get_remote_state ();
p = rs->buf;
-@@ -6988,7 +6988,7 @@ remote_insert_hw_breakpoint (struct bp_t
+@@ -6992,7 +6992,7 @@ remote_insert_hw_breakpoint (struct bp_t
{
case PACKET_ERROR:
case PACKET_UNKNOWN:
@@ -3233,7 +3242,7 @@
case PACKET_OK:
return 0;
}
-@@ -7005,7 +7005,7 @@ remote_remove_hw_breakpoint (struct bp_t
+@@ -7009,7 +7009,7 @@ remote_remove_hw_breakpoint (struct bp_t
char *p = rs->buf;
if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
@@ -3242,7 +3251,7 @@
*(p++) = 'z';
*(p++) = '1';
-@@ -7022,7 +7022,7 @@ remote_remove_hw_breakpoint (struct bp_t
+@@ -7026,7 +7026,7 @@ remote_remove_hw_breakpoint (struct bp_t
{
case PACKET_ERROR:
case PACKET_UNKNOWN:
@@ -3299,7 +3308,7 @@
const struct frame_unwind *const sentinel_frame_unwind = &sentinel_frame_unwinder;
--- gdb/sol-thread.c
+++ gdb/sol-thread.c
-@@ -1093,7 +1093,7 @@ ps_lgetregs (gdb_ps_prochandle_t ph, lwp
+@@ -1094,7 +1094,7 @@ ps_lgetregs (gdb_ps_prochandle_t ph, lwp
old_chain = save_inferior_ptid ();
inferior_ptid = BUILD_LWP (lwpid, PIDGET (inferior_ptid));
@@ -3308,7 +3317,7 @@
if (target_has_execution)
procfs_ops.to_fetch_registers (regcache, -1);
-@@ -1118,7 +1118,7 @@ ps_lsetregs (gdb_ps_prochandle_t ph, lwp
+@@ -1119,7 +1119,7 @@ ps_lsetregs (gdb_ps_prochandle_t ph, lwp
old_chain = save_inferior_ptid ();
inferior_ptid = BUILD_LWP (lwpid, PIDGET (inferior_ptid));
@@ -3317,7 +3326,7 @@
supply_gregset (regcache, (const gdb_gregset_t *) gregset);
if (target_has_execution)
-@@ -1229,7 +1229,7 @@ ps_lgetfpregs (gdb_ps_prochandle_t ph, l
+@@ -1230,7 +1230,7 @@ ps_lgetfpregs (gdb_ps_prochandle_t ph, l
old_chain = save_inferior_ptid ();
inferior_ptid = BUILD_LWP (lwpid, PIDGET (inferior_ptid));
@@ -3326,7 +3335,7 @@
if (target_has_execution)
procfs_ops.to_fetch_registers (regcache, -1);
-@@ -1254,7 +1254,7 @@ ps_lsetfpregs (gdb_ps_prochandle_t ph, l
+@@ -1255,7 +1255,7 @@ ps_lsetfpregs (gdb_ps_prochandle_t ph, l
old_chain = save_inferior_ptid ();
inferior_ptid = BUILD_LWP (lwpid, PIDGET (inferior_ptid));
@@ -3871,9 +3880,9 @@
ALL_OBJFILES (so->objfile)
--- gdb/solist.h
+++ gdb/solist.h
-@@ -121,6 +121,10 @@ struct target_so_ops
- and another from the list returned by current_sos, return 1
- if they represent the same library. */
+@@ -123,6 +123,10 @@ struct target_so_ops
+ Falls back to using strcmp on so_original_name field when set
+ to NULL. */
int (*same) (struct so_list *gdb, struct so_list *inferior);
+
+ /* Extra hook for opening a BFD for a solib. Can be used to
@@ -3884,7 +3893,7 @@
/* Free the memory associated with a (so_list *). */
--- gdb/spu-multiarch.c
+++ gdb/spu-multiarch.c
-@@ -0,0 +1,461 @@
+@@ -0,0 +1,462 @@
+/* Cell SPU GNU/Linux multi-architecture debugging support.
+ Copyright (C) 2008 Free Software Foundation, Inc.
+
@@ -4005,16 +4014,17 @@
+
+/* Override the to_wait routine to detect current architecture. */
+static ptid_t
-+spu_wait (ptid_t ptid, struct target_waitstatus *ourstatus)
++spu_wait (struct target_ops *ops, ptid_t ptid,
++ struct target_waitstatus *ourstatus)
+{
-+ struct target_ops *ops_beneath = find_target_beneath (&spu_ops);
++ struct target_ops *ops_beneath = find_target_beneath (ops);
+
+ /* Always switch to PPU while running the inferior. This allows
+ linux-thread-db.c code to work as expected. */
+ current_gdbarch = target_gdbarch;
+
+ /* Run it. */
-+ ptid = ops_beneath->to_wait (ptid, ourstatus);
++ ptid = ops_beneath->to_wait (ops_beneath, ptid, ourstatus);
+
+ /* Detect and switch to current architecture. */
+ if (ourstatus->kind == TARGET_WAITKIND_STOPPED)
@@ -4902,7 +4912,7 @@
+/* This handler is called when the inferior has stopped. If it is stopped in
+ SPU architecture then flush the ea cache if used. */
+static void
-+spu_attach_normal_stop (struct bpstats *bs)
++spu_attach_normal_stop (struct bpstats *bs, int unused)
+{
+ if (!spu_auto_flush_cache_p)
+ return;
@@ -5357,15 +5367,15 @@
static void init_dummy_target (void);
static struct target_ops debug_target;
-@@ -485,6 +488,7 @@ update_current_target (void)
+@@ -480,6 +483,7 @@ update_current_target (void)
INHERIT (to_find_memory_regions, t);
INHERIT (to_make_corefile_notes, t);
- INHERIT (to_get_thread_local_address, t);
+ /* Do not inherit to_get_thread_local_address. */
+ INHERIT (to_thread_architecture, t);
INHERIT (to_can_execute_reverse, t);
/* Do not inherit to_read_description. */
INHERIT (to_get_ada_task_ptid, t);
-@@ -647,6 +651,8 @@ update_current_target (void)
+@@ -639,6 +643,8 @@ update_current_target (void)
de_fault (to_async_mask,
(int (*) (int))
return_one);
@@ -5374,7 +5384,7 @@
current_target.to_read_description = NULL;
de_fault (to_get_ada_task_ptid,
(ptid_t (*) (long, long))
-@@ -2099,7 +2105,8 @@ target_require_runnable (void)
+@@ -2134,7 +2140,8 @@ target_require_runnable (void)
/* Do not worry about thread_stratum targets that can not
create inferiors. Assume they will be pushed again if
necessary, and continue to the process_stratum. */
@@ -5384,7 +5394,7 @@
continue;
error (_("\
-@@ -2259,6 +2266,12 @@ default_watchpoint_addr_within_range (st
+@@ -2294,6 +2301,12 @@ default_watchpoint_addr_within_range (st
return addr >= start && addr < start + length;
}
@@ -5397,7 +5407,7 @@
static int
return_zero (void)
{
-@@ -3148,6 +3161,19 @@ debug_to_find_new_threads (void)
+@@ -3145,6 +3158,19 @@ debug_to_find_new_threads (void)
fputs_unfiltered ("target_find_new_threads ()\n", gdb_stdlog);
}
@@ -5417,7 +5427,7 @@
static void
debug_to_stop (ptid_t ptid)
{
-@@ -3233,6 +3259,7 @@ setup_target_debug (void)
+@@ -3224,6 +3250,7 @@ setup_target_debug (void)
current_target.to_stop = debug_to_stop;
current_target.to_rcmd = debug_to_rcmd;
current_target.to_pid_to_exec_file = debug_to_pid_to_exec_file;
@@ -5437,7 +5447,7 @@
};
enum thread_control_capabilities
-@@ -535,6 +536,9 @@ struct target_ops
+@@ -544,6 +545,9 @@ struct target_ops
simultaneously? */
int (*to_supports_multi_process) (void);
@@ -5447,7 +5457,7 @@
int to_magic;
/* Need sub-structure for target machine related rather than comm related?
*/
-@@ -1040,6 +1044,11 @@ extern char *normal_pid_to_str (ptid_t p
+@@ -1043,6 +1047,11 @@ extern char *normal_pid_to_str (ptid_t p
#define target_pid_to_exec_file(pid) \
(current_target.to_pid_to_exec_file) (pid)
@@ -5495,7 +5505,7 @@
# If no core registers were specified, assume this target does not
--- gdb/thread.c
+++ gdb/thread.c
-@@ -767,6 +767,7 @@ switch_to_thread (ptid_t ptid)
+@@ -824,6 +824,7 @@ switch_to_thread (ptid_t ptid)
inferior_ptid = ptid;
reinit_frame_cache ();
registers_changed ();
@@ -5505,7 +5515,7 @@
while in the TARGET_RUNNING state, e.g., while handling an
--- gdb/utils.c
+++ gdb/utils.c
-@@ -3022,7 +3022,6 @@ core_addr_to_string_nz (const CORE_ADDR
+@@ -3119,7 +3119,6 @@ core_addr_to_string_nz (const CORE_ADDR
CORE_ADDR
string_to_core_addr (const char *my_string)
{
@@ -5513,7 +5523,7 @@
CORE_ADDR addr = 0;
if (my_string[0] == '0' && tolower (my_string[1]) == 'x')
-@@ -3038,17 +3037,6 @@ string_to_core_addr (const char *my_stri
+@@ -3135,17 +3134,6 @@ string_to_core_addr (const char *my_stri
else
error (_("invalid hex \"%s\""), my_string);
}
@@ -5542,12 +5552,11 @@
if (frame_addr == (CORE_ADDR) 0)
return NULL;
-@@ -436,7 +438,17 @@ find_frame_addr_in_frame_chain (CORE_ADD
- frame = get_prev_frame (frame);
- if (frame == NULL)
- return NULL;
+@@ -435,7 +437,16 @@ find_frame_addr_in_frame_chain (CORE_ADD
+ frame != NULL;
+ frame = get_prev_frame (frame))
+ {
- if (get_frame_base_address (frame) == frame_addr)
-+
+ /* The CORE_ADDR we get as argument was parsed from a string GDB
+ output as $fp. This output got truncated to gdbarch_addr_bit.
+ Truncate the frame base address in the same manner before
@@ -5560,7 +5569,7 @@
+ if (frame_base == frame_addr)
return frame;
}
- }
+
--- gdb/xml-tdesc.c
+++ gdb/xml-tdesc.c
@@ -106,6 +106,20 @@ tdesc_end_arch (struct gdb_xml_parser *p
diff --git a/gdb-6.8.50.20090203-cvs.tar.bz2 b/gdb-6.8.50.20090203-cvs.tar.bz2
deleted file mode 100644
index 7fa244f..0000000
--- a/gdb-6.8.50.20090203-cvs.tar.bz2
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8737eb1010fea0ac78a5dd47b4986119ad811cc4b7a3b9ad4245bb78dd68cc94
-size 15838272
diff --git a/gdb-6.8.50.20090216-cvs.tar.bz2 b/gdb-6.8.50.20090216-cvs.tar.bz2
new file mode 100644
index 0000000..42192ec
--- /dev/null
+++ b/gdb-6.8.50.20090216-cvs.tar.bz2
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6c93d11f9695a67fb9b0c26a3fef5afeafdd4b9a4863b0d08514c2548b47fee7
+size 15831628
diff --git a/gdb.changes b/gdb.changes
index 9c275e5..1ea08b9 100644
--- a/gdb.changes
+++ b/gdb.changes
@@ -1,3 +1,8 @@
+-------------------------------------------------------------------
+Mon Feb 16 11:40:00 CET 2009 - schwab@suse.de
+
+- Update to head to trunk.
+
-------------------------------------------------------------------
Tue Feb 3 18:11:57 CET 2009 - schwab@suse.de
diff --git a/gdb.spec b/gdb.spec
index 93b8901..c7e9200 100644
--- a/gdb.spec
+++ b/gdb.spec
@@ -1,5 +1,5 @@
#
-# spec file for package gdb (Version 6.8.50.20090203)
+# spec file for package gdb (Version 6.8.50.20090216)
#
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
@@ -19,7 +19,7 @@
Name: gdb
Summary: The GNU Debugger
-Version: 6.8.50.20090203
+Version: 6.8.50.20090216
Release: 1
BuildRequires: bison dejagnu flex gcc-c++ gcc-fortran gcc-java gcc-objc python-devel readline-devel zlib-devel
%if 0%{?suse_version} > 1020
@@ -199,6 +199,8 @@ rm -rf $RPM_BUILD_ROOT
%endif
%changelog
+* Mon Feb 16 2009 schwab@suse.de
+- Update to head to trunk.
* Tue Feb 03 2009 schwab@suse.de
- Update to head to trunk.
* Thu Jan 22 2009 schwab@suse.de