OBS User unknown 2009-01-19 00:46:30 +00:00 committed by Git OBS Bridge
parent c2ccc3d9f3
commit a2afc99c64
9 changed files with 139 additions and 288 deletions

View File

@ -382,6 +382,7 @@ doc/ChangeLog:
* gdb.texinfo (Target Descriptions): Document <compatible> element.
================================================================================
--- gdb/Makefile.in
+++ gdb/Makefile.in
@@ -499,7 +499,7 @@ ALL_TARGET_OBS = \
@ -393,7 +394,7 @@ doc/ChangeLog:
v850-tdep.o \
vaxnbsd-tdep.o vaxobsd-tdep.o vax-tdep.o \
xstormy16-tdep.o \
@@ -1337,7 +1337,7 @@ ALLDEPFILES = \
@@ -1338,7 +1338,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 \
@ -401,7 +402,7 @@ doc/ChangeLog:
+ spu-linux-nat.c spu-tdep.c spu-multiarch.c solib-spu.c \
v850-tdep.c \
vax-nat.c vax-tdep.c vaxbsd-nat.c vaxnbsd-tdep.c \
win32-nat.c \
windows-nat.c windows-tdep.c \
--- gdb/arch-utils.c
+++ gdb/arch-utils.c
@@ -326,15 +326,24 @@ set_endian (char *ignore_args, int from_
@ -520,7 +521,7 @@ doc/ChangeLog:
--- gdb/breakpoint.c
+++ gdb/breakpoint.c
@@ -1089,7 +1089,7 @@ Note: automatically using hardware break
@@ -1134,7 +1134,7 @@ Note: automatically using hardware break
bpt->overlay_target_info = bpt->target_info;
bpt->overlay_target_info.placed_address = addr;
val = target_insert_breakpoint (&bpt->overlay_target_info);
@ -529,7 +530,7 @@ doc/ChangeLog:
fprintf_unfiltered (tmp_error_stream,
"Overlay breakpoint %d failed: in ROM?",
bpt->owner->number);
@@ -1112,6 +1112,14 @@ Note: automatically using hardware break
@@ -1157,6 +1157,14 @@ Note: automatically using hardware break
}
}
@ -544,7 +545,7 @@ doc/ChangeLog:
if (val)
{
/* Can't set the breakpoint. */
@@ -1588,6 +1596,14 @@ remove_breakpoint (struct bp_location *b
@@ -1626,6 +1634,14 @@ remove_breakpoint (struct bp_location *b
}
}
@ -559,7 +560,7 @@ doc/ChangeLog:
/* 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. */
@@ -7490,6 +7506,37 @@ breakpoint_re_set (void)
@@ -7552,6 +7568,37 @@ breakpoint_re_set (void)
create_overlay_event_breakpoint ("_ovly_debug_event");
}
@ -599,7 +600,7 @@ doc/ChangeLog:
--- gdb/breakpoint.h
+++ gdb/breakpoint.h
@@ -674,6 +674,8 @@ extern int breakpoint_thread_match (CORE
@@ -670,6 +670,8 @@ extern int breakpoint_thread_match (CORE
extern void until_break_command (char *, int, int);
@ -641,7 +642,7 @@ doc/ChangeLog:
/* Parse start address (optional). */
--- gdb/configure.tgt
+++ gdb/configure.tgt
@@ -349,7 +349,8 @@ powerpc-*-aix* | rs6000-*-*)
@@ -354,7 +354,8 @@ powerpc-*-aix* | rs6000-*-*)
powerpc-*-linux* | powerpc64-*-linux*)
# Target: PowerPC running Linux
gdb_target_obs="rs6000-tdep.o ppc-linux-tdep.o ppc-sysv-tdep.o \
@ -754,7 +755,7 @@ doc/ChangeLog:
}
--- gdb/doc/gdb.texinfo
+++ gdb/doc/gdb.texinfo
@@ -16787,6 +16787,33 @@ and local store addresses and transfer s
@@ -16834,6 +16834,33 @@ and local store addresses and transfer s
@end table
@ -788,7 +789,7 @@ doc/ChangeLog:
@node PowerPC
@subsection PowerPC
@cindex PowerPC architecture
@@ -28394,6 +28421,7 @@ are explained further below.
@@ -28801,6 +28828,7 @@ are explained further below.
<!DOCTYPE target SYSTEM "gdb-target.dtd">
<target version="1.0">
@r{[}@var{architecture}@r{]}
@ -796,7 +797,7 @@ doc/ChangeLog:
@r{[}@var{feature}@dots{}@r{]}
</target>
@end smallexample
@@ -28445,9 +28473,33 @@ An @samp{<architecture>} element has thi
@@ -28852,9 +28880,33 @@ An @samp{<architecture>} element has thi
<architecture>@var{arch}</architecture>
@end smallexample
@ -1252,7 +1253,7 @@ doc/ChangeLog:
+</target>
--- gdb/findvar.c
+++ gdb/findvar.c
@@ -308,13 +308,15 @@ value_of_register_lazy (struct frame_inf
@@ -309,13 +309,15 @@ value_of_register_lazy (struct frame_inf
/* Given a pointer of type TYPE in target form in BUF, return the
address it represents. */
CORE_ADDR
@ -1270,7 +1271,7 @@ doc/ChangeLog:
{
return extract_signed_integer (buf, TYPE_LENGTH (type));
}
@@ -322,14 +324,15 @@ signed_pointer_to_address (struct type *
@@ -323,14 +325,15 @@ signed_pointer_to_address (struct type *
/* Given an address, store it as a pointer of type TYPE in target
format in BUF. */
void
@ -1502,7 +1503,7 @@ doc/ChangeLog:
/* 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
@@ -1723,9 +1747,17 @@ enum frame_type
@@ -1721,9 +1745,17 @@ enum frame_type
get_frame_type (struct frame_info *frame)
{
if (frame->unwind == NULL)
@ -1523,7 +1524,7 @@ doc/ChangeLog:
return frame->unwind->type;
}
@@ -1792,12 +1824,48 @@ safe_frame_unwind_memory (struct frame_i
@@ -1790,17 +1822,48 @@ safe_frame_unwind_memory (struct frame_i
return !target_read_memory (addr, buf, len);
}
@ -1533,7 +1534,10 @@ doc/ChangeLog:
struct gdbarch *
get_frame_arch (struct frame_info *this_frame)
{
- return current_gdbarch;
- /* In the future, this function will return a per-frame
- architecture instead of current_gdbarch. Calling the
- routine with a NULL value of this_frame is a bug! */
- gdb_assert (this_frame);
+ return frame_arch_unwind (this_frame->next);
+}
+
@ -1569,7 +1573,8 @@ doc/ChangeLog:
+
+ do_cleanups (old_chain);
+ }
+
- return current_gdbarch;
+ return next_frame->prev_arch.arch;
}
@ -1828,7 +1833,7 @@ doc/ChangeLog:
/* The architecture initialization hasn't completed - punt -
--- gdb/gdbserver/Makefile.in
+++ gdb/gdbserver/Makefile.in
@@ -214,8 +214,8 @@ clean:
@@ -207,8 +207,8 @@ clean:
rm -f reg-cris.c reg-crisv32.c reg-x86-64-linux.c reg-xtensa.c
rm -f arm-with-iwmmxt.c mips-linux.c mips64-linux.c
rm -f powerpc-32l.c powerpc-64l.c powerpc-e500l.c
@ -1839,7 +1844,7 @@ doc/ChangeLog:
rm -f powerpc-isa205-32l.c powerpc-isa205-64l.c
rm -f powerpc-isa205-altivec32l.c powerpc-isa205-vsx32l.c powerpc-isa205-altivec64l.c
rm -f powerpc-isa205-vsx64l.c
@@ -363,6 +363,9 @@ powerpc-32l.c : $(srcdir)/../regformats/
@@ -356,6 +356,9 @@ powerpc-32l.c : $(srcdir)/../regformats/
powerpc-altivec32l.o : powerpc-altivec32l.c $(regdef_h)
powerpc-altivec32l.c : $(srcdir)/../regformats/rs6000/powerpc-altivec32l.dat $(regdat_sh)
$(SHELL) $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-altivec32l.dat powerpc-altivec32l.c
@ -1849,7 +1854,7 @@ doc/ChangeLog:
powerpc-vsx32l.o : powerpc-vsx32l.c $(regdef_h)
powerpc-vsx32l.c : $(srcdir)/../regformats/rs6000/powerpc-vsx32l.dat $(regdat_sh)
$(SHELL) $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-vsx32l.dat powerpc-vsx32l.c
@@ -384,6 +387,9 @@ powerpc-64l.c : $(srcdir)/../regformats/
@@ -377,6 +380,9 @@ powerpc-64l.c : $(srcdir)/../regformats/
powerpc-altivec64l.o : powerpc-altivec64l.c $(regdef_h)
powerpc-altivec64l.c : $(srcdir)/../regformats/rs6000/powerpc-altivec64l.dat $(regdat_sh)
$(SHELL) $(regdat_sh) $(srcdir)/../regformats/rs6000/powerpc-altivec64l.dat powerpc-altivec64l.c
@ -1887,24 +1892,24 @@ doc/ChangeLog:
srv_xmlfiles="${srv_xmlfiles} rs6000/powerpc-isa205-altivec64l.xml"
--- gdb/gdbserver/linux-low.c
+++ gdb/gdbserver/linux-low.c
@@ -33,6 +33,14 @@
#include <errno.h>
#include <sys/syscall.h>
#include <sched.h>
+#include <sys/types.h>
@@ -36,8 +36,14 @@
#include <ctype.h>
#include <pwd.h>
#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/vfs.h>
+#include <dirent.h>
+
#include <dirent.h>
+#ifndef SPUFS_MAGIC
+#define SPUFS_MAGIC 0x23c9b64e
+#endif
+
#ifndef PTRACE_GETSIGINFO
# define PTRACE_GETSIGINFO 0x4202
@@ -2049,6 +2057,102 @@ linux_read_offsets (CORE_ADDR *text_p, C
# define PTRACE_SETSIGINFO 0x4203
@@ -2180,6 +2186,102 @@ linux_qxfer_osdata (const char *annex,
return len;
}
#endif
+
+/* Enumerate spufs IDs for process PID. */
@ -2005,15 +2010,15 @@ doc/ChangeLog:
static struct target_ops linux_target_ops = {
linux_create_inferior,
linux_attach,
@@ -2079,7 +2183,7 @@ static struct target_ops linux_target_op
@@ -2210,7 +2312,7 @@ static struct target_ops linux_target_op
#else
NULL,
#endif
- NULL,
+ linux_spu_qxfer_partial,
hostio_last_error_from_errno,
linux_qxfer_osdata,
};
--- gdb/gdbserver/linux-ppc-low.c
+++ gdb/gdbserver/linux-ppc-low.c
@@ -28,6 +28,7 @@
@ -2187,7 +2192,7 @@ doc/ChangeLog:
--- gdb/i386-nat.c
+++ gdb/i386-nat.c
@@ -640,14 +640,14 @@ i386_insert_hw_breakpoint (struct bp_tar
@@ -641,14 +641,14 @@ i386_insert_hw_breakpoint (struct bp_tar
}
/* Remove a hardware-assisted breakpoint at BP_TGT->placed_address.
@ -2206,7 +2211,7 @@ doc/ChangeLog:
i386_show_dr ("remove_hwbp", addr, 1, hw_execute);
--- gdb/inferior.h
+++ gdb/inferior.h
@@ -146,13 +146,17 @@ extern CORE_ADDR read_pc (void);
@@ -142,13 +142,17 @@ extern CORE_ADDR read_pc (void);
extern void write_pc (CORE_ADDR);
@ -2230,7 +2235,7 @@ doc/ChangeLog:
extern void wait_for_inferior (int treat_exec_as_sigtrap);
--- gdb/iq2000-tdep.c
+++ gdb/iq2000-tdep.c
@@ -86,7 +86,8 @@ insn_addr_from_ptr (CORE_ADDR ptr) /* ta
@@ -87,7 +87,8 @@ insn_addr_from_ptr (CORE_ADDR ptr) /* ta
Convert a target pointer to an address in host (CORE_ADDR) format. */
static CORE_ADDR
@ -2240,7 +2245,7 @@ doc/ChangeLog:
{
enum type_code target = TYPE_CODE (TYPE_TARGET_TYPE (type));
CORE_ADDR addr = extract_unsigned_integer (buf, TYPE_LENGTH (type));
@@ -103,7 +104,8 @@ iq2000_pointer_to_address (struct type *
@@ -104,7 +105,8 @@ iq2000_pointer_to_address (struct type *
Convert a host-format address (CORE_ADDR) into a target pointer. */
static void
@ -2252,10 +2257,10 @@ doc/ChangeLog:
--- gdb/linux-nat.c
+++ gdb/linux-nat.c
@@ -49,6 +49,12 @@
#include "inf-loop.h"
#include "event-loop.h"
#include "event-top.h"
@@ -53,6 +53,12 @@
#include <sys/types.h>
#include "gdb_dirent.h"
#include "xml-support.h"
+#include <sys/vfs.h> /* for struct statfs */
+#include <dirent.h> /* for DIR etc. */
+
@ -2265,7 +2270,7 @@ doc/ChangeLog:
#ifdef HAVE_PERSONALITY
# include <sys/personality.h>
@@ -3411,8 +3417,8 @@ linux_nat_do_thread_registers (bfd *obfd
@@ -3429,8 +3435,8 @@ linux_nat_do_thread_registers (bfd *obfd
gdb_gregset_t gregs;
gdb_fpregset_t fpregs;
unsigned long lwp = ptid_get_lwp (ptid);
@ -2276,7 +2281,7 @@ doc/ChangeLog:
const struct regset *regset;
int core_regset_p;
struct cleanup *old_chain;
@@ -3522,6 +3528,119 @@ linux_nat_corefile_thread_callback (stru
@@ -3540,6 +3546,119 @@ linux_nat_corefile_thread_callback (stru
return 0;
}
@ -2396,7 +2401,7 @@ doc/ChangeLog:
/* Fills the "to_make_corefile_note" target vector. Builds the note
section for a corefile, and returns it in a malloc buffer. */
@@ -3582,6 +3701,8 @@ linux_nat_make_corefile_notes (bfd *obfd
@@ -3600,6 +3719,8 @@ linux_nat_make_corefile_notes (bfd *obfd
xfree (auxv);
}
@ -2405,7 +2410,7 @@ doc/ChangeLog:
make_cleanup (xfree, note_data);
return note_data;
}
@@ -3911,6 +4032,99 @@ linux_proc_xfer_partial (struct target_o
@@ -3931,6 +4052,99 @@ linux_proc_xfer_partial (struct target_o
return ret;
}
@ -2505,9 +2510,9 @@ doc/ChangeLog:
/* Parse LINE as a signal set and add its set bits to SIGS. */
static void
@@ -4005,6 +4219,10 @@ linux_xfer_partial (struct target_ops *o
return procfs_xfer_auxv (ops, object, annex, readbuf, writebuf,
offset, len);
@@ -4136,6 +4350,10 @@ linux_xfer_partial (struct target_ops *o
return linux_nat_xfer_osdata (ops, object, annex, readbuf, writebuf,
offset, len);
+ if (object == TARGET_OBJECT_SPU)
+ return linux_proc_xfer_spu (ops, object, annex, readbuf, writebuf,
@ -2518,7 +2523,7 @@ doc/ChangeLog:
if (xfer != 0)
--- gdb/m32c-tdep.c
+++ gdb/m32c-tdep.c
@@ -2397,7 +2397,8 @@ m32c_skip_trampoline_code (struct frame_
@@ -2401,7 +2401,8 @@ m32c_skip_trampoline_code (struct frame_
programmer! :) */
static void
@ -2528,7 +2533,7 @@ doc/ChangeLog:
{
enum type_code target_code;
gdb_assert (TYPE_CODE (type) == TYPE_CODE_PTR ||
@@ -2445,7 +2446,8 @@ m32c_m16c_address_to_pointer (struct typ
@@ -2449,7 +2450,8 @@ m32c_m16c_address_to_pointer (struct typ
static CORE_ADDR
@ -3066,7 +3071,7 @@ doc/ChangeLog:
val_long &= ((LONGEST) 1 << HOST_CHAR_BIT * len) - 1;
--- gdb/proc-service.c
+++ gdb/proc-service.c
@@ -257,7 +257,7 @@ ps_lgetregs (gdb_ps_prochandle_t ph, lwp
@@ -258,7 +258,7 @@ ps_lgetregs (gdb_ps_prochandle_t ph, lwp
struct regcache *regcache;
inferior_ptid = BUILD_LWP (lwpid, ph->pid);
@ -3075,7 +3080,7 @@ doc/ChangeLog:
target_fetch_registers (regcache, -1);
fill_gregset (regcache, (gdb_gregset_t *) gregset, -1);
@@ -276,7 +276,7 @@ ps_lsetregs (gdb_ps_prochandle_t ph, lwp
@@ -277,7 +277,7 @@ ps_lsetregs (gdb_ps_prochandle_t ph, lwp
struct regcache *regcache;
inferior_ptid = BUILD_LWP (lwpid, ph->pid);
@ -3084,7 +3089,7 @@ doc/ChangeLog:
supply_gregset (regcache, (const gdb_gregset_t *) gregset);
target_store_registers (regcache, -1);
@@ -296,7 +296,7 @@ ps_lgetfpregs (gdb_ps_prochandle_t ph, l
@@ -297,7 +297,7 @@ ps_lgetfpregs (gdb_ps_prochandle_t ph, l
struct regcache *regcache;
inferior_ptid = BUILD_LWP (lwpid, ph->pid);
@ -3093,7 +3098,7 @@ doc/ChangeLog:
target_fetch_registers (regcache, -1);
fill_fpregset (regcache, (gdb_fpregset_t *) fpregset, -1);
@@ -316,7 +316,7 @@ ps_lsetfpregs (gdb_ps_prochandle_t ph, l
@@ -317,7 +317,7 @@ ps_lsetfpregs (gdb_ps_prochandle_t ph, l
struct regcache *regcache;
inferior_ptid = BUILD_LWP (lwpid, ph->pid);
@ -3486,7 +3491,7 @@ doc/ChangeLog:
+32:vrsave
--- gdb/remote.c
+++ gdb/remote.c
@@ -6747,7 +6747,7 @@ remote_insert_breakpoint (struct bp_targ
@@ -6781,7 +6781,7 @@ remote_insert_breakpoint (struct bp_targ
switch (packet_ok (rs->buf, &remote_protocol_packets[PACKET_Z0]))
{
case PACKET_ERROR:
@ -3495,7 +3500,7 @@ doc/ChangeLog:
case PACKET_OK:
bp_tgt->placed_address = addr;
bp_tgt->placed_size = bpsize;
@@ -6934,7 +6934,7 @@ remote_insert_hw_breakpoint (struct bp_t
@@ -6968,7 +6968,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)
@ -3504,7 +3509,7 @@ doc/ChangeLog:
rs = get_remote_state ();
p = rs->buf;
@@ -6954,7 +6954,7 @@ remote_insert_hw_breakpoint (struct bp_t
@@ -6988,7 +6988,7 @@ remote_insert_hw_breakpoint (struct bp_t
{
case PACKET_ERROR:
case PACKET_UNKNOWN:
@ -3513,7 +3518,7 @@ doc/ChangeLog:
case PACKET_OK:
return 0;
}
@@ -6971,7 +6971,7 @@ remote_remove_hw_breakpoint (struct bp_t
@@ -7005,7 +7005,7 @@ remote_remove_hw_breakpoint (struct bp_t
char *p = rs->buf;
if (remote_protocol_packets[PACKET_Z1].support == PACKET_DISABLE)
@ -3522,7 +3527,7 @@ doc/ChangeLog:
*(p++) = 'z';
*(p++) = '1';
@@ -6988,7 +6988,7 @@ remote_remove_hw_breakpoint (struct bp_t
@@ -7022,7 +7022,7 @@ remote_remove_hw_breakpoint (struct bp_t
{
case PACKET_ERROR:
case PACKET_UNKNOWN:
@ -4079,7 +4084,7 @@ doc/ChangeLog:
+
--- gdb/solib.c
+++ gdb/solib.c
@@ -311,15 +311,22 @@ static int
@@ -345,15 +345,22 @@ static int
solib_map_sections (void *arg)
{
struct so_list *so = (struct so_list *) arg; /* catch_errors bogon */
@ -4107,7 +4112,7 @@ doc/ChangeLog:
/* Leave bfd open, core_xfer_memory and "info files" need it. */
so->abfd = abfd;
@@ -338,8 +345,6 @@ solib_map_sections (void *arg)
@@ -372,8 +379,6 @@ solib_map_sections (void *arg)
for (p = so->sections; p < so->sections_end; p++)
{
@ -4116,7 +4121,7 @@ doc/ChangeLog:
/* Relocate the section binding addresses as recorded in the shared
object's file by the base address to which the object was actually
mapped. */
@@ -420,7 +425,9 @@ static int
@@ -454,7 +459,9 @@ static int
symbol_add_stub (void *arg)
{
struct so_list *so = (struct so_list *) arg; /* catch_errs bogon */
@ -4126,30 +4131,9 @@ doc/ChangeLog:
/* Have we already loaded this shared object? */
ALL_OBJFILES (so->objfile)
@@ -429,11 +436,18 @@ symbol_add_stub (void *arg)
return 1;
}
+ /* Open a second BFD for this file. */
+ if (ops->open_bfd)
+ abfd = ops->open_bfd (so->so_name);
+
+ if (!abfd)
+ abfd = symfile_bfd_open (so->so_name);
+
sap = build_section_addr_info_from_section_table (so->sections,
so->sections_end);
- so->objfile = symbol_file_add (so->so_name, so->from_tty,
- sap, 0, OBJF_SHARED);
+ so->objfile = symbol_file_add_from_bfd (abfd, so->from_tty,
+ sap, 0, OBJF_SHARED);
free_section_addr_info (sap);
return (1);
--- gdb/solist.h
+++ gdb/solist.h
@@ -118,6 +118,10 @@ struct target_so_ops
@@ -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. */
int (*same) (struct so_list *gdb, struct so_list *inferior);
@ -5444,7 +5428,7 @@ doc/ChangeLog:
}
static void
@@ -1440,6 +1458,7 @@ static void
@@ -1435,6 +1453,7 @@ static void
print_frame_local_vars (struct frame_info *frame, int num_tabs,
struct ui_file *stream)
{
@ -5452,7 +5436,7 @@ doc/ChangeLog:
struct block *block = get_frame_block (frame, 0);
int values_printed = 0;
@@ -1449,6 +1468,9 @@ print_frame_local_vars (struct frame_inf
@@ -1444,6 +1463,9 @@ print_frame_local_vars (struct frame_inf
return;
}
@ -5462,7 +5446,7 @@ doc/ChangeLog:
while (block)
{
if (print_block_frame_locals (block, frame, num_tabs, stream))
@@ -1462,6 +1484,8 @@ print_frame_local_vars (struct frame_inf
@@ -1457,6 +1479,8 @@ print_frame_local_vars (struct frame_inf
if (!values_printed)
fprintf_filtered (stream, _("No locals.\n"));
@ -5641,7 +5625,7 @@ doc/ChangeLog:
current_target.to_read_description = NULL;
de_fault (to_get_ada_task_ptid,
(ptid_t (*) (long, long))
@@ -2098,7 +2104,8 @@ target_require_runnable (void)
@@ -2099,7 +2105,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. */
@ -5651,7 +5635,7 @@ doc/ChangeLog:
continue;
error (_("\
@@ -2238,6 +2245,12 @@ default_watchpoint_addr_within_range (st
@@ -2259,6 +2266,12 @@ default_watchpoint_addr_within_range (st
return addr >= start && addr < start + length;
}
@ -5664,7 +5648,7 @@ doc/ChangeLog:
static int
return_zero (void)
{
@@ -3131,6 +3144,19 @@ debug_to_find_new_threads (void)
@@ -3148,6 +3161,19 @@ debug_to_find_new_threads (void)
fputs_unfiltered ("target_find_new_threads ()\n", gdb_stdlog);
}
@ -5684,7 +5668,7 @@ doc/ChangeLog:
static void
debug_to_stop (ptid_t ptid)
{
@@ -3216,6 +3242,7 @@ setup_target_debug (void)
@@ -3233,6 +3259,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;
@ -5704,7 +5688,7 @@ doc/ChangeLog:
};
enum thread_control_capabilities
@@ -541,6 +542,9 @@ struct target_ops
@@ -535,6 +536,9 @@ struct target_ops
simultaneously? */
int (*to_supports_multi_process) (void);
@ -5714,7 +5698,7 @@ doc/ChangeLog:
int to_magic;
/* Need sub-structure for target machine related rather than comm related?
*/
@@ -1046,6 +1050,11 @@ extern char *normal_pid_to_str (ptid_t p
@@ -1040,6 +1044,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)
@ -5762,7 +5746,7 @@ doc/ChangeLog:
# If no core registers were specified, assume this target does not
--- gdb/thread.c
+++ gdb/thread.c
@@ -766,6 +766,7 @@ switch_to_thread (ptid_t ptid)
@@ -767,6 +767,7 @@ switch_to_thread (ptid_t ptid)
inferior_ptid = ptid;
reinit_frame_cache ();
registers_changed ();
@ -5772,7 +5756,7 @@ doc/ChangeLog:
while in the TARGET_RUNNING state, e.g., while handling an
--- gdb/utils.c
+++ gdb/utils.c
@@ -3021,7 +3021,6 @@ core_addr_to_string_nz (const CORE_ADDR
@@ -3022,7 +3022,6 @@ core_addr_to_string_nz (const CORE_ADDR
CORE_ADDR
string_to_core_addr (const char *my_string)
{
@ -5780,7 +5764,7 @@ doc/ChangeLog:
CORE_ADDR addr = 0;
if (my_string[0] == '0' && tolower (my_string[1]) == 'x')
@@ -3037,17 +3036,6 @@ string_to_core_addr (const char *my_stri
@@ -3038,17 +3037,6 @@ string_to_core_addr (const char *my_stri
else
error (_("invalid hex \"%s\""), my_string);
}

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5a564086f0390d441d85fdaaf8785135c342a789d0ffd9cb71023b8e33c065e4
size 15657706

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e84512926cedd10534ba70bff7466eb63ab9ec352b5b8440a7da9fe4690d7fbc
size 15819175

View File

@ -1,3 +1,14 @@
-------------------------------------------------------------------
Fri Jan 16 16:02:56 CET 2009 - schwab@suse.de
- Update to head of trunk.
-------------------------------------------------------------------
Fri Jan 16 15:30:23 CET 2009 - bwalle@suse.de
- Recommend Python for GDB to prevent strange error messages to
be presented to the user in the default case.
-------------------------------------------------------------------
Wed Dec 10 12:34:56 CET 2008 - olh@suse.de

View File

@ -1,7 +1,7 @@
#
# spec file for package gdb (Version 6.8.50.20081120)
# spec file for package gdb (Version 6.8.50.20090116)
#
# Copyright (c) 2008 SUSE LINUX Products GmbH, Nuernberg, Germany.
# Copyright (c) 2009 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@ -19,8 +19,8 @@
Name: gdb
Summary: The GNU Debugger
Version: 6.8.50.20081120
Release: 2
Version: 6.8.50.20090116
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
BuildRequires: libexpat-devel
@ -33,6 +33,7 @@ BuildRequires: libunwind-devel
%ifnarch ppc64 s390x
BuildRequires: gcc-ada
%endif
Recommends: python
Url: http://www.gnu.org/software/gdb/
License: GNU Free Documentation License, Version 1.2 (GFDL 1.2); GPL v2 or later; GPL v3 or later
Group: Development/Tools/Debuggers
@ -53,9 +54,6 @@ Patch7: pie-relocate.diff
Patch8: find-separate-debug-file.diff
Patch9: fix-gdb-backtrace.diff
Patch10: expand-line-sal-maybe.diff
Patch11: startup-inferior.diff
Patch12: resume.diff
Patch13: testsuite.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
@ -125,9 +123,6 @@ Authors:
%patch8
%patch9
%patch10
%patch11
%patch12
%patch13
%build
%ifarch %ix86 ia64 ppc ppc64 s390 s390x x86_64
@ -204,6 +199,11 @@ rm -rf $RPM_BUILD_ROOT
%endif
%changelog
* Fri Jan 16 2009 schwab@suse.de
- Update to head of trunk.
* Fri Jan 16 2009 bwalle@suse.de
- Recommend Python for GDB to prevent strange error messages to
be presented to the user in the default case.
* Wed Dec 10 2008 olh@suse.de
- use Obsoletes: -XXbit only for ppc64 to help solver during distupgrade
(bnc#437293)

View File

@ -1,6 +1,6 @@
--- gdb/breakpoint.c
+++ gdb/breakpoint.c
@@ -4125,6 +4125,7 @@ describe_other_breakpoints (CORE_ADDR pc
@@ -3876,6 +3876,7 @@ describe_other_breakpoints (CORE_ADDR pc
printf_filtered (" (thread %d)", b->thread);
printf_filtered ("%s%s ",
((b->enable_state == bp_disabled ||
@ -8,7 +8,7 @@
b->enable_state == bp_call_disabled)
? " (disabled)"
: b->enable_state == bp_permanent
@@ -4200,6 +4201,7 @@ check_duplicates_for (CORE_ADDR address,
@@ -3947,6 +3948,7 @@ check_duplicates_for (CORE_ADDR address,
ALL_BP_LOCATIONS (b)
if (b->owner->enable_state != bp_disabled
&& b->owner->enable_state != bp_call_disabled
@ -16,7 +16,7 @@
&& b->enabled
&& !b->shlib_disabled
&& b->address == address /* address / overlay match */
@@ -4235,6 +4237,7 @@ check_duplicates_for (CORE_ADDR address,
@@ -3982,6 +3984,7 @@ check_duplicates_for (CORE_ADDR address,
{
if (b->owner->enable_state != bp_disabled
&& b->owner->enable_state != bp_call_disabled
@ -24,8 +24,8 @@
&& b->enabled && !b->shlib_disabled
&& b->address == address /* address / overlay match */
&& (!overlay_debugging || b->section == section)
@@ -4766,6 +4769,60 @@ disable_breakpoints_in_unloaded_shlib (s
}
@@ -4707,6 +4710,60 @@ create_catchpoint (int tempflag, char *c
return b;
}
+void
@ -84,8 +84,8 @@
+
static void
create_fork_vfork_event_catchpoint (int tempflag, char *cond_string,
enum bptype bp_kind)
@@ -7561,6 +7618,7 @@ breakpoint_re_set_one (void *bint)
struct breakpoint_ops *ops)
@@ -7435,6 +7492,7 @@ breakpoint_re_set_one (void *bint)
if (not_found
&& (b->condition_not_parsed
|| (b->loc && b->loc->shlib_disabled)
@ -95,7 +95,7 @@
--- gdb/breakpoint.h
+++ gdb/breakpoint.h
@@ -142,6 +142,7 @@ enum enable_state
@@ -126,6 +126,7 @@ enum enable_state
automatically enabled and reset when the call
"lands" (either completes, or stops at another
eventpoint). */
@ -103,7 +103,7 @@
bp_permanent /* There is a breakpoint instruction hard-wired into
the target's code. Don't try to write another
breakpoint instruction on top of it, or restore
@@ -843,6 +844,10 @@ extern void remove_thread_event_breakpoi
@@ -820,6 +821,10 @@ extern void remove_thread_event_breakpoi
extern void disable_breakpoints_in_shlibs (void);
@ -116,7 +116,7 @@
--- gdb/dwarf2read.c
+++ gdb/dwarf2read.c
@@ -1258,7 +1258,7 @@ dwarf2_build_psymtabs (struct objfile *o
@@ -1285,7 +1285,7 @@ dwarf2_build_psymtabs (struct objfile *o
else
dwarf2_per_objfile->loc_buffer = NULL;
@ -138,7 +138,7 @@
mainline = 0;
--- gdb/ia64-tdep.c
+++ gdb/ia64-tdep.c
@@ -3243,8 +3243,13 @@ ia64_convert_from_func_ptr_addr (struct
@@ -3361,8 +3361,13 @@ ia64_convert_from_func_ptr_addr (struct
the target address itself points to a section that is executable. */
if (s && (s->the_bfd_section->flags & SEC_CODE) == 0)
{
@ -156,7 +156,7 @@
return pc;
--- gdb/infrun.c
+++ gdb/infrun.c
@@ -1972,6 +1972,11 @@ handle_inferior_event (struct execution_
@@ -2233,6 +2233,11 @@ handle_inferior_event (struct execution_
#endif
target_terminal_inferior ();
@ -168,7 +168,7 @@
/* If requested, stop when the dynamic linker notifies
gdb of events. This allows the user to get control
and place breakpoints in initializer routines for
@@ -2896,6 +2901,11 @@ infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME (
@@ -3193,6 +3198,11 @@ infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME (
#endif
target_terminal_inferior ();
@ -211,7 +211,7 @@
/* Create the terminating entry of OBJFILE's minimal symbol table.
--- gdb/solib-svr4.c
+++ gdb/solib-svr4.c
@@ -31,6 +31,7 @@
@@ -32,6 +32,7 @@
#include "gdbcore.h"
#include "target.h"
#include "inferior.h"
@ -219,7 +219,7 @@
#include "gdbthread.h"
#include "gdb_assert.h"
@@ -286,8 +287,6 @@ static CORE_ADDR main_lm_addr;
@@ -287,8 +288,6 @@ static CORE_ADDR main_lm_addr;
/* Local function prototypes */
@ -228,7 +228,7 @@
static CORE_ADDR bfd_lookup_symbol (bfd *, char *);
/*
@@ -524,6 +523,8 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
@@ -525,6 +524,8 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
Elf32_External_Dyn *x_dynp_32;
Elf64_External_Dyn *x_dynp_64;
struct bfd_section *sect;
@ -237,7 +237,7 @@
if (abfd == NULL)
return 0;
@@ -531,11 +532,20 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
@@ -532,11 +533,20 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
if (arch_size == -1)
return 0;
@ -258,7 +258,7 @@
/* Read in .dynamic from the BFD. We will get the actual value
from memory later. */
@@ -577,7 +587,7 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
@@ -578,7 +588,7 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
CORE_ADDR ptr_addr;
ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
@ -267,7 +267,7 @@
if (target_read_memory (ptr_addr, ptr_buf, arch_size / 8) == 0)
dyn_ptr = extract_typed_address (ptr_buf, ptr_type);
*ptr = dyn_ptr;
@@ -983,11 +993,55 @@ svr4_current_sos (void)
@@ -984,11 +994,55 @@ svr4_current_sos (void)
decide when to ignore it. */
if (IGNORE_FIRST_LINK_MAP_ENTRY (new) && ldsomap == 0)
{
@ -324,7 +324,7 @@
int errcode;
char *buffer;
@@ -1005,10 +1059,8 @@ svr4_current_sos (void)
@@ -1006,10 +1060,8 @@ svr4_current_sos (void)
}
xfree (buffer);
@ -337,7 +337,7 @@
free_so (new);
else
{
@@ -1059,24 +1111,6 @@ svr4_fetch_objfile_link_map (struct objf
@@ -1060,24 +1112,6 @@ svr4_fetch_objfile_link_map (struct objf
return 0;
}
@ -362,7 +362,7 @@
/* Return 1 if PC lies in the dynamic symbol resolution code of the
SVR4 run time loader. */
static CORE_ADDR interp_text_sect_low;
@@ -1606,6 +1640,8 @@ svr4_solib_create_inferior_hook (void)
@@ -1607,6 +1641,8 @@ svr4_solib_create_inferior_hook (void)
while (tp->stop_signal != TARGET_SIGNAL_TRAP);
inf->stop_soon = NO_STOP_QUIETLY;
#endif /* defined(_SCO_DS) */
@ -373,7 +373,7 @@
static void
--- gdb/solib.c
+++ gdb/solib.c
@@ -432,8 +432,22 @@ symbol_add_stub (void *arg)
@@ -466,15 +466,37 @@ symbol_add_stub (void *arg)
/* Have we already loaded this shared object? */
ALL_OBJFILES (so->objfile)
{
@ -396,26 +396,25 @@
+ return 1;
}
/* Open a second BFD for this file. */
@@ -446,8 +460,15 @@ symbol_add_stub (void *arg)
sap = build_section_addr_info_from_section_table (so->sections,
so->sections_end);
- so->objfile = symbol_file_add_from_bfd (abfd, so->from_tty,
- sap, 0, OBJF_SHARED);
- so->objfile = symbol_file_add_from_bfd (so->abfd, so->from_tty,
- sap, 0, OBJF_SHARED | OBJF_KEEPBFD);
+ if (so->main_p)
+ {
+ so->objfile = symbol_file_add_from_bfd (abfd, 0, sap, 1, 0);
+ so->objfile = symbol_file_add_from_bfd (so->abfd, 0,
+ sap, 1, OBJF_KEEPBFD);
+ so->main_relocated = 1;
+ }
+ else
+ so->objfile = symbol_file_add_from_bfd (abfd, so->from_tty,
+ sap, 0, OBJF_SHARED);
+ so->objfile = symbol_file_add_from_bfd (so->abfd, so->from_tty,
+ sap, 0, OBJF_SHARED | OBJF_KEEPBFD);
+
free_section_addr_info (sap);
return (1);
@@ -633,28 +654,7 @@ update_solib_list (int from_tty, struct
@@ -660,28 +682,7 @@ update_solib_list (int from_tty, struct
/* Fill in the rest of each of the `struct so_list' nodes. */
for (i = inferior; i; i = i->next)
{
@ -445,7 +444,7 @@
/* Notify any observer that the shared object has been
loaded now that we've added it to GDB's tables. */
@@ -750,6 +750,39 @@ solib_add (char *pattern, int from_tty,
@@ -777,6 +778,39 @@ solib_add (char *pattern, int from_tty,
}
}
@ -496,7 +495,7 @@
struct objfile *objfile; /* objfile for loaded lib */
struct section_table *sections;
struct section_table *sections_end;
@@ -133,6 +135,10 @@ struct so_list *master_so_list (void);
@@ -142,6 +144,10 @@ extern bfd *solib_bfd_fopen (char *pathn
/* Find solib binary file and open it. */
extern bfd *solib_bfd_open (char *in_pathname);
@ -538,7 +537,7 @@
{
asection *lower_sect;
asection *sect;
@@ -918,14 +918,14 @@ new_symfile_objfile (struct objfile *obj
@@ -914,14 +914,14 @@ new_symfile_objfile (struct objfile *obj
/* If this is the main symbol file we have to clean up all users of the
old main symbol file. Otherwise it is sufficient to fixup all the
breakpoints that may have been redefined by this symbol file. */
@ -555,7 +554,7 @@
{
breakpoint_re_set ();
}
@@ -971,7 +971,7 @@ symbol_file_add_with_addrs_or_offsets (b
@@ -967,7 +967,7 @@ symbol_file_add_with_addrs_or_offsets (b
interactively wiping out any existing symbols. */
if ((have_full_symbols () || have_partial_symbols ())
@ -564,7 +563,7 @@
&& from_tty
&& !query ("Load new symbol table from \"%s\"? ", name))
error (_("Not confirmed."));
@@ -1160,6 +1160,11 @@ symbol_file_clear (int from_tty)
@@ -1156,6 +1156,11 @@ symbol_file_clear (int from_tty)
symfile_objfile->name)
: !query (_("Discard symbol table? "))))
error (_("Not confirmed."));
@ -576,7 +575,7 @@
free_all_objfiles ();
/* solib descriptors may have handles to objfiles. Since their
@@ -2454,6 +2459,8 @@ reread_symbols (void)
@@ -2442,6 +2447,8 @@ reread_symbols (void)
/* Discard cleanups as symbol reading was successful. */
discard_cleanups (old_cleanups);

View File

@ -1,49 +0,0 @@
2008-11-20 Pedro Alves <pedro@codesourcery.com>
* infrun.c (resume): If following a fork, reread the current
thread. Avoid dereferencing a possibly dangling pointer.
--- gdb/infrun.c
+++ gdb/infrun.c
@@ -965,10 +965,13 @@ resume (int step, enum target_signal sig
{
int should_resume = 1;
struct cleanup *old_cleanups = make_cleanup (resume_cleanups, 0);
+
+ /* Note that these must be reset if we follow a fork below. */
struct regcache *regcache = get_current_regcache ();
struct gdbarch *gdbarch = get_regcache_arch (regcache);
struct thread_info *tp = inferior_thread ();
CORE_ADDR pc = regcache_read_pc (regcache);
+
QUIT;
if (debug_infrun)
@@ -1053,6 +1056,13 @@ a command like `return' or `jump' to con
pending_follow.kind = TARGET_WAITKIND_SPURIOUS;
if (follow_fork ())
should_resume = 0;
+
+ /* Following a child fork will change our notion of current
+ thread. */
+ tp = inferior_thread ();
+ regcache = get_current_regcache ();
+ gdbarch = get_regcache_arch (regcache);
+ pc = regcache_read_pc (regcache);
break;
case TARGET_WAITKIND_EXECD:
@@ -1148,11 +1158,11 @@ a command like `return' or `jump' to con
displaced_step_dump_bytes (gdb_stdlog, buf, sizeof (buf));
}
- target_resume (resume_ptid, step, sig);
-
/* Avoid confusing the next resume, if the next stop/resume
happens to apply to another thread. */
tp->stop_signal = TARGET_SIGNAL_0;
+
+ target_resume (resume_ptid, step, sig);
}
discard_cleanups (old_cleanups);

View File

@ -1,12 +0,0 @@
--- gdb/fork-child.c 10 Nov 2008 11:25:09 +0100 1.47
+++ gdb/fork-child.c 20 Nov 2008 14:27:26 +0100
@@ -494,6 +494,9 @@ startup_inferior (int ntraps)
resume_ptid = pid_to_ptid (-1);
else
resume_ptid = event_ptid;
+ /* Update running state now, in case an error occurs during
+ resume. */
+ set_running (resume_ptid, 0);
if (resume_signal != TARGET_SIGNAL_TRAP)
{

View File

@ -1,82 +0,0 @@
2008-11-20 Andreas Schwab <schwab@suse.de>
* gdb.base/foll-fork.exp (catch_fork_child_follow): Fix patterns
matching syscall entry point.
* gdb.base/foll-vfork.exp (tcatch_vfork_then_parent_follow)
(tcatch_vfork_then_child_follow): Likewise. Finish through
vfork even if we stopped at the syscall trampoline.
Index: gdb/testsuite/gdb.base/foll-fork.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/foll-fork.exp,v
retrieving revision 1.11
diff -u -a -p -u -p -a -r1.11 foll-fork.exp
--- gdb/testsuite/gdb.base/foll-fork.exp 16 Oct 2008 16:25:36 -0000 1.11
+++ gdb/testsuite/gdb.base/foll-fork.exp 20 Nov 2008 14:24:45 -0000
@@ -167,7 +167,7 @@ proc catch_fork_child_follow {} {
send_gdb "continue\n"
gdb_expect {
- -re "Catchpoint.*(forked process.*),.*in .*(fork|__kernel_vsyscall).*$gdb_prompt $"\
+ -re "Catchpoint.*(forked process.*),.*in .*(fork|__kernel_v?syscall).*$gdb_prompt $"\
{pass "explicit child follow, catch fork"}
-re "$gdb_prompt $" {fail "explicit child follow, catch fork"}
timeout {fail "(timeout) explicit child follow, catch fork"}
@@ -239,7 +239,7 @@ proc tcatch_fork_parent_follow {} {
send_gdb "continue\n"
gdb_expect {
- -re ".*in .*(fork|__kernel_vsyscall).*$gdb_prompt $"\
+ -re ".*in .*(fork|__kernel_v?syscall).*$gdb_prompt $"\
{pass "explicit parent follow, tcatch fork"}
-re "$gdb_prompt $" {fail "explicit parent follow, tcatch fork"}
timeout {fail "(timeout) explicit parent follow, tcatch fork"}
Index: gdb/testsuite/gdb.base/foll-vfork.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/foll-vfork.exp,v
retrieving revision 1.8
diff -u -a -p -u -p -a -r1.8 foll-vfork.exp
--- gdb/testsuite/gdb.base/foll-vfork.exp 29 Jan 2008 22:47:20 -0000 1.8
+++ gdb/testsuite/gdb.base/foll-vfork.exp 20 Nov 2008 14:24:45 -0000
@@ -264,7 +264,7 @@ proc tcatch_vfork_then_parent_follow {}
# HP-UX 10.20 seems to stop you in "vfork", while more recent HP-UXs
# stop you in "_vfork".
gdb_expect {
- -re "0x\[0-9a-fA-F\]*.*vfork.*$gdb_prompt "\
+ -re "0x\[0-9a-fA-F\]*.*(vfork|__kernel_v?syscall).*$gdb_prompt "\
{pass "vfork parent follow, tcatch vfork"}
-re "vfork \\(\\) at.*$gdb_prompt "\
{pass "vfork parent follow, tcatch vfork"}
@@ -275,6 +275,10 @@ proc tcatch_vfork_then_parent_follow {}
gdb_expect {
-re "Run till exit from.*vfork.*0x\[0-9a-fA-F\]* in main .* at .*${srcfile}:12.*$gdb_prompt "\
{pass "vfork parent follow, finish after tcatch vfork"}
+ -re "Run till exit from.*__kernel_v?syscall.*0x\[0-9a-fA-F\]* in vfork .*$gdb_prompt " {
+ send_gdb "finish\n"
+ exp_continue
+ }
-re "$gdb_prompt $" {fail "vfork parent follow, finish after tcatch vfork"}
timeout {fail "(timeout) vfork parent follow, finish after tcatch vfork" }
}
@@ -308,9 +312,7 @@ proc tcatch_vfork_then_child_follow {} {
gdb_expect {
-re "vfork \\(\\) at .*$gdb_prompt $"\
{pass "vfork child follow, tcatch vfork"}
- -re "0x\[0-9a-fA-F\]*.*vfork.*$gdb_prompt "\
- {pass "vfork child follow, tcatch vfork"}
- -re "0x\[0-9a-fA-F\]*.*_vfork.*$gdb_prompt "\
+ -re "0x\[0-9a-fA-F\]*.*(vfork|__kernel_v?syscall).*$gdb_prompt "\
{pass "vfork child follow, tcatch vfork"}
-re "$gdb_prompt $" {fail "vfork child follow, tcatch vfork"}
timeout {fail "(timeout) vfork child follow, tcatch vfork"}
@@ -319,6 +321,10 @@ proc tcatch_vfork_then_child_follow {} {
gdb_expect {
-re "Run till exit from.*vfork.*${srcfile}:12.*$gdb_prompt "\
{pass "vfork child follow, finish after tcatch vfork"}
+ -re "Run till exit from.*__kernel_v?syscall.*0x\[0-9a-fA-F\]* in vfork .*$gdb_prompt " {
+ send_gdb "finish\n"
+ exp_continue
+ }
-re "Run till exit from.*vfork.*${srcfile2}:9.*$gdb_prompt "\
{pass "vfork child follow, finish after tcatch vfork (followed exec)"}
-re "$gdb_prompt $" {fail "vfork child follow, finish after tcatch vfork"}