rpms/gdb/devel gdb-archer.patch,1.27,1.28 gdb.spec,1.381,1.382
Jan Kratochvil
jkratoch at fedoraproject.org
Thu Sep 3 19:45:39 UTC 2009
Author: jkratoch
Update of /cvs/pkgs/rpms/gdb/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv24591
Modified Files:
gdb-archer.patch gdb.spec
Log Message:
* Thu Sep 3 2009 Jan Kratochvil <jan.kratochvil at redhat.com> - 6.8.50.20090818-8
- archer-jankratochvil-fedora12 commit: a081d2f12945e9468edd5f4341d3e945bd0fefe9
- [expr] Fix too slow lookups in large C++ programs (Sami Wagiaalla).
- [python] Fix varobj changed values reporting (GDB PR 10584, Tom Tromey).
gdb-archer.patch:
Makefile.in | 95
NEWS | 7
ada-lang.c | 43
amd64-linux-nat.c | 45
block.c | 24
block.h | 12
breakpoint.c | 137 -
breakpoint.h | 3
c-exp.y | 252 +-
c-lang.c | 6
c-typeprint.c | 47
cli/cli-cmds.c | 72
coffread.c | 3
config.in | 8
config/i386/nm-i386.h | 125 +
config/i386/nm-linux64.h | 54
config/mips/nm-irix5.h | 44
configure | 79
configure.ac | 47
cp-name-parser.y | 5
cp-namespace.c | 275 +-
cp-support.c | 88
cp-support.h | 50
dbxread.c | 1
doc/gdb.texinfo | 504 +++-
doc/gdbint.texinfo | 62
doc/observer.texi | 5
dwarf2-frame.c | 36
dwarf2-frame.h | 4
dwarf2expr.c | 90
dwarf2expr.h | 68
dwarf2loc.c | 368 ++
dwarf2loc.h | 6
dwarf2read.c | 1863 ++++++++++-----
elfread.c | 11
eval.c | 170 +
expression.h | 11
f-exp.y | 4
f-lang.c | 457 ---
f-lang.h | 45
f-typeprint.c | 36
f-valprint.c | 267 --
findcmd.c | 111
findvar.c | 126 -
frame.c | 19
frame.h | 6
gdbinit.in | 10
gdbserver/linux-i386-low.c | 210 +
gdbserver/linux-x86-64-low.c | 184 +
gdbthread.h | 3
gdbtypes.c | 596 ++++
gdbtypes.h | 146 +
gnu-v3-abi.c | 18
gnulib/Makefile.in | 4
i386-linux-nat.c | 47
i386-nat.c | 49
i386-nat.h | 17
infrun.c | 8
jv-lang.c | 1
language.h | 1
linespec.c | 62
linux-nat.c | 88
linux-nat.h | 6
m2-lang.c | 1
machoread.c | 1
main.c | 80
maint.c | 8
mdebugread.c | 2
mi/mi-cmd-var.c | 170 -
mi/mi-cmds.c | 2
mi/mi-cmds.h | 2
mi/mi-main.c | 5
mipsread.c | 1
objfiles.c | 21
objfiles.h | 21
parse.c | 154 +
parser-defs.h | 25
ppc-linux-nat.c | 19
printcmd.c | 90
python/lib/gdb/FrameIterator.py | 33
python/lib/gdb/FrameWrapper.py | 112
python/lib/gdb/__init__.py | 19
python/lib/gdb/backtrace.py | 42
python/lib/gdb/command/__init__.py | 1
python/lib/gdb/command/alias.py | 59
python/lib/gdb/command/backtrace.py | 106
python/lib/gdb/command/ignore_errors.py | 37
python/lib/gdb/command/pahole.py | 75
python/lib/gdb/command/require.py | 57
python/lib/gdb/command/save_breakpoints.py | 65
python/lib/gdb/command/upto.py | 129 +
python/lib/gdb/function/__init__.py | 1
python/lib/gdb/function/caller_is.py | 58
python/lib/gdb/function/in_scope.py | 47
python/python-block.c | 265 ++
python/python-breakpoint.c | 665 +++++
python/python-cmd.c | 17
python/python-frame.c | 116
python/python-hooks.c | 50
python/python-inferior.c | 926 +++++++
python/python-infthread.c | 285 ++
python/python-internal.h | 69
python/python-membuf.c | 268 ++
python/python-param.c | 606 ++++
python/python-prettyprint.c | 21
python/python-symbol.c | 336 ++
python/python-symtab.c | 322 ++
python/python-type.c | 170 +
python/python-utils.c | 46
python/python-value.c | 67
python/python.c | 384 +++
python/python.h | 4
scm-lang.c | 1
scm-valprint.c | 4
solib-darwin.c | 1
solib-spu.c | 7
solib-svr4.c | 4
solib.c | 3
solist.h | 2
somread.c | 1
spu-tdep.c | 2
stabsread.c | 4
stack.c | 38
symfile.c | 42
symfile.h | 12
symmisc.c | 4
symtab.c | 321 +-
symtab.h | 20
target.c | 20
target.h | 32
testsuite/gdb.arch/powerpc-power7.exp | 175 +
testsuite/gdb.arch/powerpc-power7.s | 107
testsuite/gdb.arch/x86_64-vla-typedef-foo.S | 455 +++
testsuite/gdb.arch/x86_64-vla-typedef.c | 43
testsuite/gdb.arch/x86_64-vla-typedef.exp | 64
testsuite/gdb.base/arrayidx.c | 7
testsuite/gdb.base/arrayidx.exp | 10
testsuite/gdb.base/help.exp | 2
testsuite/gdb.base/lineno-makeup-func.c | 21
testsuite/gdb.base/lineno-makeup.c | 35
testsuite/gdb.base/lineno-makeup.exp | 78
testsuite/gdb.base/macscp.exp | 8
testsuite/gdb.base/radix.exp | 7
testsuite/gdb.base/solib-overlap-lib.c | 27
testsuite/gdb.base/solib-overlap-main.c | 25
testsuite/gdb.base/solib-overlap.exp | 139 +
testsuite/gdb.base/valgrind-attach.c | 28
testsuite/gdb.base/valgrind-attach.exp | 94
testsuite/gdb.base/valgrind-attach.sh | 20
testsuite/gdb.base/vla-overflow.c | 30
testsuite/gdb.base/vla-overflow.exp | 108
testsuite/gdb.base/vla.c | 55
testsuite/gdb.base/vla.exp | 62
testsuite/gdb.base/watchpoint-hw.c | 6
testsuite/gdb.base/watchpoint-hw.exp | 45
testsuite/gdb.cp/cp-relocate.exp | 6
testsuite/gdb.cp/cplusfuncs.cc | 6
testsuite/gdb.cp/cplusfuncs.exp | 195 +
testsuite/gdb.cp/expand-sals.exp | 2
testsuite/gdb.cp/member-ptr.cc | 17
testsuite/gdb.cp/member-ptr.exp | 34
testsuite/gdb.cp/namespace-multiple-imports.cc | 20
testsuite/gdb.cp/namespace-multiple-imports.exp | 49
testsuite/gdb.cp/namespace-nested-imports.cc | 36
testsuite/gdb.cp/namespace-nested-imports.exp | 57
testsuite/gdb.cp/namespace-no-imports.cc | 37
testsuite/gdb.cp/namespace-no-imports.exp | 76
testsuite/gdb.cp/namespace-recursive.cc | 30
testsuite/gdb.cp/namespace-recursive.exp | 66
testsuite/gdb.cp/namespace-stress.cc | 60
testsuite/gdb.cp/namespace-stress.exp | 50
testsuite/gdb.cp/namespace-using.cc | 128 -
testsuite/gdb.cp/namespace-using.exp | 130 +
testsuite/gdb.cp/namespace.exp | 23
testsuite/gdb.cp/overload.exp | 8
testsuite/gdb.cp/ovldbreak.exp | 46
testsuite/gdb.cp/shadowing.cc | 48
testsuite/gdb.cp/shadowing.exp | 91
testsuite/gdb.dwarf2/callframecfa.S | 309 ++
testsuite/gdb.dwarf2/callframecfa.exp | 55
testsuite/gdb.dwarf2/dw2-aranges.S | 140 +
testsuite/gdb.dwarf2/dw2-aranges.exp | 40
testsuite/gdb.dwarf2/dw2-stripped.c | 42
testsuite/gdb.dwarf2/dw2-stripped.exp | 79
testsuite/gdb.dwarf2/dw2-struct-member-data-location.S | 83
testsuite/gdb.dwarf2/dw2-struct-member-data-location.exp | 37
testsuite/gdb.fortran/common-block.exp | 101
testsuite/gdb.fortran/common-block.f90 | 67
testsuite/gdb.fortran/dwarf-stride.exp | 42
testsuite/gdb.fortran/dwarf-stride.f90 | 40
testsuite/gdb.fortran/dynamic.exp | 145 +
testsuite/gdb.fortran/dynamic.f90 | 98
testsuite/gdb.fortran/library-module-lib.f90 | 28
testsuite/gdb.fortran/library-module-main.f90 | 23
testsuite/gdb.fortran/library-module.exp | 53
testsuite/gdb.fortran/logical.exp | 44
testsuite/gdb.fortran/logical.f90 | 33
testsuite/gdb.fortran/module.exp | 28
testsuite/gdb.fortran/module.f90 | 37
testsuite/gdb.fortran/string.exp | 59
testsuite/gdb.fortran/string.f90 | 37
testsuite/gdb.gdb/selftest.exp | 4
testsuite/gdb.mi/gdb701.exp | 2
testsuite/gdb.mi/mi-break.exp | 2
testsuite/gdb.mi/mi-var-block.exp | 2
testsuite/gdb.mi/mi-var-child.exp | 30
testsuite/gdb.mi/mi-var-cmd.exp | 38
testsuite/gdb.mi/mi-var-display.exp | 4
testsuite/gdb.mi/mi-var-invalidate.exp | 6
testsuite/gdb.mi/mi2-var-block.exp | 2
testsuite/gdb.mi/mi2-var-child.exp | 30
testsuite/gdb.mi/mi2-var-cmd.exp | 28
testsuite/gdb.mi/mi2-var-display.exp | 4
testsuite/gdb.opt/array-from-register-func.c | 22
testsuite/gdb.opt/array-from-register.c | 28
testsuite/gdb.opt/array-from-register.exp | 33
testsuite/gdb.opt/fortran-string.exp | 41
testsuite/gdb.opt/fortran-string.f90 | 28
testsuite/gdb.python/Makefile.in | 2
testsuite/gdb.python/python-cmd.exp | 27
testsuite/gdb.python/python-frame.exp | 48
testsuite/gdb.python/python-function.exp | 27
testsuite/gdb.python/python-inferior.c | 49
testsuite/gdb.python/python-inferior.exp | 201 +
testsuite/gdb.python/python-infthread.c | 14
testsuite/gdb.python/python-infthread.exp | 58
testsuite/gdb.python/python-mi.exp | 127 -
testsuite/gdb.python/python-prettyprint.c | 19
testsuite/gdb.python/python-prettyprint.exp | 11
testsuite/gdb.python/python-prettyprint.py | 12
testsuite/gdb.python/python-template.exp | 25
testsuite/gdb.python/python-value.exp | 68
testsuite/gdb.python/python.exp | 27
testsuite/gdb.threads/watchpoint-fork-forkoff.c | 175 +
testsuite/gdb.threads/watchpoint-fork-mt.c | 157 +
testsuite/gdb.threads/watchpoint-fork.c | 57
testsuite/gdb.threads/watchpoint-fork.exp | 130 +
testsuite/gdb.threads/watchthreads-reorder.c | 366 ++
testsuite/gdb.threads/watchthreads-reorder.exp | 101
testsuite/lib/cp-support.exp | 3
testsuite/lib/gdb.exp | 1
testsuite/lib/mi-support.exp | 100
testsuite/lib/python-support.exp | 53
thread.c | 18
top.c | 1
typeprint.c | 14
typeprint.h | 3
ui-file.c | 20
ui-file.h | 6
utils.c | 7
valarith.c | 45
valops.c | 254 +-
valprint.c | 4
value.c | 150 +
value.h | 8
varobj.c | 754 ++++--
varobj.h | 32
xcoffread.c | 1
258 files changed, 19022 insertions(+), 2762 deletions(-)
Index: gdb-archer.patch
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/gdb-archer.patch,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -p -r1.27 -r1.28
--- gdb-archer.patch 1 Sep 2009 13:19:03 -0000 1.27
+++ gdb-archer.patch 3 Sep 2009 19:45:38 -0000 1.28
@@ -2,7 +2,7 @@ http://sourceware.org/gdb/wiki/ProjectAr
http://sourceware.org/gdb/wiki/ArcherBranchManagement
GIT snapshot:
-commit d25596676e8811b03f8c9aba6bbd04ebaa9ff5db
+commit a081d2f12945e9468edd5f4341d3e945bd0fefe9
branch `archer' - the merge of branches:
archer-tromey-call-frame-cfa
@@ -1934,7 +1934,7 @@ index 62800b8..97d587b 100644
{ $$ = $1.comp;
if ($2) $$ = fill_comp (DEMANGLE_COMPONENT_LOCAL_NAME, $$, $2); }
diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c
-index d2d8f2e..5805a30 100644
+index d2d8f2e..7672b2e 100644
--- a/gdb/cp-namespace.c
+++ b/gdb/cp-namespace.c
@@ -36,14 +36,17 @@ static struct using_direct *cp_copy_usings (struct using_direct *using,
@@ -2081,7 +2081,7 @@ index d2d8f2e..5805a30 100644
+ /* Search for name in namespaces imported to this and parent blocks. */
+ while (block != NULL)
+ {
-+ sym = cp_lookup_symbol_imports(scope,name, block, domain,0);
++ sym = cp_lookup_symbol_imports(scope,name, block, domain,0,1);
+
+ if (sym)
+ return sym;
@@ -2114,7 +2114,7 @@ index d2d8f2e..5805a30 100644
if (sym != NULL)
return sym;
}
-@@ -320,25 +377,55 @@ lookup_namespace_scope (const char *name,
+@@ -320,25 +377,81 @@ lookup_namespace_scope (const char *name,
namespace = alloca (scope_len + 1);
strncpy (namespace, scope, scope_len);
namespace[scope_len] = '\0';
@@ -2152,7 +2152,29 @@ index d2d8f2e..5805a30 100644
+}
+
+/* Search for NAME by applying all import statements belonging
-+ to BLOCK which are applicable in SCOPE. */
++ to BLOCK which are applicable in SCOPE. If DECLARATION_ONLY the search
++ is restricted to using declarations.
++ Example:
++
++ namespace A{
++ int x;
++ }
++ using A::x;
++
++ If SEARCH_PARENTS the search will include imports which are applicable in
++ parents of scopes.
++ Example:
++
++ namespace A{
++ using namespace X;
++ namespace B{
++ using namespace Y;
++ }
++ }
++
++ If SCOPE is "A::B" and SEARCH_PARENTS is true the imports of namespaces X
++ and Y will be considered. If SEARCH_PARENTS is false only the import of Y
++ is considered. */
+
struct symbol *
-cp_lookup_symbol_namespace (const char *namespace,
@@ -2164,17 +2186,21 @@ index d2d8f2e..5805a30 100644
+ const char *name,
+ const struct block *block,
+ const domain_enum domain,
-+ int declaration_only)
++ int declaration_only,
++ int search_parents)
{
- const struct using_direct *current;
- struct symbol *sym;
+ struct using_direct *current;
+ struct symbol *sym = NULL;
++ int directive_match;
++ int current_line = find_pc_line (get_frame_pc (get_current_frame ()), 0).line;
- /* First, go through the using directives. If any of them add new
+ if(!declaration_only)
-+ /* First, try to find the symbol in the given namespace. */
-+ sym = cp_lookup_symbol_in_namespace (scope, name, block, domain);
++ /* First, try to find the symbol in the given namespace. */
++ sym = cp_lookup_symbol_in_namespace (scope, name, block, domain);
++
+ if ( sym != NULL)
+ return sym;
+
@@ -2182,17 +2208,20 @@ index d2d8f2e..5805a30 100644
names to the namespace we're searching in, see if we can find a
match by applying them. */
-@@ -346,39 +433,70 @@ cp_lookup_symbol_namespace (const char *namespace,
+@@ -346,39 +459,74 @@ cp_lookup_symbol_namespace (const char *namespace,
current != NULL;
current = current->next)
{
- if (strcmp (namespace, current->import_dest) == 0)
-+ int current_line = find_pc_line (get_frame_pc (get_current_frame ()), 0).line;
+
+ /* If the import destination is the current scope or one of its ancestors then
+ it is applicable. */
-+ if (strncmp (scope, current->import_dest,
-+ strlen(current->import_dest)) == 0 &&
++ directive_match = search_parents ?
++ strncmp (scope, current->import_dest,
++ strlen(current->import_dest)) == 0 :
++ strcmp (scope, current->import_dest) == 0;
++
++ if (directive_match &&
+ current->line_number < current_line &&
+ !current->searched)
{
@@ -2244,6 +2273,7 @@ index d2d8f2e..5805a30 100644
+ name,
+ block,
+ domain,
++ 0,
+ 0);
+ }
+
@@ -2281,7 +2311,7 @@ index d2d8f2e..5805a30 100644
}
/* Look up NAME in BLOCK's static block and in global blocks. If
-@@ -388,17 +506,15 @@ cp_lookup_symbol_namespace (const char *namespace,
+@@ -388,17 +536,15 @@ cp_lookup_symbol_namespace (const char *namespace,
static struct symbol *
lookup_symbol_file (const char *name,
@@ -2300,7 +2330,7 @@ index d2d8f2e..5805a30 100644
if (anonymous_namespace)
{
/* Symbols defined in anonymous namespaces have external linkage
-@@ -408,12 +524,11 @@ lookup_symbol_file (const char *name,
+@@ -408,12 +554,11 @@ lookup_symbol_file (const char *name,
const struct block *global_block = block_global_block (block);
if (global_block != NULL)
@@ -2315,7 +2345,7 @@ index d2d8f2e..5805a30 100644
}
if (sym != NULL)
-@@ -434,6 +549,7 @@ lookup_symbol_file (const char *name,
+@@ -434,6 +579,7 @@ lookup_symbol_file (const char *name,
sym = lookup_possible_namespace_symbol (name);
if (sym != NULL)
return sym;
@@ -2323,7 +2353,7 @@ index d2d8f2e..5805a30 100644
}
return NULL;
-@@ -461,9 +577,8 @@ cp_lookup_nested_type (struct type *parent_type,
+@@ -461,9 +607,8 @@ cp_lookup_nested_type (struct type *parent_type,
lookup_symbol_namespace works when looking them up. */
const char *parent_name = TYPE_TAG_NAME (parent_type);
@@ -2334,7 +2364,7 @@ index d2d8f2e..5805a30 100644
block,
VAR_DOMAIN);
if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF)
-@@ -709,7 +824,7 @@ check_one_possible_namespace_symbol (const char *name, int len,
+@@ -709,7 +854,7 @@ check_one_possible_namespace_symbol (const char *name, int len,
memcpy (name_copy, name, len);
name_copy[len] = '\0';
@@ -2343,7 +2373,7 @@ index d2d8f2e..5805a30 100644
if (sym == NULL)
{
-@@ -749,7 +864,7 @@ lookup_possible_namespace_symbol (const char *name)
+@@ -749,7 +894,7 @@ lookup_possible_namespace_symbol (const char *name)
struct symbol *sym;
sym = lookup_block_symbol (get_possible_namespace_block (objfile),
@@ -2474,7 +2504,7 @@ index f12d785..ca10007 100644
_initialize_cp_support (void)
{
diff --git a/gdb/cp-support.h b/gdb/cp-support.h
-index b5a5c5f..022f102 100644
+index b5a5c5f..3f48f98 100644
--- a/gdb/cp-support.h
+++ b/gdb/cp-support.h
@@ -38,15 +38,33 @@ struct demangle_component;
@@ -2547,7 +2577,7 @@ index b5a5c5f..022f102 100644
struct using_direct *next);
extern void cp_initialize_namespace (void);
-@@ -97,15 +124,19 @@ extern void cp_set_block_scope (const struct symbol *symbol,
+@@ -97,15 +124,20 @@ extern void cp_set_block_scope (const struct symbol *symbol,
extern void cp_scan_for_anonymous_namespaces (const struct symbol *symbol);
extern struct symbol *cp_lookup_symbol_nonlocal (const char *name,
@@ -2559,7 +2589,8 @@ index b5a5c5f..022f102 100644
+ const char *name,
+ const struct block *block,
+ const domain_enum domain,
-+ int declaration_only);
++ int declaration_only,
++ int search_parents);
+
extern struct symbol *cp_lookup_symbol_namespace (const char *namespace,
- const char *name,
@@ -3458,7 +3489,7 @@ index 4984f31..fcf1b5d 100644
This observer is used for internal testing. Do not use.
See testsuite/gdb.gdb/observer.exp.
diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c
-index 427f58f..392a1b4 100644
+index 427f58f..e66f007 100644
--- a/gdb/dwarf2-frame.c
+++ b/gdb/dwarf2-frame.c
@@ -38,6 +38,7 @@
@@ -3483,7 +3514,7 @@ index 427f58f..392a1b4 100644
no_get_tls_address (void *baton, CORE_ADDR offset)
{
internal_error (__FILE__, __LINE__,
-@@ -363,14 +371,16 @@ execute_stack_op (gdb_byte *exp, ULONGEST len, int addr_size,
+@@ -363,14 +371,22 @@ execute_stack_op (gdb_byte *exp, ULONGEST len, int addr_size,
ctx->read_reg = read_reg;
ctx->read_mem = read_mem;
ctx->get_frame_base = no_get_frame_base;
@@ -3497,11 +3528,17 @@ index 427f58f..392a1b4 100644
- if (ctx->in_reg)
+ if (ctx->location == DWARF_VALUE_REGISTER)
result = read_reg (this_frame, result);
-+ /* FIXME */
++ else if (ctx->location != DWARF_VALUE_MEMORY)
++ {
++ /* This is actually invalid DWARF, but if we ever do run across
++ it somehow, we might as well support it. So, instead, report
++ it as unimplemented. */
++ error (_("Not implemented: computing unwound register using explicit value operator"));
++ }
do_cleanups (old_chain);
-@@ -1250,6 +1260,16 @@ dwarf2_frame_base_sniffer (struct frame_info *this_frame)
+@@ -1250,6 +1266,16 @@ dwarf2_frame_base_sniffer (struct frame_info *this_frame)
return NULL;
}
@@ -3518,7 +3555,7 @@ index 427f58f..392a1b4 100644
const struct objfile_data *dwarf2_frame_objfile_data;
-@@ -1539,6 +1559,14 @@ dwarf2_frame_find_fde (CORE_ADDR *pc)
+@@ -1539,6 +1565,14 @@ dwarf2_frame_find_fde (CORE_ADDR *pc)
CORE_ADDR offset;
CORE_ADDR seek_pc;
@@ -3547,7 +3584,7 @@ index b203661..dd03d59 100644
+
#endif /* dwarf2-frame.h */
diff --git a/gdb/dwarf2expr.c b/gdb/dwarf2expr.c
-index 2721065..228eae7 100644
+index 2721065..0644b46 100644
--- a/gdb/dwarf2expr.c
+++ b/gdb/dwarf2expr.c
@@ -125,8 +125,7 @@ dwarf_expr_fetch (struct dwarf_expr_context *ctx, int n)
@@ -3578,7 +3615,7 @@ index 2721065..228eae7 100644
}
/* Evaluate the expression at ADDR (LEN bytes long) using the context
-@@ -287,6 +292,21 @@ signed_address_type (struct gdbarch *gdbarch, int addr_size)
+@@ -287,6 +292,23 @@ signed_address_type (struct gdbarch *gdbarch, int addr_size)
}
}
@@ -3589,7 +3626,9 @@ index 2721065..228eae7 100644
+static void
+require_composition (gdb_byte *op_ptr, gdb_byte *op_end, const char *op_name)
+{
-+ /* FIXME: DW_OP_GNU_uninit? */
++ /* It seems like DW_OP_GNU_uninit should be handled here. However,
++ it doesn't seem to make sense for DW_OP_*_value, and it was not
++ checked at the other place that this function is called. */
+ if (op_ptr != op_end && *op_ptr != DW_OP_piece && *op_ptr != DW_OP_bit_piece)
+ error (_("DWARF-2 expression error: `%s' operations must be "
+ "used either alone or in conjuction with DW_OP_piece "
@@ -3600,7 +3639,7 @@ index 2721065..228eae7 100644
/* The engine for the expression evaluator. Using the context in CTX,
evaluate the expression between OP_PTR and OP_END. */
-@@ -295,8 +315,7 @@ execute_stack_op (struct dwarf_expr_context *ctx,
+@@ -295,8 +317,7 @@ execute_stack_op (struct dwarf_expr_context *ctx,
gdb_byte *op_ptr, gdb_byte *op_end)
{
enum bfd_endian byte_order = gdbarch_byte_order (ctx->gdbarch);
@@ -3610,7 +3649,7 @@ index 2721065..228eae7 100644
ctx->initialized = 1; /* Default is initialized. */
if (ctx->recursion_depth > ctx->max_recursion_depth)
-@@ -436,20 +455,36 @@ execute_stack_op (struct dwarf_expr_context *ctx,
+@@ -436,20 +457,36 @@ execute_stack_op (struct dwarf_expr_context *ctx,
"used either alone or in conjuction with DW_OP_piece."));
result = op - DW_OP_reg0;
@@ -3635,7 +3674,7 @@ index 2721065..228eae7 100644
+ {
+ ULONGEST len;
+ op_ptr = read_uleb128 (op_ptr, op_end, &len);
-+ if (op_ptr + len >= op_end)
++ if (op_ptr + len > op_end)
+ error (_("DW_OP_implicit_value: too few bytes available."));
+ ctx->len = len;
+ ctx->data = op_ptr;
@@ -3653,14 +3692,17 @@ index 2721065..228eae7 100644
case DW_OP_breg0:
case DW_OP_breg1:
case DW_OP_breg2:
-@@ -514,11 +549,12 @@ execute_stack_op (struct dwarf_expr_context *ctx,
+@@ -513,12 +550,15 @@ execute_stack_op (struct dwarf_expr_context *ctx,
+ specific this_base method. */
(ctx->get_frame_base) (ctx->baton, &datastart, &datalen);
dwarf_expr_eval (ctx, datastart, datalen);
++ if (ctx->location == DWARF_VALUE_LITERAL
++ || ctx->location == DWARF_VALUE_STACK)
++ error (_("Not implemented: computing frame base using explicit value operator"));
result = dwarf_expr_fetch (ctx, 0);
- if (ctx->in_reg)
+ if (ctx->location == DWARF_VALUE_REGISTER)
result = (ctx->read_reg) (ctx->baton, result);
-+ /* FIXME: other DWARF_VALUE_*?? */
result = result + offset;
ctx->stack_len = before_stack_len;
- ctx->in_reg = 0;
@@ -3668,7 +3710,7 @@ index 2721065..228eae7 100644
}
break;
case DW_OP_dup:
-@@ -716,6 +752,10 @@ execute_stack_op (struct dwarf_expr_context *ctx,
+@@ -716,6 +756,10 @@ execute_stack_op (struct dwarf_expr_context *ctx,
}
break;
@@ -3679,7 +3721,7 @@ index 2721065..228eae7 100644
case DW_OP_GNU_push_tls_address:
/* Variable is at a constant offset in the thread-local
storage block into the objfile for the current thread and
-@@ -754,12 +794,13 @@ execute_stack_op (struct dwarf_expr_context *ctx,
+@@ -754,12 +798,13 @@ execute_stack_op (struct dwarf_expr_context *ctx,
/* Record the piece. */
op_ptr = read_uleb128 (op_ptr, op_end, &size);
@@ -3698,7 +3740,7 @@ index 2721065..228eae7 100644
}
goto no_push;
-@@ -771,6 +812,13 @@ execute_stack_op (struct dwarf_expr_context *ctx,
+@@ -771,6 +816,13 @@ execute_stack_op (struct dwarf_expr_context *ctx,
ctx->initialized = 0;
goto no_push;
@@ -18820,7 +18862,7 @@ index eb35369..dfd8c8c 100644
{
printf_filtered ("Global symbol `");
diff --git a/gdb/symtab.c b/gdb/symtab.c
-index c88156a..9c102c0 100644
+index c88156a..75b907f 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -42,6 +42,7 @@
@@ -19128,7 +19170,7 @@ index c88156a..9c102c0 100644
+ if (language == language_cplus )
+ {
+ sym = cp_lookup_symbol_imports (block_scope (block_iterator), name,
-+ block_iterator, domain, 1);
++ block_iterator, domain, 1, 1);
+
+ if (sym != NULL)
+ return sym;
@@ -22507,6 +22549,129 @@ index 0000000..ebc898f
+
+gdb_test "print xx" "= 999"
+
+diff --git a/gdb/testsuite/gdb.cp/namespace-stress.cc b/gdb/testsuite/gdb.cp/namespace-stress.cc
+new file mode 100644
+index 0000000..f34083e
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/namespace-stress.cc
+@@ -0,0 +1,60 @@
++
++namespace A{ int x; }
++namespace B{ int x; }
++namespace C{ int x; }
++namespace D{ int x; }
++namespace E{ int x; }
++namespace F{ int x; }
++namespace G{ int x; }
++namespace H{ int x; }
++namespace I{ int x; }
++namespace J{ int x; }
++namespace K{ int x; }
++namespace L{ int x; }
++namespace M{ int x; }
++namespace N{ int x; }
++namespace O{ int x; }
++namespace P{ int x; }
++namespace Q{ int x; }
++namespace R{ int x; }
++namespace S{ int x; }
++namespace T{ int x; }
++namespace U{ int x; }
++namespace V{ int x; }
++namespace W{ int x; }
++namespace X{ int x; }
++namespace Y{ int x; }
++namespace Z{ int x; }
++
++
++int main(){
++
++ using namespace A;
++ using namespace B;
++ using namespace C;
++ using namespace D;
++ using namespace E;
++ using namespace F;
++ using namespace G;
++ using namespace H;
++ using namespace I;
++ using namespace J;
++ using namespace K;
++ using namespace L;
++ using namespace M;
++ using namespace N;
++ using namespace O;
++ using namespace P;
++ using namespace Q;
++ using namespace R;
++ using namespace S;
++ using namespace T;
++ using namespace U;
++ using namespace V;
++ using namespace W;
++ using namespace X;
++ using namespace Y;
++ using namespace Z;
++
++ return 0;
++}
+\ No newline at end of file
+diff --git a/gdb/testsuite/gdb.cp/namespace-stress.exp b/gdb/testsuite/gdb.cp/namespace-stress.exp
+new file mode 100644
+index 0000000..1806523
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/namespace-stress.exp
+@@ -0,0 +1,50 @@
++# Copyright 2008 Free Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 3 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <http://www.gnu.org/licenses/>.
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++set prms_id 0
++set bug_id 0
++
++set testfile namespace-stress
++set srcfile ${testfile}.cc
++set binfile ${objdir}/${subdir}/${testfile}
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
++ untested "Couldn't compile test program"
++ return -1
++}
++
++if [get_compiler_info ${binfile}] {
++ return -1;
++}
++
++# Get things started.
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++if ![runto_main] then {
++ perror "couldn't run to breakpoint main"
++ continue
++}
++
++############################################
++# Test that the search can fail efficiently
++
++gdb_test "print y" "No symbol \"y\" in current context."
diff --git a/gdb/testsuite/gdb.cp/namespace-using.cc b/gdb/testsuite/gdb.cp/namespace-using.cc
index 4786fd5..8ff5622 100644
--- a/gdb/testsuite/gdb.cp/namespace-using.cc
@@ -25322,6 +25487,37 @@ index 4b02e50..faa9172 100644
"get children of anone"
+diff --git a/gdb/testsuite/gdb.mi/mi-var-invalidate.exp b/gdb/testsuite/gdb.mi/mi-var-invalidate.exp
+index 05d46fa..4b95674 100644
+--- a/gdb/testsuite/gdb.mi/mi-var-invalidate.exp
++++ b/gdb/testsuite/gdb.mi/mi-var-invalidate.exp
+@@ -72,7 +72,7 @@ mi_runto main
+
+ # Check local variable is "invalid".
+ mi_gdb_test "-var-update linteger" \
+- "\\^done,changelist=\\\[\{name=\"linteger\",in_scope=\"invalid\"\}\\\]" \
++ "\\^done,changelist=\\\[\{name=\"linteger\",in_scope=\"invalid\",has_more=\"0\"\}\\\]" \
+ "linteger not anymore in scope due to binary changes"
+
+ mi_gdb_test "-var-info-type linteger" \
+@@ -97,7 +97,7 @@ mi_delete_breakpoints
+ mi_gdb_load ${binfile2}
+ # Check local variable are "invalid"
+ mi_gdb_test "-var-update linteger" \
+- "\\^done,changelist=\\\[\{name=\"linteger\",in_scope=\"invalid\"\}\\\]" \
++ "\\^done,changelist=\\\[\{name=\"linteger\",in_scope=\"invalid\",has_more=\"0\"\}\\\]" \
+ "linteger not valid anymore due to binary changes"
+
+ mi_gdb_test "-var-info-type linteger" \
+@@ -106,7 +106,7 @@ mi_gdb_test "-var-info-type linteger" \
+
+ # Check global variable are still correct.
+ mi_gdb_test "-var-update global_simple" \
+- "\\^done,changelist=\\\[\{name=\"global_simple\",in_scope=\"invalid\"\}\\\]" \
++ "\\^done,changelist=\\\[\{name=\"global_simple\",in_scope=\"invalid\",has_more=\"0\"\}\\\]" \
+ "global_simple not anymore in scope due to binary changes"
+
+ mi_gdb_test "-var-info-type global_simple" \
diff --git a/gdb/testsuite/gdb.mi/mi2-var-block.exp b/gdb/testsuite/gdb.mi/mi2-var-block.exp
index 6bcfea3..9b3d08f 100644
--- a/gdb/testsuite/gdb.mi/mi2-var-block.exp
@@ -26342,10 +26538,10 @@ index 0000000..d444554
+gdb_test "python print t0" "\\<gdb.InferiorThread object at 0x\[\[:xdigit:\]\]+>" "verify InferiorThread object"
+gdb_test "python print 'result =', t0.num" " = \[0-9\]+" "test Inferior.num"
diff --git a/gdb/testsuite/gdb.python/python-mi.exp b/gdb/testsuite/gdb.python/python-mi.exp
-index 3258810..018c6a2 100644
+index 3258810..7791775 100644
--- a/gdb/testsuite/gdb.python/python-mi.exp
+++ b/gdb/testsuite/gdb.python/python-mi.exp
-@@ -48,23 +48,42 @@ mi_gdb_test "python execfile ('${srcdir}/${subdir}/${testfile}.py')" ""
+@@ -48,23 +48,53 @@ mi_gdb_test "python execfile ('${srcdir}/${subdir}/${testfile}.py')" ""
mi_continue_to_line [gdb_get_line_number {MI breakpoint here} ${testfile}.c] \
"step to breakpoint"
@@ -26363,6 +26559,17 @@ index 3258810..018c6a2 100644
+
+mi_gdb_test "-enable-pretty-printing" ""
+
++mi_create_varobj_checked string string_1 \
++ "struct string_repr" \
++ "create string_1 varobj"
++
++mi_gdb_test "-data-evaluate-expression \"string_1 = string_2\"" ".*" \
++ "assign string_1 from string_2"
++
++mi_gdb_test "-var-update string" \
++ "\\^done,changelist=\\\[{name=\"string\",in_scope=\"true\",type_changed=\"false\",has_more=\"0\"}\\\]" \
++ "update string varobj after assignment"
++
+mi_create_dynamic_varobj container c \
+ "create container varobj"
@@ -26396,7 +26603,7 @@ index 3258810..018c6a2 100644
mi_gdb_test "-var-set-visualizer container None" \
"\\^done" \
-@@ -78,19 +97,88 @@ mi_gdb_test "-var-set-visualizer container gdb.default_visualizer" \
+@@ -78,19 +108,88 @@ mi_gdb_test "-var-set-visualizer container gdb.default_visualizer" \
"\\^done" \
"choose default visualizer"
@@ -26492,7 +26699,7 @@ index 3258810..018c6a2 100644
mi_continue_to_line \
[gdb_get_line_number {Another MI breakpoint} ${testfile}.c] \
diff --git a/gdb/testsuite/gdb.python/python-prettyprint.c b/gdb/testsuite/gdb.python/python-prettyprint.c
-index 3cafc48..5fbd534 100644
+index 3cafc48..adf66b5 100644
--- a/gdb/testsuite/gdb.python/python-prettyprint.c
+++ b/gdb/testsuite/gdb.python/python-prettyprint.c
@@ -15,6 +15,8 @@
@@ -26504,7 +26711,7 @@ index 3cafc48..5fbd534 100644
struct s
{
int a;
-@@ -148,6 +150,11 @@ void do_nothing(void)
+@@ -148,6 +150,14 @@ void do_nothing(void)
c = 23; /* Another MI breakpoint */
}
@@ -26513,10 +26720,13 @@ index 3cafc48..5fbd534 100644
+ char *s;
+};
+
++struct string_repr string_1 = { { "one" } };
++struct string_repr string_2 = { { "two" } };
++
int
main ()
{
-@@ -155,11 +162,15 @@ main ()
+@@ -155,11 +165,15 @@ main ()
struct ss ssa[2];
string x = make_string ("this is x");
zzz_type c = make_container ("container");
@@ -26532,7 +26742,7 @@ index 3cafc48..5fbd534 100644
struct ns ns;
ns.null_str = "embedded\0null\0string";
-@@ -193,6 +204,11 @@ main ()
+@@ -193,6 +207,11 @@ main ()
add_item (&c, 72);
#ifdef MI
@@ -29116,7 +29326,7 @@ index 6f6b756..b9ca650 100644
/* User function handler. */
diff --git a/gdb/varobj.c b/gdb/varobj.c
-index fbe8ff8..a730095 100644
+index fbe8ff8..490ca33 100644
--- a/gdb/varobj.c
+++ b/gdb/varobj.c
@@ -26,9 +26,12 @@
@@ -29758,21 +29968,36 @@ index fbe8ff8..a730095 100644
{
/* Try to compare the values. That requires that both
values are non-lazy. */
-@@ -1310,6 +1561,8 @@ install_new_value (struct varobj *var, struct value *value, int initial)
+@@ -1310,74 +1561,53 @@ install_new_value (struct varobj *var, struct value *value, int initial)
if (var->value != NULL && var->value != value)
value_free (var->value);
var->value = value;
+- if (var->print_value)
+- xfree (var->print_value);
+- var->print_value = print_value;
+ if (value != NULL)
+ value_incref (value);
- if (var->print_value)
- xfree (var->print_value);
- var->print_value = print_value;
-@@ -1319,65 +1572,32 @@ install_new_value (struct varobj *var, struct value *value, int initial)
+ if (value && value_lazy (value) && intentionally_not_fetched)
+ var->not_fetched = 1;
+ else
var->not_fetched = 0;
var->updated = 0;
+ install_new_value_visualizer (var);
+
++ /* If we installed a pretty-printer, re-compare the printed version
++ to see if the variable changed. */
++ if (var->pretty_printer)
++ {
++ xfree (print_value);
++ print_value = value_get_print_value (var->value, var->format, var);
++ if (!var->print_value || strcmp (var->print_value, print_value) != 0)
++ changed = 1;
++ }
++ if (var->print_value)
++ xfree (var->print_value);
++ var->print_value = print_value;
++
gdb_assert (!var->value || value_type (var->value));
return changed;
@@ -29850,7 +30075,7 @@ index fbe8ff8..a730095 100644
}
void
-@@ -1395,31 +1615,19 @@ varobj_set_visualizer (struct varobj *var, const char *visualizer)
+@@ -1395,31 +1625,19 @@ varobj_set_visualizer (struct varobj *var, const char *visualizer)
make_cleanup_py_decref (globals);
constructor = PyRun_String (visualizer, Py_eval_input, globals, globals);
@@ -29888,7 +30113,7 @@ index fbe8ff8..a730095 100644
do_cleanups (back_to);
#else
-@@ -1530,44 +1738,60 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
+@@ -1530,44 +1748,63 @@ VEC(varobj_update_result) *varobj_update (struct varobj **varp, int explicit)
/* We probably should not get children of a varobj that has a
pretty-printer, but for which -var-list-children was never
@@ -29918,11 +30143,14 @@ index fbe8ff8..a730095 100644
+ it as unchanged -- presumably, such varobj is not yet
+ expanded in the UI, so we need not bother getting
+ it. */
-+ if (varobj_has_more (v, 0))
-+ continue;
++ if (!varobj_has_more (v, 0))
++ {
++ update_dynamic_varobj_children (v, NULL, NULL, &dummy, 0, 0);
++ if (varobj_has_more (v, 0))
++ r.changed = 1;
++ }
+
-+ update_dynamic_varobj_children (v, NULL, NULL, &dummy, 0, 0);
-+ if (varobj_has_more (v, 0))
++ if (r.changed)
+ VEC_safe_push (varobj_update_result, result, &r);
+
+ continue;
@@ -29967,7 +30195,7 @@ index fbe8ff8..a730095 100644
continue;
}
}
-@@ -1855,7 +2079,12 @@ new_variable (void)
+@@ -1855,7 +2092,12 @@ new_variable (void)
var->frozen = 0;
var->not_fetched = 0;
var->children_requested = 0;
@@ -29980,7 +30208,7 @@ index fbe8ff8..a730095 100644
return var;
}
-@@ -1885,7 +2114,10 @@ free_variable (struct varobj *var)
+@@ -1885,7 +2127,10 @@ free_variable (struct varobj *var)
if (var->pretty_printer)
{
struct cleanup *cleanup = varobj_ensure_python_env (var);
@@ -29992,7 +30220,7 @@ index fbe8ff8..a730095 100644
do_cleanups (cleanup);
}
#endif
-@@ -1918,6 +2150,18 @@ make_cleanup_free_variable (struct varobj *var)
+@@ -1918,6 +2163,18 @@ make_cleanup_free_variable (struct varobj *var)
return make_cleanup (do_free_variable_cleanup, var);
}
@@ -30011,7 +30239,7 @@ index fbe8ff8..a730095 100644
/* This returns the type of the variable. It also skips past typedefs
to return the real type of the variable.
-@@ -2132,6 +2376,8 @@ value_of_root (struct varobj **var_handle, int *type_changed)
+@@ -2132,6 +2389,8 @@ value_of_root (struct varobj **var_handle, int *type_changed)
else
{
tmp_var->obj_name = xstrdup (var->obj_name);
@@ -30020,7 +30248,7 @@ index fbe8ff8..a730095 100644
varobj_delete (var, NULL, 0);
install_variable (tmp_var);
-@@ -2166,7 +2412,11 @@ static char *
+@@ -2166,7 +2425,11 @@ static char *
my_value_of_variable (struct varobj *var, enum varobj_display_formats format)
{
if (var->root->is_valid)
@@ -30033,7 +30261,7 @@ index fbe8ff8..a730095 100644
else
return NULL;
}
-@@ -2189,43 +2439,51 @@ value_get_print_value (struct value *value, enum varobj_display_formats format,
+@@ -2189,43 +2452,51 @@ value_get_print_value (struct value *value, enum varobj_display_formats format,
struct cleanup *back_to = varobj_ensure_python_env (var);
PyObject *value_formatter = var->pretty_printer;
@@ -30116,7 +30344,7 @@ index fbe8ff8..a730095 100644
}
do_cleanups (back_to);
}
-@@ -2954,10 +3212,7 @@ cplus_describe_child (struct varobj *parent, int index,
+@@ -2954,10 +3225,7 @@ cplus_describe_child (struct varobj *parent, int index,
*cname = xstrdup (TYPE_FIELD_NAME (type, index));
if (cvalue && value)
@@ -30128,7 +30356,7 @@ index fbe8ff8..a730095 100644
if (ctype)
{
-@@ -3163,6 +3418,19 @@ java_value_of_variable (struct varobj *var, enum varobj_display_formats format)
+@@ -3163,6 +3431,19 @@ java_value_of_variable (struct varobj *var, enum varobj_display_formats format)
return cplus_value_of_variable (var, format);
}
@@ -30148,7 +30376,7 @@ index fbe8ff8..a730095 100644
/* Iterate all the existing _root_ VAROBJs and call the FUNC callback for them
with an arbitrary caller supplied DATA pointer. */
-@@ -3180,6 +3448,43 @@ all_root_varobjs (void (*func) (struct varobj *var, void *data), void *data)
+@@ -3180,6 +3461,43 @@ all_root_varobjs (void (*func) (struct varobj *var, void *data), void *data)
(*func) (var_root->rootvar, data);
}
}
Index: gdb.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/gdb.spec,v
retrieving revision 1.381
retrieving revision 1.382
diff -u -p -r1.381 -r1.382
--- gdb.spec 1 Sep 2009 13:19:03 -0000 1.381
+++ gdb.spec 3 Sep 2009 19:45:38 -0000 1.382
@@ -14,7 +14,7 @@ Version: 6.8.50.20090818
# The release always contains a leading reserved number, start it at 1.
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
-Release: 7%{?_with_upstream:.upstream}%{?dist}
+Release: 8%{?_with_upstream:.upstream}%{?dist}
License: GPLv3+
Group: Development/Debuggers
@@ -829,6 +829,11 @@ fi
%endif
%changelog
+* Thu Sep 3 2009 Jan Kratochvil <jan.kratochvil at redhat.com> - 6.8.50.20090818-8
+- archer-jankratochvil-fedora12 commit: a081d2f12945e9468edd5f4341d3e945bd0fefe9
+ - [expr] Fix too slow lookups in large C++ programs (Sami Wagiaalla).
+ - [python] Fix varobj changed values reporting (GDB PR 10584, Tom Tromey).
+
* Tue Sep 1 2009 Jan Kratochvil <jan.kratochvil at redhat.com> - 6.8.50.20090818-7
- archer-jankratochvil-fedora12 commit: d25596676e8811b03f8c9aba6bbd04ebaa9ff5db
- [call-frame-cfa] Fix parsing CFA-relative frames (BZ 516627, Tom Tromey).
More information about the fedora-extras-commits
mailing list