- Fix re-setting of the ctors/dtors breakpoints with multiple PCs (BZ
301701). - Avoid one useless user question in the core files locator (build-id).
This commit is contained in:
parent
dd40115f74
commit
435483c64b
@ -29,6 +29,13 @@
|
|||||||
* breakpoint.c (breakpoint_sals_to_pc): Support more than two returned
|
* breakpoint.c (breakpoint_sals_to_pc): Support more than two returned
|
||||||
PC values.
|
PC values.
|
||||||
|
|
||||||
|
2007-09-25 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
|
* breakpoint.c (breakpoint_sals_to_pc): New parameter ADDR_STRING_P.
|
||||||
|
Expand also *ADDR_STRING_P if multiple PCs were found.
|
||||||
|
(break_command_1, do_captured_breakpoint): Pass also the ADDR_STRING
|
||||||
|
variable to be updated.
|
||||||
|
|
||||||
Index: gdb-6.5/gdb/mi/mi-cmd-disas.c
|
Index: gdb-6.5/gdb/mi/mi-cmd-disas.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.5.orig/gdb/mi/mi-cmd-disas.c 2006-07-11 01:30:43.000000000 -0300
|
--- gdb-6.5.orig/gdb/mi/mi-cmd-disas.c 2006-07-11 01:30:43.000000000 -0300
|
||||||
@ -472,9 +479,12 @@ Index: gdb-6.5/gdb/breakpoint.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.5.orig/gdb/breakpoint.c 2006-07-11 01:30:53.000000000 -0300
|
--- gdb-6.5.orig/gdb/breakpoint.c 2006-07-11 01:30:53.000000000 -0300
|
||||||
+++ gdb-6.5/gdb/breakpoint.c 2006-07-11 01:39:20.000000000 -0300
|
+++ gdb-6.5/gdb/breakpoint.c 2006-07-11 01:39:20.000000000 -0300
|
||||||
@@ -5268,10 +5268,44 @@ static void
|
@@ -5268,12 +5268,69 @@ static void
|
||||||
|
|
||||||
|
static void
|
||||||
breakpoint_sals_to_pc (struct symtabs_and_lines *sals,
|
breakpoint_sals_to_pc (struct symtabs_and_lines *sals,
|
||||||
char *address)
|
- char *address)
|
||||||
|
+ char *address, char ***addr_string_p)
|
||||||
{
|
{
|
||||||
- int i;
|
- int i;
|
||||||
- for (i = 0; i < sals->nelts; i++)
|
- for (i = 0; i < sals->nelts; i++)
|
||||||
@ -498,6 +508,9 @@ Index: gdb-6.5/gdb/breakpoint.c
|
|||||||
+ struct symtab_and_line *new_sals =
|
+ struct symtab_and_line *new_sals =
|
||||||
+ xmalloc ((sals->nelts + num_pc_values - 1)
|
+ xmalloc ((sals->nelts + num_pc_values - 1)
|
||||||
+ * sizeof (struct symtab_and_line));
|
+ * sizeof (struct symtab_and_line));
|
||||||
|
+ char **new_addr_string;
|
||||||
|
+
|
||||||
|
+ /* Expand the SALS array. */
|
||||||
+ memcpy (new_sals, sals->sals, (i + 1)
|
+ memcpy (new_sals, sals->sals, (i + 1)
|
||||||
+ * sizeof (struct symtab_and_line));
|
+ * sizeof (struct symtab_and_line));
|
||||||
+ /* The one returned SALS entry is copied for all the PCs. */
|
+ /* The one returned SALS entry is copied for all the PCs. */
|
||||||
@ -513,6 +526,26 @@ Index: gdb-6.5/gdb/breakpoint.c
|
|||||||
+ {
|
+ {
|
||||||
+ sals->sals[i + j].pc = pc_list[j];
|
+ sals->sals[i + j].pc = pc_list[j];
|
||||||
+ }
|
+ }
|
||||||
|
+
|
||||||
|
+ /* Expand the *ADDR_STRING_P array. */
|
||||||
|
+ new_addr_string = xmalloc ((sals->nelts + num_pc_values - 1)
|
||||||
|
+ * sizeof *new_addr_string);
|
||||||
|
+ memcpy (new_addr_string, *addr_string_p,
|
||||||
|
+ (i + 1) * sizeof *new_addr_string);
|
||||||
|
+ /* The existing *ADDR_STRING_P entry must be deleted for all the
|
||||||
|
+ multiple PCs as BREAKPOINT_RE_SET currently does not set all the
|
||||||
|
+ PCs for a sinle line back again. For NULL values "*0x%x" direct
|
||||||
|
+ address will be provided by CREATE_BREAKPOINTS. */
|
||||||
|
+ xfree ((*addr_string_p)[i]);
|
||||||
|
+ for (j = 0; j < num_pc_values; ++j)
|
||||||
|
+ {
|
||||||
|
+ new_addr_string[i + j] = NULL;
|
||||||
|
+ }
|
||||||
|
+ memcpy (&new_addr_string[i + num_pc_values], &(*addr_string_p)[i + 1],
|
||||||
|
+ (sals->nelts - (i + num_pc_values)) * sizeof *new_addr_string);
|
||||||
|
+ xfree (*addr_string_p);
|
||||||
|
+ *addr_string_p = new_addr_string;
|
||||||
|
+
|
||||||
+ incr = num_pc_values;
|
+ incr = num_pc_values;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
@ -527,7 +560,7 @@ Index: gdb-6.5/gdb/breakpoint.c
|
|||||||
{
|
{
|
||||||
+ /* Resolve all line numbers to PC's and verify that the addresses
|
+ /* Resolve all line numbers to PC's and verify that the addresses
|
||||||
+ are ok for the target. */
|
+ are ok for the target. */
|
||||||
+ breakpoint_sals_to_pc (&sals, addr_start);
|
+ breakpoint_sals_to_pc (&sals, addr_start, &addr_string);
|
||||||
+
|
+
|
||||||
/* Make sure that all storage allocated to SALS gets freed. */
|
/* Make sure that all storage allocated to SALS gets freed. */
|
||||||
make_cleanup (xfree, sals.sals);
|
make_cleanup (xfree, sals.sals);
|
||||||
@ -544,6 +577,15 @@ Index: gdb-6.5/gdb/breakpoint.c
|
|||||||
/* Verify that condition can be parsed, before setting any
|
/* Verify that condition can be parsed, before setting any
|
||||||
breakpoints. Allocate a separate condition expression for each
|
breakpoints. Allocate a separate condition expression for each
|
||||||
breakpoint. */
|
breakpoint. */
|
||||||
|
@@ -5665,7 +5688,7 @@ do_captured_breakpoint (struct ui_out *u
|
||||||
|
error (_("Garbage %s following breakpoint address"), address_end);
|
||||||
|
|
||||||
|
/* Resolve all line numbers to PC's. */
|
||||||
|
- breakpoint_sals_to_pc (&sals, args->address);
|
||||||
|
+ breakpoint_sals_to_pc (&sals, args->address, &addr_string);
|
||||||
|
|
||||||
|
/* Verify that conditions can be parsed, before setting any
|
||||||
|
breakpoints. */
|
||||||
@@ -5670,14 +5699,16 @@ gdb_breakpoint (char *address, char *con
|
@@ -5670,14 +5699,16 @@ gdb_breakpoint (char *address, char *con
|
||||||
void
|
void
|
||||||
resolve_sal_pc (struct symtab_and_line *sal)
|
resolve_sal_pc (struct symtab_and_line *sal)
|
||||||
|
@ -10,6 +10,11 @@ Index: gdb/testsuite/ChangeLog
|
|||||||
* gdb.cp/constructortest.exp, gdb.cp/constructortest.cc: Test also the
|
* gdb.cp/constructortest.exp, gdb.cp/constructortest.cc: Test also the
|
||||||
`$delete' destructor variant.
|
`$delete' destructor variant.
|
||||||
|
|
||||||
|
2007-09-25 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
|
* gdb.cp/constructortest.exp: Delete the FIXME workaround of restarting
|
||||||
|
the whole GDB.
|
||||||
|
|
||||||
--- gdb-6.3/gdb/testsuite/gdb.cp/constructortest.cc.fix Fri Jan 21 17:06:56 2005
|
--- gdb-6.3/gdb/testsuite/gdb.cp/constructortest.cc.fix Fri Jan 21 17:06:56 2005
|
||||||
+++ gdb-6.3/gdb/testsuite/gdb.cp/constructortest.cc Fri Jan 21 17:05:18 2005
|
+++ gdb-6.3/gdb/testsuite/gdb.cp/constructortest.cc Fri Jan 21 17:05:18 2005
|
||||||
@@ -0,0 +1,99 @@
|
@@ -0,0 +1,99 @@
|
||||||
@ -114,7 +119,7 @@ Index: gdb/testsuite/ChangeLog
|
|||||||
+}
|
+}
|
||||||
--- gdb-6.3/gdb/testsuite/gdb.cp/constructortest.exp.fix Fri Jan 21 17:07:02 2005
|
--- gdb-6.3/gdb/testsuite/gdb.cp/constructortest.exp.fix Fri Jan 21 17:07:02 2005
|
||||||
+++ gdb-6.3/gdb/testsuite/gdb.cp/constructortest.exp Fri Jan 21 17:05:29 2005
|
+++ gdb-6.3/gdb/testsuite/gdb.cp/constructortest.exp Fri Jan 21 17:05:29 2005
|
||||||
@@ -0,0 +1,135 @@
|
@@ -0,0 +1,127 @@
|
||||||
+# This testcase is part of GDB, the GNU debugger.
|
+# This testcase is part of GDB, the GNU debugger.
|
||||||
+
|
+
|
||||||
+# Copyright 2005, 2007 Free Software Foundation, Inc.
|
+# Copyright 2005, 2007 Free Software Foundation, Inc.
|
||||||
@ -216,10 +221,6 @@ Index: gdb/testsuite/ChangeLog
|
|||||||
+
|
+
|
||||||
+# Test now the $delete destructors.
|
+# Test now the $delete destructors.
|
||||||
+
|
+
|
||||||
+# FIXME: Without the full GDB restart we would hit a GDB memory corruption.
|
|
||||||
+gdb_exit
|
|
||||||
+gdb_start
|
|
||||||
+gdb_reinitialize_dir $srcdir/$subdir
|
|
||||||
+gdb_load ${binfile}
|
+gdb_load ${binfile}
|
||||||
+runto_main
|
+runto_main
|
||||||
+
|
+
|
||||||
@ -240,10 +241,6 @@ Index: gdb/testsuite/ChangeLog
|
|||||||
+# Verify that we can break by line number in a destructor and find
|
+# Verify that we can break by line number in a destructor and find
|
||||||
+# the $delete occurence
|
+# the $delete occurence
|
||||||
+
|
+
|
||||||
+# FIXME: Without the full GDB restart we would hit a GDB memory corruption.
|
|
||||||
+gdb_exit
|
|
||||||
+gdb_start
|
|
||||||
+gdb_reinitialize_dir $srcdir/$subdir
|
|
||||||
+gdb_load ${binfile}
|
+gdb_load ${binfile}
|
||||||
+runto_main
|
+runto_main
|
||||||
+
|
+
|
||||||
|
@ -35,7 +35,7 @@ diff -u -rup gdb-6.6-orig/gdb/corelow.c gdb-6.6/gdb/corelow.c
|
|||||||
|
|
||||||
|
|
||||||
#ifndef O_LARGEFILE
|
#ifndef O_LARGEFILE
|
||||||
@@ -253,6 +257,70 @@ add_to_thread_list (bfd *abfd, asection
|
@@ -253,6 +257,63 @@ add_to_thread_list (bfd *abfd, asection
|
||||||
inferior_ptid = pid_to_ptid (thread_id); /* Yes, make it current */
|
inferior_ptid = pid_to_ptid (thread_id); /* Yes, make it current */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,30 +93,28 @@ diff -u -rup gdb-6.6-orig/gdb/corelow.c gdb-6.6/gdb/corelow.c
|
|||||||
+
|
+
|
||||||
+ xfree (exec_filename);
|
+ xfree (exec_filename);
|
||||||
+
|
+
|
||||||
+ if (exec_filename != NULL)
|
+ /* No automatic SOLIB_ADD as the libraries would get read twice. */
|
||||||
+ {
|
|
||||||
+#ifdef SOLIB_ADD
|
|
||||||
+ SOLIB_ADD (NULL, 0, ¤t_target, auto_solib_add);
|
|
||||||
+#else
|
|
||||||
+ solib_add (NULL, 0, ¤t_target, auto_solib_add);
|
|
||||||
+#endif
|
|
||||||
+ }
|
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
/* This routine opens and sets up the core file bfd. */
|
/* This routine opens and sets up the core file bfd. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -377,6 +445,10 @@ core_open (char *filename, int from_tty)
|
@@ -417,6 +420,15 @@ core_open (char *filename, int from_tty)
|
||||||
/* Fetch all registers from core file. */
|
ontop = !push_target (&core_ops);
|
||||||
target_fetch_registers (-1);
|
discard_cleanups (old_chain);
|
||||||
|
|
||||||
+ /* Find build_id identifiers. */
|
+ if (ontop)
|
||||||
|
+ {
|
||||||
|
+ /* Find the build_id identifiers. If it gets executed after
|
||||||
|
+ POST_CREATE_INFERIOR we would clash with asking to discard the already
|
||||||
|
+ loaded VDSO symbols. */
|
||||||
+ if (build_id_core_loads != 0)
|
+ if (build_id_core_loads != 0)
|
||||||
+ build_id_locate_exec (from_tty);
|
+ build_id_locate_exec (from_tty);
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
/* Now, set up the frame cache, and print the top of stack. */
|
/* This is done first, before anything has a chance to query the
|
||||||
flush_cached_frames ();
|
inferior for information such as symbols. */
|
||||||
select_frame (get_current_frame ());
|
post_create_inferior (&core_ops, from_tty);
|
||||||
@@ -662,4 +734,13 @@ _initialize_corelow (void)
|
@@ -662,4 +734,13 @@ _initialize_corelow (void)
|
||||||
|
|
||||||
if (!coreops_suppress_target)
|
if (!coreops_suppress_target)
|
||||||
|
6
gdb.spec
6
gdb.spec
@ -11,7 +11,7 @@ Name: gdb
|
|||||||
Version: 6.6
|
Version: 6.6
|
||||||
|
|
||||||
# The release always contains a leading reserved number, start it at 1.
|
# The release always contains a leading reserved number, start it at 1.
|
||||||
Release: 29%{?dist}
|
Release: 30%{?dist}
|
||||||
|
|
||||||
License: GPL
|
License: GPL
|
||||||
Group: Development/Debuggers
|
Group: Development/Debuggers
|
||||||
@ -687,6 +687,10 @@ fi
|
|||||||
# don't include the files in include, they are part of binutils
|
# don't include the files in include, they are part of binutils
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Sep 25 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-30
|
||||||
|
- Fix re-setting of the ctors/dtors breakpoints with multiple PCs (BZ 301701).
|
||||||
|
- Avoid one useless user question in the core files locator (build-id).
|
||||||
|
|
||||||
* Sun Sep 23 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-29
|
* Sun Sep 23 2007 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.6-29
|
||||||
- Fixed the kernel VDSO loading (`warning: no loadable sections found in ...').
|
- Fixed the kernel VDSO loading (`warning: no loadable sections found in ...').
|
||||||
- Fix the testcase for pending signals (from BZ 233852).
|
- Fix the testcase for pending signals (from BZ 233852).
|
||||||
|
Loading…
Reference in New Issue
Block a user