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,
+- ¤t_target);
+- value_type = TYPE_TARGET_TYPE (ftype);
++ CORE_ADDR funaddr2;
++
++ funaddr2 = gdbarch_convert_from_func_ptr_addr (gdbarch, funaddr,
++ ¤t_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,
- ¤t_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,
+ µblaze_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,
+- ¤t_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,
++ ¤t_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