rpms/gdb/devel gdb-solib-display.patch, NONE, 1.1 gdb-unused-revert.patch, NONE, 1.1 .cvsignore, 1.45, 1.46 gdb-6.3-readnever-20050907.patch, 1.10, 1.11 gdb-6.3-security-errata-20050610.patch, 1.8, 1.9 gdb-6.7-testsuite-stable-results.patch, 1.9, 1.10 gdb-6.8-inlining-addon.patch, 1.11, 1.12 gdb-archer.patch, 1.35, 1.36 gdb-bz539590-gnu-ifunc.patch, 1.2, 1.3 gdb.spec, 1.394, 1.395 sources, 1.44, 1.45 gdb-empty-namespace.patch, 1.2, NONE gdb-testsuite-lineno.patch, 1.1, NONE gdb-watchpoint-cond-gone.patch, 1.1, NONE

Jan Kratochvil jkratoch at fedoraproject.org
Thu Jan 21 16:09:11 UTC 2010


Author: jkratoch

Update of /cvs/pkgs/rpms/gdb/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv8594

Modified Files:
	.cvsignore gdb-6.3-readnever-20050907.patch 
	gdb-6.3-security-errata-20050610.patch 
	gdb-6.7-testsuite-stable-results.patch 
	gdb-6.8-inlining-addon.patch gdb-archer.patch 
	gdb-bz539590-gnu-ifunc.patch gdb.spec sources 
Added Files:
	gdb-solib-display.patch gdb-unused-revert.patch 
Removed Files:
	gdb-empty-namespace.patch gdb-testsuite-lineno.patch 
	gdb-watchpoint-cond-gone.patch 
Log Message:
* Thu Jan 21 2010 Jan Kratochvil <jan.kratochvil at redhat.com> - 7.0.50.20100121-1.fc13
- Upgrade to the FSF GDB snapshot: 7.0.50.20100121
- archer-jankratochvil-fedora13 commit: ccde1530479cc966374351038057b9dda90aa251
- [expr-cumulative] Archer branch is now included.


gdb-solib-display.patch:
 parse.c |    4 ++++
 1 file changed, 4 insertions(+)

--- NEW FILE gdb-solib-display.patch ---
http://sourceware.org/ml/gdb-patches/2010-01/msg00485.html
Subject: [patch] Fix solib-display.exp crash

[ Made more safe for downstream patch + ported for VLA.  ]

Hi,

it is a testsuite regression against gdb-7.0 although the bug was probably
present even in gdb-7.0 (it started to reproduce since one completely
unrelated Daniel J.'s patch).  This patch fixes (-lmcheck may be required):

 PASS: gdb.base/solib-display.exp: display a_global
 PASS: gdb.base/solib-display.exp: display b_global
 PASS: gdb.base/solib-display.exp: display c_global
-ERROR: Process no longer exists
-UNRESOLVED: gdb.base/solib-display.exp: after rerun
-WARNING: remote_expect statement without a default case?!
-FAIL: gdb.base/solib-display.exp: Can't run to main (3)
+PASS: gdb.base/solib-display.exp: after rerun
+PASS: gdb.base/solib-display.exp: after rerun
+PASS: gdb.base/solib-display.exp: break 25
+PASS: gdb.base/solib-display.exp: continue
+PASS: gdb.base/solib-display.exp: display main_global
+PASS: gdb.base/solib-display.exp: display a_local
+PASS: gdb.base/solib-display.exp: display a_static
+PASS: gdb.base/solib-display.exp: break 25
+PASS: gdb.base/solib-display.exp: continue

No regressions on {x86_64,x86_64-m32,i686}-fedora12-linux-gnu.

The question is whether SYMBOL_SYMTAB (symbol) can be ever NULL at this point.
IMO not, it can be NULL only temporarily during reading symbols.


Thanks,
Jan


2010-01-20  Jan Kratochvil  <jan.kratochvil at redhat.com>

	* printcmd.c (display_uses_solib_p): Remove variable section.  Access
	objfile via SYMBOL_SYMTAB.

Index: gdb-7.0.50.20100121/gdb/parse.c
===================================================================
--- gdb-7.0.50.20100121.orig/gdb/parse.c	2010-01-21 15:16:15.000000000 +0100
+++ gdb-7.0.50.20100121/gdb/parse.c	2010-01-21 15:21:45.000000000 +0100
@@ -1425,6 +1425,10 @@ operator_check_standard (struct expressi
 	if (section && objfile_func && (*objfile_func) (section->objfile, data))
 	  return 1;
 
+	/* SYMBOL_OBJ_SECTION (symbol) may be NULL.  */
+	if (SYMBOL_SYMTAB (symbol) && objfile_func && (*objfile_func) (SYMBOL_SYMTAB (symbol)->objfile, data))
+	  return 1;
+
 	/* Check objfile where is placed the code touching the variable.  */
 	objfile = block_objfile (block);
 

gdb-unused-revert.patch:
 configure    |    9 +--------
 configure.ac |    3 +--
 2 files changed, 2 insertions(+), 10 deletions(-)

--- NEW FILE gdb-unused-revert.patch ---
[RFA/commit 5/5] Add -Wunused-function to compile flags.
http://sourceware.org/ml/gdb-patches/2010-01/msg00371.html
http://sourceware.org/ml/gdb-cvs/2010-01/msg00163.html

REVERTED

--- src/gdb/configure.ac	2010/01/15 00:34:37	1.112
+++ src/gdb/configure.ac	2010/01/19 09:52:31	1.113
@@ -1544,8 +1544,7 @@
 # gdb/doc/gdbint.texinfo.
 build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
 -Wformat-nonliteral -Wno-pointer-sign \
--Wno-unused -Wunused-value -Wunused-function \
--Wno-switch -Wno-char-subscripts"
+-Wno-unused -Wunused-value -Wno-switch -Wno-char-subscripts"
 
 # Enable -Wno-format by default when using gcc on mingw since many
 # GCC versions complain about %I64.
--- src/gdb/configure	2010/01/15 00:34:37	1.297
+++ src/gdb/configure	2010/01/19 09:52:32	1.298
@@ -13435,8 +13435,7 @@
 # gdb/doc/gdbint.texinfo.
 build_warnings="-Wall -Wdeclaration-after-statement -Wpointer-arith \
 -Wformat-nonliteral -Wno-pointer-sign \
--Wno-unused -Wunused-value -Wunused-function \
--Wno-switch -Wno-char-subscripts"
+-Wno-unused -Wunused-value -Wno-switch -Wno-char-subscripts"
 
 # Enable -Wno-format by default when using gcc on mingw since many
 # GCC versions complain about %I64.
### src/gdb/ChangeLog	2010/01/19 09:50:48	1.11271
### src/gdb/ChangeLog	2010/01/19 09:52:33	1.11272
## -1,11 +1,5 @@
 2010-01-19  Joel Brobecker  <brobecker at adacore.com>
 
-	Add -Wunused-function to compile flags.
-	* configure.ac: Add -Wunused-function to build_warnings.
-	* configure: Regenerate.
-
-2010-01-19  Joel Brobecker  <brobecker at adacore.com>
-
 	"delete" ada-lex.c:input function, not used.
 	* ada-lex.l: #define YY_NO_INPUT.
 


Index: .cvsignore
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/.cvsignore,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -p -r1.45 -r1.46
--- .cvsignore	18 Jan 2010 23:22:41 -0000	1.45
+++ .cvsignore	21 Jan 2010 16:09:09 -0000	1.46
@@ -1,2 +1,2 @@
-gdb-7.0.50.20100118.tar.bz2
+gdb-7.0.50.20100121.tar.bz2
 libstdc++-v3-python-r155978.tar.bz2

gdb-6.3-readnever-20050907.patch:
 doc/gdb.texinfo |    6 ++++++
 dwarf2read.c    |    4 +++-
 main.c          |    2 ++
 symfile.c       |    1 +
 top.h           |    1 +
 5 files changed, 13 insertions(+), 1 deletion(-)

Index: gdb-6.3-readnever-20050907.patch
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/gdb-6.3-readnever-20050907.patch,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -p -r1.10 -r1.11
--- gdb-6.3-readnever-20050907.patch	16 Jan 2010 22:32:05 -0000	1.10
+++ gdb-6.3-readnever-20050907.patch	21 Jan 2010 16:09:09 -0000	1.11
@@ -11,11 +11,11 @@
 
         * gdb.texinfo (File Options): Document --readnever.
 
-Index: gdb-7.0.50.20100115/gdb/doc/gdb.texinfo
+Index: gdb-7.0.50.20100121/gdb/doc/gdb.texinfo
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/doc/gdb.texinfo	2010-01-15 03:16:43.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/doc/gdb.texinfo	2010-01-15 03:20:04.000000000 +0100
-@@ -995,6 +995,12 @@ Read each symbol file's entire symbol ta
+--- gdb-7.0.50.20100121.orig/gdb/doc/gdb.texinfo	2010-01-21 15:11:09.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/doc/gdb.texinfo	2010-01-21 15:13:02.000000000 +0100
+@@ -997,6 +997,12 @@ Read each symbol file's entire symbol ta
  the default, which is to read it incrementally as it is needed.
  This makes startup slower, but makes future operations faster.
  
@@ -28,10 +28,10 @@ Index: gdb-7.0.50.20100115/gdb/doc/gdb.t
  @end table
  
  @node Mode Options
-Index: gdb-7.0.50.20100115/gdb/main.c
+Index: gdb-7.0.50.20100121/gdb/main.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/main.c	2010-01-15 03:18:23.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/main.c	2010-01-15 03:20:04.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/main.c	2010-01-21 15:11:18.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/main.c	2010-01-21 15:13:02.000000000 +0100
 @@ -382,6 +382,7 @@ captured_main (void *data)
        {"xdb", no_argument, &xdb_commands, 1},
        {"dbx", no_argument, &dbx_commands, 1},
@@ -40,7 +40,7 @@ Index: gdb-7.0.50.20100115/gdb/main.c
        {"r", no_argument, &readnow_symbol_files, 1},
        {"quiet", no_argument, &quiet, 1},
        {"q", no_argument, &quiet, 1},
-@@ -1030,6 +1031,7 @@ Options:\n\n\
+@@ -1033,6 +1034,7 @@ Options:\n\n\
    fputs_unfiltered (_("\
    --quiet            Do not print version number on startup.\n\
    --readnow          Fully read symbol files on first access.\n\
@@ -48,10 +48,10 @@ Index: gdb-7.0.50.20100115/gdb/main.c
  "), stream);
    fputs_unfiltered (_("\
    --se=FILE          Use FILE as symbol file and executable file.\n\
-Index: gdb-7.0.50.20100115/gdb/symfile.c
+Index: gdb-7.0.50.20100121/gdb/symfile.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/symfile.c	2010-01-15 03:16:43.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/symfile.c	2010-01-15 03:20:04.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/symfile.c	2010-01-21 15:11:09.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/symfile.c	2010-01-21 15:13:02.000000000 +0100
 @@ -79,6 +79,7 @@ static void clear_symtab_users_cleanup (
  
  /* Global variables owned by this file */
@@ -60,19 +60,19 @@ Index: gdb-7.0.50.20100115/gdb/symfile.c
  
  /* External variables and functions referenced. */
  
-Index: gdb-7.0.50.20100115/gdb/dwarf2read.c
+Index: gdb-7.0.50.20100121/gdb/dwarf2read.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/dwarf2read.c	2010-01-15 03:16:43.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/dwarf2read.c	2010-01-15 03:20:18.000000000 +0100
-@@ -50,6 +50,7 @@
- #include "addrmap.h"
- #include "block.h"
- #include "f-lang.h"
+--- gdb-7.0.50.20100121.orig/gdb/dwarf2read.c	2010-01-21 15:11:09.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/dwarf2read.c	2010-01-21 15:13:15.000000000 +0100
+@@ -53,6 +53,7 @@
+ #include "typeprint.h"
+ #include "jv-lang.h"
+ #include "vec.h"
 +#include "top.h"
  
  #include <fcntl.h>
  #include "gdb_string.h"
-@@ -1226,7 +1227,8 @@ dwarf2_has_info (struct objfile *objfile
+@@ -1237,7 +1238,8 @@ dwarf2_has_info (struct objfile *objfile
  
        bfd_map_over_sections (objfile->obfd, dwarf2_locate_sections, NULL);
      }
@@ -82,10 +82,10 @@ Index: gdb-7.0.50.20100115/gdb/dwarf2rea
  	  && dwarf2_per_objfile->abbrev.asection != NULL);
  }
  
-Index: gdb-7.0.50.20100115/gdb/top.h
+Index: gdb-7.0.50.20100121/gdb/top.h
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/top.h	2010-01-01 08:31:42.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/top.h	2010-01-15 03:20:04.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/top.h	2010-01-01 08:31:42.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/top.h	2010-01-21 15:13:02.000000000 +0100
 @@ -63,6 +63,7 @@ extern void set_prompt (char *);
  
  /* From random places.  */

gdb-6.3-security-errata-20050610.patch:
 cli/cli-cmds.c                    |   27 ++++++++++
 main.c                            |    4 -
 testsuite/gdb.base/gdbinit.exp    |   98 ++++++++++++++++++++++++++++++++++++++
 testsuite/gdb.base/gdbinit.sample |    1 
 4 files changed, 127 insertions(+), 3 deletions(-)

Index: gdb-6.3-security-errata-20050610.patch
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/gdb-6.3-security-errata-20050610.patch,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -p -r1.8 -r1.9
--- gdb-6.3-security-errata-20050610.patch	16 Jan 2010 22:32:05 -0000	1.8
+++ gdb-6.3-security-errata-20050610.patch	21 Jan 2010 16:09:09 -0000	1.9
@@ -19,11 +19,11 @@ Proposed upstream but never committed up
         (source_command): Update documentation.  Check permissions if
         FROM_TTY is -1.
 
-Index: gdb-7.0.50.20100115/gdb/cli/cli-cmds.c
+Index: gdb-7.0.50.20100121/gdb/cli/cli-cmds.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/cli/cli-cmds.c	2010-01-15 03:16:43.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/cli/cli-cmds.c	2010-01-15 03:19:13.000000000 +0100
-@@ -37,6 +37,7 @@
+--- gdb-7.0.50.20100121.orig/gdb/cli/cli-cmds.c	2010-01-18 07:25:22.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/cli/cli-cmds.c	2010-01-21 15:12:28.000000000 +0100
+@@ -38,6 +38,7 @@
  #include "objfiles.h"
  #include "source.h"
  #include "disasm.h"
@@ -31,18 +31,9 @@ Index: gdb-7.0.50.20100115/gdb/cli/cli-c
  extern void disconnect_or_stop_tracing (int from_tty);
  
  #include "ui-out.h"
-@@ -475,7 +476,7 @@ source_script (char *file, int from_tty)
- 
-   if (fd == -1)
-     {
--      if (from_tty)
-+      if (from_tty > 0)
- 	perror_with_name (file);
-       else
- 	{
-@@ -484,6 +485,29 @@ source_script (char *file, int from_tty)
- 	}
-     }
+@@ -488,6 +489,29 @@ find_and_open_script (int from_tty, char
+ 	      file, O_RDONLY, &full_pathname);
+   make_cleanup (xfree, full_pathname);
  
 +#ifdef HAVE_GETUID
 +  if (from_tty == -1)
@@ -62,15 +53,24 @@ Index: gdb-7.0.50.20100115/gdb/cli/cli-c
 +	  warning (_("not using untrusted file \"%s\""), file);
 +	  close (fd);
 +	  do_cleanups (old_cleanups);
-+	  return;
++	  return 0;
 +	}
 +    }
 +#endif
 +
-   is_python = source_python;
-   if (strlen (file) > 3 && !strcmp (&file[strlen (file) - 3], ".py"))
-     is_python = 1;
-@@ -495,6 +519,7 @@ source_script (char *file, int from_tty)
+   /* Use the full path name, if it is found.  */
+   if (full_pathname != NULL && fd != -1)
+     {
+@@ -496,7 +520,7 @@ find_and_open_script (int from_tty, char
+ 
+   if (fd == -1)
+     {
+-      if (from_tty)
++      if (from_tty > 0)
+ 	perror_with_name (file);
+       else
+ 	{
+@@ -554,6 +578,7 @@ source_script (char *file, int from_tty)
    else
      script_from_file (stream, file);
  
@@ -78,10 +78,10 @@ Index: gdb-7.0.50.20100115/gdb/cli/cli-c
    do_cleanups (old_cleanups);
  }
  
-Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.base/gdbinit.exp
+Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gdbinit.exp
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.base/gdbinit.exp	2010-01-15 03:18:23.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gdbinit.exp	2010-01-21 15:11:18.000000000 +0100
 @@ -0,0 +1,98 @@
 +#   Copyright 2005
 +#   Free Software Foundation, Inc.
@@ -181,17 +181,17 @@ Index: gdb-7.0.50.20100115/gdb/testsuite
 +}
 +
 +remote_exec build "rm .gdbinit"
-Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.base/gdbinit.sample
+Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gdbinit.sample
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.base/gdbinit.sample	2010-01-15 03:18:23.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gdbinit.sample	2010-01-21 15:11:18.000000000 +0100
 @@ -0,0 +1 @@
 +echo "\nin gdbinit"
-Index: gdb-7.0.50.20100115/gdb/main.c
+Index: gdb-7.0.50.20100121/gdb/main.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/main.c	2010-01-15 03:16:43.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/main.c	2010-01-15 03:18:23.000000000 +0100
-@@ -815,7 +815,7 @@ Excess command line arguments ignored. (
+--- gdb-7.0.50.20100121.orig/gdb/main.c	2010-01-21 15:11:09.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/main.c	2010-01-21 15:11:18.000000000 +0100
+@@ -818,7 +818,7 @@ Excess command line arguments ignored. (
       debugging or what directory you are in.  */
  
    if (home_gdbinit && !inhibit_gdbinit)
@@ -200,7 +200,7 @@ Index: gdb-7.0.50.20100115/gdb/main.c
  
    /* Now perform all the actions indicated by the arguments.  */
    if (cdarg != NULL)
-@@ -884,7 +884,7 @@ Can't attach to process and specify a co
+@@ -887,7 +887,7 @@ Can't attach to process and specify a co
    /* Read the .gdbinit file in the current directory, *if* it isn't
       the same as the $HOME/.gdbinit file (it should exist, also).  */
    if (local_gdbinit && !inhibit_gdbinit)

gdb-6.7-testsuite-stable-results.patch:
 fileio.c   |   33 +++++++++++++++++++++++++++++++++
 fileio.exp |   10 +++++-----
 2 files changed, 38 insertions(+), 5 deletions(-)

Index: gdb-6.7-testsuite-stable-results.patch
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/gdb-6.7-testsuite-stable-results.patch,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -p -r1.9 -r1.10
--- gdb-6.7-testsuite-stable-results.patch	12 Jan 2010 22:15:55 -0000	1.9
+++ gdb-6.7-testsuite-stable-results.patch	21 Jan 2010 16:09:09 -0000	1.10
@@ -102,154 +102,3 @@ frames-invalid can happen asynchronously
  
  set timeout $oldtimeout
  return 0
-
-
-
-http://sourceware.org/ml/gdb-patches/2009-12/msg00234.html
-Subject: [patch] testsuite: Fix a race by me - watchthreads-reorder.exp
-
-Hi,
-
-there is a bug explainable by man pthread_cond_signal:
-	The [...] pthread_cond_signal() functions shall have no effect if
-	there are no threads currently blocked on cond.
-
-meaning a race for the testcase.
-	+FAIL: gdb.threads/watchthreads-reorder.exp: reorder1: continue a (timeout)
-
-One can reproduce the race on CVS HEAD by:
-#	--- a/gdb/testsuite/gdb.threads/watchthreads-reorder.c
-#	+++ b/gdb/testsuite/gdb.threads/watchthreads-reorder.c
-#	@@ -89,6 +89,7 @@ thread1_func (void *unused)
-#	   int i;
-#	   volatile int rwatch_store;
-#	 
-#	+sleep(1);
-#	   thread1_tid = gettid ();
-#	   i = pthread_cond_signal (&thread1_tid_cond);
-#	   assert (i == 0);
-#	@@ -317,6 +318,7 @@ main (int argc, char **argv)
-#	 
-#	   if (thread1_tid == 0)
-#	     {
-#	+sleep(2);
-#	       i = pthread_cond_wait (&thread1_tid_cond, &thread1_tid_mutex);
-#	       assert (i == 0);
-#	 
-
-Fixed; gdbstop_mutex got removed as it became redundant there.
-
-Going to check it in as obvious in several days (code is by me + it is just
-a testcase).
-
-
-Sorry,
-Jan
-
-
-gdb/testsuite/
-2009-12-17  Jan Kratochvil  <jan.kratochvil at redhat.com>
-
-	* gdb.threads/watchthreads-reorder.c (gdbstop_mutex): Remove.
-	(thread1_func): Protect thread1_tid_cond by thread1_tid_mutex.  Remove
-	gdbstop_mutex handling.
-	(thread2_func): Protect thread2_tid_cond by thread2_tid_mutex.  Remove
-	gdbstop_mutex handling.
-	(main): Move thread1_tid_mutex and thread2_tid_mutex locks before
-	pthread_create.  Remove gdbstop_mutex handling.  New comment.  Remove
-	pthread_cond_wait conditionalizations.
-
---- a/gdb/testsuite/gdb.threads/watchthreads-reorder.c
-+++ b/gdb/testsuite/gdb.threads/watchthreads-reorder.c
-@@ -34,8 +34,6 @@
-    otherwise.  */
- #define TIMEOUT (gettid () == getpid() ? 10 : 15)
- 
--static pthread_mutex_t gdbstop_mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
--
- static pid_t thread1_tid;
- static pthread_cond_t thread1_tid_cond = PTHREAD_COND_INITIALIZER;
- static pthread_mutex_t thread1_tid_mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
-@@ -90,12 +88,11 @@ thread1_func (void *unused)
-   volatile int rwatch_store;
- 
-   thread1_tid = gettid ();
-+
-+  timed_mutex_lock (&thread1_tid_mutex);
-   i = pthread_cond_signal (&thread1_tid_cond);
-   assert (i == 0);
--
--  /* Be sure GDB is already stopped before continuing.  */
--  timed_mutex_lock (&gdbstop_mutex);
--  i = pthread_mutex_unlock (&gdbstop_mutex);
-+  i = pthread_mutex_unlock (&thread1_tid_mutex);
-   assert (i == 0);
- 
-   rwatch_store = thread1_rwatch;
-@@ -115,12 +112,11 @@ thread2_func (void *unused)
-   volatile int rwatch_store;
- 
-   thread2_tid = gettid ();
-+
-+  timed_mutex_lock (&thread2_tid_mutex);
-   i = pthread_cond_signal (&thread2_tid_cond);
-   assert (i == 0);
--
--  /* Be sure GDB is already stopped before continuing.  */
--  timed_mutex_lock (&gdbstop_mutex);
--  i = pthread_mutex_unlock (&gdbstop_mutex);
-+  i = pthread_mutex_unlock (&thread2_tid_mutex);
-   assert (i == 0);
- 
-   rwatch_store = thread2_rwatch;
-@@ -267,7 +263,8 @@ main (int argc, char **argv)
- 
-   setbuf (stdout, NULL);
- 
--  timed_mutex_lock (&gdbstop_mutex);
-+  timed_mutex_lock (&thread1_tid_mutex);
-+  timed_mutex_lock (&thread2_tid_mutex);
- 
-   timed_mutex_lock (&terminate_mutex);
- 
-@@ -306,30 +303,21 @@ main (int argc, char **argv)
-       state_wait (tracer, "T (stopped)");
-     }
- 
--  timed_mutex_lock (&thread1_tid_mutex);
--  timed_mutex_lock (&thread2_tid_mutex);
--
--  /* Let the threads start.  */
--  i = pthread_mutex_unlock (&gdbstop_mutex);
--  assert (i == 0);
-+  /* Threads are now waiting at timed_mutex_lock (thread1_tid_mutex) and so
-+     they could not trigger the watchpoints before GDB gets unstopped later.
-+     Threads get resumed at pthread_cond_wait below.  */
- 
-   printf ("Waiting till the threads initialize their TIDs.\n");
- 
--  if (thread1_tid == 0)
--    {
--      i = pthread_cond_wait (&thread1_tid_cond, &thread1_tid_mutex);
--      assert (i == 0);
-+  i = pthread_cond_wait (&thread1_tid_cond, &thread1_tid_mutex);
-+  assert (i == 0);
- 
--      assert (thread1_tid > 0);
--    }
-+  assert (thread1_tid > 0);
- 
--  if (thread2_tid == 0)
--    {
--      i = pthread_cond_wait (&thread2_tid_cond, &thread2_tid_mutex);
--      assert (i == 0);
-+  i = pthread_cond_wait (&thread2_tid_cond, &thread2_tid_mutex);
-+  assert (i == 0);
- 
--      assert (thread2_tid > 0);
--    }
-+  assert (thread2_tid > 0);
- 
-   printf ("Thread 1 TID = %lu, thread 2 TID = %lu, PID = %lu.\n",
- 	  (unsigned long) thread1_tid, (unsigned long) thread2_tid,
-

gdb-6.8-inlining-addon.patch:
 breakpoint.c                        |   35 +++++++++++++---
 dwarf2read.c                        |    6 ++
 frame.c                             |    8 ++-
 gdbthread.h                         |    6 ++
 infcmd.c                            |   76 ++++++++++++++++++++++++++----------
 inline-frame.c                      |   34 +++++++++++++---
 inline-frame.h                      |    4 +
 target.c                            |    1 
 testsuite/gdb.opt/inline-bt.c       |   10 +++-
 testsuite/gdb.opt/inline-cmds.c     |   10 +++-
 testsuite/gdb.opt/inline-cmds.exp   |   28 ++++++-------
 testsuite/gdb.opt/inline-locals.c   |    9 +++-
 testsuite/gdb.opt/inline-locals.exp |    6 ++
 testsuite/gdb.opt/inline-markers.c  |    5 --
 14 files changed, 176 insertions(+), 62 deletions(-)

Index: gdb-6.8-inlining-addon.patch
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/gdb-6.8-inlining-addon.patch,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -p -r1.11 -r1.12
--- gdb-6.8-inlining-addon.patch	16 Jan 2010 22:32:06 -0000	1.11
+++ gdb-6.8-inlining-addon.patch	21 Jan 2010 16:09:09 -0000	1.12
@@ -5,10 +5,10 @@ causing: FAIL: gdb.base/unwindonsignal.e
 resume() -> target_resume() move of clear_inline_frame_state() is for:
 gdb.mi/mi-nsmoribund.exp
 
-Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.opt/inline-bt.c
+Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.opt/inline-bt.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/testsuite/gdb.opt/inline-bt.c	2010-01-01 08:32:04.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.opt/inline-bt.c	2010-01-15 11:50:59.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/testsuite/gdb.opt/inline-bt.c	2010-01-01 08:32:04.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/testsuite/gdb.opt/inline-bt.c	2010-01-21 15:14:47.000000000 +0100
 @@ -13,10 +13,16 @@
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
@@ -28,10 +28,10 @@ Index: gdb-7.0.50.20100115/gdb/testsuite
  
  inline int func1(void)
  {
-Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.opt/inline-cmds.c
+Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.opt/inline-cmds.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/testsuite/gdb.opt/inline-cmds.c	2010-01-01 08:32:04.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.opt/inline-cmds.c	2010-01-15 11:50:59.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/testsuite/gdb.opt/inline-cmds.c	2010-01-01 08:32:04.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/testsuite/gdb.opt/inline-cmds.c	2010-01-21 15:14:47.000000000 +0100
 @@ -13,13 +13,19 @@
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
@@ -54,10 +54,10 @@ Index: gdb-7.0.50.20100115/gdb/testsuite
  inline int func1(void)
  {
    bar ();
-Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.opt/inline-cmds.exp
+Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.opt/inline-cmds.exp
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/testsuite/gdb.opt/inline-cmds.exp	2010-01-01 08:32:04.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.opt/inline-cmds.exp	2010-01-15 11:50:59.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/testsuite/gdb.opt/inline-cmds.exp	2010-01-01 08:32:04.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/testsuite/gdb.opt/inline-cmds.exp	2010-01-21 15:14:47.000000000 +0100
 @@ -230,7 +230,7 @@ set line3 [gdb_get_line_number "set brea
  gdb_breakpoint $line3
  gdb_continue_to_breakpoint "consecutive func1"
@@ -110,10 +110,10 @@ Index: gdb-7.0.50.20100115/gdb/testsuite
 +gdb_test "info frame" "inlined into frame.*" "outer_inline2 inlined"
 +gdb_test "fini" "" "up from outer_inline2"
 +gdb_test "info frame" " in main \[^\n\]*\n source language.*" "main not inlined"
-Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.opt/inline-locals.c
+Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.opt/inline-locals.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/testsuite/gdb.opt/inline-locals.c	2010-01-01 08:32:04.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.opt/inline-locals.c	2010-01-15 11:50:59.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/testsuite/gdb.opt/inline-locals.c	2010-01-01 08:32:04.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/testsuite/gdb.opt/inline-locals.c	2010-01-21 15:14:47.000000000 +0100
 @@ -13,11 +13,16 @@
     You should have received a copy of the GNU General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
@@ -133,10 +133,10 @@ Index: gdb-7.0.50.20100115/gdb/testsuite
  
  inline int func1(int arg1)
  {
-Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.opt/inline-locals.exp
+Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.opt/inline-locals.exp
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/testsuite/gdb.opt/inline-locals.exp	2010-01-01 08:32:04.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.opt/inline-locals.exp	2010-01-15 11:50:59.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/testsuite/gdb.opt/inline-locals.exp	2010-01-01 08:32:04.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/testsuite/gdb.opt/inline-locals.exp	2010-01-21 15:14:47.000000000 +0100
 @@ -77,6 +77,9 @@ if { ! $no_frames } {
  
  # Make sure that locals on the stack are found.  This is an array to
@@ -155,10 +155,10 @@ Index: gdb-7.0.50.20100115/gdb/testsuite
 +    setup_kfail *-*-* "gcc/debug.optimization"
 +}
  gdb_test "print array\[0\]" "\\\$$decimal = 184" "print local (3)"
-Index: gdb-7.0.50.20100115/gdb/frame.c
+Index: gdb-7.0.50.20100121/gdb/frame.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/frame.c	2010-01-15 03:22:14.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/frame.c	2010-01-15 11:50:59.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/frame.c	2010-01-21 15:13:26.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/frame.c	2010-01-21 15:14:47.000000000 +0100
 @@ -316,7 +316,7 @@ fprint_frame (struct ui_file *file, stru
  static struct frame_info *
  skip_inlined_frames (struct frame_info *frame)
@@ -195,10 +195,10 @@ Index: gdb-7.0.50.20100115/gdb/frame.c
  	{
  	  sal->symtab = SYMBOL_SYMTAB (sym);
  	  sal->line = SYMBOL_LINE (sym);
-Index: gdb-7.0.50.20100115/gdb/breakpoint.c
+Index: gdb-7.0.50.20100121/gdb/breakpoint.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/breakpoint.c	2010-01-15 11:49:49.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/breakpoint.c	2010-01-15 11:52:20.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/breakpoint.c	2010-01-21 15:14:41.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/breakpoint.c	2010-01-21 15:14:47.000000000 +0100
 @@ -62,6 +62,7 @@
  #include "jit.h"
  #include "xml-syscall.h"
@@ -207,7 +207,7 @@ Index: gdb-7.0.50.20100115/gdb/breakpoin
  
  /* readline include files */
  #include "readline/readline.h"
-@@ -3560,10 +3561,24 @@ bpstat_check_breakpoint_conditions (bpst
+@@ -3558,10 +3559,24 @@ bpstat_check_breakpoint_conditions (bpst
    const struct bp_location *bl = bs->breakpoint_at;
    struct breakpoint *b = bl->owner;
  
@@ -236,7 +236,7 @@ Index: gdb-7.0.50.20100115/gdb/breakpoin
      {
        int value_is_zero = 0;
        
-@@ -3731,6 +3746,12 @@ bpstat_stop_status (struct address_space
+@@ -3729,6 +3744,12 @@ bpstat_stop_status (struct address_space
  		  bs->print = 0;
  		}
  	      bs->commands = copy_command_lines (bs->commands);
@@ -249,7 +249,7 @@ Index: gdb-7.0.50.20100115/gdb/breakpoin
  	    }
  
  	  /* Print nothing for this entry if we dont stop or dont print.  */
-@@ -6039,9 +6060,9 @@ set_momentary_breakpoint (struct gdbarch
+@@ -6043,9 +6064,9 @@ set_momentary_breakpoint (struct gdbarch
  {
    struct breakpoint *b;
  
@@ -262,10 +262,10 @@ Index: gdb-7.0.50.20100115/gdb/breakpoin
  
    b = set_raw_breakpoint (gdbarch, sal, type);
    b->enable_state = bp_enabled;
-Index: gdb-7.0.50.20100115/gdb/inline-frame.c
+Index: gdb-7.0.50.20100121/gdb/inline-frame.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/inline-frame.c	2010-01-01 08:31:36.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/inline-frame.c	2010-01-15 11:50:59.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/inline-frame.c	2010-01-01 08:31:36.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/inline-frame.c	2010-01-21 15:14:47.000000000 +0100
 @@ -213,6 +213,12 @@ inline_frame_sniffer (const struct frame
    if (frame_block == NULL)
      return 0;
@@ -342,10 +342,10 @@ Index: gdb-7.0.50.20100115/gdb/inline-fr
  /* Return the number of hidden functions inlined into the current
     frame.  */
  
-Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.opt/inline-markers.c
+Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.opt/inline-markers.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/testsuite/gdb.opt/inline-markers.c	2010-01-01 08:32:04.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.opt/inline-markers.c	2010-01-15 11:50:59.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/testsuite/gdb.opt/inline-markers.c	2010-01-01 08:32:04.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/testsuite/gdb.opt/inline-markers.c	2010-01-21 15:14:47.000000000 +0100
 @@ -15,11 +15,6 @@
  
  extern int x, y;
@@ -358,10 +358,10 @@ Index: gdb-7.0.50.20100115/gdb/testsuite
  void marker(void)
  {
    x += y; /* set breakpoint 2 here */
-Index: gdb-7.0.50.20100115/gdb/gdbthread.h
+Index: gdb-7.0.50.20100121/gdb/gdbthread.h
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/gdbthread.h	2010-01-15 03:22:13.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/gdbthread.h	2010-01-15 11:51:19.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/gdbthread.h	2010-01-21 15:11:09.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/gdbthread.h	2010-01-21 15:14:47.000000000 +0100
 @@ -195,6 +195,12 @@ struct thread_info
    /* Function that is called to free PRIVATE.  If this is NULL, then
       xfree will be called on PRIVATE.  */
@@ -375,11 +375,11 @@ Index: gdb-7.0.50.20100115/gdb/gdbthread
  };
  
  /* Create an empty thread list, or empty the existing one.  */
-Index: gdb-7.0.50.20100115/gdb/infcmd.c
+Index: gdb-7.0.50.20100121/gdb/infcmd.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/infcmd.c	2010-01-15 03:22:13.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/infcmd.c	2010-01-15 11:51:53.000000000 +0100
-@@ -1438,11 +1438,11 @@ finish_command_continuation (void *arg)
+--- gdb-7.0.50.20100121.orig/gdb/infcmd.c	2010-01-21 15:11:09.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/infcmd.c	2010-01-21 15:14:47.000000000 +0100
+@@ -1439,11 +1439,11 @@ finish_command_continuation (void *arg)
        struct type *value_type;
  
        value_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (a->function));
@@ -393,7 +393,7 @@ Index: gdb-7.0.50.20100115/gdb/infcmd.c
  	print_return_value (SYMBOL_TYPE (a->function), value_type);
      }
  
-@@ -1550,6 +1550,16 @@ finish_forward (struct symbol *function,
+@@ -1551,6 +1551,16 @@ finish_forward (struct symbol *function,
    tp->initiating_frame = get_frame_id (frame);
    make_cleanup (delete_longjmp_breakpoint_cleanup, &thread);
  
@@ -410,7 +410,7 @@ Index: gdb-7.0.50.20100115/gdb/infcmd.c
    tp->proceed_to_finish = 1;    /* We want stop_registers, please...  */
    cargs = xmalloc (sizeof (*cargs));
  
-@@ -1570,7 +1580,9 @@ finish_forward (struct symbol *function,
+@@ -1571,7 +1581,9 @@ finish_forward (struct symbol *function,
  static void
  finish_command (char *arg, int from_tty)
  {
@@ -421,7 +421,7 @@ Index: gdb-7.0.50.20100115/gdb/infcmd.c
    struct symbol *function;
  
    int async_exec = 0;
-@@ -1601,45 +1613,63 @@ finish_command (char *arg, int from_tty)
+@@ -1602,45 +1614,63 @@ finish_command (char *arg, int from_tty)
    if (!target_has_execution)
      error (_("The program is not running."));
  
@@ -502,7 +502,7 @@ Index: gdb-7.0.50.20100115/gdb/infcmd.c
  
    /* Print info on the selected frame, including level number but not
       source.  */
-@@ -1653,10 +1683,14 @@ finish_command (char *arg, int from_tty)
+@@ -1654,10 +1684,14 @@ finish_command (char *arg, int from_tty)
        print_stack_frame (get_selected_frame (NULL), 1, LOCATION);
      }
  
@@ -518,11 +518,11 @@ Index: gdb-7.0.50.20100115/gdb/infcmd.c
  }
  
  
-Index: gdb-7.0.50.20100115/gdb/target.c
+Index: gdb-7.0.50.20100121/gdb/target.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/target.c	2010-01-15 03:22:31.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/target.c	2010-01-15 11:50:59.000000000 +0100
-@@ -2241,6 +2241,7 @@ target_resume (ptid_t ptid, int step, en
+--- gdb-7.0.50.20100121.orig/gdb/target.c	2010-01-21 15:13:26.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/target.c	2010-01-21 15:14:47.000000000 +0100
+@@ -2216,6 +2216,7 @@ target_resume (ptid_t ptid, int step, en
  {
    struct target_ops *t;
  
@@ -530,10 +530,10 @@ Index: gdb-7.0.50.20100115/gdb/target.c
    target_dcache_invalidate ();
  
    for (t = current_target.beneath; t != NULL; t = t->beneath)
-Index: gdb-7.0.50.20100115/gdb/inline-frame.h
+Index: gdb-7.0.50.20100121/gdb/inline-frame.h
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/inline-frame.h	2010-01-01 08:31:36.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/inline-frame.h	2010-01-15 11:50:59.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/inline-frame.h	2010-01-01 08:31:36.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/inline-frame.h	2010-01-21 15:14:47.000000000 +0100
 @@ -43,6 +43,10 @@ void clear_inline_frame_state (ptid_t pt
  
  void step_into_inline_frame (ptid_t ptid);
@@ -545,19 +545,19 @@ Index: gdb-7.0.50.20100115/gdb/inline-fr
  /* Return the number of hidden functions inlined into the current
     frame.  */
  
-Index: gdb-7.0.50.20100115/gdb/dwarf2read.c
+Index: gdb-7.0.50.20100121/gdb/dwarf2read.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/dwarf2read.c	2010-01-15 11:46:29.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/dwarf2read.c	2010-01-15 11:52:59.000000000 +0100
-@@ -4078,6 +4078,7 @@ read_func_scope (struct die_info *die, s
-   CORE_ADDR baseaddr;
+--- gdb-7.0.50.20100121.orig/gdb/dwarf2read.c	2010-01-21 15:14:41.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/dwarf2read.c	2010-01-21 15:15:09.000000000 +0100
+@@ -4137,6 +4137,7 @@ read_func_scope (struct die_info *die, s
    struct block *block;
+   unsigned die_children = 0;
    int inlined_func = (die->tag == DW_TAG_inlined_subroutine);
 +  struct type *type;
  
    if (inlined_func)
      {
-@@ -4109,7 +4110,10 @@ read_func_scope (struct die_info *die, s
+@@ -4178,7 +4179,10 @@ read_func_scope (struct die_info *die, s
    add_to_cu_func_list (name, lowpc, highpc, cu);
  
    new = push_context (0, lowpc);

gdb-archer.patch:
 Makefile.in                                              |   93 
 ada-lang.c                                               |   41 
 amd64-linux-nat.c                                        |   15 
 ax-gdb.c                                                 |    2 
 block.c                                                  |   24 
 block.h                                                  |   12 
 breakpoint.c                                             |  231 +-
 breakpoint.h                                             |   17 
 c-exp.y                                                  |   73 
 c-lang.c                                                 |    1 
 c-typeprint.c                                            |   47 
 coffread.c                                               |    1 
 config.in                                                |    8 
 configure                                                |   76 
 configure.ac                                             |   47 
 cp-name-parser.y                                         |    2 
 cp-namespace.c                                           |  286 ++
 cp-support.c                                             |    7 
 cp-support.h                                             |   48 
 dbxread.c                                                |    1 
 doc/gdb.texinfo                                          |  407 ++++
 doc/gdbint.texinfo                                       |   62 
 doc/observer.texi                                        |    5 
 dwarf2-frame.c                                           |    9 
 dwarf2expr.c                                             |    7 
 dwarf2expr.h                                             |    2 
 dwarf2loc.c                                              |  227 ++
 dwarf2loc.h                                              |    6 
 dwarf2read.c                                             | 1477 +++++++++++----
 elfread.c                                                |   28 
 eval.c                                                   |  162 +
 expression.h                                             |    6 
 f-lang.c                                                 |   44 
 f-lang.h                                                 |   11 
 f-typeprint.c                                            |   36 
 f-valprint.c                                             |   59 
 findcmd.c                                                |  111 -
 findvar.c                                                |  126 -
 gdbinit.in                                               |   10 
 gdbthread.h                                              |    7 
 gdbtypes.c                                               |  641 +++++-
 gdbtypes.h                                               |  168 +
 gnu-v3-abi.c                                             |   18 
 i386-linux-nat.c                                         |   16 
 i386-nat.c                                               |   12 
 i386-nat.h                                               |    5 
 infcmd.c                                                 |   34 
 inferior.h                                               |    2 
 infrun.c                                                 |  183 +
 jv-lang.c                                                |    1 
 language.h                                               |    1 
 linespec.c                                               |  180 -
 linux-nat.c                                              |   35 
 m2-lang.c                                                |    1 
 machoread.c                                              |    1 
 main.c                                                   |   80 
 maint.c                                                  |    8 
 mi/mi-cmd-var.c                                          |    1 
 mipsread.c                                               |    1 
 objfiles.c                                               |   20 
 objfiles.h                                               |   21 
 parse.c                                                  |  149 +
 parser-defs.h                                            |   25 
 ppc-linux-nat.c                                          |   19 
 printcmd.c                                               |   92 
 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/py-block.c                                        |  265 ++
 python/py-breakpoint.c                                   |  666 ++++++
 python/py-cmd.c                                          |   16 
 python/py-frame.c                                        |  116 +
 python/py-hooks.c                                        |   50 
 python/py-inferior.c                                     |  934 +++++++++
 python/py-infthread.c                                    |  285 ++
 python/py-membuf.c                                       |  268 ++
 python/py-param.c                                        |  606 ++++++
 python/py-prettyprint.c                                  |   20 
 python/py-symbol.c                                       |  336 +++
 python/py-symtab.c                                       |  322 +++
 python/py-type.c                                         |  165 +
 python/py-utils.c                                        |   46 
 python/py-value.c                                        |   55 
 python/python-internal.h                                 |   69 
 python/python.c                                          |  340 +++
 python/python.h                                          |    2 
 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 
 stack.c                                                  |   36 
 symfile.c                                                |   12 
 symfile.h                                                |   11 
 symmisc.c                                                |    4 
 symtab.c                                                 |  317 +--
 symtab.h                                                 |   14 
 target.c                                                 |   20 
 target.h                                                 |   24 
 testsuite/gdb.arch/x86_64-vla-pointer-foo.S              |  457 ++++
 testsuite/gdb.arch/x86_64-vla-pointer.c                  |   43 
 testsuite/gdb.arch/x86_64-vla-pointer.exp                |   66 
 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/internal-var-field-address.c          |   20 
 testsuite/gdb.base/internal-var-field-address.exp        |   26 
 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.cp/Makefile.in                             |    2 
 testsuite/gdb.cp/cp-relocate.exp                         |    6 
 testsuite/gdb.cp/cplusfuncs.cc                           |    6 
 testsuite/gdb.cp/cplusfuncs.exp                          |  195 +
 testsuite/gdb.cp/ctti.exp                                |    5 
 testsuite/gdb.cp/expand-sals.exp                         |    2 
 testsuite/gdb.cp/gdb9593.cc                              |  180 +
 testsuite/gdb.cp/gdb9593.exp                             |  185 +
 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                  |   47 
 testsuite/gdb.cp/namespace-recursive.exp                 |   75 
 testsuite/gdb.cp/namespace-stress-declarations.cc        |   93 
 testsuite/gdb.cp/namespace-stress-declarations.exp       |   50 
 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                     |  132 +
 testsuite/gdb.cp/namespace.exp                           |   23 
 testsuite/gdb.cp/overload.exp                            |    8 
 testsuite/gdb.cp/ovldbreak.exp                           |   46 
 testsuite/gdb.cp/realcpp.cc                              |  409 ++++
 testsuite/gdb.cp/realcpp.exp                             |  891 +++++++++
 testsuite/gdb.cp/shadowing.cc                            |   48 
 testsuite/gdb.cp/shadowing.exp                           |   91 
 testsuite/gdb.dwarf2/dw2-aranges.S                       |  140 +
 testsuite/gdb.dwarf2/dw2-aranges.exp                     |   40 
 testsuite/gdb.dwarf2/dw2-empty-namespace.S               |  108 +
 testsuite/gdb.dwarf2/dw2-empty-namespace.exp             |   43 
 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/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/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.java/jnpe.exp                              |   77 
 testsuite/gdb.java/jnpe.java                             |   38 
 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/py-cmd.exp                          |   27 
 testsuite/gdb.python/py-frame.exp                        |   48 
 testsuite/gdb.python/py-function.exp                     |   27 
 testsuite/gdb.python/py-inferior.c                       |   49 
 testsuite/gdb.python/py-inferior.exp                     |  201 ++
 testsuite/gdb.python/py-infthread.c                      |   14 
 testsuite/gdb.python/py-infthread.exp                    |   58 
 testsuite/gdb.python/py-prettyprint.exp                  |   22 
 testsuite/gdb.python/py-template.exp                     |   25 
 testsuite/gdb.python/py-value.exp                        |   31 
 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/lib/cp-support.exp                             |    3 
 testsuite/lib/gdb.exp                                    |    1 
 testsuite/lib/python-support.exp                         |   53 
 thread.c                                                 |    3 
 top.c                                                    |    1 
 typeprint.c                                              |   13 
 typeprint.h                                              |    3 
 ui-file.c                                                |   20 
 ui-file.h                                                |    6 
 utils.c                                                  |    7 
 valarith.c                                               |   45 
 valops.c                                                 |  159 +
 valprint.c                                               |    4 
 value.c                                                  |  146 +
 value.h                                                  |    7 
 varobj.c                                                 |    4 
 xcoffread.c                                              |    1 
 218 files changed, 17364 insertions(+), 1483 deletions(-)

View full diff with command:
/usr/bin/cvs -n -f diff -kk -u -p -N -r 1.35 -r 1.36 gdb-archer.patchIndex: gdb-archer.patch
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/gdb-archer.patch,v
retrieving revision 1.35
retrieving revision 1.36
diff -u -p -r1.35 -r1.36
--- gdb-archer.patch	16 Jan 2010 22:32:07 -0000	1.35
+++ gdb-archer.patch	21 Jan 2010 16:09:09 -0000	1.36
@@ -2,7 +2,7 @@ http://sourceware.org/gdb/wiki/ProjectAr
 http://sourceware.org/gdb/wiki/ArcherBranchManagement
 
 GIT snapshot:
-commit 81810a20b2d2c3bf18e151de3cddfc96445b3c46
+commit ccde1530479cc966374351038057b9dda90aa251
 
 branch `archer' - the merge of branches:
 archer-tromey-delayed-symfile
@@ -11,7 +11,7 @@ archer-pmuldoon-next-over-throw
 archer-jankratochvil-fortran-module
 archer-jankratochvil-watchpoint
 archer-jankratochvil-vla
-TODO:archer-keiths-expr-cumulative
+archer-keiths-expr-cumulative
 
 
 diff --git a/gdb/Makefile.in b/gdb/Makefile.in
@@ -188,38 +188,27 @@ index ff8b86e..f450a7b 100644
  #
  # Dependency tracking.  Most of this is conditional on GNU Make being
  # found by configure; if GNU Make is not found, we fall back to a
-diff --git a/gdb/NEWS b/gdb/NEWS
-index 17d64fb..e0eb160 100644
---- a/gdb/NEWS
-+++ b/gdb/NEWS
-@@ -669,6 +669,13 @@ x86/x86_64 Darwin		i[34567]86-*-darwin*
- 
- x86_64 MinGW			x86_64-*-mingw*
- 
-+* New native configurations
-+
-+x86/x86_64 Darwin		i[34567]86-*-darwin*
-+
-+info os processes
-+  Show operating system information about processes.
-+
- * New targets
- 
- Lattice Mico32                  lm32-*
 diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
-index 24def95..4682045 100644
+index 40b70ab..b291d40 100644
 --- a/gdb/ada-lang.c
 +++ b/gdb/ada-lang.c
-@@ -1644,7 +1644,7 @@ ada_type_of_array (struct value *arr, int bounds)
-         return NULL;
-       while (arity > 0)
-         {
--          struct type *range_type = alloc_type_copy (value_type (arr));
-+	  struct type *range_type = alloc_type_copy (value_type (arr));
-           struct type *array_type = alloc_type_copy (value_type (arr));
-           struct value *low = desc_one_bound (descriptor, arity, 0);
-           struct value *high = desc_one_bound (descriptor, arity, 1);
-@@ -10937,6 +10937,40 @@ ada_operator_length (struct expression *exp, int pc, int *oplenp, int *argsp)
+@@ -4781,14 +4781,10 @@ ada_lookup_symbol (const char *name, const struct block *block0,
+ 
+ static struct symbol *
+ ada_lookup_symbol_nonlocal (const char *name,
+-                            const char *linkage_name,
+                             const struct block *block,
+                             const domain_enum domain)
+ {
+-  if (linkage_name == NULL)
+-    linkage_name = name;
+-  return ada_lookup_symbol (linkage_name, block_static_block (block), domain,
+-                            NULL);
++  return ada_lookup_symbol (name, block_static_block (block), domain, NULL);
+ }
+ 
+ 
+@@ -10931,6 +10927,40 @@ ada_operator_length (struct expression *exp, int pc, int *oplenp, int *argsp)
      }
  }
  
@@ -260,7 +249,7 @@ index 24def95..4682045 100644
  static char *
  ada_op_name (enum exp_opcode opcode)
  {
-@@ -11325,6 +11359,7 @@ parse (void)
+@@ -11319,6 +11349,7 @@ parse (void)
  static const struct exp_descriptor ada_exp_descriptor = {
    ada_print_subexp,
    ada_operator_length,
@@ -301,11 +290,36 @@ index 5c9e558..55a1873 100644
    i386_set_debug_register_length (8);
  
    /* Override the GNU/Linux inferior startup hook.  */
+diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c
+index 5776bb0..6099e99 100644
+--- a/gdb/ax-gdb.c
++++ b/gdb/ax-gdb.c
+@@ -1810,7 +1810,7 @@ gen_expr (struct expression *exp, union exp_element **pc,
+ 
+ 	/* Calling lookup_block_symbol is necessary to get the LOC_REGISTER
+ 	   symbol instead of the LOC_ARG one (if both exist).  */
+-	sym = lookup_block_symbol (b, this_name, NULL, VAR_DOMAIN);
++	sym = lookup_block_symbol (b, this_name, VAR_DOMAIN);
+ 	if (!sym)
+ 	  error (_("no `%s' found"), this_name);
+ 
 diff --git a/gdb/block.c b/gdb/block.c
-index 48ac21b..80003b8 100644
+index 48ac21b..0eccecb 100644
 --- a/gdb/block.c
 +++ b/gdb/block.c
-@@ -318,6 +318,25 @@ allocate_block (struct obstack *obstack)
+@@ -227,8 +227,9 @@ block_set_scope (struct block *block, const char *scope,
+   BLOCK_NAMESPACE (block)->scope = scope;
+ }
+ 
+-/* This returns the using directives list associated with BLOCK, if
+-   any.  */
++/* This returns the first using directives associated with BLOCK, if
++   any.  Each BLOCK_NAMESPACE()->USING already contains all the namespaces
++   imported at that code point - even those from its parent blocks.  */
+ 
+ struct using_direct *
+ block_using (const struct block *block)
+@@ -318,6 +319,25 @@ allocate_block (struct obstack *obstack)
    BLOCK_SUPERBLOCK (bl) = NULL;
    BLOCK_DICT (bl) = NULL;
    BLOCK_NAMESPACE (bl) = NULL;
@@ -367,7 +381,7 @@ index 7eedb6c..b147826 100644
 +
  #endif /* BLOCK_H */
 diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
-index 0dc8474..1a309b5 100644
+index d404ee7..2be397f 100644
 --- a/gdb/breakpoint.c
 +++ b/gdb/breakpoint.c
 @@ -61,6 +61,7 @@
@@ -378,7 +392,7 @@ index 0dc8474..1a309b5 100644
  
  /* readline include files */
  #include "readline/readline.h"
-@@ -616,6 +617,53 @@ get_breakpoint (int num)
+@@ -614,6 +615,53 @@ get_breakpoint (int num)
  }
  
  
@@ -432,7 +446,7 @@ index 0dc8474..1a309b5 100644
  /* condition N EXP -- set break condition of breakpoint N to EXP.  */
  
  static void
-@@ -636,42 +684,7 @@ condition_command (char *arg, int from_tty)
+@@ -634,42 +682,7 @@ condition_command (char *arg, int from_tty)
    ALL_BREAKPOINTS (b)
      if (b->number == bnum)
        {
@@ -476,7 +490,7 @@ index 0dc8474..1a309b5 100644
  	return;
        }
  
-@@ -1870,6 +1883,36 @@ create_longjmp_master_breakpoint (char *func_name)
+@@ -1868,6 +1881,36 @@ create_longjmp_master_breakpoint (char *func_name)
    do_cleanups (old_chain);
  }
  
@@ -513,7 +527,7 @@ index 0dc8474..1a309b5 100644
  void
  update_breakpoints_after_exec (void)
  {
-@@ -1911,7 +1954,7 @@ update_breakpoints_after_exec (void)
+@@ -1909,7 +1952,7 @@ update_breakpoints_after_exec (void)
      /* Thread event breakpoints must be set anew after an exec(),
         as must overlay event and longjmp master breakpoints.  */
      if (b->type == bp_thread_event || b->type == bp_overlay_event
@@ -522,7 +536,7 @@ index 0dc8474..1a309b5 100644
        {
  	delete_breakpoint (b);
  	continue;
-@@ -1926,7 +1969,8 @@ update_breakpoints_after_exec (void)
+@@ -1924,7 +1967,8 @@ update_breakpoints_after_exec (void)
  
      /* Longjmp and longjmp-resume breakpoints are also meaningless
         after an exec.  */
@@ -532,7 +546,7 @@ index 0dc8474..1a309b5 100644
        {
  	delete_breakpoint (b);
  	continue;
-@@ -1987,6 +2031,7 @@ update_breakpoints_after_exec (void)
+@@ -1985,6 +2029,7 @@ update_breakpoints_after_exec (void)
    create_longjmp_master_breakpoint ("_longjmp");
    create_longjmp_master_breakpoint ("siglongjmp");
    create_longjmp_master_breakpoint ("_siglongjmp");
@@ -540,7 +554,7 @@ index 0dc8474..1a309b5 100644
  }
  
  int
-@@ -2010,6 +2055,7 @@ detach_breakpoints (int pid)
+@@ -2008,6 +2053,7 @@ detach_breakpoints (int pid)
[...9903 lines suppressed...]
-@@ -3042,8 +3121,6 @@ value_slice (struct value *array, int lowbound, int length)
+@@ -2328,12 +2407,25 @@ find_overload_match (struct type **arg_types, int nargs,
+   if (method)
+     {
+       gdb_assert (obj);
++
++      /* OBJ may be a pointer value rather than the object itself.  */
++      obj = coerce_ref (obj);
++      while (TYPE_CODE (check_typedef (value_type (obj))) == TYPE_CODE_PTR)
++	obj = coerce_ref (value_ind (obj));
+       obj_type_name = TYPE_NAME (value_type (obj));
+-      /* Hack: evaluate_subexp_standard often passes in a pointer
+-         value rather than the object itself, so try again.  */
+-      if ((!obj_type_name || !*obj_type_name) 
+-	  && (TYPE_CODE (value_type (obj)) == TYPE_CODE_PTR))
+-	obj_type_name = TYPE_NAME (TYPE_TARGET_TYPE (value_type (obj)));
++
++      /* First check whether this is a data member, e.g. a pointer to
++	 a function.  */
++      if (TYPE_CODE (check_typedef (value_type (obj))) == TYPE_CODE_STRUCT)
++	{
++	  *valp = search_struct_field (name, obj, 0,
++				       check_typedef (value_type (obj)), 0);
++	  if (*valp)
++	    {
++	      *staticp = 1;
++	      return 0;
++	    }
++	}
+ 
+       fns_ptr = value_find_oload_method_list (&temp, name, 
+ 					      0, &num_fns, 
+@@ -2353,16 +2445,29 @@ find_overload_match (struct type **arg_types, int nargs,
+     }
+   else
+     {
+-      const char *qualified_name = SYMBOL_CPLUS_DEMANGLED_NAME (fsym);
++      const char *qualified_name = SYMBOL_NATURAL_NAME (fsym);
+ 
+-      /* If we have a C++ name, try to extract just the function
+-	 part.  */
+-      if (qualified_name)
+-	func_name = cp_func_name (qualified_name);
++      /* If we have a function with a C++ name, try to extract just
++	 the function part.  Do not try this for non-functions (e.g.
++	 function pointers).  */
++      if (qualified_name
++	  && TYPE_CODE (check_typedef (SYMBOL_TYPE (fsym))) == TYPE_CODE_FUNC)
++	{
++	  func_name = cp_func_name (qualified_name);
++
++	  /* If cp_func_name did not remove anything, the name of the
++	     symbol did not include scope or argument types - it was
++	     probably a C-style function.  */
++	  if (func_name && strcmp (func_name, qualified_name) == 0)
++	    {
++	      xfree (func_name);
++	      func_name = NULL;
++	    }
++	}
+ 
+-      /* If there was no C++ name, this must be a C-style function.
+-	 Just return the same symbol.  Do the same if cp_func_name
+-	 fails for some reason.  */
++      /* If there was no C++ name, this must be a C-style function or
++	 not a function at all.  Just return the same symbol.  Do the
++	 same if cp_func_name fails for some reason.  */
+       if (func_name == NULL)
+         {
+ 	  *symp = fsym;
+@@ -3096,7 +3201,7 @@ value_maybe_namespace_elt (const struct type *curtype,
+   struct symbol *sym;
+   struct value *result;
+ 
+-  sym = cp_lookup_symbol_namespace (namespace_name, name, NULL,
++  sym = cp_lookup_symbol_namespace(namespace_name, name,
+ 				    get_selected_block (0), 
+ 				    VAR_DOMAIN);
+ 
+@@ -3240,7 +3345,7 @@ value_of_local (const char *name, int complain)
+ 
+   /* Calling lookup_block_symbol is necessary to get the LOC_REGISTER
+      symbol instead of the LOC_ARG one (if both exist).  */
+-  sym = lookup_block_symbol (b, name, NULL, VAR_DOMAIN);
++  sym = lookup_block_symbol (b, name, VAR_DOMAIN);
+   if (sym == NULL)
+     {
+       if (complain)
+@@ -3294,8 +3399,6 @@ value_slice (struct value *array, int lowbound, int length)
        || lowbound + length - 1 > upperbound)
      error (_("slice out of range"));
  
@@ -19734,7 +25282,7 @@ index a462ee4..968cdf4 100644
 +  observer_attach_mark_used (value_types_mark_used);
  }
 diff --git a/gdb/value.h b/gdb/value.h
-index 8ac62b8..051c8c5 100644
+index 42b4497..6f9923c 100644
 --- a/gdb/value.h
 +++ b/gdb/value.h
 @@ -342,11 +342,16 @@ extern LONGEST unpack_field_as_long (struct type *type,
@@ -19754,7 +25302,7 @@ index 8ac62b8..051c8c5 100644
  extern struct value *value_at (struct type *type, CORE_ADDR addr);
  extern struct value *value_at_lazy (struct type *type, CORE_ADDR addr);
  
-@@ -684,7 +689,7 @@ extern struct value *value_allocate_space_in_inferior (int);
+@@ -689,7 +694,7 @@ extern struct value *value_allocate_space_in_inferior (int);
  extern struct value *value_of_local (const char *name, int complain);
  
  extern struct value *value_subscripted_rvalue (struct value *array,
@@ -19764,7 +25312,7 @@ index 8ac62b8..051c8c5 100644
  /* User function handler.  */
  
 diff --git a/gdb/varobj.c b/gdb/varobj.c
-index 46d6b34..0536753 100644
+index 6ec87b3..b274ade 100644
 --- a/gdb/varobj.c
 +++ b/gdb/varobj.c
 @@ -26,6 +26,8 @@
@@ -19776,75 +25324,20 @@ index 46d6b34..0536753 100644
  
  #include "gdb_assert.h"
  #include "gdb_string.h"
-@@ -3468,6 +3470,19 @@ java_value_of_variable (struct varobj *var, enum varobj_display_formats format)
-   return cplus_value_of_variable (var, format);
- }
- 
-+/* Iterate all the existing VAROBJs and call the FUNC callback for them with an
-+   arbitrary caller supplied DATA pointer.  */
-+
-+static void
-+all_varobjs (void (*func) (struct varobj *var, void *data), void *data)
-+{
-+  struct vlist **vlp, *vl;
-+
-+  for (vlp = varobj_table; vlp < varobj_table + VAROBJ_TABLE_SIZE; vlp++)
-+    for (vl = *vlp; vl != NULL; vl = vl->next)
-+      (*func) (vl->var, data);
-+}
-+
- /* Iterate all the existing _root_ VAROBJs and call the FUNC callback for them
-    with an arbitrary caller supplied DATA pointer.  */
- 
-@@ -3485,6 +3500,43 @@ all_root_varobjs (void (*func) (struct varobj *var, void *data), void *data)
+@@ -3495,7 +3497,7 @@ all_root_varobjs (void (*func) (struct varobj *var, void *data), void *data)
        (*func) (var_root->rootvar, data);
      }
  }
+-
 +
-+/* Helper for varobj_types_mark_used.  Call type_mark_used for any TYPEs
-+   referenced from this VAR.  */
-+
-+static void
-+varobj_types_mark_used_iter (struct varobj *var, void *unused)
-+{
-+  /* Even FLOATING or IS_INVALID VARs with non-NULL TYPE references will
-+     free them in free_variable.  Still EXP may also reference TYPEs
-+     but these belong to SYMBOLs which should be always associated with
-+     an OBJFILE (and therefore not useful to be type_mark_used).  */
-+
-+  type_mark_used (var->type);
-+  if (var->value)
-+    type_mark_used (value_type (var->value));
-+
-+  /* Check VAROBJROOTs only once during the varobj_types_mark_used pass.  */
-+
-+  if (var->root->rootvar == var)
-+    {
-+      if (var->root->exp)
-+	exp_types_mark_used (var->root->exp);
-+    }
-+}
-+
-+/* Call type_mark_used for any TYPEs referenced from this GDB source file.  */
-+
-+static void
-+varobj_types_mark_used (void)
-+{
-+  /* Check all the VAROBJs, even non-root ones.  Child VAROBJs can reference
-+     types from other OBJFILEs through TYPE_IS_OPAQUE resolutions by
-+     check_typedef.  Such types references will not be interconnected into the
-+     same TYPE_GROUP.  */
-+
-+  all_varobjs (varobj_types_mark_used_iter, NULL);
-+}
- 
  extern void _initialize_varobj (void);
  void
+ _initialize_varobj (void)
 diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
-index 6301b61..47c2acb 100644
+index 25cc2d9..6784654 100644
 --- a/gdb/xcoffread.c
 +++ b/gdb/xcoffread.c
-@@ -3035,6 +3035,7 @@ static struct sym_fns xcoff_sym_fns =
+@@ -3030,6 +3030,7 @@ static struct sym_fns xcoff_sym_fns =
    xcoff_new_init,		/* sym_new_init: init anything gbl to entire symtab */
    xcoff_symfile_init,		/* sym_init: read initial info, setup for sym_read() */
    xcoff_initial_scan,		/* sym_read: read a symbol file into symtab */

gdb-bz539590-gnu-ifunc.patch:
 alpha-linux-tdep.c                 |    4 +
 amd64-linux-tdep.c                 |    3 
 arm-linux-tdep.c                   |    3 
 elfread.c                          |    8 +-
 frv-linux-tdep.c                   |   21 ++++++
 frv-tdep.c                         |    2 
 frv-tdep.h                         |    3 
 gdbtypes.c                         |    9 ++
 gdbtypes.h                         |   13 ++++
 hppa-linux-tdep.c                  |   21 ++++++
 hppa-tdep.c                        |    2 
 hppa-tdep.h                        |    4 +
 i386-linux-tdep.c                  |    3 
 ia64-linux-tdep.c                  |    4 +
 infcall.c                          |   14 +++-
 linux-tdep.c                       |   42 +++++++++++++
 linux-tdep.h                       |    7 ++
 m32r-linux-tdep.c                  |    4 +
 microblaze-linux-tdep.c            |    4 +
 minsyms.c                          |   19 +++++-
 mips-linux-tdep.c                  |    4 +
 mn10300-linux-tdep.c               |    4 +
 objc-lang.c                        |   21 +++---
 parse.c                            |    5 +
 ppc-linux-tdep.c                   |   16 ++++-
 sh-linux-tdep.c                    |    4 +
 solib-svr4.c                       |    3 
 sparc-linux-tdep.c                 |    4 +
 sparc64-linux-tdep.c               |    4 +
 symmisc.c                          |    3 
 symtab.c                           |    2 
 symtab.h                           |    4 +
 testsuite/gdb.base/gnu-ifunc-lib.c |   54 +++++++++++++++++
 testsuite/gdb.base/gnu-ifunc.c     |   36 +++++++++++
 testsuite/gdb.base/gnu-ifunc.exp   |  115 +++++++++++++++++++++++++++++++++++++
 xtensa-linux-tdep.c                |    4 +
 36 files changed, 447 insertions(+), 26 deletions(-)

Index: gdb-bz539590-gnu-ifunc.patch
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/gdb-bz539590-gnu-ifunc.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- gdb-bz539590-gnu-ifunc.patch	16 Jan 2010 22:32:08 -0000	1.2
+++ gdb-bz539590-gnu-ifunc.patch	21 Jan 2010 16:09:10 -0000	1.3
@@ -1,41 +1,65 @@
-gdb/
-2009-11-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+http://sourceware.org/gdb/wiki/ProjectArcher
+http://sourceware.org/gdb/wiki/ArcherBranchManagement
 
-	Transparent GNU-IFUNCs support.
-	* elfread.c (record_minimal_symbol): Apply also for mst_text_gnu_ifunc.
-	(elf_symtab_read): Set also mst_text_gnu_ifunc.
-	* gdbtypes.c (init_type): Support TYPE_FLAG_GNU_IFUNC.
-	(gdbtypes_post_init): Initialize builtin_func_func_ptr.
-	(objfile_type): Initialize nodebug_text_gnu_ifunc_symbol.
-	* gdbtypes.h (enum type_flag_value <TYPE_FLAG_GNU_IFUNC>)
-	(TYPE_GNU_IFUNC, struct main_type <flag_gnu_ifunc>)
-	(struct builtin_type <builtin_func_func_ptr>)
-	(struct objfile_type <nodebug_text_gnu_ifunc_symbol>): New.
-	* infcall.c (find_function_addr <TYPE_GNU_IFUNC (ftype)>): New.
-	* minsyms.c (lookup_minimal_symbol_text, prim_record_minimal_symbol)
-	(find_solib_trampoline_target): Support also mst_text_gnu_ifunc.
-	(in_gnu_ifunc_stub): New.
-	* parse.c (write_exp_msymbol <mst_text_gnu_ifunc>): New.
-	* solib-svr4.c (svr4_in_dynsym_resolve_code): Call also
-	in_gnu_ifunc_stub.
-	* symmisc.c (dump_msymbols <mst_text_gnu_ifunc>): New.
-	* symtab.c (search_symbols): Support also mst_text_gnu_ifunc.
-	* symtab.h (enum minimal_symbol_type <mst_text_gnu_ifunc>)
-	(in_gnu_ifunc_stub): New.
-	* linespec.c: Include infcall.h.
-	(minsym_found <MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc>): New.
+GIT snapshot:
+commit 791165df07fd22d381def1318954c389a606f81a
 
-gdb/testsuite/
-2009-11-24  Jan Kratochvil  <jan.kratochvil at redhat.com>
+archer-jankratochvil-ifunc
 
-	Transparent GNU-IFUNCs support.
-	* gdb.base/gnu-ifunc-lib.c, gdb.base/gnu-ifunc.c,
-	gdb.base/gnu-ifunc.exp: New.
-
-Index: gdb-7.0.50.20100115/gdb/elfread.c
+Index: gdb-7.0.50.20100121/gdb/alpha-linux-tdep.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/alpha-linux-tdep.c	2010-01-01 08:31:29.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/alpha-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -26,6 +26,7 @@
+ #include "symtab.h"
+ #include "regset.h"
+ #include "regcache.h"
++#include "linux-tdep.h"
+ 
+ #include "alpha-tdep.h"
+ 
+@@ -236,6 +237,9 @@ alpha_linux_init_abi (struct gdbarch_inf
+ 
+   set_gdbarch_regset_from_core_section
+     (gdbarch, alpha_linux_regset_from_core_section);
++
++  set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++					  linux_convert_from_func_ptr_addr);
+ }
+ 
+ /* Provide a prototype to silence -Wmissing-prototypes.  */
+Index: gdb-7.0.50.20100121/gdb/amd64-linux-tdep.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/amd64-linux-tdep.c	2010-01-21 15:13:26.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/amd64-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -1557,6 +1557,9 @@ amd64_linux_init_abi (struct gdbarch_inf
+   amd64_linux_record_tdep.arg6 = AMD64_R9_REGNUM;
+ 
+   tdep->i386_syscall_record = amd64_linux_syscall_record;
++
++  set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++					  linux_convert_from_func_ptr_addr);
+ }
+ 
+ 
+Index: gdb-7.0.50.20100121/gdb/arm-linux-tdep.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/elfread.c	2010-01-15 11:45:34.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/elfread.c	2010-01-15 12:17:16.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/arm-linux-tdep.c	2010-01-01 08:31:29.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/arm-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -907,6 +907,9 @@ arm_linux_init_abi (struct gdbarch_info 
+   set_gdbarch_displaced_step_free_closure (gdbarch,
+ 					   simple_displaced_step_free_closure);
+   set_gdbarch_displaced_step_location (gdbarch, displaced_step_at_entry_point);
++
++  set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++					  linux_convert_from_func_ptr_addr);
+ }
+ 
+ /* Provide a prototype to silence -Wmissing-prototypes.  */
+Index: gdb-7.0.50.20100121/gdb/elfread.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/elfread.c	2010-01-21 15:13:27.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/elfread.c	2010-01-21 15:15:41.000000000 +0100
 @@ -184,7 +184,8 @@ record_minimal_symbol (const char *name,
  {
    struct gdbarch *gdbarch = get_objfile_arch (objfile);
@@ -58,10 +82,80 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
  		}
  	      else if ((sym->name[0] == '.' && sym->name[1] == 'L')
  		       || ((sym->flags & BSF_LOCAL)
-Index: gdb-7.0.50.20100115/gdb/gdbtypes.c
+Index: gdb-7.0.50.20100121/gdb/frv-linux-tdep.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/gdbtypes.c	2010-01-15 03:22:31.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/gdbtypes.c	2010-01-15 12:16:49.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/frv-linux-tdep.c	2010-01-01 08:31:32.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/frv-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -32,6 +32,7 @@
+ #include "frame-unwind.h"
+ #include "regset.h"
+ #include "gdb_string.h"
++#include "linux-tdep.h"
+ 
+ /* Define the size (in bytes) of an FR-V instruction.  */
+ static const int frv_instr_size = 4;
+@@ -486,7 +487,21 @@ frv_linux_regset_from_core_section (stru
+   return NULL;
+ }
+ 
+-
++static CORE_ADDR
++frv_linux_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
++				      CORE_ADDR addr,
++				      struct target_ops *targ)
++{
++  CORE_ADDR pc = frv_convert_from_func_ptr_addr (gdbarch, addr, targ);
++  CORE_ADDR resolved;
++
++  resolved = linux_convert_from_func_and_ptr (gdbarch, addr, pc);
++  if (resolved != pc)
++    pc = frv_convert_from_func_ptr_addr (gdbarch, resolved, targ);
++
++  return pc;
++}
++
+ static void
+ frv_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
+ {
+@@ -494,6 +509,10 @@ frv_linux_init_abi (struct gdbarch_info 
+   frame_unwind_append_unwinder (gdbarch, &frv_linux_sigtramp_frame_unwind); 
+   set_gdbarch_regset_from_core_section (gdbarch,
+                                         frv_linux_regset_from_core_section);
++
++  if (frv_abi (gdbarch) == FRV_ABI_FDPIC)
++    set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++					  frv_linux_convert_from_func_ptr_addr);
+ }
+ 
+ static enum gdb_osabi
+Index: gdb-7.0.50.20100121/gdb/frv-tdep.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/frv-tdep.c	2010-01-01 08:31:32.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/frv-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -1169,7 +1169,7 @@ find_func_descr (struct gdbarch *gdbarch
+   return descr;
+ }
+ 
+-static CORE_ADDR
++CORE_ADDR
+ frv_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr,
+                                 struct target_ops *targ)
+ {
+Index: gdb-7.0.50.20100121/gdb/frv-tdep.h
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/frv-tdep.h	2010-01-01 08:31:32.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/frv-tdep.h	2010-01-21 15:15:41.000000000 +0100
+@@ -118,3 +118,6 @@ CORE_ADDR frv_fetch_objfile_link_map (st
+ struct target_so_ops;
+ extern struct target_so_ops frv_so_ops;
+ 
++CORE_ADDR frv_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
++					  CORE_ADDR addr,
++					  struct target_ops *targ);
+Index: gdb-7.0.50.20100121/gdb/gdbtypes.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/gdbtypes.c	2010-01-21 15:13:26.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/gdbtypes.c	2010-01-21 15:15:41.000000000 +0100
 @@ -1946,6 +1946,8 @@ init_type (enum type_code code, int leng
      TYPE_NOTTEXT (type) = 1;
    if (flags & TYPE_FLAG_FIXED_INSTANCE)
@@ -71,16 +165,16 @@ Index: gdb-7.0.50.20100115/gdb/gdbtypes.
  
    if (name)
      TYPE_NAME (type) = obsavestring (name, strlen (name),
-@@ -3846,6 +3848,8 @@ gdbtypes_post_init (struct gdbarch *gdba
+@@ -3955,6 +3957,8 @@ gdbtypes_post_init (struct gdbarch *gdba
      = lookup_pointer_type (builtin_type->builtin_void);
    builtin_type->builtin_func_ptr
      = lookup_pointer_type (lookup_function_type (builtin_type->builtin_void));
-+  builtin_type->builtin_func_func_ptr
-+    = lookup_pointer_type (lookup_function_type (builtin_type->builtin_func_ptr));
++  builtin_type->builtin_func_func
++    = lookup_function_type (builtin_type->builtin_func_ptr);
  
    /* This type represents a GDB internal function.  */
    builtin_type->internal_fn
-@@ -3962,6 +3966,11 @@ objfile_type (struct objfile *objfile)
+@@ -4071,6 +4075,11 @@ objfile_type (struct objfile *objfile)
  		 "<text variable, no debug info>", objfile);
    TYPE_TARGET_TYPE (objfile_type->nodebug_text_symbol)
      = objfile_type->builtin_int;
@@ -92,10 +186,10 @@ Index: gdb-7.0.50.20100115/gdb/gdbtypes.
    objfile_type->nodebug_data_symbol
      = init_type (TYPE_CODE_INT,
  		 gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT, 0,
-Index: gdb-7.0.50.20100115/gdb/gdbtypes.h
+Index: gdb-7.0.50.20100121/gdb/gdbtypes.h
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/gdbtypes.h	2010-01-15 11:49:26.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/gdbtypes.h	2010-01-15 12:16:49.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/gdbtypes.h	2010-01-21 15:14:41.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/gdbtypes.h	2010-01-21 15:16:39.000000000 +0100
 @@ -188,6 +188,7 @@ enum type_flag_value
    TYPE_FLAG_FIXED_INSTANCE = (1 << 15),
    TYPE_FLAG_STUB_SUPPORTED = (1 << 16),
@@ -125,18 +219,18 @@ Index: gdb-7.0.50.20100115/gdb/gdbtypes.
    unsigned int flag_fixed_instance : 1;
    unsigned int flag_objfile_owned : 1;
    unsigned int flag_discardable : 1;
-@@ -1250,6 +1258,10 @@ struct builtin_type
+@@ -1243,6 +1251,10 @@ struct builtin_type
       (*) () can server as a generic function pointer.  */
    struct type *builtin_func_ptr;
  
-+  /* `pointer to function returning pointer to function (returning void)' type.
++  /* `function returning pointer to function (returning void)' type.
 +     The final void return type is not significant for it.  */
-+  struct type *builtin_func_func_ptr;
++  struct type *builtin_func_func;
 +
  
    /* Special-purpose types.  */
  
-@@ -1292,6 +1304,7 @@ struct objfile_type
+@@ -1285,6 +1297,7 @@ struct objfile_type
  
    /* Types used for symbols with no debug information.  */
    struct type *nodebug_text_symbol;
@@ -144,77 +238,260 @@ Index: gdb-7.0.50.20100115/gdb/gdbtypes.
    struct type *nodebug_data_symbol;
    struct type *nodebug_unknown_symbol;
    struct type *nodebug_tls_symbol;
-Index: gdb-7.0.50.20100115/gdb/infcall.c
+Index: gdb-7.0.50.20100121/gdb/hppa-linux-tdep.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/infcall.c	2010-01-01 08:31:36.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/infcall.c	2010-01-15 12:16:49.000000000 +0100
-@@ -286,6 +286,27 @@ find_function_addr (struct value *functi
-   else
-     error (_("Invalid data type for function to be called."));
+--- gdb-7.0.50.20100121.orig/gdb/hppa-linux-tdep.c	2010-01-01 08:31:33.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/hppa-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -32,6 +32,7 @@
+ #include "regset.h"
+ #include "regcache.h"
+ #include "hppa-tdep.h"
++#include "linux-tdep.h"
  
-+  if (TYPE_GNU_IFUNC (ftype))
-+    {
-+      struct type *func_func_ptr;
-+
-+      funaddr += gdbarch_deprecated_function_start_offset (gdbarch);
+ #include "elf/common.h"
+ 
+@@ -513,7 +514,21 @@ hppa_linux_regset_from_core_section (str
+ 
+   return NULL;
+ }
+-
 +
-+      /* Cast FUNADDR to drop TYPE_GNU_IFUNC and being able to call gnu-ifunc
-+	 FUNADDR without causing deadlock by this block of code.  */
++static CORE_ADDR
++hppa32_linux_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
++					 CORE_ADDR addr,
++					 struct target_ops *targ)
++{
++  CORE_ADDR pc = hppa32_convert_from_func_ptr_addr (gdbarch, addr, targ);
++  CORE_ADDR resolved;
 +
-+      func_func_ptr = builtin_type (gdbarch)->builtin_func_func_ptr;
-+      function = value_from_pointer (func_func_ptr, funaddr);
++  resolved = linux_convert_from_func_and_ptr (gdbarch, addr, pc);
++  if (resolved != pc)
++    pc = hppa32_convert_from_func_ptr_addr (gdbarch, resolved, targ);
 +
-+      /* gnu-ifuncs have no arguments.  */
-+      function = call_function_by_hand (function, 0, NULL);
++  return pc;
++}
+ 
+ /* Forward declarations.  */
+ extern initialize_file_ftype _initialize_hppa_linux_tdep;
+@@ -555,6 +570,10 @@ hppa_linux_init_abi (struct gdbarch_info
+   /* Enable TLS support.  */
+   set_gdbarch_fetch_tls_load_module_address (gdbarch,
+                                              svr4_fetch_objfile_link_map);
++
++  if (tdep->bytes_per_address == 4)
++    set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++				       hppa32_linux_convert_from_func_ptr_addr);
+ }
+ 
+ void
+Index: gdb-7.0.50.20100121/gdb/hppa-tdep.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/hppa-tdep.c	2010-01-19 10:39:12.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/hppa-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -1247,7 +1247,7 @@ hppa64_return_value (struct gdbarch *gdb
+ }
+ 
+ 
+-static CORE_ADDR
++CORE_ADDR
+ hppa32_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr,
+ 				   struct target_ops *targ)
+ {
+Index: gdb-7.0.50.20100121/gdb/hppa-tdep.h
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/hppa-tdep.h	2010-01-01 08:31:33.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/hppa-tdep.h	2010-01-21 15:15:41.000000000 +0100
+@@ -246,4 +246,8 @@ extern int hppa_in_solib_call_trampoline
+ 					  CORE_ADDR pc, char *name);
+ extern CORE_ADDR hppa_skip_trampoline_code (struct frame_info *, CORE_ADDR pc);
+ 
++extern CORE_ADDR hppa32_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
++						    CORE_ADDR addr,
++						    struct target_ops *targ);
 +
-+      funaddr = value_as_address (function);
+ #endif  /* hppa-tdep.h */
+Index: gdb-7.0.50.20100121/gdb/i386-linux-tdep.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/i386-linux-tdep.c	2010-01-04 15:57:43.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/i386-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -798,6 +798,9 @@ i386_linux_init_abi (struct gdbarch_info
+                                   i386_linux_get_syscall_number);
+ 
+   set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type);
 +
-+      /* This is `int' as the return type of the final function.  */
-+      value_type = TYPE_TARGET_TYPE (value_type);
-+    }
++  set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++					  linux_convert_from_func_ptr_addr);
+ }
+ 
+ /* Provide a prototype to silence -Wmissing-prototypes.  */
+Index: gdb-7.0.50.20100121/gdb/ia64-linux-tdep.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/ia64-linux-tdep.c	2010-01-01 08:31:36.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/ia64-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -26,6 +26,7 @@
+ #include "osabi.h"
+ #include "solib-svr4.h"
+ #include "symtab.h"
++#include "linux-tdep.h"
+ 
+ /* The sigtramp code is in a non-readable (executable-only) region
+    of memory called the ``gate page''.  The addresses in question
+@@ -139,6 +140,9 @@ ia64_linux_init_abi (struct gdbarch_info
+   /* Enable TLS support.  */
+   set_gdbarch_fetch_tls_load_module_address (gdbarch,
+                                              svr4_fetch_objfile_link_map);
 +
-   if (retval_type != NULL)
-     *retval_type = value_type;
-   return funaddr + gdbarch_deprecated_function_start_offset (gdbarch);
-Index: gdb-7.0.50.20100115/gdb/linespec.c
-===================================================================
---- gdb-7.0.50.20100115.orig/gdb/linespec.c	2010-01-12 06:48:56.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/linespec.c	2010-01-15 12:16:49.000000000 +0100
-@@ -40,6 +40,7 @@
- #include "interps.h"
- #include "mi/mi-cmds.h"
++  set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++					  linux_convert_from_func_ptr_addr);
+ }
+ 
+ /* Provide a prototype to silence -Wmissing-prototypes.  */
+Index: gdb-7.0.50.20100121/gdb/infcall.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/infcall.c	2010-01-01 08:31:36.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/infcall.c	2010-01-21 15:15:41.000000000 +0100
+@@ -252,9 +252,17 @@ find_function_addr (struct value *functi
+       if (TYPE_CODE (ftype) == TYPE_CODE_FUNC
+ 	  || TYPE_CODE (ftype) == TYPE_CODE_METHOD)
+ 	{
+-	  funaddr = gdbarch_convert_from_func_ptr_addr (gdbarch, funaddr,
+-							&current_target);
+-	  value_type = TYPE_TARGET_TYPE (ftype);
++	  CORE_ADDR funaddr2;
++
++	  funaddr2 = gdbarch_convert_from_func_ptr_addr (gdbarch, funaddr,
++							 &current_target);
++
++	  /* If TYPE_GNU_IFUNC is currently not resolvable keep its type.  */
++	  if (funaddr2 != funaddr || !TYPE_GNU_IFUNC (ftype))
++	    {
++	      funaddr = funaddr2;
++	      value_type = TYPE_TARGET_TYPE (ftype);
++	    }
+ 	}
+     }
+   else if (code == TYPE_CODE_INT)
+Index: gdb-7.0.50.20100121/gdb/linux-tdep.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/linux-tdep.c	2010-01-14 22:20:11.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -23,6 +23,8 @@
+ #include "auxv.h"
  #include "target.h"
+ #include "elf/common.h"
++#include "value.h"
 +#include "infcall.h"
  
- /* We share this one with symtab.c, but it is not exported widely. */
+ /* This function is suitable for architectures that don't
+    extend/override the standard siginfo structure.  */
+@@ -152,3 +154,43 @@ linux_has_shared_address_space (void)
  
-@@ -1867,6 +1868,22 @@ minsym_found (int funfirstline, struct m
-   pc = gdbarch_convert_from_func_ptr_addr (gdbarch,
-                                            values.sals[0].pc,
-                                            &current_target);
-+
-+  /* Call gnu-ifunc to resolve breakpoint at its returned function.  */
-+  if (MSYMBOL_TYPE (msymbol) == mst_text_gnu_ifunc)
-+    {
-+      struct type *func_func_ptr;
-+      struct value *function;
+   return target_is_uclinux;
+ }
 +
-+      func_func_ptr = builtin_type (gdbarch)->builtin_func_func_ptr;
-+      function = value_from_pointer (func_func_ptr, pc);
++/* Call gnu-ifunc to resolve breakpoint at its returned function.  */
 +
-+      /* gnu-ifuncs have no arguments.  */
-+      function = call_function_by_hand (function, 0, NULL);
++CORE_ADDR
++linux_convert_from_func_and_ptr (struct gdbarch *gdbarch, CORE_ADDR func_ptr,
++                                 CORE_ADDR pc)
++{
++  struct type *func_func_type = builtin_type (gdbarch)->builtin_func_func;
++  struct minimal_symbol *msymbol;
++  struct value *function, *address;
++
++  if (!target_has_execution)
++    return pc;
++
++  msymbol = lookup_minimal_symbol_by_pc (func_ptr);
++  if (msymbol == NULL)
++    return pc;
++  if (MSYMBOL_TYPE (msymbol) != mst_text_gnu_ifunc)
++    return pc;
++
++  /* Not at the gnu-ifunc entry point?  */
++  if (SYMBOL_VALUE_ADDRESS (msymbol) != func_ptr)
++    return pc;
++
++  function = allocate_value (func_func_type);
++  set_value_address (function, pc);
++
++  /* gnu-ifuncs have no arguments.  FUNCTION is the code instruction address
++     while ADDRESS is a function descriptor.  */
++  address = call_function_by_hand (function, 0, NULL);
 +
-+      pc = value_as_address (function);
-+    }
++  return value_as_address (address);
++}
++
++CORE_ADDR
++linux_convert_from_func_ptr_addr (struct gdbarch *gdbarch, CORE_ADDR addr,
++				  struct target_ops *targ)
++{
++  return linux_convert_from_func_and_ptr (gdbarch, addr, addr);
++}
+Index: gdb-7.0.50.20100121/gdb/linux-tdep.h
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/linux-tdep.h	2010-01-01 08:31:37.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/linux-tdep.h	2010-01-21 15:15:41.000000000 +0100
+@@ -22,4 +22,11 @@
+ 
+ struct type *linux_get_siginfo_type (struct gdbarch *);
+ 
++CORE_ADDR linux_convert_from_func_and_ptr (struct gdbarch *gdbarch,
++					   CORE_ADDR func_ptr, CORE_ADDR pc);
++
++CORE_ADDR linux_convert_from_func_ptr_addr (struct gdbarch *gdbarch,
++					    CORE_ADDR addr,
++					    struct target_ops *targ);
 +
-   if (pc != values.sals[0].pc)
-     values.sals[0] = find_pc_sect_line (pc, NULL, 0);
+ #endif /* linux-tdep.h */
+Index: gdb-7.0.50.20100121/gdb/m32r-linux-tdep.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/m32r-linux-tdep.c	2010-01-01 08:31:37.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/m32r-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -30,6 +30,7 @@
+ #include "gdb_string.h"
+ 
+ #include "glibc-tdep.h"
++#include "linux-tdep.h"
+ #include "solib-svr4.h"
+ #include "symtab.h"
+ 
+@@ -422,6 +423,9 @@ m32r_linux_init_abi (struct gdbarch_info
+   /* Enable TLS support.  */
+   set_gdbarch_fetch_tls_load_module_address (gdbarch,
+                                              svr4_fetch_objfile_link_map);
++
++  set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++					  linux_convert_from_func_ptr_addr);
+ }
  
-Index: gdb-7.0.50.20100115/gdb/minsyms.c
+ /* Provide a prototype to silence -Wmissing-prototypes.  */
+Index: gdb-7.0.50.20100121/gdb/microblaze-linux-tdep.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/minsyms.c	2010-01-15 03:22:31.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/minsyms.c	2010-01-15 12:16:49.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/microblaze-linux-tdep.c	2010-01-01 08:31:37.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/microblaze-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -35,6 +35,7 @@
+ #include "trad-frame.h"
+ #include "frame-unwind.h"
+ #include "tramp-frame.h"
++#include "linux-tdep.h"
+ 
+ 
+ static int
+@@ -133,6 +134,9 @@ microblaze_linux_init_abi (struct gdbarc
+   /* Trampolines.  */
+   tramp_frame_prepend_unwinder (gdbarch,
+ 				&microblaze_linux_sighandler_tramp_frame);
++
++  set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++					  linux_convert_from_func_ptr_addr);
+ }
+ 
+ void
+Index: gdb-7.0.50.20100121/gdb/minsyms.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/minsyms.c	2010-01-21 15:13:26.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/minsyms.c	2010-01-21 15:15:41.000000000 +0100
 @@ -331,8 +331,9 @@ lookup_minimal_symbol_text (const char *
  	       msymbol = msymbol->hash_next)
  	    {
@@ -262,10 +539,93 @@ Index: gdb-7.0.50.20100115/gdb/minsyms.c
  	    && strcmp (SYMBOL_LINKAGE_NAME (msymbol),
  		       SYMBOL_LINKAGE_NAME (tsymbol)) == 0)
  	  return SYMBOL_VALUE_ADDRESS (msymbol);
-Index: gdb-7.0.50.20100115/gdb/parse.c
+Index: gdb-7.0.50.20100121/gdb/mips-linux-tdep.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/mips-linux-tdep.c	2010-01-01 08:31:37.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/mips-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -38,6 +38,7 @@
+ #include "target-descriptions.h"
+ #include "mips-linux-tdep.h"
+ #include "glibc-tdep.h"
++#include "linux-tdep.h"
+ 
+ static struct target_so_ops mips_svr4_so_ops;
+ 
+@@ -1225,6 +1226,9 @@ mips_linux_init_abi (struct gdbarch_info
+ 	tdesc_numbered_register (feature, tdesc_data, MIPS_RESTART_REGNUM,
+ 				 "restart");
+     }
++
++  set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++					  linux_convert_from_func_ptr_addr);
+ }
+ 
+ /* Provide a prototype to silence -Wmissing-prototypes.  */
+Index: gdb-7.0.50.20100121/gdb/mn10300-linux-tdep.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/parse.c	2010-01-15 03:22:31.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/parse.c	2010-01-15 12:16:49.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/mn10300-linux-tdep.c	2010-01-01 08:31:37.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/mn10300-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -32,6 +32,7 @@
+ #include "frame.h"
+ #include "trad-frame.h"
+ #include "tramp-frame.h"
++#include "linux-tdep.h"
+ 
+ #include <stdlib.h>
+ 
+@@ -718,6 +719,9 @@ am33_linux_init_osabi (struct gdbarch_in
+ 
+   tramp_frame_prepend_unwinder (gdbarch, &am33_linux_sigframe);
+   tramp_frame_prepend_unwinder (gdbarch, &am33_linux_rt_sigframe);
++
++  set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++					  linux_convert_from_func_ptr_addr);
+ }
+ 
+ /* Provide a prototype to silence -Wmissing-prototypes.  */
+Index: gdb-7.0.50.20100121/gdb/objc-lang.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/objc-lang.c	2010-01-14 09:03:36.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/objc-lang.c	2010-01-21 15:15:41.000000000 +0100
+@@ -1178,16 +1178,6 @@ find_methods (struct symtab *symtab, cha
+ 
+ 	  QUIT;
+ 
+-	  /* The minimal symbol might point to a function descriptor;
+-	     resolve it to the actual code address instead.  */
+-	  pc = gdbarch_convert_from_func_ptr_addr (gdbarch, pc,
+-						   &current_target);
+-
+-	  if (symtab)
+-	    if (pc < BLOCK_START (block) || pc >= BLOCK_END (block))
+-	      /* Not in the specified symtab.  */
+-	      continue;
+-
+ 	  symname = SYMBOL_NATURAL_NAME (msymbol);
+ 	  if (symname == NULL)
+ 	    continue;
+@@ -1223,6 +1213,17 @@ find_methods (struct symtab *symtab, cha
+ 	      ((nselector == NULL) || (strcmp (selector, nselector) != 0)))
+ 	    continue;
+ 
++	  /* The minimal symbol might point to a function descriptor;
++	     resolve it to the actual code address instead.  Delay the call as
++	     its resolution may be expensive.  */
++	  pc = gdbarch_convert_from_func_ptr_addr (gdbarch, pc,
++						   &current_target);
++
++	  if (symtab)
++	    if (pc < BLOCK_START (block) || pc >= BLOCK_END (block))
++	      /* Not in the specified symtab.  */
++	      continue;
++
+ 	  sym = find_pc_function (pc);
+ 	  if (sym != NULL)
+ 	    {
+Index: gdb-7.0.50.20100121/gdb/parse.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/parse.c	2010-01-21 15:13:26.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/parse.c	2010-01-21 15:16:15.000000000 +0100
 @@ -516,6 +516,11 @@ write_exp_msymbol (struct minimal_symbol
  	write_exp_elt_type (objfile_type (objfile)->nodebug_text_symbol);
        break;
@@ -278,10 +638,66 @@ Index: gdb-7.0.50.20100115/gdb/parse.c
      case mst_data:
      case mst_file_data:
      case mst_bss:
-Index: gdb-7.0.50.20100115/gdb/solib-svr4.c
+Index: gdb-7.0.50.20100121/gdb/ppc-linux-tdep.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/solib-svr4.c	2010-01-15 12:16:41.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/solib-svr4.c	2010-01-15 12:17:40.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/ppc-linux-tdep.c	2010-01-04 15:57:44.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/ppc-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -48,6 +48,7 @@
+ #include "arch-utils.h"
+ #include "spu-tdep.h"
+ #include "xml-syscall.h"
++#include "linux-tdep.h"
+ 
+ #include "features/rs6000/powerpc-32l.c"
+ #include "features/rs6000/powerpc-altivec32l.c"
+@@ -672,8 +673,19 @@ ppc64_linux_convert_from_func_ptr_addr (
+       res = bfd_get_section_contents (s->bfd, s->the_bfd_section,
+ 				      &buf, addr - s->addr, 8);
+       if (res != 0)
+-	return extract_unsigned_integer (buf, 8, byte_order)
+-		- bfd_section_vma (s->bfd, s->the_bfd_section) + s->addr;
++	{
++	  CORE_ADDR pc, resolved;
++	  
++	  pc = extract_unsigned_integer (buf, 8, byte_order)
++	       - bfd_section_vma (s->bfd, s->the_bfd_section) + s->addr;
++
++	  resolved = linux_convert_from_func_and_ptr (gdbarch, addr, pc);
++	  if (resolved != pc)
++	    pc = ppc64_linux_convert_from_func_ptr_addr (gdbarch, resolved,
++							 targ);
++
++	  return pc;
++	}
+    }
+ 
+   return addr;
+Index: gdb-7.0.50.20100121/gdb/sh-linux-tdep.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/sh-linux-tdep.c	2010-01-01 08:31:41.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/sh-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -25,6 +25,7 @@
+ 
+ #include "glibc-tdep.h"
+ #include "sh-tdep.h"
++#include "linux-tdep.h"
+ 
+ #define REGSx16(base) \
+   {(base),      0}, \
+@@ -89,6 +90,9 @@ sh_linux_init_abi (struct gdbarch_info i
+       tdep->core_gregmap = (struct sh_corefile_regmap *)gregs_table;
+       tdep->core_fpregmap = (struct sh_corefile_regmap *)fpregs_table;
+     }
++
++  set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++					  linux_convert_from_func_ptr_addr);
+ }
+ 
+ /* Provide a prototype to silence -Wmissing-prototypes.  */
+Index: gdb-7.0.50.20100121/gdb/solib-svr4.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/solib-svr4.c	2010-01-21 15:15:22.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/solib-svr4.c	2010-01-21 15:15:41.000000000 +0100
 @@ -1257,7 +1257,8 @@ svr4_in_dynsym_resolve_code (CORE_ADDR p
  	   && pc < info->interp_text_sect_high)
  	  || (pc >= info->interp_plt_sect_low
@@ -292,10 +708,54 @@ Index: gdb-7.0.50.20100115/gdb/solib-svr
  }
  
  /* Given an executable's ABFD and target, compute the entry-point
-Index: gdb-7.0.50.20100115/gdb/symmisc.c
+Index: gdb-7.0.50.20100121/gdb/sparc-linux-tdep.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/symmisc.c	2010-01-15 03:22:32.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/symmisc.c	2010-01-15 12:16:49.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/sparc-linux-tdep.c	2010-01-01 08:31:42.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/sparc-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -32,6 +32,7 @@
+ #include "symtab.h"
+ #include "trad-frame.h"
+ #include "tramp-frame.h"
++#include "linux-tdep.h"
+ 
+ #include "sparc-tdep.h"
+ 
+@@ -279,6 +280,9 @@ sparc32_linux_init_abi (struct gdbarch_i
+   dwarf2_append_unwinders (gdbarch);
+ 
+   set_gdbarch_write_pc (gdbarch, sparc_linux_write_pc);
++
++  set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++					  linux_convert_from_func_ptr_addr);
+ }
+ 
+ /* Provide a prototype to silence -Wmissing-prototypes.  */
+Index: gdb-7.0.50.20100121/gdb/sparc64-linux-tdep.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/sparc64-linux-tdep.c	2010-01-01 08:31:42.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/sparc64-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -31,6 +31,7 @@
+ #include "symtab.h"
+ #include "trad-frame.h"
+ #include "tramp-frame.h"
++#include "linux-tdep.h"
+ 
+ #include "sparc64-tdep.h"
+ 
+@@ -244,6 +245,9 @@ sparc64_linux_init_abi (struct gdbarch_i
+   tdep->step_trap = sparc64_linux_step_trap;
+ 
+   set_gdbarch_write_pc (gdbarch, sparc64_linux_write_pc);
++
++  set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++					  linux_convert_from_func_ptr_addr);
+ }
+ 
+ 
+Index: gdb-7.0.50.20100121/gdb/symmisc.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/symmisc.c	2010-01-21 15:13:27.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/symmisc.c	2010-01-21 15:15:41.000000000 +0100
 @@ -294,6 +294,9 @@ dump_msymbols (struct objfile *objfile, 
  	case mst_text:
  	  ms_type = 'T';
@@ -306,11 +766,11 @@ Index: gdb-7.0.50.20100115/gdb/symmisc.c
  	case mst_solib_trampoline:
  	  ms_type = 'S';
  	  break;
-Index: gdb-7.0.50.20100115/gdb/symtab.c
+Index: gdb-7.0.50.20100121/gdb/symtab.c
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/symtab.c	2010-01-15 03:22:31.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/symtab.c	2010-01-15 12:16:49.000000000 +0100
-@@ -3257,7 +3257,7 @@ search_symbols (char *regexp, domain_enu
+--- gdb-7.0.50.20100121.orig/gdb/symtab.c	2010-01-21 15:13:27.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/symtab.c	2010-01-21 15:15:41.000000000 +0100
+@@ -3244,7 +3244,7 @@ search_symbols (char *regexp, domain_enu
    {mst_file_data, mst_solib_trampoline, mst_abs, mst_unknown};
    static enum minimal_symbol_type types4[]
    =
@@ -319,10 +779,10 @@ Index: gdb-7.0.50.20100115/gdb/symtab.c
    enum minimal_symbol_type ourtype;
    enum minimal_symbol_type ourtype2;
    enum minimal_symbol_type ourtype3;
-Index: gdb-7.0.50.20100115/gdb/symtab.h
+Index: gdb-7.0.50.20100121/gdb/symtab.h
 ===================================================================
---- gdb-7.0.50.20100115.orig/gdb/symtab.h	2010-01-15 03:22:13.000000000 +0100
-+++ gdb-7.0.50.20100115/gdb/symtab.h	2010-01-15 12:16:49.000000000 +0100
+--- gdb-7.0.50.20100121.orig/gdb/symtab.h	2010-01-21 15:11:09.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/symtab.h	2010-01-21 15:15:41.000000000 +0100
 @@ -280,6 +280,8 @@ enum minimal_symbol_type
  {
    mst_unknown = 0,		/* Unknown type, the default */
@@ -332,7 +792,7 @@ Index: gdb-7.0.50.20100115/gdb/symtab.h
    mst_data,			/* Generally initialized data */
    mst_bss,			/* Generally uninitialized data */
    mst_abs,			/* Generally absolute (nonrelocatable) */
-@@ -1163,6 +1165,8 @@ extern struct minimal_symbol *lookup_min
+@@ -1157,6 +1159,8 @@ extern struct minimal_symbol *lookup_min
  
  extern struct minimal_symbol *lookup_minimal_symbol_by_pc (CORE_ADDR);
  
@@ -341,11 +801,11 @@ Index: gdb-7.0.50.20100115/gdb/symtab.h
  extern struct minimal_symbol
    *lookup_minimal_symbol_by_pc_section (CORE_ADDR, struct obj_section *);
  
-Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.base/gnu-ifunc-lib.c
+Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gnu-ifunc-lib.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.base/gnu-ifunc-lib.c	2010-01-15 12:16:49.000000000 +0100
-@@ -0,0 +1,45 @@
++++ gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gnu-ifunc-lib.c	2010-01-21 15:15:41.000000000 +0100
+@@ -0,0 +1,54 @@
 +/* This testcase is part of GDB, the GNU debugger.
 +
 +   Copyright 2009 Free Software Foundation, Inc.
@@ -368,6 +828,12 @@ Index: gdb-7.0.50.20100115/gdb/testsuite
 +typedef int (*final_t) (int arg);
 +
 +static int
++init_stub (int arg)
++{
++  return 0;
++}
++
++static int
 +final (int arg)
 +{
 +  return arg + 1;
@@ -379,6 +845,8 @@ Index: gdb-7.0.50.20100115/gdb/testsuite
 +gnu_ifunc_pre (void)
 +{
 +  assert (!gnu_ifunc_initialized);
++
++  gnu_ifunc_initialized = 1;
 +}
 +
 +final_t gnu_ifuncX (void) asm ("gnu_ifunc");
@@ -387,14 +855,15 @@ Index: gdb-7.0.50.20100115/gdb/testsuite
 +final_t
 +gnu_ifuncX (void)
 +{
-+  gnu_ifunc_initialized = 1;
-+
-+  return final;
++  if (!gnu_ifunc_initialized)
++    return init_stub;
++  else
++    return final;
 +}
-Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.base/gnu-ifunc.c
+Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gnu-ifunc.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.base/gnu-ifunc.c	2010-01-15 12:16:49.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gnu-ifunc.c	2010-01-21 15:15:41.000000000 +0100
 @@ -0,0 +1,36 @@
 +/* This testcase is part of GDB, the GNU debugger.
 +
@@ -432,11 +901,11 @@ Index: gdb-7.0.50.20100115/gdb/testsuite
 +
 +  return 0;	/* break-at-exit */
 +}
-Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.base/gnu-ifunc.exp
+Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gnu-ifunc.exp
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.base/gnu-ifunc.exp	2010-01-15 12:16:49.000000000 +0100
-@@ -0,0 +1,72 @@
++++ gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gnu-ifunc.exp	2010-01-21 15:15:41.000000000 +0100
+@@ -0,0 +1,115 @@
 +# Copyright (C) 2009 Free Software Foundation, Inc.
 +
 +# This program is free software; you can redistribute it and/or modify
@@ -464,7 +933,14 @@ Index: gdb-7.0.50.20100115/gdb/testsuite
 +set libsrc ${libfile}.c
 +set lib_so ${objdir}/${subdir}/${libfile}.so
 +
++set lib_nodebug_so_base ${libfile}-nodebug.so
++set lib_nodebug_so ${objdir}/${subdir}/${lib_nodebug_so_base}
++
++# {debug} provides DWARF symbol gnu_ifuncX confusing the ELF symbol
++# gnu_ifunc during address->symbol resolution for printing the symbol.
++# Still we need it here for "step"ping into the function.
 +set lib_opts [list debug]
++set lib_nodebug_opts [list]
 +set exec_opts [list debug shlib=$lib_so]
 +
 +if [get_compiler_info ${binfile}] {
@@ -487,7 +963,8 @@ Index: gdb-7.0.50.20100115/gdb/testsuite
 +    return 1;
 +}
 +
-+gdb_breakpoint [gdb_get_line_number "break-at-nextcall"]
++# The "if" condition is artifical to test regression of a format patch.
++gdb_breakpoint "[gdb_get_line_number "break-at-nextcall"] if i && gnu_ifunc (i) != 42"
 +
 +gdb_breakpoint [gdb_get_line_number "break-at-call"]
 +gdb_continue_to_breakpoint "break-at-call" ".*break-at-call.*"
@@ -502,10 +979,67 @@ Index: gdb-7.0.50.20100115/gdb/testsuite
 +
 +# Test GDB will not break before the final chosen implementation.
 +
-+gdb_continue_to_breakpoint "break-at-nextcall" ".*break-at-nextcall.*"
++# Also test a format patch regression:
++# Continuing.
++# Error in testing breakpoint condition:
++# Attempt to take address of value not located in memory.
++# 
++# Breakpoint 2, main () at ./gdb.base/gnu-ifunc.c:33
++
++gdb_test "continue" "Continuing.\r\n\r\nBreakpoint .* (at|in) .*break-at-nextcall.*" \
++	 "continue to break-at-nextcall"
 +
 +gdb_breakpoint "gnu_ifunc"
 +
 +gdb_continue_to_breakpoint "nextcall gnu_ifunc"
 +
-+gdb_test "frame" "#0 +final \\(.*" "nextcall gnu_ifunc skipped"
++gdb_test "frame" "#0 +(0x\[0-9a-f\]+ in +)?final \\(.*" "nextcall gnu_ifunc skipped"
++
++
++# Compare the two different addresses:
++
++gdb_test "p gnu_ifunc" " = {<text variable, no debug info>} 0x\[0-9a-f\]+ <final>" "p gnu_ifunc executing"
++gdb_test "info sym gnu_ifunc" "final in section .*" "info sym gnu_ifunc executing"
++
++set test "info addr gnu_ifunc"
++gdb_test_multiple $test $test {
++    -re "Symbol \"gnu_ifunc\" is at (0x\[0-9a-f\]+) in .*$gdb_prompt $" {
++	pass $test
++    }
++}
++gdb_test "info sym $expect_out(1,string)" "gnu_ifunc in section .*" "info sym <gnu_ifunc-address>"
++
++# <*gnu_ifunc> would be an incorrect resolution from DW_AT_MIPS_linkage_name.
++# We do not use {debug} build option for this purpose.
++
++if { [gdb_compile_shlib ${srcdir}/${subdir}/$libsrc $lib_nodebug_so $lib_nodebug_opts] != ""} {
++    untested "Could not compile either $libsrc."
++    return -1
++}
++
++clean_restart $lib_nodebug_so_base
++
++gdb_test "p gnu_ifunc" " = {<text gnu-ifunc variable, no debug info>} 0x\[0-9a-f\]+ <gnu_ifunc>" "p gnu_ifunc not executing without debug"
++gdb_test "info sym gnu_ifunc" "gnu_ifunc in section .*" "info sym gnu_ifunc not executing without debug"
+Index: gdb-7.0.50.20100121/gdb/xtensa-linux-tdep.c
+===================================================================
+--- gdb-7.0.50.20100121.orig/gdb/xtensa-linux-tdep.c	2010-01-01 08:31:46.000000000 +0100
++++ gdb-7.0.50.20100121/gdb/xtensa-linux-tdep.c	2010-01-21 15:15:41.000000000 +0100
+@@ -22,6 +22,7 @@
+ 
+ #include "solib-svr4.h"
+ #include "symtab.h"
++#include "linux-tdep.h"
+ 
+ /* OS specific initialization of gdbarch.  */
+ 
+@@ -30,6 +31,9 @@ xtensa_linux_init_abi (struct gdbarch_in
+ {
+   set_solib_svr4_fetch_link_map_offsets
+     (gdbarch, svr4_ilp32_fetch_link_map_offsets);
++
++  set_gdbarch_convert_from_func_ptr_addr (gdbarch,
++					  linux_convert_from_func_ptr_addr);
+ }
+ 
+ /* Provide a prototype to silence -Wmissing-prototypes.  */


Index: gdb.spec
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/gdb.spec,v
retrieving revision 1.394
retrieving revision 1.395
diff -u -p -r1.394 -r1.395
--- gdb.spec	19 Jan 2010 00:46:54 -0000	1.394
+++ gdb.spec	21 Jan 2010 16:09:11 -0000	1.395
@@ -32,11 +32,11 @@ Name: gdb%{?_with_debug:-debug}
 # Set version to contents of gdb/version.in.
 # NOTE: the FSF gdb versions are numbered N.M for official releases, like 6.3
 # and, since January 2005, X.Y.Z.date for daily snapshots, like 6.3.50.20050112 # (daily snapshot from mailine), or 6.3.0.20040112 (head of the release branch).
-Version: 7.0.50.20100118
+Version: 7.0.50.20100121
 
 # 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: 2%{?_with_upstream:.upstream}%{dist}
+Release: 1%{?_with_upstream:.upstream}%{dist}
 
 License: GPLv3+
 Group: Development/Debuggers
@@ -322,9 +322,6 @@ Patch309: gdb-6.3-mapping-zero-inode-tes
 # Test a crash on `focus cmd', `focus prev' commands.
 Patch311: gdb-6.3-focus-cmd-prev-test.patch
 
-# Fix error on a sw watchpoint active at function epilogue (hit on s390x).
-Patch314: gdb-watchpoint-cond-gone.patch
-
 # Test various forms of threads tracking across exec() (BZ 442765).
 Patch315: gdb-6.8-bz442765-threaded-exec-test.patch
 
@@ -403,9 +400,6 @@ Patch393: gdb-rhel5-gcc44.patch
 # Workaround RHEL-5 kernels for detaching SIGSTOPped processes (BZ 498595).
 Patch335: gdb-rhel5-compat.patch
 
-# Fix backward compatibility with G++ 4.1 namespaces "::".
-Patch395: gdb-empty-namespace.patch
-
 # Fix regression by python on ia64 due to stale current frame.
 Patch397: gdb-follow-child-stale-parent.patch
 
@@ -428,8 +422,11 @@ Patch407: gdb-lineno-makeup-test.patch
 # Test power7 ppc disassembly.
 Patch408: gdb-ppc-power7-test.patch
 
-# [patch] testsuite: Fix misplaced line numbers
-Patch410: gdb-testsuite-lineno.patch
+# Fix solib-display.exp crash
+Patch411: gdb-solib-display.patch
+
+# Revert: Add -Wunused-function to compile flags.
+Patch412: gdb-unused-revert.patch
 
 BuildRequires: ncurses-devel%{?_isa} texinfo gettext flex bison expat-devel%{?_isa}
 Requires: readline%{?_isa}
@@ -641,7 +638,6 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc
 %patch304 -p1
 %patch309 -p1
 %patch311 -p1
-%patch314 -p1
 %patch315 -p1
 %patch317 -p1
 %patch318 -p1
@@ -665,7 +661,6 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc
 %patch390 -p1
 %patch391 -p1
 %patch392 -p1
-%patch395 -p1
 %patch397 -p1
 %patch400 -p1
 %patch403 -p1
@@ -676,7 +671,8 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc
 %patch406 -p1
 %patch407 -p1
 %patch408 -p1
-%patch410 -p1
+%patch411 -p1
+%patch412 -p1
 # Always verify its applicability.
 %patch393 -p1
 %patch335 -p1
@@ -1002,6 +998,11 @@ fi
 %endif
 
 %changelog
+* Thu Jan 21 2010 Jan Kratochvil <jan.kratochvil at redhat.com> - 7.0.50.20100121-1.fc13
+- Upgrade to the FSF GDB snapshot: 7.0.50.20100121
+- archer-jankratochvil-fedora13 commit: ccde1530479cc966374351038057b9dda90aa251
+- [expr-cumulative] Archer branch is now included.
+
 * Tue Jan 19 2010 Jan Kratochvil <jan.kratochvil at redhat.com> - 7.0.50.20100118-2.fc13
 - Fix false PASS->FAIL of gdb.arch/i386-biarch-core.exp.
 


Index: sources
===================================================================
RCS file: /cvs/pkgs/rpms/gdb/devel/sources,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -p -r1.44 -r1.45
--- sources	18 Jan 2010 23:22:41 -0000	1.44
+++ sources	21 Jan 2010 16:09:11 -0000	1.45
@@ -1,2 +1,2 @@
-2fb1a2ac78b3bdc495bbabd85e310a5d  gdb-7.0.50.20100118.tar.bz2
+fcfbe6ccb36d86bc06891fbd70f1664d  gdb-7.0.50.20100121.tar.bz2
 04e5c4b1b9e633422cc48990fe61958d  libstdc++-v3-python-r155978.tar.bz2


--- gdb-empty-namespace.patch DELETED ---


--- gdb-testsuite-lineno.patch DELETED ---


--- gdb-watchpoint-cond-gone.patch DELETED ---



More information about the scm-commits mailing list