diff --git a/gdb-archer.patch b/gdb-archer.patch
index 22a6912..619eef9 100644
--- a/gdb-archer.patch
+++ b/gdb-archer.patch
@@ -2,7 +2,7 @@ http://sourceware.org/gdb/wiki/ProjectArcher
http://sourceware.org/gdb/wiki/ArcherBranchManagement
GIT snapshot:
-commit b125345fb36abbb9bd00128e2093dc636a859da5
+commit 6817a81cd411acc9579f04dcc105e9bce72859ff
branch `archer' - the merge of branches:
archer-tromey-call-frame-cfa
@@ -3113,7 +3113,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..af0ba28 100644
+index d2d8f2e..db26a01 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,
@@ -3293,7 +3293,7 @@ index d2d8f2e..af0ba28 100644
if (sym != NULL)
return sym;
}
-@@ -320,25 +377,87 @@ lookup_namespace_scope (const char *name,
+@@ -320,25 +377,98 @@ lookup_namespace_scope (const char *name,
namespace = alloca (scope_len + 1);
strncpy (namespace, scope, scope_len);
namespace[scope_len] = '\0';
@@ -3330,6 +3330,16 @@ index d2d8f2e..af0ba28 100644
+ }
+}
+
++/* Used for cleanups to reset the "searched" flag incase
++ of an error. */
++
++static void
++reset_directive_searched (void *data)
++{
++ struct using_direct *direct = data;
++ direct->searched = 0;
++}
++
+/* Search for NAME by applying all import statements belonging
+ to BLOCK which are applicable in SCOPE. If DECLARATION_ONLY the search
+ is restricted to using declarations.
@@ -3362,11 +3372,11 @@ index d2d8f2e..af0ba28 100644
- const struct block *block,
- const domain_enum domain)
+cp_lookup_symbol_imports (const char *scope,
-+ const char *name,
-+ const struct block *block,
-+ const domain_enum domain,
-+ int declaration_only,
-+ int search_parents)
++ const char *name,
++ const struct block *block,
++ const domain_enum domain,
++ int declaration_only,
++ int search_parents)
{
- const struct using_direct *current;
- struct symbol *sym;
@@ -3374,6 +3384,7 @@ index d2d8f2e..af0ba28 100644
+ struct symbol *sym = NULL;
+ int directive_match;
+ int current_line;
++ struct cleanup *searched_cleanup;
+
+ if(!declaration_only)
+ /* First, try to find the symbol in the given namespace. */
@@ -3393,7 +3404,7 @@ index d2d8f2e..af0ba28 100644
names to the namespace we're searching in, see if we can find a
match by applying them. */
-@@ -346,39 +465,74 @@ cp_lookup_symbol_namespace (const char *namespace,
+@@ -346,39 +476,78 @@ cp_lookup_symbol_namespace (const char *namespace,
current != NULL;
current = current->next)
{
@@ -3416,6 +3427,8 @@ index d2d8f2e..af0ba28 100644
- block,
- domain);
+ current->searched = 1;
++ searched_cleanup = make_cleanup (reset_directive_searched, current);
++
+ /* If there is an import of a single declaration, compare the imported
+ declaration with the sought out name. If there is a match pass
+ current->import_src as NAMESPACE to direct the search towards the
@@ -3424,23 +3437,25 @@ index d2d8f2e..af0ba28 100644
+ {
+ if (strcmp (name, current->declaration) == 0)
+ {
-+ sym = cp_lookup_symbol_in_namespace (current->import_src,
-+ name,
-+ block,
-+ domain);
++ sym = cp_lookup_symbol_in_namespace (current->import_src,
++ name,
++ block,
++ domain);
+ }
++
++ current->searched = 0;
++ if (sym)
++ return sym;
++
++ continue;
+ }
+
+ if (declaration_only)
-+ {
-+ current->searched = 0;
-+ if (sym)
-+ {
-+ return sym;
-+ } else {
-+ continue;
-+ }
-+ }
++ {
++ current->searched = 0;
++ discard_cleanups (searched_cleanup);
++ continue;
++ }
+
+ if (strcmp (name, current->alias) == 0)
+ /* If the import is creating an alias and the alias matches the
@@ -3448,26 +3463,25 @@ index d2d8f2e..af0ba28 100644
+ search towards the aliased namespace */
+ {
+ sym = cp_lookup_symbol_in_namespace (scope,
-+ current->import_src,
-+ block,
-+ domain);
++ current->import_src,
++ block,
++ domain);
+ } else if (strcmp ("", current->alias) == 0){
+ /* If this import statement creates no alias, pass current->inner as
+ NAMESPACE to direct the search towards the imported namespace. */
+ sym = cp_lookup_symbol_imports (current->import_src,
-+ name,
-+ block,
-+ domain,
-+ 0,
-+ 0);
++ name,
++ block,
++ domain,
++ 0,
++ 0);
+ }
+
+ current->searched = 0;
++ discard_cleanups (searched_cleanup);
++
if (sym != NULL)
-- return sym;
-+ {
-+ return sym;
-+ }
+ return sym;
}
}
@@ -3496,7 +3510,7 @@ index d2d8f2e..af0ba28 100644
}
/* Look up NAME in BLOCK's static block and in global blocks. If
-@@ -388,17 +542,15 @@ cp_lookup_symbol_namespace (const char *namespace,
+@@ -388,17 +557,15 @@ cp_lookup_symbol_namespace (const char *namespace,
static struct symbol *
lookup_symbol_file (const char *name,
@@ -3515,7 +3529,7 @@ index d2d8f2e..af0ba28 100644
if (anonymous_namespace)
{
/* Symbols defined in anonymous namespaces have external linkage
-@@ -408,12 +560,11 @@ lookup_symbol_file (const char *name,
+@@ -408,12 +575,11 @@ lookup_symbol_file (const char *name,
const struct block *global_block = block_global_block (block);
if (global_block != NULL)
@@ -3530,7 +3544,7 @@ index d2d8f2e..af0ba28 100644
}
if (sym != NULL)
-@@ -434,6 +585,7 @@ lookup_symbol_file (const char *name,
+@@ -434,6 +600,7 @@ lookup_symbol_file (const char *name,
sym = lookup_possible_namespace_symbol (name);
if (sym != NULL)
return sym;
@@ -3538,7 +3552,7 @@ index d2d8f2e..af0ba28 100644
}
return NULL;
-@@ -461,9 +613,8 @@ cp_lookup_nested_type (struct type *parent_type,
+@@ -461,9 +628,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);
@@ -3549,7 +3563,7 @@ index d2d8f2e..af0ba28 100644
block,
VAR_DOMAIN);
if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF)
-@@ -709,7 +860,7 @@ check_one_possible_namespace_symbol (const char *name, int len,
+@@ -709,7 +875,7 @@ check_one_possible_namespace_symbol (const char *name, int len,
memcpy (name_copy, name, len);
name_copy[len] = '\0';
@@ -3558,7 +3572,7 @@ index d2d8f2e..af0ba28 100644
if (sym == NULL)
{
-@@ -749,7 +900,7 @@ lookup_possible_namespace_symbol (const char *name)
+@@ -749,7 +915,7 @@ lookup_possible_namespace_symbol (const char *name)
struct symbol *sym;
sym = lookup_block_symbol (get_possible_namespace_block (objfile),
@@ -23262,6 +23276,162 @@ index 0000000..5543757
+
+setup_kfail "gdb/10541" "*-*-*"
+gdb_test "print G::GF::FE::ex" "= 9999"
+diff --git a/gdb/testsuite/gdb.cp/namespace-stress-declarations.cc b/gdb/testsuite/gdb.cp/namespace-stress-declarations.cc
+new file mode 100644
+index 0000000..173e49b
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/namespace-stress-declarations.cc
+@@ -0,0 +1,93 @@
++int a;
++int b;
++int c;
++int d;
++int e;
++int f;
++int g;
++int h;
++int i;
++int j;
++int k;
++int l;
++int m;
++int n;
++int o;
++int p;
++int q;
++int r;
++int s;
++int t;
++int u;
++int v;
++int w;
++int x;
++int y;
++int z;
++
++namespace A
++{
++ int xyz;
++
++ using ::a;
++ using ::b;
++ using ::c;
++ using ::d;
++ using ::e;
++ using ::f;
++ using ::g;
++ using ::h;
++ using ::i;
++ using ::j;
++ using ::k;
++ using ::l;
++ using ::m;
++ using ::n;
++ using ::o;
++ using ::p;
++ using ::q;
++ using ::r;
++ using ::s;
++ using ::t;
++ using ::u;
++ using ::v;
++ using ::w;
++ using ::x;
++ using ::y;
++ using ::z;
++
++}
++
++using A::a;
++using A::b;
++using A::c;
++using A::d;
++using A::e;
++using A::f;
++using A::g;
++using A::h;
++using A::i;
++using A::j;
++using A::k;
++using A::l;
++using A::m;
++using A::n;
++using A::o;
++using A::p;
++using A::q;
++using A::r;
++using A::s;
++using A::t;
++using A::u;
++using A::v;
++using A::w;
++using A::x;
++using A::y;
++using A::z;
++
++using namespace A;
++
++int main ()
++{
++ return 0;
++}
+\ No newline at end of file
+diff --git a/gdb/testsuite/gdb.cp/namespace-stress-declarations.exp b/gdb/testsuite/gdb.cp/namespace-stress-declarations.exp
+new file mode 100644
+index 0000000..f22a14e
+--- /dev/null
++++ b/gdb/testsuite/gdb.cp/namespace-stress-declarations.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 .
++
++if $tracelevel then {
++ strace $tracelevel
++}
++
++set prms_id 0
++set bug_id 0
++
++set testfile namespace-stress-declarations
++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 fakex" "No symbol \"fakex\" in current context."
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
@@ -25457,10 +25627,10 @@ index 495ae45..d08d7a4 100644
set command "next"
diff --git a/gdb/testsuite/gdb.java/jnpe.exp b/gdb/testsuite/gdb.java/jnpe.exp
new file mode 100644
-index 0000000..74d4d58
+index 0000000..e71391e
--- /dev/null
+++ b/gdb/testsuite/gdb.java/jnpe.exp
-@@ -0,0 +1,72 @@
+@@ -0,0 +1,77 @@
+# Copyright 2009 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
@@ -25483,10 +25653,10 @@ index 0000000..74d4d58
+load_lib "java.exp"
+
+set testfile "jnpe"
-+set srcfile ${srcdir}/$subdir/${testfile}.java
++set srcfile ${testfile}.java
+set binfile ${objdir}/${subdir}/${testfile}
-+if { [compile_java_from_source ${srcfile} ${binfile} "-g"] != "" } {
-+ untested "Couldn't compile ${srcfile}"
++if { [compile_java_from_source ${srcdir}/$subdir/${srcfile} ${binfile} "-g"] != "" } {
++ untested "Couldn't compile ${srcdir}/$subdir/${srcfile}"
+ return -1
+}
+
@@ -25504,7 +25674,7 @@ index 0000000..74d4d58
+gdb_test "break $testfile.java:$line" ""
+
+gdb_test "run" \
-+ "Current language.*java" \
++ "// break here.*" \
+ "run java next-over-throw"
+
+# See whether we have the needed unwinder hooks.
@@ -25513,9 +25683,10 @@ index 0000000..74d4d58
+ -re "= .*_Unwind_DebugHook.*\r\n$gdb_prompt $" {
+ pass "check for unwinder hook in java"
+ }
-+ -re "No symbol .* in current context.\r\n$gdb_prompt $" {
++ -re "No symbol .* in current context.?\r\n$gdb_prompt $" {
+ # Pass the test so we don't get bogus fails in the results.
-+ pass "check for unwinder hook in java"
++ setup_xfail *-*-*
++ fail "check for unwinder hook in java"
+ set ok 0
+ }
+}
@@ -25528,14 +25699,18 @@ index 0000000..74d4d58
+ "SIGSEGV.*fault" \
+ "disable SIGSEGV for next-over-NPE"
+
-+# We sometimes stop at line 37, not line 35. This seems to be a gcj
-+# oddity -- another next will solve it.
++# The line where we stop differ according to gcj; check just we did not already
++# execute the catch point.
++
+gdb_test "next" \
-+ "3\[57\].*" \
++ "" \
+ "next over NPE"
++
++gdb_breakpoint [gdb_get_line_number "catch point"]
++gdb_continue_to_breakpoint "catch point" ".*// catch point.*"
diff --git a/gdb/testsuite/gdb.java/jnpe.java b/gdb/testsuite/gdb.java/jnpe.java
new file mode 100644
-index 0000000..ffca3ab
+index 0000000..3524830
--- /dev/null
+++ b/gdb/testsuite/gdb.java/jnpe.java
@@ -0,0 +1,38 @@
@@ -25573,7 +25748,7 @@ index 0000000..ffca3ab
+ }
+ catch (NullPointerException n)
+ {
-+ System.out.println ("success");
++ System.out.println ("success"); // catch point
+ }
+ }
+}
diff --git a/gdb.spec b/gdb.spec
index 4c8a1c4..0b5305c 100644
--- a/gdb.spec
+++ b/gdb.spec
@@ -14,7 +14,7 @@ Version: 7.0
# 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
@@ -884,6 +884,10 @@ fi
%endif
%changelog
+* Thu Dec 3 2009 Jan Kratochvil - 7.0-8.fc12
+- Fix slowness/hang when printing some variables (Sami Wagiaalla, BZ 541093).
+- archer-jankratochvil-fedora12 commit: 6817a81cd411acc9579f04dcc105e9bce72859ff
+
* Wed Nov 25 2009 Jan Kratochvil - 7.0-7.fc12
- Support GNU IFUNCs - indirect functions (BZ 539590).
- Fix bp conditionals [bp_location-accel] regression (Phil Muldoon, BZ 538626).