diff --git a/gdb-physname-pr11734-1of2.patch b/gdb-physname-pr11734-1of2.patch
new file mode 100644
index 0000000..f2a69b7
--- /dev/null
+++ b/gdb-physname-pr11734-1of2.patch
@@ -0,0 +1,619 @@
+http://sourceware.org/ml/gdb-patches/2010-12/msg00263.html
+
+Index: gdb-7.2.50.20110206/gdb/cp-support.c
+===================================================================
+--- gdb-7.2.50.20110206.orig/gdb/cp-support.c 2011-02-06 23:12:16.000000000 +0100
++++ gdb-7.2.50.20110206/gdb/cp-support.c 2011-02-06 23:12:22.000000000 +0100
+@@ -35,6 +35,7 @@
+ #include "exceptions.h"
+ #include "expression.h"
+ #include "value.h"
++#include "language.h"
+
+ #include "safe-ctype.h"
+
+@@ -936,7 +937,8 @@ make_symbol_overload_list_qualified (con
+ ALL_OBJFILES (objfile)
+ {
+ if (objfile->sf)
+- objfile->sf->qf->expand_symtabs_for_function (objfile, func_name);
++ objfile->sf->qf->expand_symtabs_for_function (objfile, func_name,
++ language_cplus);
+ }
+
+ /* Search upwards from currently selected frame (so that we can
+Index: gdb-7.2.50.20110206/gdb/dwarf2read.c
+===================================================================
+--- gdb-7.2.50.20110206.orig/gdb/dwarf2read.c 2011-02-06 23:12:22.000000000 +0100
++++ gdb-7.2.50.20110206/gdb/dwarf2read.c 2011-02-06 23:12:22.000000000 +0100
+@@ -2373,7 +2373,8 @@ dw2_lookup_symtab (struct objfile *objfi
+
+ static struct symtab *
+ dw2_lookup_symbol (struct objfile *objfile, int block_index,
+- const char *name, domain_enum domain)
++ const char *name, domain_enum domain,
++ enum language language)
+ {
+ /* We do all the work in the pre_expand_symtabs_matching hook
+ instead. */
+@@ -2449,7 +2450,8 @@ dw2_relocate (struct objfile *objfile, s
+
+ static void
+ dw2_expand_symtabs_for_function (struct objfile *objfile,
+- const char *func_name)
++ const char *func_name,
++ enum language language)
+ {
+ dw2_do_expand_symtabs_matching (objfile, func_name);
+ }
+@@ -2509,7 +2511,8 @@ dw2_expand_symtabs_with_filename (struct
+ }
+
+ static const char *
+-dw2_find_symbol_file (struct objfile *objfile, const char *name)
++dw2_find_symbol_file (struct objfile *objfile, const char *name,
++ enum language language)
+ {
+ struct dwarf2_per_cu_data *per_cu;
+ offset_type *vec;
+Index: gdb-7.2.50.20110206/gdb/linespec.c
+===================================================================
+--- gdb-7.2.50.20110206.orig/gdb/linespec.c 2011-02-06 23:12:16.000000000 +0100
++++ gdb-7.2.50.20110206/gdb/linespec.c 2011-02-06 23:12:26.000000000 +0100
+@@ -1226,7 +1226,7 @@ decode_objc (char **argptr, int funfirst
+
+ static struct symtabs_and_lines
+ decode_compound (char **argptr, int funfirstline, char ***canonical,
+- char *saved_arg, char *p, int *not_found_ptr)
++ char *the_real_saved_arg, char *p, int *not_found_ptr)
+ {
+ struct symtabs_and_lines values;
+ char *p2;
+@@ -1237,7 +1237,23 @@ decode_compound (char **argptr, int funf
+ struct symbol *sym_class;
+ struct type *t;
+ char *saved_java_argptr = NULL;
++ char *saved_arg;
+
++ /* THE_REAL_SAVED_ARG cannot be altered, so make a copy that can be. */
++ saved_arg = alloca (strlen (the_real_saved_arg) + 1);
++ strcpy (saved_arg, the_real_saved_arg);
++
++ /* If the user specified "'foo::bar(baz)'" (note the quotes -- often
++ added to workaround completer issues) -- saved_arg will be
++ encapsulated in single-quotes. They are superfluous, so just strip
++ them off. */
++ if (*saved_arg == '\'')
++ {
++ char *end = skip_quoted (saved_arg);
++ memmove (saved_arg, saved_arg + 1, end - saved_arg);
++ memmove (end - 2, end, strlen (saved_arg) + 1);
++ }
++
+ /* First check for "global" namespace specification, of the form
+ "::foo". If found, skip over the colons and jump to normal
+ symbol processing. I.e. the whole line specification starts with
+@@ -1489,7 +1505,7 @@ decode_compound (char **argptr, int funf
+ up. The quotes are important if copy is empty. */
+ if (not_found_ptr)
+ *not_found_ptr = 1;
+- cplusplus_error (saved_arg,
++ cplusplus_error (the_real_saved_arg,
+ "Can't find member of namespace, "
+ "class, struct, or union named \"%s\"\n",
+ copy);
+Index: gdb-7.2.50.20110206/gdb/psymtab.c
+===================================================================
+--- gdb-7.2.50.20110206.orig/gdb/psymtab.c 2011-02-06 23:12:16.000000000 +0100
++++ gdb-7.2.50.20110206/gdb/psymtab.c 2011-02-06 23:12:54.000000000 +0100
+@@ -33,6 +33,8 @@
+ #include "readline/readline.h"
+ #include "gdb_regex.h"
+ #include "dictionary.h"
++#include "language.h"
++#include "cp-support.h"
+
+ #ifndef DEV_TTY
+ #define DEV_TTY "/dev/tty"
+@@ -55,7 +57,8 @@ static struct partial_symbol *match_part
+
+ static struct partial_symbol *lookup_partial_symbol (struct partial_symtab *,
+ const char *, int,
+- domain_enum);
++ domain_enum,
++ enum language);
+
+ static char *psymtab_to_fullname (struct partial_symtab *ps);
+
+@@ -418,15 +421,35 @@ fixup_psymbol_section (struct partial_sy
+ static struct symtab *
+ lookup_symbol_aux_psymtabs (struct objfile *objfile,
+ int block_index, const char *name,
+- const domain_enum domain)
++ const domain_enum domain, enum language language)
+ {
+ struct partial_symtab *ps;
+ const int psymtab_index = (block_index == GLOBAL_BLOCK ? 1 : 0);
+
+ ALL_OBJFILE_PSYMTABS (objfile, ps)
+ {
+- if (!ps->readin && lookup_partial_symbol (ps, name, psymtab_index, domain))
+- return PSYMTAB_TO_SYMTAB (ps);
++ if (!ps->readin
++ && lookup_partial_symbol (ps, name, psymtab_index, domain, language))
++ {
++ struct symbol *sym;
++ struct symtab *stab = PSYMTAB_TO_SYMTAB (ps);
++ sym = NULL;
++
++ /* Some caution must be observed with overloaded functions
++ and methods, since the psymtab will not contain any overload
++ information (but NAME might contain it). */
++ if (stab->primary)
++ {
++ struct blockvector *bv = BLOCKVECTOR (stab);
++ struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
++ sym = lookup_block_symbol (block, name, domain);
++ }
++
++ if (sym && strcmp_iw (SYMBOL_SEARCH_NAME (sym), name) == 0)
++ return stab;
++
++ /* Keep looking through other psymtabs. */
++ }
+ }
+
+ return NULL;
+@@ -519,22 +542,58 @@ pre_expand_symtabs_matching_psymtabs (st
+ /* Nothing. */
+ }
+
++/* Returns the name used to search psymtabs. Unlike symtabs, psymtabs do
++ not contain any method/function instance information (since this would
++ force reading type information while reading psymtabs). Therefore,
++ if NAME contains overload information, it must be stripped before searching
++ psymtabs.
++
++ The caller is responsible for freeing the return result. */
++
++static const char *
++psymtab_search_name (const char *name, enum language language)
++{
++ switch (language)
++ {
++ case language_cplus:
++ case language_java:
++ {
++ if (strchr (name, '('))
++ {
++ char *ret = cp_remove_params (name);
++ if (ret)
++ return ret;
++ }
++ }
++
++ default:
++ break;
++ }
++
++ return xstrdup (name);
++}
++
+ /* Look, in partial_symtab PST, for symbol whose natural name is NAME.
+ Check the global symbols if GLOBAL, the static symbols if not. */
+
+ static struct partial_symbol *
+ lookup_partial_symbol (struct partial_symtab *pst, const char *name,
+- int global, domain_enum domain)
++ int global, domain_enum domain, enum language language)
+ {
+ struct partial_symbol **start, **psym;
+ struct partial_symbol **top, **real_top, **bottom, **center;
+ int length = (global ? pst->n_global_syms : pst->n_static_syms);
+ int do_linear_search = 1;
++ const char *search_name;
++ struct cleanup *cleanup;
+
+ if (length == 0)
+ {
+ return (NULL);
+ }
++
++ search_name = psymtab_search_name (name, language);
++ cleanup = make_cleanup (xfree, (void *) search_name);
+ start = (global ?
+ pst->objfile->global_psymbols.list + pst->globals_offset :
+ pst->objfile->static_psymbols.list + pst->statics_offset);
+@@ -563,7 +622,8 @@ lookup_partial_symbol (struct partial_sy
+ {
+ do_linear_search = 1;
+ }
+- if (strcmp_iw_ordered (SYMBOL_SEARCH_NAME (*center), name) >= 0)
++ if (strcmp_iw_ordered (SYMBOL_SEARCH_NAME (*center),
++ search_name) >= 0)
+ {
+ top = center;
+ }
+@@ -577,11 +637,14 @@ lookup_partial_symbol (struct partial_sy
+ _("failed internal consistency check"));
+
+ while (top <= real_top
+- && SYMBOL_MATCHES_SEARCH_NAME (*top, name))
++ && SYMBOL_MATCHES_SEARCH_NAME (*top, search_name))
+ {
+ if (symbol_matches_domain (SYMBOL_LANGUAGE (*top),
+ SYMBOL_DOMAIN (*top), domain))
+- return (*top);
++ {
++ do_cleanups (cleanup);
++ return (*top);
++ }
+ top++;
+ }
+ }
+@@ -595,11 +658,15 @@ lookup_partial_symbol (struct partial_sy
+ {
+ if (symbol_matches_domain (SYMBOL_LANGUAGE (*psym),
+ SYMBOL_DOMAIN (*psym), domain)
+- && SYMBOL_MATCHES_SEARCH_NAME (*psym, name))
+- return (*psym);
++ && SYMBOL_MATCHES_SEARCH_NAME (*psym, search_name))
++ {
++ do_cleanups (cleanup);
++ return (*psym);
++ }
+ }
+ }
+
++ do_cleanups (cleanup);
+ return (NULL);
+ }
+
+@@ -911,7 +978,8 @@ dump_psymtabs_for_objfile (struct objfil
+ by matching FUNC_NAME. Make sure we read that symbol table in. */
+
+ static void
+-read_symtabs_for_function (struct objfile *objfile, const char *func_name)
++read_symtabs_for_function (struct objfile *objfile, const char *func_name,
++ enum language language)
+ {
+ struct partial_symtab *ps;
+
+@@ -920,9 +988,9 @@ read_symtabs_for_function (struct objfil
+ if (ps->readin)
+ continue;
+
+- if ((lookup_partial_symbol (ps, func_name, 1, VAR_DOMAIN)
++ if ((lookup_partial_symbol (ps, func_name, 1, VAR_DOMAIN, language)
+ != NULL)
+- || (lookup_partial_symbol (ps, func_name, 0, VAR_DOMAIN)
++ || (lookup_partial_symbol (ps, func_name, 0, VAR_DOMAIN, language)
+ != NULL))
+ psymtab_to_symtab (ps);
+ }
+@@ -1042,13 +1110,14 @@ psymtab_to_fullname (struct partial_symt
+ }
+
+ static const char *
+-find_symbol_file_from_partial (struct objfile *objfile, const char *name)
++find_symbol_file_from_partial (struct objfile *objfile, const char *name,
++ enum language language)
+ {
+ struct partial_symtab *pst;
+
+ ALL_OBJFILE_PSYMTABS (objfile, pst)
+ {
+- if (lookup_partial_symbol (pst, name, 1, VAR_DOMAIN))
++ if (lookup_partial_symbol (pst, name, 1, VAR_DOMAIN, language))
+ return pst->filename;
+ }
+ return NULL;
+Index: gdb-7.2.50.20110206/gdb/symfile.h
+===================================================================
+--- gdb-7.2.50.20110206.orig/gdb/symfile.h 2011-02-06 23:12:16.000000000 +0100
++++ gdb-7.2.50.20110206/gdb/symfile.h 2011-02-06 23:12:22.000000000 +0100
+@@ -167,14 +167,15 @@ struct quick_symbol_functions
+ /* Check to see if the symbol is defined in a "partial" symbol table
+ of OBJFILE. KIND should be either GLOBAL_BLOCK or STATIC_BLOCK,
+ depending on whether we want to search global symbols or static
+- symbols. NAME is the name of the symbol to look for. DOMAIN
+- indicates what sort of symbol to search for.
++ symbols. NAME (valid in LANGUAGE) is the name of the symbol to look for.
++ DOMAIN indicates what sort of symbol to search for.
+
+ Returns the newly-expanded symbol table in which the symbol is
+ defined, or NULL if no such symbol table exists. */
+ struct symtab *(*lookup_symbol) (struct objfile *objfile,
+ int kind, const char *name,
+- domain_enum domain);
++ domain_enum domain,
++ enum language language);
+
+ /* This is called to expand symbol tables before looking up a
+ symbol. A backend can choose to implement this and then have its
+@@ -200,10 +201,11 @@ struct quick_symbol_functions
+ struct section_offsets *new_offsets,
+ struct section_offsets *delta);
+
+- /* Find all the symbols in OBJFILE named FUNC_NAME, and ensure that
+- the corresponding symbol tables are loaded. */
++ /* Find all the symbols in OBJFILE named FUNC_NAME (valid in LANGUAGE),
++ and ensure that the corresponding symbol tables are loaded. */
+ void (*expand_symtabs_for_function) (struct objfile *objfile,
+- const char *func_name);
++ const char *func_name,
++ enum language language);
+
+ /* Read all symbol tables associated with OBJFILE. */
+ void (*expand_all_symtabs) (struct objfile *objfile);
+@@ -217,8 +219,10 @@ struct quick_symbol_functions
+ const char *filename);
+
+ /* Return the file name of the file holding the symbol in OBJFILE
+- named NAME. If no such symbol exists in OBJFILE, return NULL. */
+- const char *(*find_symbol_file) (struct objfile *objfile, const char *name);
++ named NAME (valid in LANGUAGE). If no such symbol exists in OBJFILE,
++ return NULL. */
++ const char *(*find_symbol_file) (struct objfile *objfile, const char *name,
++ enum language language);
+
+ /* Find global or static symbols in all tables that are in NAMESPACE
+ and for which MATCH (symbol name, NAME) == 0, passing each to
+Index: gdb-7.2.50.20110206/gdb/symtab.c
+===================================================================
+--- gdb-7.2.50.20110206.orig/gdb/symtab.c 2011-02-06 23:12:16.000000000 +0100
++++ gdb-7.2.50.20110206/gdb/symtab.c 2011-02-06 23:12:22.000000000 +0100
+@@ -1380,7 +1380,8 @@ lookup_symbol_aux_quick (struct objfile
+
+ if (!objfile->sf)
+ return NULL;
+- symtab = objfile->sf->qf->lookup_symbol (objfile, kind, name, domain);
++ symtab = objfile->sf->qf->lookup_symbol (objfile, kind, name, domain,
++ current_language->la_language);
+ if (!symtab)
+ return NULL;
+
+@@ -1554,7 +1555,8 @@ basic_lookup_transparent_type_quick (str
+
+ if (!objfile->sf)
+ return NULL;
+- symtab = objfile->sf->qf->lookup_symbol (objfile, kind, name, STRUCT_DOMAIN);
++ symtab = objfile->sf->qf->lookup_symbol (objfile, kind, name, STRUCT_DOMAIN,
++ current_language->la_language);
+ if (!symtab)
+ return NULL;
+
+@@ -1686,7 +1688,8 @@ find_main_filename (void)
+
+ if (!objfile->sf)
+ continue;
+- result = objfile->sf->qf->find_symbol_file (objfile, name);
++ result = objfile->sf->qf->find_symbol_file (objfile, name,
++ current_language->la_language);
+ if (result)
+ return result;
+ }
+Index: gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr11734-1.cc
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr11734-1.cc 2011-02-06 23:12:22.000000000 +0100
+@@ -0,0 +1,30 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++ Copyright 2010 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 .
++
++ Please email any bugs, comments, and/or additions to this file to:
++ bug-gdb@gnu.org */
++
++#include "pr11734.h"
++
++int
++main ()
++{
++ pr11734 *p = new pr11734;
++ p->foo ();
++ return 0;
++}
++
+Index: gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr11734-2.cc
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr11734-2.cc 2011-02-06 23:12:22.000000000 +0100
+@@ -0,0 +1,27 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++ Copyright 2010 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 .
++
++ Please email any bugs, comments, and/or additions to this file to:
++ bug-gdb@gnu.org */
++
++#include "pr11734.h"
++
++void
++pr11734::foo(void)
++{
++}
++
+Index: gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr11734-3.cc
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr11734-3.cc 2011-02-06 23:12:22.000000000 +0100
+@@ -0,0 +1,27 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++ Copyright 2010 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 .
++
++ Please email any bugs, comments, and/or additions to this file to:
++ bug-gdb@gnu.org */
++
++#include "pr11734.h"
++
++void
++pr11734::foo (int a)
++{
++}
++
+Index: gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr11734-4.cc
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr11734-4.cc 2011-02-06 23:12:22.000000000 +0100
+@@ -0,0 +1,27 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++ Copyright 2010 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 .
++
++ Please email any bugs, comments, and/or additions to this file to:
++ bug-gdb@gnu.org */
++
++#include "pr11734.h"
++
++void
++pr11734::foo (char *a)
++{
++}
++
+Index: gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr11734.exp
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr11734.exp 2011-02-06 23:12:22.000000000 +0100
+@@ -0,0 +1,55 @@
++# Copyright 2010 Free Software Foundation, Inc.
++#
++# Contributed by Red Hat, originally written by Keith Seitz.
++#
++# 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 .
++
++# This file is part of the gdb testsuite.
++
++if { [skip_cplus_tests] } { continue }
++
++set testfile "pr11734"
++set class $testfile
++
++set srcfiles {}
++for {set i 1} {$i < 5} {incr i} {
++ lappend srcfiles $testfile-$i.cc
++}
++
++prepare_for_testing pr11734 $testfile $srcfiles {c++ debug}
++
++if {![runto_main]} {
++ perror "couldn't run to breakpoint"
++ continue
++}
++
++# An array holding the overload types for the method pr11734::foo. The
++# first element is the overloaded method parameter. The second element
++# is the expected source file number, e.g. "pr11734-?.cc".
++array set tests {
++ "char*" 4
++ "int" 3
++ "" 2
++}
++
++# Test each overload instance twice: once quoted, once unquoted
++foreach ovld [array names tests] {
++ set method "${class}::foo\($ovld\)"
++ set result "Breakpoint (\[0-9\]).*file .*/$class-$tests($ovld).*"
++ gdb_test "break $method" $result
++ gdb_test "break '$method'" $result
++}
++
++gdb_exit
++return 0
+Index: gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr11734.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr11734.h 2011-02-06 23:12:22.000000000 +0100
+@@ -0,0 +1,28 @@
++/* This testcase is part of GDB, the GNU debugger.
++
++ Copyright 2010 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 .
++
++ Please email any bugs, comments, and/or additions to this file to:
++ bug-gdb@gnu.org */
++
++class pr11734
++{
++ public:
++ void foo ();
++ void foo (int);
++ void foo (char *);
++};
++
diff --git a/gdb-physname-pr11734-2of2.patch b/gdb-physname-pr11734-2of2.patch
new file mode 100644
index 0000000..b3eec9f
--- /dev/null
+++ b/gdb-physname-pr11734-2of2.patch
@@ -0,0 +1,18 @@
+http://sourceware.org/ml/gdb-patches/2011-01/msg00460.html
+
+Index: gdb-7.2/gdb/linespec.c
+===================================================================
+--- gdb-7.2.orig/gdb/linespec.c 2011-02-03 22:59:46.000000000 +0100
++++ gdb-7.2/gdb/linespec.c 2011-02-03 23:03:28.000000000 +0100
+@@ -1230,7 +1230,10 @@ decode_compound (char **argptr, int funf
+ {
+ char *end = skip_quoted (saved_arg);
+ memmove (saved_arg, saved_arg + 1, end - saved_arg);
+- memmove (end - 2, end, strlen (saved_arg) + 1);
++ if (&end[-2] >= saved_arg && end[-2] == '\'')
++ memmove (end - 2, end, strlen (end) + 1);
++ else
++ memmove (end - 1, end, strlen (end) + 1);
+ }
+
+ /* First check for "global" namespace specification, of the form
diff --git a/gdb-physname-pr12273.patch b/gdb-physname-pr12273.patch
new file mode 100644
index 0000000..ccec62b
--- /dev/null
+++ b/gdb-physname-pr12273.patch
@@ -0,0 +1,207 @@
+http://sourceware.org/ml/gdb-patches/2010-12/msg00264.html
+
+Index: gdb-7.2.50.20110206/gdb/linespec.c
+===================================================================
+--- gdb-7.2.50.20110206.orig/gdb/linespec.c 2011-02-06 23:06:26.000000000 +0100
++++ gdb-7.2.50.20110206/gdb/linespec.c 2011-02-06 23:08:23.000000000 +0100
+@@ -1057,6 +1057,10 @@ locate_first_half (char **argptr, int *i
+ error (_("malformed template specification in command"));
+ p = temp_end;
+ }
++
++ if (p[0] == '(')
++ p = find_method_overload_end (p);
++
+ /* Check for a colon and a plus or minus and a [ (which
+ indicates an Objective-C method). */
+ if (is_objc_method_format (p))
+@@ -1272,8 +1276,10 @@ decode_compound (char **argptr, int funf
+ find_method.
+
+ 2) AAA::inA isn't the name of a class. In that case, either the
+- user made a typo or AAA::inA is the name of a namespace.
+- Either way, we just look up AAA::inA::fun with lookup_symbol.
++ user made a typo, AAA::inA is the name of a namespace, or it is
++ the name of a minimal symbol.
++ We just look up AAA::inA::fun with lookup_symbol. If that fails,
++ try lookup_minimal_symbol.
+
+ Thus, our first task is to find everything before the last set of
+ double-colons and figure out if it's the name of a class. So we
+@@ -1294,6 +1300,8 @@ decode_compound (char **argptr, int funf
+
+ while (1)
+ {
++ static char *break_characters = " \t\'(";
++
+ /* Move pointer up to next possible class/namespace token. */
+
+ p = p2 + 1; /* Restart with old value +1. */
+@@ -1304,8 +1312,7 @@ decode_compound (char **argptr, int funf
+ /* PASS2: p2->"::fun", p->":fun" */
+
+ /* Move pointer ahead to next double-colon. */
+- while (*p && (p[0] != ' ') && (p[0] != '\t') && (p[0] != '\'')
+- && (*p != '('))
++ while (*p && strchr (break_characters, *p) == NULL)
+ {
+ if (current_language->la_language == language_cplus)
+ p += cp_validate_operator (p);
+@@ -1329,9 +1336,12 @@ decode_compound (char **argptr, int funf
+ else if ((p[0] == ':') && (p[1] == ':'))
+ break; /* Found double-colon. */
+ else
+- /* PASS2: We'll keep getting here, until p->"", at which point
+- we exit this loop. */
+- p++;
++ {
++ /* PASS2: We'll keep getting here, until P points to one of the
++ break characters, at which point we exit this loop. */
++ if (strchr (break_characters, *p) == NULL)
++ p++;
++ }
+ }
+
+ if (*p != ':')
+@@ -1340,7 +1350,7 @@ decode_compound (char **argptr, int funf
+ unsuccessfully all the components of the
+ string, and p->""(PASS2). */
+
+- /* We get here if p points to ' ', '\t', '\'', "::" or ""(i.e
++ /* We get here if p points to one of the break characters or ""(i.e
+ string ended). */
+ /* Save restart for next time around. */
+ p2 = p;
+@@ -1491,6 +1501,18 @@ decode_compound (char **argptr, int funf
+ /* We couldn't find a class, so we're in case 2 above. We check the
+ entire name as a symbol instead. */
+
++ if (current_language->la_language == language_cplus
++ || current_language->la_language == language_java)
++ {
++ char *paren = strchr (p, '(');
++ if (paren != NULL)
++ p = find_method_overload_end (paren);
++
++ /* Make sure we keep important kewords like "const" */
++ if (strncmp (p, " const", 6) == 0)
++ p += 6;
++ }
++
+ copy = (char *) alloca (p - saved_arg2 + 1);
+ memcpy (copy, saved_arg2, p - saved_arg2);
+ /* Note: if is_quoted should be true, we snuff out quote here
+@@ -1503,9 +1525,18 @@ decode_compound (char **argptr, int funf
+ sym = lookup_symbol (copy, 0, VAR_DOMAIN, 0);
+ if (sym)
+ return symbol_found (funfirstline, canonical, copy, sym, NULL);
++ else
++ {
++ struct minimal_symbol *msym;
++
++ /* Couldn't find any interpretation as classes/namespaces. As a last
++ resort, try the minimal symbol tables. */
++ msym = lookup_minimal_symbol (copy, NULL, NULL);
++ if (msym != NULL)
++ return minsym_found (funfirstline, msym);
++ }
+
+- /* Couldn't find any interpretation as classes/namespaces, so give
+- up. The quotes are important if copy is empty. */
++ /* Couldn't find a minimal symbol, either, so give up. */
+ if (not_found_ptr)
+ *not_found_ptr = 1;
+ cplusplus_error (the_real_saved_arg,
+Index: gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr12273.cc
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr12273.cc 2011-02-06 23:07:19.000000000 +0100
+@@ -0,0 +1,37 @@
++/* This test case is part of GDB, the GNU debugger.
++
++ Copyright 2010 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 . */
++
++template
++class GDB
++{
++ public:
++ static int simple (void) { return 0; }
++ static int harder (T a) { return 1; }
++ template
++ static X even_harder (T a) { return static_cast (a); }
++ int operator == (GDB const& other)
++ { return 1; }
++};
++
++int main(int argc, char **argv)
++{
++ GDB a, b;
++ if (a == b)
++ return GDB::harder('a') + GDB::harder(3)
++ + GDB::even_harder ('a');
++ return GDB::simple ();
++}
+Index: gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr12273.exp
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ gdb-7.2.50.20110206/gdb/testsuite/gdb.cp/pr12273.exp 2011-02-06 23:07:19.000000000 +0100
+@@ -0,0 +1,46 @@
++# Copyright 2010 Free Software Foundation, Inc.
++#
++# Contributed by Red Hat, originally written by Keith Seitz.
++#
++# 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 .
++
++# This file is part of the gdb testsuite.
++
++if {[skip_cplus_tests]} { continue }
++
++set testfile "pr12273"
++# Do NOT compile with debug flag.
++prepare_for_testing pr12273 $testfile $testfile.cc {c++}
++
++gdb_test_no_output "set language c++"
++
++# A list of minimal symbol names to check.
++# Note that GDB::even_harder(char) is quoted and includes
++# the return type. This is necessary because this is the demangled name
++# of the minimal symbol.
++set min_syms [list \
++ "GDB::operator ==" \
++ "GDB::operator==(GDB const&)" \
++ "GDB::harder(char)" \
++ "GDB::harder(int)" \
++ {"int GDB::even_harder(char)"} \
++ "GDB::simple()"]
++
++foreach sym $min_syms {
++ if {[gdb_breakpoint $sym]} {
++ pass "setting breakpoint at $sym"
++ }
++}
++
++gdb_exit
diff --git a/gdb.spec b/gdb.spec
index fcf60f3..3a5b28a 100644
--- a/gdb.spec
+++ b/gdb.spec
@@ -27,7 +27,7 @@ Version: 7.2.50.20110206
# 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: 17%{?_with_upstream:.upstream}%{?dist}
+Release: 18%{?_with_upstream:.upstream}%{?dist}
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and GFDL and BSD and Public Domain
Group: Development/Debuggers
@@ -552,6 +552,11 @@ Patch556: gdb-gcc46-stdarg-prologue.patch
# =push
Patch557: gdb-python-newbacktrace.patch
+# Fix regressions on C++ names resolving (PR 11734, PR 12273, Keith Seitz).
+Patch565: gdb-physname-pr11734-1of2.patch
+Patch566: gdb-physname-pr11734-2of2.patch
+Patch567: gdb-physname-pr12273.patch
+
BuildRequires: ncurses-devel%{?_isa} texinfo gettext flex bison expat-devel%{?_isa}
Requires: readline%{?_isa}
BuildRequires: readline-devel%{?_isa}
@@ -805,6 +810,9 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
%patch555 -p1
%patch556 -p1
%patch557 -p1
+%patch565 -p1
+%patch566 -p1
+%patch567 -p1
%patch390 -p1
%patch393 -p1
@@ -1211,7 +1219,10 @@ fi
%endif
%changelog
-* Thu Jan 27 2011 Jan Kratochvil - 7.2.50.20110206-17.fc15
+* Sun Feb 6 2011 Jan Kratochvil - 7.2.50.20110206-18.fc15
+- Fix regressions on C++ names resolving (PR 11734, PR 12273, Keith Seitz).
+
+* Sun Feb 6 2011 Jan Kratochvil - 7.2.50.20110206-17.fc15
- Rebase to FSF GDB 7.2.50.20110206 (which is a 7.3 pre-release).
* Thu Jan 27 2011 Jan Kratochvil - 7.2.50.20110125-16.fc15