OBS User unknown 2007-07-13 16:03:25 +00:00 committed by Git OBS Bridge
parent 41801ecdeb
commit 7df59f4d85
7 changed files with 76 additions and 290 deletions

View File

@ -1,132 +0,0 @@
From nobody Sun Jun 24 18:21:49 2007
From: Daniel Jacobowitz <drow@false.org>
Subject: Re: PATCH: PR tui/2173: Arrow keys no longer works in breakpoint command list
To: Nick Roberts <nickrob@snap.net.nz>, gdb-patches@sourceware.org
Date: Sun, 24 Jun 2007 11:47:00 -0400
Mail-Followup-To: Nick Roberts <nickrob@snap.net.nz>,
gdb-patches@sourceware.org
On Tue, Jun 05, 2007 at 09:27:00AM -0400, Daniel Jacobowitz wrote:
> On Wed, Jun 06, 2007 at 12:55:55AM +1200, Nick Roberts wrote:
> > > > This change breaks the behaviour of annotations with commands that span
> > > > multiple lines, like if, while, etc:
> > >
> > > Sorry, I didn't even know we had special annotations for this (and the
> > > testsuite must not cover it)...
> >
> > Here's a test for gdb.base/annota3.exp. I can do the same for
> > gdb.base/annota1.exp and gdb.cp/annota3.exp, if needed.
>
> Thanks. This is OK once we fix the problem. I haven't gotten back to
> you about that yet because I want to figure out what other issues were
> solved by the original patch - there were several. But I've been on
> vacation and I'm in a mad rush at home now, so it may be a bit longer.
Nick, does this work for emacs? It fixes the testcase (which I
updated to fail and not time out for broken GDBs).
--
Daniel Jacobowitz
CodeSourcery
2007-06-24 Daniel Jacobowitz <dan@codesourcery.com>
* top.c (gdb_readline_wrapper_line): Call rl_callback_handler_remove.
(struct gdb_readline_wrapper_cleanup): Remove prompt_orig.
(gdb_readline_wrapper_cleanup): Do not reset the prompt.
(gdb_readline_wrapper): Do not save the prompt. Pass our prompt
to display_gdb_prompt.
2007-06-24 Nick Roberts <nickrob@snap.net.nz>
Daniel Jacobowitz <dan@codesourcery.com>
* gdb.base/annota3.exp: Test for if construct.
Index: top.c
===================================================================
RCS file: /cvs/src/src/gdb/top.c,v
retrieving revision 1.120
diff -u -p -r1.120 top.c
--- top.c 29 Mar 2007 18:55:01 -0000 1.120
+++ top.c 24 Jun 2007 15:42:02 -0000
@@ -751,12 +751,16 @@ gdb_readline_wrapper_line (char *line)
/* Prevent operate-and-get-next from acting too early. */
saved_after_char_processing_hook = after_char_processing_hook;
after_char_processing_hook = NULL;
+
+ /* Prevent parts of the prompt from being redisplayed if annotations
+ are enabled, and readline's state getting out of sync. */
+ if (async_command_editing_p)
+ rl_callback_handler_remove ();
}
struct gdb_readline_wrapper_cleanup
{
void (*handler_orig) (char *);
- char *prompt_orig;
int already_prompted_orig;
};
@@ -766,7 +770,6 @@ gdb_readline_wrapper_cleanup (void *arg)
struct gdb_readline_wrapper_cleanup *cleanup = arg;
rl_already_prompted = cleanup->already_prompted_orig;
- PROMPT (0) = cleanup->prompt_orig;
gdb_assert (input_handler == gdb_readline_wrapper_line);
input_handler = cleanup->handler_orig;
@@ -790,14 +793,12 @@ gdb_readline_wrapper (char *prompt)
cleanup->handler_orig = input_handler;
input_handler = gdb_readline_wrapper_line;
- cleanup->prompt_orig = get_prompt ();
- PROMPT (0) = prompt;
cleanup->already_prompted_orig = rl_already_prompted;
back_to = make_cleanup (gdb_readline_wrapper_cleanup, cleanup);
/* Display our prompt and prevent double prompt display. */
- display_gdb_prompt (NULL);
+ display_gdb_prompt (prompt);
rl_already_prompted = 1;
if (after_char_processing_hook)
Index: testsuite/gdb.base/annota3.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.base/annota3.exp,v
retrieving revision 1.12
diff -u -p -r1.12 annota3.exp
--- testsuite/gdb.base/annota3.exp 9 Jan 2007 17:59:09 -0000 1.12
+++ testsuite/gdb.base/annota3.exp 24 Jun 2007 15:42:02 -0000
@@ -99,7 +99,29 @@ gdb_expect_list "annotation set at level
"set annotate 3"
}
-
+#
+# if construct:
+#
+send_gdb "if 1\n"
+gdb_expect {
+ -re "^if 1\r\n\r\n\032\032post-prompt\r\n\r\n\032\032pre-commands\r\n >\r\n\032\032commands\r\n$" {
+ pass "start if construct"
+ }
+ -re ".*\032\032commands\r\n" {
+ fail "start if construct"
+ }
+ timeout { fail "start if construct (timeout)" }
+}
+send_gdb "end\n"
+gdb_expect {
+ -re "^end\r\n\r\n\032\032post-commands\r\n$gdb_prompt$" {
+ pass "end if construct"
+ }
+ -re ".*$gdb_prompt$" {
+ fail "end if construct"
+ }
+ timeout { fail "end if construct (timeout)" }
+}
#
# info break:
#

View File

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

View File

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

View File

@ -1,3 +1,8 @@
-------------------------------------------------------------------
Fri Jul 13 11:46:27 CEST 2007 - schwab@suse.de
- Update to head of trunk.
-------------------------------------------------------------------
Sun Jun 24 18:52:47 CEST 2007 - schwab@suse.de

View File

@ -1,5 +1,5 @@
#
# spec file for package gdb (Version 6.6.50.20070621)
# spec file for package gdb (Version 6.6.50.20070713)
#
# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@ -19,12 +19,12 @@ BuildRequires: libunwind-devel
BuildRequires: gcc-ada
%endif
URL: http://www.gnu.org/software/gdb/
License: GNU General Public License (GPL)
License: GPL v2 or later
Group: Development/Tools/Debuggers
Autoreqprov: on
PreReq: %{install_info_prereq}
Version: 6.6.50.20070621
Release: 2
Version: 6.6.50.20070713
Release: 1
Summary: The GNU Debugger
Source: gdb-%{version}-cvs.tar.bz2
Patch1: gdb-misc.patch
@ -35,11 +35,9 @@ Patch5: gstack.patch
Patch6: sect-index-text.diff
Patch7: pie-relocate.diff
Patch8: mst-solib-trampoline.diff
Patch9: loader_break.diff
Patch10: ppc-long-double.diff
Patch11: elf-symtab-read.diff
Patch12: find-pc-sect-line.diff
Patch13: async-command-editing.diff
BuildRoot: %{_tmppath}/%{name}-%{version}-build
%description
@ -76,15 +74,9 @@ Authors:
%patch6
%patch7
%patch8
cd gdb
%patch9
cd ..
%patch10
%patch11
%patch12
cd gdb
%patch13
cd ..
%build
CFLAGS="$RPM_OPT_FLAGS" \
@ -140,6 +132,8 @@ rm -rf $RPM_BUILD_ROOT
%endif
%changelog
* Fri Jul 13 2007 - schwab@suse.de
- Update to head of trunk.
* Sun Jun 24 2007 - schwab@suse.de
- Fix annotations for commands prompt.
* Thu Jun 21 2007 - schwab@suse.de

View File

@ -1,86 +0,0 @@
2006-05-25 Paul Gilliam <pgilliam@us.ibm.com
* solib-svr4.c: Remove "._dl_debug_state" from the list of symbols at
which to try setting a breakpoint for tracking solibs.
(enable_break): Resolve break address when the symbol is found in
the data section.
Index: solib-svr4.c
===================================================================
RCS file: /cvs/src/src/gdb/solib-svr4.c,v
retrieving revision 1.58
diff -a -u -r1.58 solib-svr4.c
--- solib-svr4.c 18 May 2006 20:38:56 -0000 1.58
+++ solib-svr4.c 25 May 2006 22:12:55 -0000
@@ -85,16 +85,6 @@
"rtld_db_dlactivity",
"_rtld_debug_state",
- /* On the 64-bit PowerPC, the linker symbol with the same name as
- the C function points to a function descriptor, not to the entry
- point. The linker symbol whose name is the C function name
- prefixed with a '.' points to the function's entry point. So
- when we look through this table, we ignore symbols that point
- into the data section (thus skipping the descriptor's symbol),
- and eventually try this one, giving us the real entry point
- address. */
- "._dl_debug_state",
-
NULL
};
@@ -1043,20 +1033,45 @@
/* Now try to set a breakpoint in the dynamic linker. */
for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++)
{
- /* On ABI's that use function descriptors, there are usually
- two linker symbols associated with each C function: one
- pointing at the actual entry point of the machine code,
- and one pointing at the function's descriptor. The
- latter symbol has the same name as the C function.
-
- What we're looking for here is the machine code entry
- point, so we are only interested in symbols in code
- sections. */
+ /* What we're looking for here is the machine code entry point,
+ so we are only interested in symbols in code sections.
+
+ On ABI's that use function descriptors, the linker symbol with
+ the same name as a C funtion points to that functions descriptor.
+ when those function descriptors are in the code section, they
+ contain executable code and we can set a breakpoint there. */
sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep, SEC_CODE);
if (sym_addr != 0)
break;
}
+ if (sym_addr == 0)
+ {
+ CORE_ADDR sect_offset;
+
+ /* No symbol was found in a code section, so look in the data
+ sections. This will only happen when the linker symbol points
+ to a function descriptor that is in a data section. */
+ for (bkpt_namep = solib_break_names; *bkpt_namep!=NULL; bkpt_namep++)
+ {
+ /* On ABI's that use function descriptors that are in the data
+ section, */
+ sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep, SEC_DATA);
+ if (sym_addr != 0)
+ break;
+ }
+ if (sym_addr == 0)
+ {
+ target_close (tmp_bfd_target, 0);
+ goto bkpt_at_symbol;
+ }
+
+ /* Convert 'sym_addr' from a function pointer to an address. */
+ sym_addr = gdbarch_convert_from_func_ptr_addr (current_gdbarch,
+ sym_addr,
+ tmp_bfd_target);
+ }
+
/* We're done with both the temporary bfd and target. Remember,
closing the target closes the underlying bfd. */
target_close (tmp_bfd_target, 0);

View File

@ -1,6 +1,6 @@
--- gdb/Makefile.in
+++ gdb/Makefile.in
@@ -2426,7 +2426,7 @@
@@ -2432,7 +2432,7 @@ objfiles.o: objfiles.c $(defs_h) $(bfd_h
$(objfiles_h) $(gdb_stabs_h) $(target_h) $(bcache_h) $(mdebugread_h) \
$(gdb_assert_h) $(gdb_stat_h) $(gdb_obstack_h) $(gdb_string_h) \
$(hashtab_h) $(breakpoint_h) $(block_h) $(dictionary_h) $(source_h) \
@ -9,7 +9,7 @@
observer.o: observer.c $(defs_h) $(observer_h) $(command_h) $(gdbcmd_h) \
$(observer_inc)
obsd-tdep.o: obsd-tdep.c $(defs_h) $(frame_h) $(symtab_h) $(obsd_tdep_h)
@@ -2612,9 +2612,9 @@
@@ -2618,9 +2618,9 @@ solib-sunos.o: solib-sunos.c $(defs_h) $
$(bcache_h) $(regcache_h)
solib-svr4.o: solib-svr4.c $(defs_h) $(elf_external_h) $(elf_common_h) \
$(elf_mips_h) $(symtab_h) $(bfd_h) $(symfile_h) $(objfiles_h) \
@ -18,12 +18,12 @@
$(solist_h) $(solib_h) $(solib_svr4_h) $(bfd_target_h) $(elf_bfd_h) \
- $(exec_h)
+ $(exec_h) $(auxv_h)
sol-thread.o: sol-thread.c $(defs_h) $(gdbthread_h) $(target_h) \
$(inferior_h) $(gdb_stat_h) $(gdbcmd_h) $(gdbcore_h) $(regcache_h) \
$(solib_h) $(symfile_h) $(observer_h) $(gdb_string_h) $(gregset_h)
solib-target.o: solib-target.c $(defs_h) $(objfiles_h) $(solist_h) \
$(symtab_h) $(symfile_h) $(target_h) $(vec_h) $(xml_support_h) \
$(gdb_string_h)
--- gdb/breakpoint.c
+++ gdb/breakpoint.c
@@ -3900,6 +3900,7 @@
@@ -3891,6 +3891,7 @@ describe_other_breakpoints (CORE_ADDR pc
printf_filtered ("%s%s ",
((b->enable_state == bp_disabled ||
b->enable_state == bp_shlib_disabled ||
@ -31,7 +31,7 @@
b->enable_state == bp_call_disabled)
? " (disabled)"
: b->enable_state == bp_permanent
@@ -4586,6 +4587,60 @@
@@ -4575,6 +4576,60 @@ re_enable_breakpoints_in_shlibs (void)
}
}
@ -92,7 +92,7 @@
static void
solib_load_unload_1 (char *hookname, int tempflag, char *dll_pathname,
char *cond_string, enum bptype bp_kind)
@@ -7023,6 +7078,7 @@
@@ -7012,6 +7067,7 @@ delete_breakpoint (struct breakpoint *bp
&& !b->loc->duplicate
&& b->enable_state != bp_disabled
&& b->enable_state != bp_shlib_disabled
@ -100,7 +100,7 @@
&& !b->pending
&& b->enable_state != bp_call_disabled)
{
@@ -7241,7 +7297,8 @@
@@ -7230,7 +7286,8 @@ breakpoint_re_set_one (void *bint)
break;
save_enable = b->enable_state;
@ -112,7 +112,7 @@
/* If resetting a shlib-disabled breakpoint, we don't want to
--- gdb/breakpoint.h
+++ gdb/breakpoint.h
@@ -155,6 +155,7 @@
@@ -155,6 +155,7 @@ enum enable_state
automatically enabled and reset when the call
"lands" (either completes, or stops at another
eventpoint). */
@ -120,7 +120,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
@@ -793,8 +794,12 @@
@@ -793,8 +794,12 @@ extern void remove_thread_event_breakpoi
extern void disable_breakpoints_in_shlibs (int silent);
@ -135,7 +135,7 @@
extern void create_solib_unload_event_breakpoint (char *, int,
--- gdb/dwarf2read.c
+++ gdb/dwarf2read.c
@@ -1237,7 +1237,7 @@
@@ -1233,7 +1233,7 @@ dwarf2_build_psymtabs (struct objfile *o
else
dwarf2_per_objfile->loc_buffer = NULL;
@ -146,7 +146,7 @@
{
--- gdb/elfread.c
+++ gdb/elfread.c
@@ -541,7 +541,7 @@
@@ -613,7 +613,7 @@ elf_symfile_read (struct objfile *objfil
/* If we are reinitializing, or if we have never loaded syms yet,
set table to empty. MAINLINE is cleared so that *_read_psymtab
functions do not all also re-initialize the psymbol table. */
@ -157,7 +157,7 @@
mainline = 0;
--- gdb/infrun.c
+++ gdb/infrun.c
@@ -2223,6 +2223,11 @@
@@ -2252,6 +2252,11 @@ process_event_stop_test:
code segments in shared libraries might be mapped in now. */
re_enable_breakpoints_in_shlibs ();
@ -180,7 +180,7 @@
/* Prototypes for local functions */
@@ -261,7 +263,16 @@
@@ -261,7 +263,16 @@ init_entry_point_info (struct objfile *o
CORE_ADDR
entry_point_address (void)
{
@ -216,22 +216,28 @@
static struct link_map_offsets *svr4_fetch_link_map_offsets (void);
static int svr4_have_link_map_offsets (void);
@@ -261,8 +263,6 @@
@@ -251,8 +253,6 @@ static char *debug_loader_name;
/* Local function prototypes */
-static int match_main (char *);
-
static CORE_ADDR bfd_lookup_symbol (bfd *, char *, flagword);
static CORE_ADDR bfd_lookup_symbol (bfd *, char *);
/*
@@ -387,6 +387,16 @@
gdb_byte *buf;
gdb_byte *bufend;
int arch_size;
+ CORE_ADDR relocated_dyninfo_addr, entry_addr;
@@ -358,6 +358,8 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
Elf32_External_Dyn *x_dynp_32;
Elf64_External_Dyn *x_dynp_64;
struct bfd_section *sect;
+ CORE_ADDR relocated_dyn_addr, entry_addr;
+ int ret;
+
if (abfd == NULL)
return 0;
@@ -365,16 +367,26 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
if (arch_size == -1)
return 0;
+ /* Find the address of the entry point of the program from the
+ auxv vector. */
+ ret = target_auxv_search (&current_target, AT_ENTRY, &entry_addr);
@ -239,25 +245,24 @@
+ if (ret <= 0)
+ /* No auxv info, maybe an older kernel. Fake our way through. */
+ entry_addr = bfd_get_start_address (exec_bfd);
+
/* Find the start address of the .dynamic section. */
dyninfo_sect = bfd_get_section_by_name (exec_bfd, ".dynamic");
@@ -404,11 +414,13 @@
}
dyninfo_addr = bfd_section_vma (exec_bfd, dyninfo_sect);
+ relocated_dyninfo_addr
+ = dyninfo_addr + entry_addr - bfd_get_start_address (exec_bfd);
sect = bfd_get_section_by_name (abfd, ".dynamic");
if (sect == NULL)
return 0;
dyn_addr = bfd_section_vma (abfd, sect);
+ relocated_dyn_addr
+ = dyn_addr + entry_addr - bfd_get_start_address (exec_bfd);
/* Read in .dynamic section, silently ignore errors. */
dyninfo_sect_size = bfd_section_size (exec_bfd, dyninfo_sect);
buf = alloca (dyninfo_sect_size);
- if (target_read_memory (dyninfo_addr, buf, dyninfo_sect_size))
+ if (target_read_memory (relocated_dyninfo_addr, buf, dyninfo_sect_size))
return 0;
/* Find the DT_DEBUG entry in the the .dynamic section.
@@ -757,9 +769,55 @@
sect_size = bfd_section_size (abfd, sect);
buf = alloca (sect_size);
- if (target_read_memory (dyn_addr, buf, sect_size))
+ if (target_read_memory (relocated_dyn_addr, buf, sect_size))
{
/* If target_read_memory fails, try reading the BFD file. */
if (!bfd_get_section_contents (abfd, sect,
@@ -735,9 +747,55 @@ svr4_current_sos (void)
does have a name, so we can no longer use a missing name to
decide when to ignore it. */
if (IGNORE_FIRST_LINK_MAP_ENTRY (new) && ldsomap == 0)
@ -314,7 +319,7 @@
int errcode;
char *buffer;
@@ -777,10 +835,8 @@
@@ -755,10 +813,8 @@ svr4_current_sos (void)
strcpy (new->so_original_name, new->so_name);
}
@ -327,7 +332,7 @@
free_so (new);
else
{
@@ -876,24 +932,6 @@
@@ -854,24 +910,6 @@ svr4_fetch_objfile_link_map (struct objf
return 0;
}
@ -352,7 +357,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;
@@ -1374,6 +1412,8 @@
@@ -1351,6 +1389,8 @@ svr4_solib_create_inferior_hook (void)
while (stop_signal != TARGET_SIGNAL_TRAP);
stop_soon = NO_STOP_QUIETLY;
#endif /* defined(_SCO_DS) */
@ -363,7 +368,7 @@
static void
--- gdb/solib.c
+++ gdb/solib.c
@@ -394,15 +394,37 @@
@@ -400,15 +400,37 @@ symbol_add_stub (void *arg)
/* Have we already loaded this shared object? */
ALL_OBJFILES (so->objfile)
{
@ -404,7 +409,7 @@
free_section_addr_info (sap);
return (1);
@@ -583,28 +605,7 @@
@@ -589,28 +611,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)
{
@ -434,7 +439,7 @@
/* Notify any observer that the shared object has been
loaded now that we've added it to GDB's tables. */
@@ -700,6 +701,39 @@
@@ -706,6 +707,39 @@ solib_add (char *pattern, int from_tty,
}
}
@ -476,7 +481,7 @@
--- gdb/solist.h
+++ gdb/solist.h
@@ -61,6 +61,8 @@
@@ -63,6 +63,8 @@ struct so_list
bfd *abfd;
char symbols_loaded; /* flag: symbols read in yet? */
char from_tty; /* flag: print msgs? */
@ -485,7 +490,7 @@
struct objfile *objfile; /* objfile for loaded lib */
struct section_table *sections;
struct section_table *sections_end;
@@ -115,6 +117,10 @@
@@ -128,6 +130,10 @@ struct so_list *master_so_list (void);
/* Find solib binary file and open it. */
extern int solib_open (char *in_pathname, char **found_pathname);
@ -498,7 +503,7 @@
--- gdb/symfile-mem.c
+++ gdb/symfile-mem.c
@@ -110,7 +110,7 @@
@@ -110,7 +110,7 @@ symbol_file_add_from_memory (struct bfd
}
objf = symbol_file_add_from_bfd (nbfd, from_tty,
@ -509,7 +514,7 @@
reinit_frame_cache ();
--- gdb/symfile.c
+++ gdb/symfile.c
@@ -708,7 +708,7 @@
@@ -781,7 +781,7 @@ syms_from_objfile (struct objfile *objfi
/* Now either addrs or offsets is non-zero. */
@ -518,7 +523,7 @@
{
/* We will modify the main symbol table, make sure that all its users
will be cleaned up if an error occurs during symbol reading. */
@@ -736,7 +736,7 @@
@@ -809,7 +809,7 @@ syms_from_objfile (struct objfile *objfi
We no longer warn if the lowest section is not a text segment (as
happens for the PA64 port. */
@ -527,7 +532,7 @@
{
asection *lower_sect;
asection *sect;
@@ -905,14 +905,14 @@
@@ -978,14 +978,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. */
@ -544,7 +549,7 @@
{
breakpoint_re_set ();
}
@@ -958,7 +958,7 @@
@@ -1031,7 +1031,7 @@ symbol_file_add_with_addrs_or_offsets (b
interactively wiping out any existing symbols. */
if ((have_full_symbols () || have_partial_symbols ())
@ -553,7 +558,7 @@
&& from_tty
&& !query ("Load new symbol table from \"%s\"? ", name))
error (_("Not confirmed."));
@@ -1138,6 +1138,11 @@
@@ -1211,6 +1211,11 @@ symbol_file_clear (int from_tty)
symfile_objfile->name)
: !query (_("Discard symbol table? "))))
error (_("Not confirmed."));
@ -565,7 +570,7 @@
free_all_objfiles ();
/* solib descriptors may have handles to objfiles. Since their
@@ -2277,6 +2282,8 @@
@@ -2358,6 +2363,8 @@ reread_symbols (void)
/* Discard cleanups as symbol reading was successful. */
discard_cleanups (old_cleanups);
@ -574,7 +579,7 @@
/* If the mtime has changed between the time we set new_modtime
and now, we *want* this to be out of date, so don't call stat
again now. */
@@ -2643,6 +2650,7 @@
@@ -2724,6 +2731,7 @@ clear_symtab_users (void)
set_default_breakpoint (0, 0, 0, 0);
clear_pc_function_cache ();
observer_notify_new_objfile (NULL);
@ -584,7 +589,7 @@
FIXME: It's not clear which of these are supposed to persist
--- gdb/varobj.c
+++ gdb/varobj.c
@@ -1077,6 +1077,58 @@
@@ -1077,6 +1077,58 @@ install_new_value (struct varobj *var, s
return changed;
}
@ -645,7 +650,7 @@
expression to see if it's changed. Then go all the way
--- gdb/varobj.h
+++ gdb/varobj.h
@@ -114,4 +114,6 @@
@@ -114,4 +114,6 @@ extern int varobj_update (struct varobj
extern void varobj_invalidate (void);