Accepting request 47227 from devel:gcc
Copy from devel:gcc/gdb based on submit request 47227 from user rguenther OBS-URL: https://build.opensuse.org/request/show/47227 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gdb?expand=0&rev=80
This commit is contained in:
parent
b4862b49df
commit
c968dfad28
@ -28,7 +28,7 @@
|
|||||||
+}
|
+}
|
||||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||||
+++ ./gdb/testsuite/gdb.base/attach-see-vdso.exp 6 Jul 2007 14:14:44 -0000
|
+++ ./gdb/testsuite/gdb.base/attach-see-vdso.exp 6 Jul 2007 14:14:44 -0000
|
||||||
@@ -0,0 +1,79 @@
|
@@ -0,0 +1,72 @@
|
||||||
+# Copyright 2007
|
+# Copyright 2007
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -47,13 +47,6 @@
|
|||||||
+
|
+
|
||||||
+# This file was created by Jan Kratochvil <jan.kratochvil@redhat.com>.
|
+# This file was created by Jan Kratochvil <jan.kratochvil@redhat.com>.
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+# This test only works on Linux
|
+# This test only works on Linux
|
||||||
+if { ![istarget "*-*-linux-gnu*"] } {
|
+if { ![istarget "*-*-linux-gnu*"] } {
|
||||||
+ return 0
|
+ return 0
|
||||||
|
@ -15,11 +15,11 @@ testsuite/gdb.base:
|
|||||||
|
|
||||||
Port to GDB-6.7.
|
Port to GDB-6.7.
|
||||||
|
|
||||||
Index: gdb-6.7/gdb/testsuite/gdb.base/setshow.exp
|
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.base/setshow.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/testsuite/gdb.base/setshow.exp 2007-08-23 20:14:17.000000000 +0200
|
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.base/setshow.exp 2010-06-11 22:56:06.000000000 +0200
|
||||||
+++ gdb-6.7/gdb/testsuite/gdb.base/setshow.exp 2007-10-15 21:34:52.000000000 +0200
|
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.base/setshow.exp 2010-07-12 10:46:06.000000000 +0200
|
||||||
@@ -106,6 +106,16 @@ if { ![target_info exists use_gdb_stub]
|
@@ -96,6 +96,16 @@ if { ![target_info exists use_gdb_stub]
|
||||||
delete_breakpoints
|
delete_breakpoints
|
||||||
gdb_test "run" "Starting program:.*foo bar blup baz bubble.*" "passing args"
|
gdb_test "run" "Starting program:.*foo bar blup baz bubble.*" "passing args"
|
||||||
}
|
}
|
||||||
@ -34,13 +34,13 @@ Index: gdb-6.7/gdb/testsuite/gdb.base/setshow.exp
|
|||||||
+#test show backtrace past-zero-pc
|
+#test show backtrace past-zero-pc
|
||||||
+gdb_test "show backtrace past-zero-pc" "Whether backtraces should continue past a zero pc value is off." "show backtrace past-zero-pc (off)"
|
+gdb_test "show backtrace past-zero-pc" "Whether backtraces should continue past a zero pc value is off." "show backtrace past-zero-pc (off)"
|
||||||
#test set check range on
|
#test set check range on
|
||||||
gdb_test "set check range on" "" "set check range on"
|
gdb_test "set check range on" ".*" "set check range on"
|
||||||
#test show check range on
|
#test show check range on
|
||||||
Index: gdb-6.7/gdb/frame.c
|
Index: gdb-7.1.90.20100711/gdb/frame.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/frame.c 2007-10-12 22:35:58.000000000 +0200
|
--- gdb-7.1.90.20100711.orig/gdb/frame.c 2010-07-12 10:00:56.000000000 +0200
|
||||||
+++ gdb-6.7/gdb/frame.c 2007-10-15 21:34:52.000000000 +0200
|
+++ gdb-7.1.90.20100711/gdb/frame.c 2010-07-12 10:45:18.000000000 +0200
|
||||||
@@ -133,6 +133,16 @@ Whether backtraces should continue past
|
@@ -185,6 +185,16 @@ Whether backtraces should continue past
|
||||||
value);
|
value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ Index: gdb-6.7/gdb/frame.c
|
|||||||
static int backtrace_past_entry;
|
static int backtrace_past_entry;
|
||||||
static void
|
static void
|
||||||
show_backtrace_past_entry (struct ui_file *file, int from_tty,
|
show_backtrace_past_entry (struct ui_file *file, int from_tty,
|
||||||
@@ -1483,9 +1493,7 @@ get_prev_frame (struct frame_info *this_
|
@@ -1784,9 +1794,7 @@ get_prev_frame (struct frame_info *this_
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this_frame->level > 0
|
if (this_frame->level > 0
|
||||||
@ -68,7 +68,7 @@ Index: gdb-6.7/gdb/frame.c
|
|||||||
&& get_frame_type (this_frame) == NORMAL_FRAME
|
&& get_frame_type (this_frame) == NORMAL_FRAME
|
||||||
&& get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME
|
&& get_frame_type (get_next_frame (this_frame)) == NORMAL_FRAME
|
||||||
&& get_frame_pc (this_frame) == 0)
|
&& get_frame_pc (this_frame) == 0)
|
||||||
@@ -1850,6 +1858,17 @@ the rest of the stack trace."),
|
@@ -2271,6 +2279,17 @@ the rest of the stack trace."),
|
||||||
&set_backtrace_cmdlist,
|
&set_backtrace_cmdlist,
|
||||||
&show_backtrace_cmdlist);
|
&show_backtrace_cmdlist);
|
||||||
|
|
||||||
|
@ -218,7 +218,7 @@ diff -u -ruNp gdb-6.3-unpatched/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.c gd
|
|||||||
diff -u -ruNp gdb-6.3-unpatched/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.exp gdb-6.3/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.exp
|
diff -u -ruNp gdb-6.3-unpatched/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.exp gdb-6.3/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.exp
|
||||||
--- gdb-6.3-unpatched/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.exp 1969-12-31 19:00:00.000000000 -0500
|
--- gdb-6.3-unpatched/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.exp 1969-12-31 19:00:00.000000000 -0500
|
||||||
+++ gdb-6.3/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.exp 2007-08-02 14:21:29.000000000 -0400
|
+++ gdb-6.3/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.exp 2007-08-02 14:21:29.000000000 -0400
|
||||||
@@ -0,0 +1,79 @@
|
@@ -0,0 +1,72 @@
|
||||||
+# Copyright 2006, 2007 Free Software Foundation, Inc.
|
+# Copyright 2006, 2007 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -238,13 +238,6 @@ diff -u -ruNp gdb-6.3-unpatched/gdb/testsuite/gdb.arch/powerpc-bcl-prologue.exp
|
|||||||
+# Test unwinding fixes of the PPC platform, specifically on the coping with BCL
|
+# Test unwinding fixes of the PPC platform, specifically on the coping with BCL
|
||||||
+# jump of the PIE code.
|
+# jump of the PIE code.
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+if ![istarget "powerpc*-*-linux*"] then {
|
+if ![istarget "powerpc*-*-linux*"] then {
|
||||||
+ verbose "Skipping powerpc-linux prologue tests."
|
+ verbose "Skipping powerpc-linux prologue tests."
|
||||||
+ return
|
+ return
|
||||||
|
@ -4,10 +4,11 @@
|
|||||||
to install and uninstall.
|
to install and uninstall.
|
||||||
* gstack.sh, gstack.1: New files.
|
* gstack.sh, gstack.1: New files.
|
||||||
|
|
||||||
diff -up -ruNp gdb-7.0.1-empty/gdb/Makefile.in gdb-7.0.1/gdb/Makefile.in
|
Index: gdb-7.2/gdb/Makefile.in
|
||||||
--- gdb-7.0.1-empty/gdb/Makefile.in 2010-04-07 20:36:04.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-7.0.1/gdb/Makefile.in 2010-04-07 20:36:42.000000000 +0200
|
--- gdb-7.2.orig/gdb/Makefile.in 2010-09-03 09:37:55.000000000 +0200
|
||||||
@@ -989,7 +989,7 @@ install: all install-only
|
+++ gdb-7.2/gdb/Makefile.in 2010-09-03 09:38:45.000000000 +0200
|
||||||
|
@@ -1010,7 +1010,7 @@ install: all install-only
|
||||||
|
|
||||||
# The "install-only" target also installs the syscalls' XML files in
|
# The "install-only" target also installs the syscalls' XML files in
|
||||||
# the system.
|
# the system.
|
||||||
@ -16,10 +17,11 @@ diff -up -ruNp gdb-7.0.1-empty/gdb/Makefile.in gdb-7.0.1/gdb/Makefile.in
|
|||||||
transformed_name=`t='$(program_transform_name)'; \
|
transformed_name=`t='$(program_transform_name)'; \
|
||||||
echo gdb | sed -e "$$t"` ; \
|
echo gdb | sed -e "$$t"` ; \
|
||||||
if test "x$$transformed_name" = x; then \
|
if test "x$$transformed_name" = x; then \
|
||||||
@@ -1021,9 +1021,26 @@ install-tui:
|
@@ -1046,7 +1046,25 @@ install-tui:
|
||||||
$(DESTDIR)$(man1dir) ; \
|
install-python:
|
||||||
$(INSTALL_DATA) $(srcdir)/gdb.1 \
|
$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(GDB_DATADIR)/python/gdb
|
||||||
$(DESTDIR)$(man1dir)/$$transformed_name.1
|
|
||||||
|
-uninstall: force $(CONFIG_UNINSTALL)
|
||||||
+GSTACK=gstack
|
+GSTACK=gstack
|
||||||
+.PHONY: install-gstack
|
+.PHONY: install-gstack
|
||||||
+install-gstack:
|
+install-gstack:
|
||||||
@ -37,14 +39,12 @@ diff -up -ruNp gdb-7.0.1-empty/gdb/Makefile.in gdb-7.0.1/gdb/Makefile.in
|
|||||||
+ $(DESTDIR)$(man1dir) ; \
|
+ $(DESTDIR)$(man1dir) ; \
|
||||||
+ : $(INSTALL_DATA) $(srcdir)/gstack.1 \
|
+ : $(INSTALL_DATA) $(srcdir)/gstack.1 \
|
||||||
+ $(DESTDIR)$(man1dir)/$$transformed_name.1
|
+ $(DESTDIR)$(man1dir)/$$transformed_name.1
|
||||||
|
+
|
||||||
|
|
||||||
-uninstall: force $(CONFIG_UNINSTALL)
|
|
||||||
+uninstall: force uninstall-gstack $(CONFIG_UNINSTALL)
|
+uninstall: force uninstall-gstack $(CONFIG_UNINSTALL)
|
||||||
transformed_name=`t='$(program_transform_name)'; \
|
transformed_name=`t='$(program_transform_name)'; \
|
||||||
echo gdb | sed -e $$t` ; \
|
echo gdb | sed -e $$t` ; \
|
||||||
if test "x$$transformed_name" = x; then \
|
if test "x$$transformed_name" = x; then \
|
||||||
@@ -1045,6 +1062,17 @@ uninstall-tui:
|
@@ -1068,6 +1086,17 @@ uninstall-tui:
|
||||||
fi ; \
|
fi ; \
|
||||||
rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \
|
rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \
|
||||||
$(DESTDIR)$(man1dir)/$$transformed_name.1
|
$(DESTDIR)$(man1dir)/$$transformed_name.1
|
||||||
@ -62,9 +62,10 @@ diff -up -ruNp gdb-7.0.1-empty/gdb/Makefile.in gdb-7.0.1/gdb/Makefile.in
|
|||||||
|
|
||||||
# The C++ name parser can be built standalone for testing.
|
# The C++ name parser can be built standalone for testing.
|
||||||
test-cp-name-parser.o: cp-name-parser.c
|
test-cp-name-parser.o: cp-name-parser.c
|
||||||
diff -up -ruNp gdb-7.0.1-empty/gdb/gstack.sh gdb-7.0.1/gdb/gstack.sh
|
Index: gdb-7.2/gdb/gstack.sh
|
||||||
--- gdb-7.0.1-empty/gdb/gstack.sh 1970-01-01 01:00:00.000000000 +0100
|
===================================================================
|
||||||
+++ gdb-7.0.1/gdb/gstack.sh 2010-04-07 20:36:47.000000000 +0200
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-7.2/gdb/gstack.sh 2010-09-03 09:38:12.000000000 +0200
|
||||||
@@ -0,0 +1,48 @@
|
@@ -0,0 +1,48 @@
|
||||||
+#!/bin/sh
|
+#!/bin/sh
|
||||||
+
|
+
|
||||||
@ -114,8 +115,10 @@ diff -up -ruNp gdb-7.0.1-empty/gdb/gstack.sh gdb-7.0.1/gdb/gstack.sh
|
|||||||
+ -e 's/^\((gdb) \)*//' \
|
+ -e 's/^\((gdb) \)*//' \
|
||||||
+ -e '/^#/p' \
|
+ -e '/^#/p' \
|
||||||
+ -e '/^Thread/p'
|
+ -e '/^Thread/p'
|
||||||
--- /dev/null 2010-04-07 06:20:52.289994508 +0200
|
Index: gdb-7.2/gdb/testsuite/gdb.base/gstack.exp
|
||||||
+++ gdb-7.0.1/gdb/testsuite/gdb.base/gstack.exp 2010-04-07 21:53:57.000000000 +0200
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-7.2/gdb/testsuite/gdb.base/gstack.exp 2010-09-03 09:38:12.000000000 +0200
|
||||||
@@ -0,0 +1,71 @@
|
@@ -0,0 +1,71 @@
|
||||||
+# Copyright (C) 2010 Free Software Foundation, Inc.
|
+# Copyright (C) 2010 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
@ -188,8 +191,10 @@ diff -up -ruNp gdb-7.0.1-empty/gdb/gstack.sh gdb-7.0.1/gdb/gstack.sh
|
|||||||
+gdb_exit
|
+gdb_exit
|
||||||
+
|
+
|
||||||
+remote_exec host "kill -9 $pid"
|
+remote_exec host "kill -9 $pid"
|
||||||
--- /dev/null 2010-04-07 06:20:52.289994508 +0200
|
Index: gdb-7.2/gdb/testsuite/gdb.base/gstack.c
|
||||||
+++ gdb-7.0.1/gdb/testsuite/gdb.base/gstack.c 2010-04-07 21:46:52.000000000 +0200
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-7.2/gdb/testsuite/gdb.base/gstack.c 2010-09-03 09:38:12.000000000 +0200
|
||||||
@@ -0,0 +1,43 @@
|
@@ -0,0 +1,43 @@
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
+/* This testcase is part of GDB, the GNU debugger.
|
||||||
+
|
+
|
||||||
|
@ -41,7 +41,7 @@ testsuite:
|
|||||||
+
|
+
|
||||||
--- gdb-6.3/gdb/testsuite/gdb.arch/ia64-sigtramp.exp.fix 2005-07-25 16:42:50.000000000 -0400
|
--- gdb-6.3/gdb/testsuite/gdb.arch/ia64-sigtramp.exp.fix 2005-07-25 16:42:50.000000000 -0400
|
||||||
+++ gdb-6.3/gdb/testsuite/gdb.arch/ia64-sigtramp.exp 2005-07-25 16:42:01.000000000 -0400
|
+++ gdb-6.3/gdb/testsuite/gdb.arch/ia64-sigtramp.exp 2005-07-25 16:42:01.000000000 -0400
|
||||||
@@ -0,0 +1,73 @@
|
@@ -0,0 +1,63 @@
|
||||||
+# Copyright 2005 Free Software Foundation, Inc.
|
+# Copyright 2005 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -63,16 +63,6 @@ testsuite:
|
|||||||
+
|
+
|
||||||
+# This file was written by Jeff Johnston (jjohnstn@redhat.com)
|
+# This file was written by Jeff Johnston (jjohnstn@redhat.com)
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# test running programs
|
|
||||||
+#
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+if ![istarget "ia64-*-*"] then {
|
+if ![istarget "ia64-*-*"] then {
|
||||||
+ return
|
+ return
|
||||||
+}
|
+}
|
||||||
|
@ -16,7 +16,7 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.arch/ia64-sigill.exp
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.arch/ia64-sigill.exp 2008-12-02 21:10:57.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.arch/ia64-sigill.exp 2008-12-02 21:10:57.000000000 +0100
|
||||||
@@ -0,0 +1,59 @@
|
@@ -0,0 +1,49 @@
|
||||||
+# Copyright 2005 Free Software Foundation, Inc.
|
+# Copyright 2005 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -38,16 +38,6 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.arch/ia64-sigill.exp
|
|||||||
+
|
+
|
||||||
+# This file was written by Jeff Johnston (jjohnstn@redhat.com)
|
+# This file was written by Jeff Johnston (jjohnstn@redhat.com)
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# test running programs
|
|
||||||
+#
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+if ![istarget "ia64-*-*"] then {
|
+if ![istarget "ia64-*-*"] then {
|
||||||
+ return
|
+ return
|
||||||
+}
|
+}
|
||||||
|
@ -38,7 +38,7 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.base/attach-32.exp
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.base/attach-32.exp 2008-12-07 10:08:52.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.base/attach-32.exp 2008-12-07 10:08:52.000000000 +0100
|
||||||
@@ -0,0 +1,252 @@
|
@@ -0,0 +1,245 @@
|
||||||
+# Copyright 2005 Free Software Foundation, Inc.
|
+# Copyright 2005 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -57,13 +57,6 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.base/attach-32.exp
|
|||||||
+#
|
+#
|
||||||
+# This test was based on attach.exp and modified for 32/64 bit Linux systems. */
|
+# This test was based on attach.exp and modified for 32/64 bit Linux systems. */
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+# On HP-UX 11.0, this test is causing a process running the program
|
+# On HP-UX 11.0, this test is causing a process running the program
|
||||||
+# "attach" to be left around spinning. Until we figure out why, I am
|
+# "attach" to be left around spinning. Until we figure out why, I am
|
||||||
+# commenting out the test to avoid polluting tiamat (our 11.0 nightly
|
+# commenting out the test to avoid polluting tiamat (our 11.0 nightly
|
||||||
|
@ -62,7 +62,7 @@ Index: gdb-6.8.50.20090811/gdb/testsuite/gdb.cp/b146835.exp
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.8.50.20090811/gdb/testsuite/gdb.cp/b146835.exp 2009-08-12 06:58:28.000000000 +0200
|
+++ gdb-6.8.50.20090811/gdb/testsuite/gdb.cp/b146835.exp 2009-08-12 06:58:28.000000000 +0200
|
||||||
@@ -0,0 +1,54 @@
|
@@ -0,0 +1,47 @@
|
||||||
+# This testcase is part of GDB, the GNU debugger.
|
+# This testcase is part of GDB, the GNU debugger.
|
||||||
+
|
+
|
||||||
+# Copyright 2005 Free Software Foundation, Inc.
|
+# Copyright 2005 Free Software Foundation, Inc.
|
||||||
@ -84,13 +84,6 @@ Index: gdb-6.8.50.20090811/gdb/testsuite/gdb.cp/b146835.exp
|
|||||||
+# Check that GDB can properly print an inherited member variable
|
+# Check that GDB can properly print an inherited member variable
|
||||||
+# (Bugzilla 146835)
|
+# (Bugzilla 146835)
|
||||||
+
|
+
|
||||||
+if $tracelevel {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+set testfile "b146835"
|
+set testfile "b146835"
|
||||||
+set srcfile ${testfile}.cc
|
+set srcfile ${testfile}.cc
|
||||||
+set srcfile2 ${testfile}b.cc
|
+set srcfile2 ${testfile}b.cc
|
||||||
|
@ -25,10 +25,10 @@
|
|||||||
|
|
||||||
Port to GDB-6.7.
|
Port to GDB-6.7.
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/symfile-mem.c
|
Index: gdb-7.1.90.20100711/gdb/symfile-mem.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/symfile-mem.c 2010-01-01 08:31:42.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/symfile-mem.c 2010-01-01 08:31:42.000000000 +0100
|
||||||
+++ gdb-7.0.50.20100115/gdb/symfile-mem.c 2010-01-15 03:22:23.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/symfile-mem.c 2010-07-12 10:46:24.000000000 +0200
|
||||||
@@ -57,6 +57,14 @@
|
@@ -57,6 +57,14 @@
|
||||||
#include "elf/common.h"
|
#include "elf/common.h"
|
||||||
|
|
||||||
@ -53,20 +53,20 @@ Index: gdb-7.0.50.20100115/gdb/symfile-mem.c
|
|||||||
if (nbfd == NULL)
|
if (nbfd == NULL)
|
||||||
error (_("Failed to read a valid object file image from memory."));
|
error (_("Failed to read a valid object file image from memory."));
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/target.c
|
Index: gdb-7.1.90.20100711/gdb/target.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/target.c 2010-01-15 03:22:13.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/target.c 2010-07-12 10:00:56.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/target.c 2010-01-15 03:22:23.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/target.c 2010-07-12 10:47:04.000000000 +0200
|
||||||
@@ -59,7 +59,7 @@ static int nosymbol (char *, CORE_ADDR *
|
@@ -58,7 +58,7 @@ static int nosymbol (char *, CORE_ADDR *
|
||||||
|
|
||||||
static void tcomplain (void) ATTR_NORETURN;
|
static void tcomplain (void) ATTRIBUTE_NORETURN;
|
||||||
|
|
||||||
-static int nomemory (CORE_ADDR, char *, int, int, struct target_ops *);
|
-static int nomemory (CORE_ADDR, char *, int, int, struct target_ops *);
|
||||||
+static LONGEST nomemory (CORE_ADDR, char *, int, int, struct target_ops *);
|
+static LONGEST nomemory (CORE_ADDR, char *, int, int, struct target_ops *);
|
||||||
|
|
||||||
static int return_zero (void);
|
static int return_zero (void);
|
||||||
|
|
||||||
@@ -494,7 +494,7 @@ target_terminal_inferior (void)
|
@@ -513,7 +513,7 @@ target_terminal_inferior (void)
|
||||||
(*current_target.to_terminal_inferior) ();
|
(*current_target.to_terminal_inferior) ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,7 +75,7 @@ Index: gdb-7.0.50.20100115/gdb/target.c
|
|||||||
nomemory (CORE_ADDR memaddr, char *myaddr, int len, int write,
|
nomemory (CORE_ADDR memaddr, char *myaddr, int len, int write,
|
||||||
struct target_ops *t)
|
struct target_ops *t)
|
||||||
{
|
{
|
||||||
@@ -726,7 +726,7 @@ update_current_target (void)
|
@@ -718,7 +718,7 @@ update_current_target (void)
|
||||||
(void (*) (struct regcache *))
|
(void (*) (struct regcache *))
|
||||||
noprocess);
|
noprocess);
|
||||||
de_fault (deprecated_xfer_memory,
|
de_fault (deprecated_xfer_memory,
|
||||||
@ -84,7 +84,7 @@ Index: gdb-7.0.50.20100115/gdb/target.c
|
|||||||
nomemory);
|
nomemory);
|
||||||
de_fault (to_files_info,
|
de_fault (to_files_info,
|
||||||
(void (*) (struct target_ops *))
|
(void (*) (struct target_ops *))
|
||||||
@@ -1497,7 +1497,7 @@ target_xfer_partial (struct target_ops *
|
@@ -1526,7 +1526,7 @@ target_xfer_partial (struct target_ops *
|
||||||
it makes no progress, and then return how much was transferred). */
|
it makes no progress, and then return how much was transferred). */
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -93,7 +93,7 @@ Index: gdb-7.0.50.20100115/gdb/target.c
|
|||||||
{
|
{
|
||||||
/* Dispatch to the topmost target, not the flattened current_target.
|
/* Dispatch to the topmost target, not the flattened current_target.
|
||||||
Memory accesses check target->to_has_(all_)memory, and the
|
Memory accesses check target->to_has_(all_)memory, and the
|
||||||
@@ -1513,7 +1513,7 @@ target_read_memory (CORE_ADDR memaddr, g
|
@@ -1542,7 +1542,7 @@ target_read_memory (CORE_ADDR memaddr, g
|
||||||
the target's stack. This may trigger different cache behavior. */
|
the target's stack. This may trigger different cache behavior. */
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -102,7 +102,7 @@ Index: gdb-7.0.50.20100115/gdb/target.c
|
|||||||
{
|
{
|
||||||
/* Dispatch to the topmost target, not the flattened current_target.
|
/* Dispatch to the topmost target, not the flattened current_target.
|
||||||
Memory accesses check target->to_has_(all_)memory, and the
|
Memory accesses check target->to_has_(all_)memory, and the
|
||||||
@@ -1532,7 +1532,7 @@ target_read_stack (CORE_ADDR memaddr, gd
|
@@ -1561,7 +1561,7 @@ target_read_stack (CORE_ADDR memaddr, gd
|
||||||
Callers that can deal with partial writes should call target_write. */
|
Callers that can deal with partial writes should call target_write. */
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -111,7 +111,7 @@ Index: gdb-7.0.50.20100115/gdb/target.c
|
|||||||
{
|
{
|
||||||
/* Dispatch to the topmost target, not the flattened current_target.
|
/* Dispatch to the topmost target, not the flattened current_target.
|
||||||
Memory accesses check target->to_has_(all_)memory, and the
|
Memory accesses check target->to_has_(all_)memory, and the
|
||||||
@@ -3098,8 +3098,8 @@ debug_to_prepare_to_store (struct regcac
|
@@ -3218,8 +3218,8 @@ debug_to_prepare_to_store (struct regcac
|
||||||
fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n");
|
fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ Index: gdb-7.0.50.20100115/gdb/target.c
|
|||||||
int write, struct mem_attrib *attrib,
|
int write, struct mem_attrib *attrib,
|
||||||
struct target_ops *target)
|
struct target_ops *target)
|
||||||
{
|
{
|
||||||
@@ -3109,8 +3109,8 @@ deprecated_debug_xfer_memory (CORE_ADDR
|
@@ -3229,8 +3229,8 @@ deprecated_debug_xfer_memory (CORE_ADDR
|
||||||
attrib, target);
|
attrib, target);
|
||||||
|
|
||||||
fprintf_unfiltered (gdb_stdlog,
|
fprintf_unfiltered (gdb_stdlog,
|
||||||
@ -133,11 +133,11 @@ Index: gdb-7.0.50.20100115/gdb/target.c
|
|||||||
write ? "write" : "read", retval);
|
write ? "write" : "read", retval);
|
||||||
|
|
||||||
if (retval > 0)
|
if (retval > 0)
|
||||||
Index: gdb-7.0.50.20100115/gdb/target.h
|
Index: gdb-7.1.90.20100711/gdb/target.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/target.h 2010-01-15 03:22:13.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/target.h 2010-07-12 10:00:56.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/target.h 2010-01-15 03:22:23.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/target.h 2010-07-12 10:46:24.000000000 +0200
|
||||||
@@ -406,10 +406,10 @@ struct target_ops
|
@@ -417,10 +417,10 @@ struct target_ops
|
||||||
NOTE: cagney/2004-10-01: This has been entirely superseeded by
|
NOTE: cagney/2004-10-01: This has been entirely superseeded by
|
||||||
to_xfer_partial and inferior inheritance. */
|
to_xfer_partial and inferior inheritance. */
|
||||||
|
|
||||||
@ -152,7 +152,7 @@ Index: gdb-7.0.50.20100115/gdb/target.h
|
|||||||
|
|
||||||
void (*to_files_info) (struct target_ops *);
|
void (*to_files_info) (struct target_ops *);
|
||||||
int (*to_insert_breakpoint) (struct gdbarch *, struct bp_target_info *);
|
int (*to_insert_breakpoint) (struct gdbarch *, struct bp_target_info *);
|
||||||
@@ -786,12 +786,12 @@ extern void target_dcache_invalidate (vo
|
@@ -838,12 +838,12 @@ extern void target_dcache_invalidate (vo
|
||||||
|
|
||||||
extern int target_read_string (CORE_ADDR, char **, int, int *);
|
extern int target_read_string (CORE_ADDR, char **, int, int *);
|
||||||
|
|
||||||
@ -168,11 +168,11 @@ Index: gdb-7.0.50.20100115/gdb/target.h
|
|||||||
|
|
||||||
/* Fetches the target's memory map. If one is found it is sorted
|
/* Fetches the target's memory map. If one is found it is sorted
|
||||||
and returned, after some consistency checking. Otherwise, NULL
|
and returned, after some consistency checking. Otherwise, NULL
|
||||||
Index: gdb-7.0.50.20100115/gdb/dcache.c
|
Index: gdb-7.1.90.20100711/gdb/dcache.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/dcache.c 2010-01-01 08:31:30.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/dcache.c 2010-05-14 19:53:15.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/dcache.c 2010-01-15 03:22:23.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/dcache.c 2010-07-12 10:46:24.000000000 +0200
|
||||||
@@ -468,10 +468,10 @@ dcache_free (DCACHE *dcache)
|
@@ -465,10 +465,10 @@ dcache_free (DCACHE *dcache)
|
||||||
NOTE: This is different than the to_xfer_partial interface, in which
|
NOTE: This is different than the to_xfer_partial interface, in which
|
||||||
positive values less than LEN mean further transfers may be possible. */
|
positive values less than LEN mean further transfers may be possible. */
|
||||||
|
|
||||||
@ -185,10 +185,10 @@ Index: gdb-7.0.50.20100115/gdb/dcache.c
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int res;
|
int res;
|
||||||
Index: gdb-7.0.50.20100115/gdb/dcache.h
|
Index: gdb-7.1.90.20100711/gdb/dcache.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/dcache.h 2010-01-01 08:31:30.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/dcache.h 2010-01-01 08:31:30.000000000 +0100
|
||||||
+++ gdb-7.0.50.20100115/gdb/dcache.h 2010-01-15 03:22:23.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/dcache.h 2010-07-12 10:46:24.000000000 +0200
|
||||||
@@ -35,8 +35,8 @@ void dcache_free (DCACHE *);
|
@@ -35,8 +35,8 @@ void dcache_free (DCACHE *);
|
||||||
|
|
||||||
/* Simple to call from <remote>_xfer_memory */
|
/* Simple to call from <remote>_xfer_memory */
|
||||||
@ -200,11 +200,11 @@ Index: gdb-7.0.50.20100115/gdb/dcache.h
|
|||||||
|
|
||||||
void dcache_update (DCACHE *dcache, CORE_ADDR memaddr, gdb_byte *myaddr,
|
void dcache_update (DCACHE *dcache, CORE_ADDR memaddr, gdb_byte *myaddr,
|
||||||
int len);
|
int len);
|
||||||
Index: gdb-7.0.50.20100115/gdb/exec.c
|
Index: gdb-7.1.90.20100711/gdb/exec.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/exec.c 2010-01-14 22:01:24.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/exec.c 2010-05-14 20:35:11.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/exec.c 2010-01-15 03:22:23.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/exec.c 2010-07-12 10:46:24.000000000 +0200
|
||||||
@@ -578,7 +578,7 @@ map_vmap (bfd *abfd, bfd *arch)
|
@@ -571,7 +571,7 @@ map_vmap (bfd *abfd, bfd *arch)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -213,11 +213,11 @@ Index: gdb-7.0.50.20100115/gdb/exec.c
|
|||||||
section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
|
section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
|
||||||
ULONGEST offset, LONGEST len,
|
ULONGEST offset, LONGEST len,
|
||||||
struct target_section *sections,
|
struct target_section *sections,
|
||||||
Index: gdb-7.0.50.20100115/gdb/linux-nat.c
|
Index: gdb-7.1.90.20100711/gdb/linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/linux-nat.c 2010-01-15 03:22:14.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/linux-nat.c 2010-07-12 10:44:36.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/linux-nat.c 2010-01-15 03:22:23.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/linux-nat.c 2010-07-12 10:46:24.000000000 +0200
|
||||||
@@ -5117,7 +5117,7 @@ linux_xfer_partial (struct target_ops *o
|
@@ -5197,7 +5197,7 @@ linux_xfer_partial (struct target_ops *o
|
||||||
#endif
|
#endif
|
||||||
if (iterate_over_lwps (ia64_linux_check_stack_region, &range) != NULL)
|
if (iterate_over_lwps (ia64_linux_check_stack_region, &range) != NULL)
|
||||||
{ /* This region contains ia64 rse registers, we have to re-read. */
|
{ /* This region contains ia64 rse registers, we have to re-read. */
|
||||||
@ -226,10 +226,10 @@ Index: gdb-7.0.50.20100115/gdb/linux-nat.c
|
|||||||
|
|
||||||
/* Re-read register stack area. */
|
/* Re-read register stack area. */
|
||||||
xxfer = super_xfer_partial (ops, object, annex,
|
xxfer = super_xfer_partial (ops, object, annex,
|
||||||
Index: gdb-7.0.50.20100115/gdb/remote.c
|
Index: gdb-7.1.90.20100711/gdb/remote.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/remote.c 2010-01-12 22:40:24.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/remote.c 2010-07-07 18:15:16.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/remote.c 2010-01-15 03:22:23.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/remote.c 2010-07-12 10:46:24.000000000 +0200
|
||||||
@@ -25,6 +25,7 @@
|
@@ -25,6 +25,7 @@
|
||||||
#include "gdb_string.h"
|
#include "gdb_string.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@ -238,7 +238,7 @@ Index: gdb-7.0.50.20100115/gdb/remote.c
|
|||||||
#include "inferior.h"
|
#include "inferior.h"
|
||||||
#include "bfd.h"
|
#include "bfd.h"
|
||||||
#include "symfile.h"
|
#include "symfile.h"
|
||||||
@@ -6175,12 +6176,19 @@ handle_notification (char *buf, size_t l
|
@@ -6515,12 +6516,19 @@ handle_notification (char *buf, size_t l
|
||||||
if SHOULD_WRITE is nonzero. Returns length of data written or
|
if SHOULD_WRITE is nonzero. Returns length of data written or
|
||||||
read; 0 for error. TARGET is unused. */
|
read; 0 for error. TARGET is unused. */
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ Index: gdb-7.0.50.20100115/gdb/remote.c
|
|||||||
|
|
||||||
set_general_thread (inferior_ptid);
|
set_general_thread (inferior_ptid);
|
||||||
|
|
||||||
@@ -6189,7 +6197,7 @@ remote_xfer_memory (CORE_ADDR mem_addr,
|
@@ -6529,7 +6537,7 @@ remote_xfer_memory (CORE_ADDR mem_addr,
|
||||||
else
|
else
|
||||||
res = remote_read_bytes (mem_addr, buffer, mem_len);
|
res = remote_read_bytes (mem_addr, buffer, mem_len);
|
||||||
|
|
||||||
@ -269,11 +269,11 @@ Index: gdb-7.0.50.20100115/gdb/remote.c
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Sends a packet with content determined by the printf format string
|
/* Sends a packet with content determined by the printf format string
|
||||||
Index: gdb-7.0.50.20100115/gdb/remote-sim.c
|
Index: gdb-7.1.90.20100711/gdb/remote-sim.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/remote-sim.c 2010-01-01 08:31:40.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/remote-sim.c 2010-05-16 23:11:14.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/remote-sim.c 2010-01-15 03:22:23.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/remote-sim.c 2010-07-12 10:46:24.000000000 +0200
|
||||||
@@ -752,11 +752,14 @@ gdbsim_prepare_to_store (struct regcache
|
@@ -759,11 +759,14 @@ gdbsim_prepare_to_store (struct regcache
|
||||||
|
|
||||||
Returns the number of bytes transferred. */
|
Returns the number of bytes transferred. */
|
||||||
|
|
||||||
@ -290,10 +290,10 @@ Index: gdb-7.0.50.20100115/gdb/remote-sim.c
|
|||||||
/* If no program is running yet, then ignore the simulator for
|
/* If no program is running yet, then ignore the simulator for
|
||||||
memory. Pass the request down to the next target, hopefully
|
memory. Pass the request down to the next target, hopefully
|
||||||
an exec file. */
|
an exec file. */
|
||||||
Index: gdb-7.0.50.20100115/gdb/exec.h
|
Index: gdb-7.1.90.20100711/gdb/exec.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/exec.h 2010-01-01 08:31:31.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/exec.h 2010-01-01 08:31:31.000000000 +0100
|
||||||
+++ gdb-7.0.50.20100115/gdb/exec.h 2010-01-15 03:22:23.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/exec.h 2010-07-12 10:46:24.000000000 +0200
|
||||||
@@ -60,7 +60,7 @@ extern int resize_section_table (struct
|
@@ -60,7 +60,7 @@ extern int resize_section_table (struct
|
||||||
|
|
||||||
One, and only one, of readbuf or writebuf must be non-NULL. */
|
One, and only one, of readbuf or writebuf must be non-NULL. */
|
||||||
|
@ -11,11 +11,11 @@
|
|||||||
|
|
||||||
* gdb.texinfo (File Options): Document --readnever.
|
* gdb.texinfo (File Options): Document --readnever.
|
||||||
|
|
||||||
Index: gdb-7.0.90.20100306/gdb/doc/gdb.texinfo
|
Index: gdb-7.1.90.20100721/gdb/doc/gdb.texinfo
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.90.20100306.orig/gdb/doc/gdb.texinfo 2010-03-06 23:19:13.000000000 +0100
|
--- gdb-7.1.90.20100721.orig/gdb/doc/gdb.texinfo 2010-07-23 20:58:52.000000000 +0200
|
||||||
+++ gdb-7.0.90.20100306/gdb/doc/gdb.texinfo 2010-03-06 23:20:35.000000000 +0100
|
+++ gdb-7.1.90.20100721/gdb/doc/gdb.texinfo 2010-07-23 20:59:15.000000000 +0200
|
||||||
@@ -995,6 +995,12 @@ Read each symbol file's entire symbol ta
|
@@ -998,6 +998,12 @@ Read each symbol file's entire symbol ta
|
||||||
the default, which is to read it incrementally as it is needed.
|
the default, which is to read it incrementally as it is needed.
|
||||||
This makes startup slower, but makes future operations faster.
|
This makes startup slower, but makes future operations faster.
|
||||||
|
|
||||||
@ -28,11 +28,11 @@ Index: gdb-7.0.90.20100306/gdb/doc/gdb.texinfo
|
|||||||
@end table
|
@end table
|
||||||
|
|
||||||
@node Mode Options
|
@node Mode Options
|
||||||
Index: gdb-7.0.90.20100306/gdb/main.c
|
Index: gdb-7.1.90.20100721/gdb/main.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.90.20100306.orig/gdb/main.c 2010-03-06 23:20:23.000000000 +0100
|
--- gdb-7.1.90.20100721.orig/gdb/main.c 2010-07-23 20:58:55.000000000 +0200
|
||||||
+++ gdb-7.0.90.20100306/gdb/main.c 2010-03-06 23:20:35.000000000 +0100
|
+++ gdb-7.1.90.20100721/gdb/main.c 2010-07-23 20:59:15.000000000 +0200
|
||||||
@@ -382,6 +382,7 @@ captured_main (void *data)
|
@@ -391,6 +391,7 @@ captured_main (void *data)
|
||||||
{"xdb", no_argument, &xdb_commands, 1},
|
{"xdb", no_argument, &xdb_commands, 1},
|
||||||
{"dbx", no_argument, &dbx_commands, 1},
|
{"dbx", no_argument, &dbx_commands, 1},
|
||||||
{"readnow", no_argument, &readnow_symbol_files, 1},
|
{"readnow", no_argument, &readnow_symbol_files, 1},
|
||||||
@ -40,7 +40,7 @@ Index: gdb-7.0.90.20100306/gdb/main.c
|
|||||||
{"r", no_argument, &readnow_symbol_files, 1},
|
{"r", no_argument, &readnow_symbol_files, 1},
|
||||||
{"quiet", no_argument, &quiet, 1},
|
{"quiet", no_argument, &quiet, 1},
|
||||||
{"q", no_argument, &quiet, 1},
|
{"q", no_argument, &quiet, 1},
|
||||||
@@ -1033,6 +1034,7 @@ Options:\n\n\
|
@@ -1038,6 +1039,7 @@ Options:\n\n\
|
||||||
fputs_unfiltered (_("\
|
fputs_unfiltered (_("\
|
||||||
--quiet Do not print version number on startup.\n\
|
--quiet Do not print version number on startup.\n\
|
||||||
--readnow Fully read symbol files on first access.\n\
|
--readnow Fully read symbol files on first access.\n\
|
||||||
@ -48,11 +48,11 @@ Index: gdb-7.0.90.20100306/gdb/main.c
|
|||||||
"), stream);
|
"), stream);
|
||||||
fputs_unfiltered (_("\
|
fputs_unfiltered (_("\
|
||||||
--se=FILE Use FILE as symbol file and executable file.\n\
|
--se=FILE Use FILE as symbol file and executable file.\n\
|
||||||
Index: gdb-7.0.90.20100306/gdb/symfile.c
|
Index: gdb-7.1.90.20100721/gdb/symfile.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.90.20100306.orig/gdb/symfile.c 2010-03-06 23:19:13.000000000 +0100
|
--- gdb-7.1.90.20100721.orig/gdb/symfile.c 2010-07-23 20:58:52.000000000 +0200
|
||||||
+++ gdb-7.0.90.20100306/gdb/symfile.c 2010-03-06 23:20:35.000000000 +0100
|
+++ gdb-7.1.90.20100721/gdb/symfile.c 2010-07-23 20:59:15.000000000 +0200
|
||||||
@@ -79,6 +79,7 @@ static void clear_symtab_users_cleanup (
|
@@ -80,6 +80,7 @@ static void clear_symtab_users_cleanup (
|
||||||
|
|
||||||
/* Global variables owned by this file */
|
/* Global variables owned by this file */
|
||||||
int readnow_symbol_files; /* Read full symbols immediately */
|
int readnow_symbol_files; /* Read full symbols immediately */
|
||||||
@ -60,33 +60,35 @@ Index: gdb-7.0.90.20100306/gdb/symfile.c
|
|||||||
|
|
||||||
/* External variables and functions referenced. */
|
/* External variables and functions referenced. */
|
||||||
|
|
||||||
Index: gdb-7.0.90.20100306/gdb/dwarf2read.c
|
Index: gdb-7.1.90.20100721/gdb/dwarf2read.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.90.20100306.orig/gdb/dwarf2read.c 2010-03-06 23:19:13.000000000 +0100
|
--- gdb-7.1.90.20100721.orig/gdb/dwarf2read.c 2010-07-23 20:58:53.000000000 +0200
|
||||||
+++ gdb-7.0.90.20100306/gdb/dwarf2read.c 2010-03-06 23:20:54.000000000 +0100
|
+++ gdb-7.1.90.20100721/gdb/dwarf2read.c 2010-07-23 20:59:26.000000000 +0200
|
||||||
@@ -52,6 +52,7 @@
|
@@ -54,6 +54,7 @@
|
||||||
#include "f-lang.h"
|
#include "exceptions.h"
|
||||||
#include "typeprint.h"
|
#include "gdb_stat.h"
|
||||||
#include "jv-lang.h"
|
#include "completer.h"
|
||||||
+#include "top.h"
|
+#include "top.h"
|
||||||
|
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include "gdb_string.h"
|
#include "gdb_string.h"
|
||||||
@@ -1222,7 +1223,8 @@ dwarf2_has_info (struct objfile *objfile
|
@@ -1283,8 +1284,9 @@ dwarf2_has_info (struct objfile *objfile
|
||||||
|
|
||||||
bfd_map_over_sections (objfile->obfd, dwarf2_locate_sections, NULL);
|
bfd_map_over_sections (objfile->obfd, dwarf2_locate_sections, NULL);
|
||||||
|
dwarf2_per_objfile->objfile = objfile;
|
||||||
}
|
}
|
||||||
- return (dwarf2_per_objfile->info.asection != NULL
|
- return (dwarf2_per_objfile->info.asection != NULL
|
||||||
+ return !readnever_symbol_files
|
- && dwarf2_per_objfile->abbrev.asection != NULL);
|
||||||
+ && (dwarf2_per_objfile->info.asection != NULL
|
+ return (! readnever_symbol_files
|
||||||
&& dwarf2_per_objfile->abbrev.asection != NULL);
|
+ && (dwarf2_per_objfile->info.asection != NULL
|
||||||
|
+ && dwarf2_per_objfile->abbrev.asection != NULL));
|
||||||
}
|
}
|
||||||
|
|
||||||
Index: gdb-7.0.90.20100306/gdb/top.h
|
/* When loading sections, we can either look for ".<name>", or for
|
||||||
|
Index: gdb-7.1.90.20100721/gdb/top.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.90.20100306.orig/gdb/top.h 2010-01-01 08:31:42.000000000 +0100
|
--- gdb-7.1.90.20100721.orig/gdb/top.h 2010-04-07 18:54:39.000000000 +0200
|
||||||
+++ gdb-7.0.90.20100306/gdb/top.h 2010-03-06 23:20:35.000000000 +0100
|
+++ gdb-7.1.90.20100721/gdb/top.h 2010-07-23 20:59:15.000000000 +0200
|
||||||
@@ -63,6 +63,7 @@ extern void set_prompt (char *);
|
@@ -61,6 +61,7 @@ extern void set_prompt (char *);
|
||||||
|
|
||||||
/* From random places. */
|
/* From random places. */
|
||||||
extern int readnow_symbol_files;
|
extern int readnow_symbol_files;
|
||||||
|
@ -3,17 +3,17 @@
|
|||||||
* gdb.gdb/selftest.exp: Add matching on specific Red Hat only version
|
* gdb.gdb/selftest.exp: Add matching on specific Red Hat only version
|
||||||
string.
|
string.
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/testsuite/gdb.gdb/selftest.exp
|
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.gdb/selftest.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/testsuite/gdb.gdb/selftest.exp 2008-01-26 14:56:37.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.gdb/selftest.exp 2010-06-26 08:44:47.000000000 +0200
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.gdb/selftest.exp 2008-07-14 10:23:50.000000000 +0200
|
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.gdb/selftest.exp 2010-07-12 09:59:42.000000000 +0200
|
||||||
@@ -354,6 +354,9 @@ proc test_with_self { executable } {
|
@@ -342,6 +342,9 @@ proc test_with_self { executable } {
|
||||||
-re ".\[0-9\]+ = +.+ +0x.*\[0-9.\]+.*$gdb_prompt $" {
|
-re ".\[0-9\]+ = +.+ +0x.*\[0-9.\]+.*$gdb_prompt $" {
|
||||||
pass "printed version with cast"
|
pass "printed version with cast"
|
||||||
}
|
}
|
||||||
+ -re ".\[0-9\]+ = .(Fedora|Red Hat Enterprise Linux) \[\\(\\)0-9.a-z\\-\]+.*$gdb_prompt $" {
|
+ -re ".\[0-9\]+ = .(Fedora|Red Hat Enterprise Linux) \[\\(\\)0-9.a-z\\-\]+.*$gdb_prompt $" {
|
||||||
+ pass "printed version Fedora or Red Hat Enterprise Linux only"
|
+ pass "printed version Fedora or Red Hat Enterprise Linux only"
|
||||||
+ }
|
+ }
|
||||||
-re ".*$gdb_prompt $" { fail "printed version" }
|
|
||||||
timeout { fail "(timeout) printed version" }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_steps_and_nexts
|
||||||
|
@ -19,21 +19,30 @@ Proposed upstream but never committed upstream.
|
|||||||
(source_command): Update documentation. Check permissions if
|
(source_command): Update documentation. Check permissions if
|
||||||
FROM_TTY is -1.
|
FROM_TTY is -1.
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100121/gdb/cli/cli-cmds.c
|
Index: gdb-7.1.90.20100720/gdb/cli/cli-cmds.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100121.orig/gdb/cli/cli-cmds.c 2010-01-18 07:25:22.000000000 +0100
|
--- gdb-7.1.90.20100720.orig/gdb/cli/cli-cmds.c 2010-05-17 21:28:12.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100121/gdb/cli/cli-cmds.c 2010-01-21 15:12:28.000000000 +0100
|
+++ gdb-7.1.90.20100720/gdb/cli/cli-cmds.c 2010-07-21 20:30:30.000000000 +0200
|
||||||
@@ -38,6 +38,7 @@
|
@@ -39,6 +39,7 @@
|
||||||
#include "objfiles.h"
|
|
||||||
#include "source.h"
|
#include "source.h"
|
||||||
#include "disasm.h"
|
#include "disasm.h"
|
||||||
|
#include "tracepoint.h"
|
||||||
+#include "gdb_stat.h"
|
+#include "gdb_stat.h"
|
||||||
extern void disconnect_or_stop_tracing (int from_tty);
|
|
||||||
|
|
||||||
#include "ui-out.h"
|
#include "ui-out.h"
|
||||||
@@ -488,6 +489,29 @@ find_and_open_script (int from_tty, char
|
|
||||||
file, O_RDONLY, &full_pathname);
|
@@ -487,7 +488,7 @@ Script filename extension recognition is
|
||||||
make_cleanup (xfree, full_pathname);
|
|
||||||
|
int
|
||||||
|
find_and_open_script (const char *script_file, int search_path,
|
||||||
|
- FILE **streamp, char **full_pathp)
|
||||||
|
+ FILE **streamp, char **full_pathp, int from_tty)
|
||||||
|
{
|
||||||
|
char *file;
|
||||||
|
int fd;
|
||||||
|
@@ -513,6 +514,32 @@ find_and_open_script (const char *script
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
+#ifdef HAVE_GETUID
|
+#ifdef HAVE_GETUID
|
||||||
+ if (from_tty == -1)
|
+ if (from_tty == -1)
|
||||||
@ -42,10 +51,12 @@ Index: gdb-7.0.50.20100121/gdb/cli/cli-cmds.c
|
|||||||
+
|
+
|
||||||
+ if (fstat (fd, &statbuf) < 0)
|
+ if (fstat (fd, &statbuf) < 0)
|
||||||
+ {
|
+ {
|
||||||
|
+ int save_errno = errno;
|
||||||
|
+
|
||||||
+ close (fd);
|
+ close (fd);
|
||||||
+ /* Do not do_cleanups (old_cleanups) as FILE is allocated there.
|
+ do_cleanups (old_cleanups);
|
||||||
+ perror_with_name calls error which should call the cleanups. */
|
+ errno = save_errno;
|
||||||
+ perror_with_name (file);
|
+ return 0;
|
||||||
+ }
|
+ }
|
||||||
+ if (statbuf.st_uid != getuid () || (statbuf.st_mode & S_IWOTH))
|
+ if (statbuf.st_uid != getuid () || (statbuf.st_mode & S_IWOTH))
|
||||||
+ {
|
+ {
|
||||||
@ -53,36 +64,37 @@ Index: gdb-7.0.50.20100121/gdb/cli/cli-cmds.c
|
|||||||
+ warning (_("not using untrusted file \"%s\""), file);
|
+ warning (_("not using untrusted file \"%s\""), file);
|
||||||
+ close (fd);
|
+ close (fd);
|
||||||
+ do_cleanups (old_cleanups);
|
+ do_cleanups (old_cleanups);
|
||||||
|
+ errno = EPERM;
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
/* Use the full path name, if it is found. */
|
do_cleanups (old_cleanups);
|
||||||
if (full_pathname != NULL && fd != -1)
|
|
||||||
{
|
|
||||||
@@ -496,7 +520,7 @@ find_and_open_script (int from_tty, char
|
|
||||||
|
|
||||||
if (fd == -1)
|
*streamp = fdopen (fd, FOPEN_RT);
|
||||||
|
@@ -572,13 +599,14 @@ source_script_with_search (const char *f
|
||||||
|
if (file == NULL || *file == 0)
|
||||||
|
error (_("source command requires file name of file to source."));
|
||||||
|
|
||||||
|
- if (!find_and_open_script (file, search_path, &stream, &full_path))
|
||||||
|
+ if (!find_and_open_script (file, search_path, &stream, &full_path,
|
||||||
|
+ from_tty))
|
||||||
{
|
{
|
||||||
|
/* The script wasn't found, or was otherwise inaccessible.
|
||||||
|
If the source command was invoked interactively, throw an error.
|
||||||
|
Otherwise (e.g. if it was invoked by a script), silently ignore
|
||||||
|
the error. */
|
||||||
- if (from_tty)
|
- if (from_tty)
|
||||||
+ if (from_tty > 0)
|
+ if (from_tty > 0)
|
||||||
perror_with_name (file);
|
perror_with_name (file);
|
||||||
else
|
else
|
||||||
{
|
return;
|
||||||
@@ -554,6 +578,7 @@ source_script (char *file, int from_tty)
|
Index: gdb-7.1.90.20100720/gdb/testsuite/gdb.base/gdbinit.exp
|
||||||
else
|
|
||||||
script_from_file (stream, file);
|
|
||||||
|
|
||||||
+ /* FILE gets freed by do_cleanups (old_cleanups). */
|
|
||||||
do_cleanups (old_cleanups);
|
|
||||||
}
|
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gdbinit.exp
|
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gdbinit.exp 2010-01-21 15:11:18.000000000 +0100
|
+++ gdb-7.1.90.20100720/gdb/testsuite/gdb.base/gdbinit.exp 2010-07-20 22:25:40.000000000 +0200
|
||||||
@@ -0,0 +1,98 @@
|
@@ -0,0 +1,91 @@
|
||||||
+# Copyright 2005
|
+# Copyright 2005
|
||||||
+# Free Software Foundation, Inc.
|
+# Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
@ -105,13 +117,6 @@ Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gdbinit.exp
|
|||||||
+
|
+
|
||||||
+# This file was written by Jeff Johnston <jjohnstn@redhat.com>.
|
+# This file was written by Jeff Johnston <jjohnstn@redhat.com>.
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+# are we on a target board
|
+# are we on a target board
|
||||||
+if [is_remote target] {
|
+if [is_remote target] {
|
||||||
+ return
|
+ return
|
||||||
@ -181,17 +186,17 @@ Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gdbinit.exp
|
|||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+remote_exec build "rm .gdbinit"
|
+remote_exec build "rm .gdbinit"
|
||||||
Index: gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gdbinit.sample
|
Index: gdb-7.1.90.20100720/gdb/testsuite/gdb.base/gdbinit.sample
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-7.0.50.20100121/gdb/testsuite/gdb.base/gdbinit.sample 2010-01-21 15:11:18.000000000 +0100
|
+++ gdb-7.1.90.20100720/gdb/testsuite/gdb.base/gdbinit.sample 2010-07-20 22:25:40.000000000 +0200
|
||||||
@@ -0,0 +1 @@
|
@@ -0,0 +1 @@
|
||||||
+echo "\nin gdbinit"
|
+echo "\nin gdbinit"
|
||||||
Index: gdb-7.0.50.20100121/gdb/main.c
|
Index: gdb-7.1.90.20100720/gdb/main.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100121.orig/gdb/main.c 2010-01-21 15:11:09.000000000 +0100
|
--- gdb-7.1.90.20100720.orig/gdb/main.c 2010-06-26 08:44:47.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100121/gdb/main.c 2010-01-21 15:11:18.000000000 +0100
|
+++ gdb-7.1.90.20100720/gdb/main.c 2010-07-21 20:09:03.000000000 +0200
|
||||||
@@ -818,7 +818,7 @@ Excess command line arguments ignored. (
|
@@ -794,7 +794,7 @@ Excess command line arguments ignored. (
|
||||||
debugging or what directory you are in. */
|
debugging or what directory you are in. */
|
||||||
|
|
||||||
if (home_gdbinit && !inhibit_gdbinit)
|
if (home_gdbinit && !inhibit_gdbinit)
|
||||||
@ -200,12 +205,39 @@ Index: gdb-7.0.50.20100121/gdb/main.c
|
|||||||
|
|
||||||
/* Now perform all the actions indicated by the arguments. */
|
/* Now perform all the actions indicated by the arguments. */
|
||||||
if (cdarg != NULL)
|
if (cdarg != NULL)
|
||||||
@@ -887,7 +887,7 @@ Can't attach to process and specify a co
|
@@ -868,7 +868,7 @@ Can't attach to process and specify a co
|
||||||
/* Read the .gdbinit file in the current directory, *if* it isn't
|
/* Read the .gdbinit file in the current directory, *if* it isn't
|
||||||
the same as the $HOME/.gdbinit file (it should exist, also). */
|
the same as the $HOME/.gdbinit file (it should exist, also). */
|
||||||
if (local_gdbinit && !inhibit_gdbinit)
|
if (local_gdbinit && !inhibit_gdbinit)
|
||||||
- catch_command_errors (source_script, local_gdbinit, 0, RETURN_MASK_ALL);
|
- catch_command_errors (source_script, local_gdbinit, 0, RETURN_MASK_ALL);
|
||||||
+ catch_command_errors (source_script, local_gdbinit, -1, RETURN_MASK_ALL);
|
+ catch_command_errors (source_script, local_gdbinit, -1, RETURN_MASK_ALL);
|
||||||
|
|
||||||
for (i = 0; i < ncmd; i++)
|
/* Now that all .gdbinit's have been read and all -d options have been
|
||||||
{
|
processed, we can read any scripts mentioned in SYMARG.
|
||||||
|
Index: gdb-7.1.90.20100720/gdb/python/py-auto-load.c
|
||||||
|
===================================================================
|
||||||
|
--- gdb-7.1.90.20100720.orig/gdb/python/py-auto-load.c 2010-05-17 23:23:25.000000000 +0200
|
||||||
|
+++ gdb-7.1.90.20100720/gdb/python/py-auto-load.c 2010-07-20 22:25:40.000000000 +0200
|
||||||
|
@@ -219,7 +219,7 @@ source_section_scripts (struct objfile *
|
||||||
|
}
|
||||||
|
|
||||||
|
opened = find_and_open_script (file, 1 /*search_path*/,
|
||||||
|
- &stream, &full_path);
|
||||||
|
+ &stream, &full_path, 1 /* from_tty */);
|
||||||
|
|
||||||
|
/* If the file is not found, we still record the file in the hash table,
|
||||||
|
we only want to print an error message once.
|
||||||
|
Index: gdb-7.1.90.20100720/gdb/cli/cli-cmds.h
|
||||||
|
===================================================================
|
||||||
|
--- gdb-7.1.90.20100720.orig/gdb/cli/cli-cmds.h 2010-05-03 01:52:14.000000000 +0200
|
||||||
|
+++ gdb-7.1.90.20100720/gdb/cli/cli-cmds.h 2010-07-20 22:25:40.000000000 +0200
|
||||||
|
@@ -126,7 +126,8 @@ extern void source_script (char *, int);
|
||||||
|
/* Exported to objfiles.c. */
|
||||||
|
|
||||||
|
extern int find_and_open_script (const char *file, int search_path,
|
||||||
|
- FILE **streamp, char **full_path);
|
||||||
|
+ FILE **streamp, char **full_path,
|
||||||
|
+ int from_tty);
|
||||||
|
|
||||||
|
/* Command tracing state. */
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/step-thread-exit.exp
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/step-thread-exit.exp 2008-12-08 22:22:14.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/step-thread-exit.exp 2008-12-08 22:22:14.000000000 +0100
|
||||||
@@ -0,0 +1,130 @@
|
@@ -0,0 +1,123 @@
|
||||||
+# This testcase is part of GDB, the GNU debugger.
|
+# This testcase is part of GDB, the GNU debugger.
|
||||||
+
|
+
|
||||||
+# Copyright 2005 Free Software Foundation, Inc.
|
+# Copyright 2005 Free Software Foundation, Inc.
|
||||||
@ -83,13 +83,6 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/step-thread-exit.exp
|
|||||||
+
|
+
|
||||||
+# Check that GDB can step over a thread exit.
|
+# Check that GDB can step over a thread exit.
|
||||||
+
|
+
|
||||||
+if $tracelevel {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+set testfile "step-thread-exit"
|
+set testfile "step-thread-exit"
|
||||||
+set srcfile ${testfile}.c
|
+set srcfile ${testfile}.c
|
||||||
+set binfile ${objdir}/${subdir}/${testfile}
|
+set binfile ${objdir}/${subdir}/${testfile}
|
||||||
|
@ -129,7 +129,7 @@ Index: gdb/testsuite/ChangeLog
|
|||||||
+}
|
+}
|
||||||
--- gdb-6.3/gdb/testsuite/gdb.cp/constructortest.exp.fix Fri Jan 21 17:07:02 2005
|
--- gdb-6.3/gdb/testsuite/gdb.cp/constructortest.exp.fix Fri Jan 21 17:07:02 2005
|
||||||
+++ gdb-6.3/gdb/testsuite/gdb.cp/constructortest.exp Fri Jan 21 17:05:29 2005
|
+++ gdb-6.3/gdb/testsuite/gdb.cp/constructortest.exp Fri Jan 21 17:05:29 2005
|
||||||
@@ -0,0 +1,137 @@
|
@@ -0,0 +1,130 @@
|
||||||
+# This testcase is part of GDB, the GNU debugger.
|
+# This testcase is part of GDB, the GNU debugger.
|
||||||
+
|
+
|
||||||
+# Copyright 2005, 2007 Free Software Foundation, Inc.
|
+# Copyright 2005, 2007 Free Software Foundation, Inc.
|
||||||
@ -150,13 +150,6 @@ Index: gdb/testsuite/ChangeLog
|
|||||||
+
|
+
|
||||||
+# Check that GDB can break at multiple forms of constructors.
|
+# Check that GDB can break at multiple forms of constructors.
|
||||||
+
|
+
|
||||||
+if $tracelevel {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+set testfile "constructortest"
|
+set testfile "constructortest"
|
||||||
+set srcfile ${testfile}.cc
|
+set srcfile ${testfile}.cc
|
||||||
+set binfile ${objdir}/${subdir}/${testfile}
|
+set binfile ${objdir}/${subdir}/${testfile}
|
||||||
|
@ -23,7 +23,7 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.base/move-dir.exp
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.base/move-dir.exp 2008-12-07 10:13:01.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.base/move-dir.exp 2008-12-07 10:13:01.000000000 +0100
|
||||||
@@ -0,0 +1,67 @@
|
@@ -0,0 +1,57 @@
|
||||||
+# Copyright 2005
|
+# Copyright 2005
|
||||||
+# Free Software Foundation, Inc.
|
+# Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
@ -41,16 +41,6 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.base/move-dir.exp
|
|||||||
+# along with this program; if not, write to the Free Software
|
+# along with this program; if not, write to the Free Software
|
||||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
+
|
+
|
||||||
+# Please email any bugs, comments, and/or additions to this file to:
|
|
||||||
+# bug-gdb@prep.ai.mit.edu
|
|
||||||
+
|
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+set testfile "move-dir"
|
+set testfile "move-dir"
|
||||||
+set srcfile ${testfile}.c
|
+set srcfile ${testfile}.c
|
||||||
+set incfile ${testfile}.h
|
+set incfile ${testfile}.h
|
||||||
|
@ -436,7 +436,7 @@ Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/attach.exp
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/attach.exp 2010-03-06 23:19:31.000000000 +0100
|
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/attach.exp 2010-03-06 23:19:31.000000000 +0100
|
||||||
@@ -0,0 +1,433 @@
|
@@ -0,0 +1,423 @@
|
||||||
+# Copyright 1997, 1999, 2002 Free Software Foundation, Inc.
|
+# Copyright 1997, 1999, 2002 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -453,16 +453,6 @@ Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/attach.exp
|
|||||||
+# along with this program; if not, write to the Free Software
|
+# along with this program; if not, write to the Free Software
|
||||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||||
+
|
+
|
||||||
+# Please email any bugs, comments, and/or additions to this file to:
|
|
||||||
+# bug-gdb@prep.ai.mit.edu
|
|
||||||
+
|
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+# On HP-UX 11.0, this test is causing a process running the program
|
+# On HP-UX 11.0, this test is causing a process running the program
|
||||||
+# "attach" to be left around spinning. Until we figure out why, I am
|
+# "attach" to be left around spinning. Until we figure out why, I am
|
||||||
+# commenting out the test to avoid polluting tiamat (our 11.0 nightly
|
+# commenting out the test to avoid polluting tiamat (our 11.0 nightly
|
||||||
@ -874,7 +864,7 @@ Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/break.exp
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/break.exp 2010-03-06 23:19:31.000000000 +0100
|
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/break.exp 2010-03-06 23:19:31.000000000 +0100
|
||||||
@@ -0,0 +1,977 @@
|
@@ -0,0 +1,966 @@
|
||||||
+# Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999,
|
+# Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||||
+# 2000, 2002, 2003, 2004
|
+# 2000, 2002, 2003, 2004
|
||||||
+# Free Software Foundation, Inc.
|
+# Free Software Foundation, Inc.
|
||||||
@ -900,17 +890,6 @@ Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/break.exp
|
|||||||
+
|
+
|
||||||
+# Test the same stuff but with PIE executables
|
+# Test the same stuff but with PIE executables
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# test running programs
|
|
||||||
+#
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+set testfile "break"
|
+set testfile "break"
|
||||||
+set srcfile ${testfile}.c
|
+set srcfile ${testfile}.c
|
||||||
+set srcfile1 ${testfile}1.c
|
+set srcfile1 ${testfile}1.c
|
||||||
@ -1856,7 +1835,7 @@ Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/corefile.exp
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/corefile.exp 2010-03-06 23:19:31.000000000 +0100
|
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/corefile.exp 2010-03-06 23:19:31.000000000 +0100
|
||||||
@@ -0,0 +1,243 @@
|
@@ -0,0 +1,233 @@
|
||||||
+# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
|
+# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
|
||||||
+# Free Software Foundation, Inc.
|
+# Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
@ -1874,18 +1853,8 @@ Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/corefile.exp
|
|||||||
+# along with this program; if not, write to the Free Software
|
+# along with this program; if not, write to the Free Software
|
||||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
+
|
+
|
||||||
+# Please email any bugs, comments, and/or additions to this file to:
|
|
||||||
+# bug-gdb@prep.ai.mit.edu
|
|
||||||
+
|
|
||||||
+# This file was written by Fred Fish. (fnf@cygnus.com)
|
+# This file was written by Fred Fish. (fnf@cygnus.com)
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+# are we on a target board
|
+# are we on a target board
|
||||||
+if ![isnative] then {
|
+if ![isnative] then {
|
||||||
+ return
|
+ return
|
||||||
|
@ -114,7 +114,7 @@ Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.exp
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.5/gdb/testsuite/gdb.threads/watchthreads-threaded.exp 2006-07-12 01:54:29.000000000 -0300
|
+++ gdb-6.5/gdb/testsuite/gdb.threads/watchthreads-threaded.exp 2006-07-12 01:54:29.000000000 -0300
|
||||||
@@ -0,0 +1,133 @@
|
@@ -0,0 +1,126 @@
|
||||||
+# This testcase is part of GDB, the GNU debugger.
|
+# This testcase is part of GDB, the GNU debugger.
|
||||||
+
|
+
|
||||||
+# Copyright 2005 Free Software Foundation, Inc.
|
+# Copyright 2005 Free Software Foundation, Inc.
|
||||||
@ -135,13 +135,6 @@ Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.exp
|
|||||||
+
|
+
|
||||||
+# Check that GDB can support multiple watchpoints across threads.
|
+# Check that GDB can support multiple watchpoints across threads.
|
||||||
+
|
+
|
||||||
+if $tracelevel {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+# This test verifies that a watchpoint is detected in the proper thread
|
+# This test verifies that a watchpoint is detected in the proper thread
|
||||||
+# so the test is only meaningful on a system with hardware watchpoints.
|
+# so the test is only meaningful on a system with hardware watchpoints.
|
||||||
+if [target_info exists gdb,no_hardware_watchpoints] {
|
+if [target_info exists gdb,no_hardware_watchpoints] {
|
||||||
|
@ -171,7 +171,7 @@ Index: gdb-7.0.50.20100128/gdb/testsuite/gdb.dwarf2/dw2-errno.exp
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-7.0.50.20100128/gdb/testsuite/gdb.dwarf2/dw2-errno.exp 2010-01-28 12:52:48.000000000 +0100
|
+++ gdb-7.0.50.20100128/gdb/testsuite/gdb.dwarf2/dw2-errno.exp 2010-01-28 12:52:48.000000000 +0100
|
||||||
@@ -0,0 +1,67 @@
|
@@ -0,0 +1,60 @@
|
||||||
+# Copyright 2007 Free Software Foundation, Inc.
|
+# Copyright 2007 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -187,13 +187,6 @@ Index: gdb-7.0.50.20100128/gdb/testsuite/gdb.dwarf2/dw2-errno.exp
|
|||||||
+# You should have received a copy of the GNU General Public License
|
+# You should have received a copy of the GNU General Public License
|
||||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+set testfile dw2-errno
|
+set testfile dw2-errno
|
||||||
+set srcfile ${testfile}.c
|
+set srcfile ${testfile}.c
|
||||||
+set binfile ${objdir}/${subdir}/${testfile}
|
+set binfile ${objdir}/${subdir}/${testfile}
|
||||||
|
@ -23,296 +23,6 @@ instead.
|
|||||||
|
|
||||||
Port to GDB-6.7.
|
Port to GDB-6.7.
|
||||||
|
|
||||||
Index: gdb-6.8.50.20090802/gdb/amd64-linux-tdep.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.50.20090802.orig/gdb/amd64-linux-tdep.c 2009-07-02 19:25:52.000000000 +0200
|
|
||||||
+++ gdb-6.8.50.20090802/gdb/amd64-linux-tdep.c 2009-08-03 15:50:08.000000000 +0200
|
|
||||||
@@ -238,6 +238,80 @@ amd64_linux_register_reggroup_p (struct
|
|
||||||
|
|
||||||
/* Set the program counter for process PTID to PC. */
|
|
||||||
|
|
||||||
+/* Detect the outermost frame; during unwind of
|
|
||||||
+ #5 0x000000305cec68c3 in clone () from /lib64/tls/libc.so.6
|
|
||||||
+ avoid the additional bogus frame
|
|
||||||
+ #6 0x0000000000000000 in ??
|
|
||||||
+ We compare if the `linux_clone_code' block is _before_ unwound PC. */
|
|
||||||
+
|
|
||||||
+static const unsigned char linux_clone_code[] =
|
|
||||||
+{
|
|
||||||
+/* libc/sysdeps/unix/sysv/linux/x86_64/clone.S */
|
|
||||||
+/* #ifdef RESET_PID */
|
|
||||||
+/* ... */
|
|
||||||
+/* mov $SYS_ify(getpid), %eax */
|
|
||||||
+/* 0xb8, 0x27, 0x00, 0x00, 0x00 */
|
|
||||||
+/* OR */
|
|
||||||
+/* mov $SYS_ify(getpid), %rax */
|
|
||||||
+/* 0x48, 0xc7, 0xc0, 0x27, 0x00, 0x00, 0x00 */
|
|
||||||
+/* so just: */
|
|
||||||
+ 0x27, 0x00, 0x00, 0x00,
|
|
||||||
+/* syscall */
|
|
||||||
+ 0x0f, 0x05,
|
|
||||||
+/* movl %eax, %fs:PID */
|
|
||||||
+ 0x64, 0x89, 0x04, 0x25, 0x94, 0x00, 0x00, 0x00,
|
|
||||||
+/* movl %eax, %fs:TID */
|
|
||||||
+ 0x64, 0x89, 0x04, 0x25, 0x90, 0x00, 0x00, 0x00,
|
|
||||||
+/* #endif */
|
|
||||||
+/* |* Set up arguments for the function call. *| */
|
|
||||||
+/* popq %rax |* Function to call. *| */
|
|
||||||
+ 0x58,
|
|
||||||
+/* popq %rdi |* Argument. *| */
|
|
||||||
+ 0x5f,
|
|
||||||
+/* call *%rax$ */
|
|
||||||
+ 0xff, 0xd0
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+#define LINUX_CLONE_LEN (sizeof linux_clone_code)
|
|
||||||
+
|
|
||||||
+static int
|
|
||||||
+amd64_linux_clone_running (struct frame_info *this_frame)
|
|
||||||
+{
|
|
||||||
+ CORE_ADDR pc = get_frame_pc (this_frame);
|
|
||||||
+ unsigned char buf[LINUX_CLONE_LEN];
|
|
||||||
+
|
|
||||||
+ if (!safe_frame_unwind_memory (this_frame, pc - LINUX_CLONE_LEN, buf,
|
|
||||||
+ LINUX_CLONE_LEN))
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ if (memcmp (buf, linux_clone_code, LINUX_CLONE_LEN) != 0)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ return 1;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int
|
|
||||||
+amd64_linux_outermost_frame (struct frame_info *this_frame)
|
|
||||||
+{
|
|
||||||
+ CORE_ADDR pc = get_frame_pc (this_frame);
|
|
||||||
+ char *name;
|
|
||||||
+
|
|
||||||
+ find_pc_partial_function (pc, &name, NULL, NULL);
|
|
||||||
+
|
|
||||||
+ /* If we have NAME, we can optimize the search.
|
|
||||||
+ `clone' NAME still needs to have the code checked as its name may be
|
|
||||||
+ present in the user code.
|
|
||||||
+ `__clone' NAME should not be present in the user code but in the initial
|
|
||||||
+ parts of the `__clone' implementation the unwind still makes sense.
|
|
||||||
+ More detailed unwinding decision would be too much sensitive to possible
|
|
||||||
+ subtle changes in specific glibc revisions. */
|
|
||||||
+ if (name == NULL || strcmp (name, "clone") == 0
|
|
||||||
+ || strcmp ("__clone", name) == 0)
|
|
||||||
+ return (amd64_linux_clone_running (this_frame) != 0);
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
amd64_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
|
|
||||||
{
|
|
||||||
@@ -276,6 +350,8 @@ amd64_linux_init_abi (struct gdbarch_inf
|
|
||||||
tdep->sc_reg_offset = amd64_linux_sc_reg_offset;
|
|
||||||
tdep->sc_num_regs = ARRAY_SIZE (amd64_linux_sc_reg_offset);
|
|
||||||
|
|
||||||
+ tdep->outermost_frame_p = amd64_linux_outermost_frame;
|
|
||||||
+
|
|
||||||
/* GNU/Linux uses SVR4-style shared libraries. */
|
|
||||||
set_solib_svr4_fetch_link_map_offsets
|
|
||||||
(gdbarch, svr4_lp64_fetch_link_map_offsets);
|
|
||||||
Index: gdb-6.8.50.20090802/gdb/amd64-tdep.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.50.20090802.orig/gdb/amd64-tdep.c 2009-07-02 19:25:52.000000000 +0200
|
|
||||||
+++ gdb-6.8.50.20090802/gdb/amd64-tdep.c 2009-08-03 15:50:08.000000000 +0200
|
|
||||||
@@ -1736,11 +1736,16 @@ amd64_frame_this_id (struct frame_info *
|
|
||||||
{
|
|
||||||
struct amd64_frame_cache *cache =
|
|
||||||
amd64_frame_cache (this_frame, this_cache);
|
|
||||||
+ struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
|
|
||||||
|
|
||||||
/* This marks the outermost frame. */
|
|
||||||
if (cache->base == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
+ /* Detect OS dependent outermost frames; such as `clone'. */
|
|
||||||
+ if (tdep->outermost_frame_p && tdep->outermost_frame_p (this_frame))
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
(*this_id) = frame_id_build (cache->base + 16, cache->pc);
|
|
||||||
}
|
|
||||||
|
|
||||||
--- gdb-6.8.50.20090811/gdb/i386-tdep.c.orig 2009-08-10 05:02:39.000000000 +0200
|
|
||||||
+++ gdb-6.8.50.20090811/gdb/i386-tdep.c 2009-08-11 16:33:51.000000000 +0200
|
|
||||||
@@ -5432,6 +5432,9 @@ i386_gdbarch_init (struct gdbarch_info i
|
|
||||||
tdep->sc_pc_offset = -1;
|
|
||||||
tdep->sc_sp_offset = -1;
|
|
||||||
|
|
||||||
+ /* Unwinding stops on i386 automatically. */
|
|
||||||
+ tdep->outermost_frame_p = NULL;
|
|
||||||
+
|
|
||||||
tdep->record_regmap = i386_record_regmap;
|
|
||||||
|
|
||||||
/* The format used for `long double' on almost all i386 targets is
|
|
||||||
--- gdb-6.8.50.20090811/gdb/i386-tdep.h.orig 2009-08-10 05:02:39.000000000 +0200
|
|
||||||
+++ gdb-6.8.50.20090811/gdb/i386-tdep.h 2009-08-11 16:34:08.000000000 +0200
|
|
||||||
@@ -120,6 +120,9 @@ struct gdbarch_tdep
|
|
||||||
int (*i386_sysenter_record) (struct regcache *regcache);
|
|
||||||
/* Parse syscall args. */
|
|
||||||
int (*i386_syscall_record) (struct regcache *regcache);
|
|
||||||
+
|
|
||||||
+ /* Detect OS dependent outermost frames; such as `clone'. */
|
|
||||||
+ int (*outermost_frame_p) (struct frame_info *this_frame);
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Floating-point registers. */
|
|
||||||
--- a/gdb/ia64-tdep.c
|
|
||||||
+++ b/gdb/ia64-tdep.c
|
|
||||||
@@ -2122,6 +2122,138 @@ static const struct frame_unwind ia64_frame_unwind =
|
|
||||||
default_frame_sniffer
|
|
||||||
};
|
|
||||||
|
|
||||||
+/* Detect the outermost frame; during unwind of
|
|
||||||
+ #6 0x2000000000347100 in __clone2 () from /lib/libc.so.6.1
|
|
||||||
+ avoid the additional bogus frame
|
|
||||||
+ #7 0x0000000000000000 in ?? () */
|
|
||||||
+
|
|
||||||
+static char linux_clone2_code[] =
|
|
||||||
+{
|
|
||||||
+/* libc/sysdeps/unix/sysv/linux/ia64/clone2.S */
|
|
||||||
+ 0x09, 0x00, 0x20, 0x12, 0x90, 0x11, 0x00, 0x40,
|
|
||||||
+ 0x28, 0x20, 0x23, 0x00, 0x00, 0x00, 0x04, 0x00,
|
|
||||||
+/* st4 [r9]=r8 */
|
|
||||||
+/* st4 [r10]=r8 */
|
|
||||||
+/* ;; */
|
|
||||||
+/* #endif */
|
|
||||||
+ 0x02, 0x50, 0x21, 0x40, 0x18, 0x14, 0x90, 0x02,
|
|
||||||
+ 0x90, 0x00, 0x42, 0x00, 0x00, 0x00, 0x04, 0x00,
|
|
||||||
+/* 1: ld8 out1=[in0],8 |* Retrieve code pointer. *| */
|
|
||||||
+/* mov out0=in4 |* Pass proper argument to fn *| */
|
|
||||||
+/* ;; */
|
|
||||||
+ 0x11, 0x08, 0x00, 0x40, 0x18, 0x10, 0x60, 0x50,
|
|
||||||
+ 0x05, 0x80, 0x03, 0x00, 0x68, 0x00, 0x80, 0x12,
|
|
||||||
+/* ld8 gp=[in0] |* Load function gp. *| */
|
|
||||||
+/* mov b6=out1 */
|
|
||||||
+/* br.call.dptk.many rp=b6 |* Call fn(arg) in the child *| */
|
|
||||||
+/* ;; */
|
|
||||||
+ 0x10, 0x48, 0x01, 0x10, 0x00, 0x21, 0x10, 0x00,
|
|
||||||
+ 0xa0, 0x00, 0x42, 0x00, 0x98, 0xdf, 0xf7, 0x5b,
|
|
||||||
+/* mov out0=r8 |* Argument to _exit *| */
|
|
||||||
+/* mov gp=loc0 */
|
|
||||||
+/* .globl HIDDEN_JUMPTARGET(_exit) */
|
|
||||||
+/* br.call.dpnt.many rp=HIDDEN_JUMPTARGET(_exit) */
|
|
||||||
+/* |* call _exit with result from fn. *| */
|
|
||||||
+ 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
|
|
||||||
+ 0x00, 0x02, 0x00, 0x80, 0x00, 0x00, 0x84, 0x00
|
|
||||||
+/* ret |* Not reached. *| */
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+#define LINUX_CLONE_PRE_SLOTS 3 /* Number of slots before PC. */
|
|
||||||
+#define LINUX_CLONE_LEN (sizeof linux_clone2_code)
|
|
||||||
+
|
|
||||||
+static int
|
|
||||||
+ia64_linux_clone2_running (struct frame_info *this_frame)
|
|
||||||
+{
|
|
||||||
+ CORE_ADDR pc = get_frame_pc (this_frame);
|
|
||||||
+ char buf[LINUX_CLONE_LEN];
|
|
||||||
+ struct minimal_symbol *minsym;
|
|
||||||
+ long long instr;
|
|
||||||
+
|
|
||||||
+ if (!safe_frame_unwind_memory (this_frame, pc - LINUX_CLONE_PRE_SLOTS * 16,
|
|
||||||
+ buf, LINUX_CLONE_LEN))
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ if (memcmp (buf, linux_clone2_code, LINUX_CLONE_PRE_SLOTS * 16) != 0)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ /* Adjust the expected "_exit" address. */
|
|
||||||
+ minsym = lookup_minimal_symbol_text ("_exit", NULL);
|
|
||||||
+ if (minsym == NULL)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ instr = slotN_contents (&linux_clone2_code[LINUX_CLONE_PRE_SLOTS * 16], 2);
|
|
||||||
+ instr &= ~(((1L << 20) - 1) << 13);
|
|
||||||
+ /* Address is relative to the jump instruction slot, not the next one. */
|
|
||||||
+ instr |= (((SYMBOL_VALUE_ADDRESS (minsym) - (pc & ~0xfL)) >> 4)
|
|
||||||
+ & ((1L << 20) - 1)) << 13;
|
|
||||||
+ replace_slotN_contents (&linux_clone2_code[LINUX_CLONE_PRE_SLOTS * 16], instr,
|
|
||||||
+ 2);
|
|
||||||
+
|
|
||||||
+ if (memcmp (&buf[LINUX_CLONE_PRE_SLOTS * 16],
|
|
||||||
+ &linux_clone2_code[LINUX_CLONE_PRE_SLOTS * 16],
|
|
||||||
+ LINUX_CLONE_LEN - (LINUX_CLONE_PRE_SLOTS * 16)) != 0)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
+ return 1;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int
|
|
||||||
+ia64_outermost_frame (struct frame_info *this_frame)
|
|
||||||
+{
|
|
||||||
+ CORE_ADDR pc = get_frame_pc (this_frame);
|
|
||||||
+ char *name;
|
|
||||||
+
|
|
||||||
+ find_pc_partial_function (pc, &name, NULL, NULL);
|
|
||||||
+
|
|
||||||
+ /* If we have NAME, we can optimize the search.
|
|
||||||
+ `clone' NAME still needs to have the code checked as its name may be
|
|
||||||
+ present in the user code.
|
|
||||||
+ `__clone' NAME should not be present in the user code but in the initial
|
|
||||||
+ parts of the `__clone' implementation the unwind still makes sense.
|
|
||||||
+ More detailed unwinding decision would be too much sensitive to possible
|
|
||||||
+ subtle changes in specific glibc revisions. */
|
|
||||||
+ if (name == NULL || strcmp (name, "clone2") == 0
|
|
||||||
+ || strcmp ("__clone2", name) == 0)
|
|
||||||
+ return (ia64_linux_clone2_running (this_frame) != 0);
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+ia64_clone2_frame_this_id (struct frame_info *this_frame, void **this_cache,
|
|
||||||
+ struct frame_id *this_id)
|
|
||||||
+{
|
|
||||||
+ /* Leave the default outermost frame at *THIS_ID. */
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static struct value *
|
|
||||||
+ia64_clone2_frame_prev_register (struct frame_info *this_frame,
|
|
||||||
+ void **this_cache, int regnum)
|
|
||||||
+{
|
|
||||||
+ return frame_unwind_got_register (this_frame, regnum, regnum);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int
|
|
||||||
+ia64_clone2_frame_sniffer (const struct frame_unwind *self,
|
|
||||||
+ struct frame_info *this_frame,
|
|
||||||
+ void **this_prologue_cache)
|
|
||||||
+{
|
|
||||||
+ if (ia64_outermost_frame (this_frame))
|
|
||||||
+ return 1;
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static const struct frame_unwind ia64_clone2_frame_unwind =
|
|
||||||
+{
|
|
||||||
+ NORMAL_FRAME,
|
|
||||||
+ &ia64_clone2_frame_this_id,
|
|
||||||
+ &ia64_clone2_frame_prev_register,
|
|
||||||
+ NULL,
|
|
||||||
+ &ia64_clone2_frame_sniffer
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
/* Signal trampolines. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -3824,6 +3955,7 @@ ia64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
|
||||||
set_gdbarch_dummy_id (gdbarch, ia64_dummy_id);
|
|
||||||
|
|
||||||
set_gdbarch_unwind_pc (gdbarch, ia64_unwind_pc);
|
|
||||||
+ frame_unwind_append_unwinder (gdbarch, &ia64_clone2_frame_unwind);
|
|
||||||
#ifdef HAVE_LIBUNWIND_IA64_H
|
|
||||||
frame_unwind_append_unwinder (gdbarch,
|
|
||||||
&ia64_libunwind_sigtramp_frame_unwind);
|
|
||||||
Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.threads/bt-clone-stop.c
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.threads/bt-clone-stop.c 2009-08-03 15:50:08.000000000 +0200
|
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.threads/bt-clone-stop.c 2009-08-03 15:50:08.000000000 +0200
|
||||||
@@ -0,0 +1,39 @@
|
@@ -0,0 +1,39 @@
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
diff -u -ruNp gdb-6.3-unpatched/gdb/testsuite/gdb.base/tracefork-zombie.exp gdb-6.3/gdb/testsuite/gdb.base/tracefork-zombie.exp
|
diff -u -ruNp gdb-6.3-unpatched/gdb/testsuite/gdb.base/tracefork-zombie.exp gdb-6.3/gdb/testsuite/gdb.base/tracefork-zombie.exp
|
||||||
--- gdb-6.3-unpatched/gdb/testsuite/gdb.base/tracefork-zombie.exp 1969-12-31 19:00:00.000000000 -0500
|
--- gdb-6.3-unpatched/gdb/testsuite/gdb.base/tracefork-zombie.exp 1969-12-31 19:00:00.000000000 -0500
|
||||||
+++ gdb-6.3/gdb/testsuite/gdb.base/tracefork-zombie.exp 2007-07-31 13:04:12.000000000 -0400
|
+++ gdb-6.3/gdb/testsuite/gdb.base/tracefork-zombie.exp 2007-07-31 13:04:12.000000000 -0400
|
||||||
@@ -0,0 +1,82 @@
|
@@ -0,0 +1,75 @@
|
||||||
+# Copyright 2007 Free Software Foundation, Inc.
|
+# Copyright 2007 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -18,13 +18,6 @@ diff -u -ruNp gdb-6.3-unpatched/gdb/testsuite/gdb.base/tracefork-zombie.exp gdb-
|
|||||||
+# along with this program; if not, write to the Free Software
|
+# along with this program; if not, write to the Free Software
|
||||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+# are we on a target board
|
+# are we on a target board
|
||||||
+if [is_remote target] then {
|
+if [is_remote target] then {
|
||||||
+ return 0
|
+ return 0
|
||||||
|
@ -10,11 +10,11 @@ for gdb/ChangeLog:
|
|||||||
|
|
||||||
Port to GDB-6.7.
|
Port to GDB-6.7.
|
||||||
|
|
||||||
Index: gdb-6.7/gdb/dwarf2read.c
|
Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/dwarf2read.c 2007-10-15 00:08:30.000000000 +0200
|
--- gdb-7.1.90.20100711.orig/gdb/dwarf2read.c 2010-07-12 10:43:53.000000000 +0200
|
||||||
+++ gdb-6.7/gdb/dwarf2read.c 2007-10-15 21:42:43.000000000 +0200
|
+++ gdb-7.1.90.20100711/gdb/dwarf2read.c 2010-07-12 10:49:32.000000000 +0200
|
||||||
@@ -9070,8 +9070,7 @@ dwarf2_fundamental_type (struct objfile
|
@@ -11382,8 +11382,7 @@ read_signatured_type (struct objfile *ob
|
||||||
callers will only want a very basic result and this can become a
|
callers will only want a very basic result and this can become a
|
||||||
complaint.
|
complaint.
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ Index: gdb-6.7/gdb/dwarf2read.c
|
|||||||
|
|
||||||
static CORE_ADDR
|
static CORE_ADDR
|
||||||
decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu)
|
decode_locdesc (struct dwarf_block *blk, struct dwarf2_cu *cu)
|
||||||
@@ -9088,7 +9087,7 @@ decode_locdesc (struct dwarf_block *blk,
|
@@ -11399,7 +11398,7 @@ decode_locdesc (struct dwarf_block *blk,
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
stacki = 0;
|
stacki = 0;
|
||||||
@ -33,8 +33,8 @@ Index: gdb-6.7/gdb/dwarf2read.c
|
|||||||
|
|
||||||
while (i < size)
|
while (i < size)
|
||||||
{
|
{
|
||||||
@@ -9270,6 +9269,16 @@ decode_locdesc (struct dwarf_block *blk,
|
@@ -11581,6 +11580,16 @@ decode_locdesc (struct dwarf_block *blk,
|
||||||
dwarf_stack_op_name (op));
|
dwarf_stack_op_name (op, 1));
|
||||||
return (stack[stacki]);
|
return (stack[stacki]);
|
||||||
}
|
}
|
||||||
+ /* Enforce maximum stack depth of size-1 to avoid ++stacki writing
|
+ /* Enforce maximum stack depth of size-1 to avoid ++stacki writing
|
||||||
|
@ -42,7 +42,7 @@ diff -u -X /home/jkratoch/.diffi.list -ruNp gdb-6.5/gdb/testsuite/gdb.base/gcore
|
|||||||
diff -u -X /home/jkratoch/.diffi.list -ruNp gdb-6.5/gdb/testsuite/gdb.base/gcore-excessive-memory.exp gdb-6.5-unknown/gdb/testsuite/gdb.base/gcore-excessive-memory.exp
|
diff -u -X /home/jkratoch/.diffi.list -ruNp gdb-6.5/gdb/testsuite/gdb.base/gcore-excessive-memory.exp gdb-6.5-unknown/gdb/testsuite/gdb.base/gcore-excessive-memory.exp
|
||||||
--- gdb-6.5/gdb/testsuite/gdb.base/gcore-excessive-memory.exp 1970-01-01 01:00:00.000000000 +0100
|
--- gdb-6.5/gdb/testsuite/gdb.base/gcore-excessive-memory.exp 1970-01-01 01:00:00.000000000 +0100
|
||||||
+++ gdb-6.5-unknown/gdb/testsuite/gdb.base/gcore-excessive-memory.exp 2008-01-08 11:47:32.000000000 +0100
|
+++ gdb-6.5-unknown/gdb/testsuite/gdb.base/gcore-excessive-memory.exp 2008-01-08 11:47:32.000000000 +0100
|
||||||
@@ -0,0 +1,101 @@
|
@@ -0,0 +1,94 @@
|
||||||
+# Copyright 2008 Free Software Foundation, Inc.
|
+# Copyright 2008 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -59,13 +59,6 @@ diff -u -X /home/jkratoch/.diffi.list -ruNp gdb-6.5/gdb/testsuite/gdb.base/gcore
|
|||||||
+# along with this program; if not, write to the Free Software
|
+# along with this program; if not, write to the Free Software
|
||||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+set testfile gcore-excessive-memory
|
+set testfile gcore-excessive-memory
|
||||||
+set srcfile ${testfile}.c
|
+set srcfile ${testfile}.c
|
||||||
+set shfile ${objdir}/${subdir}/${testfile}-gdb.sh
|
+set shfile ${objdir}/${subdir}/${testfile}-gdb.sh
|
||||||
|
@ -1,847 +0,0 @@
|
|||||||
2006-10-01 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
Fujitsu
|
|
||||||
|
|
||||||
* amd64-linux-nat.c: Support new linux_elfcore_write_prpsinfo,
|
|
||||||
linux_elfcore_write_prstatus, linux_elfcore_write_prfpreg.
|
|
||||||
(i386_linux_gregset32_reg_offset): New mapping for i386 on amd64.
|
|
||||||
* gcore.c (gcore_create_callback): Comment vdso Linux kernel bug.
|
|
||||||
* configure.ac: Check for <sys/user32.h>, <sys/procfs32.h>.
|
|
||||||
* configure, config.in: Regenerated.
|
|
||||||
* gdb_user32.h, gdb_procfs32.h: Define 32-bit core files even for
|
|
||||||
64-bit gdb, provide fallbacks for <sys/user32.h> and <sys/procfs32.h>.
|
|
||||||
* linux-nat.c: Virtualize `elfcore_*' by (*`linux_elfcore_*').
|
|
||||||
(linux_nat_do_thread_registers): Likewise.
|
|
||||||
(linux_nat_make_corefile_notes): Likewise.
|
|
||||||
* linux-nat.h: Likewise.
|
|
||||||
* Makefile.in: Dependencies updated.
|
|
||||||
|
|
||||||
2007-10-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
Port to GDB-6.7.
|
|
||||||
|
|
||||||
2008-02-24 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
Port to GDB-6.8pre.
|
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/amd64-linux-nat.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/amd64-linux-nat.c 2010-01-15 03:16:43.000000000 +0100
|
|
||||||
+++ gdb-7.0.50.20100115/gdb/amd64-linux-nat.c 2010-01-15 03:20:58.000000000 +0100
|
|
||||||
@@ -51,6 +51,9 @@
|
|
||||||
#include "i386-linux-tdep.h"
|
|
||||||
#include "amd64-nat.h"
|
|
||||||
#include "i386-nat.h"
|
|
||||||
+#include "i387-tdep.h"
|
|
||||||
+#include "elf-bfd.h"
|
|
||||||
+#include "gdb_procfs32.h"
|
|
||||||
|
|
||||||
/* Mapping between the general-purpose registers in GNU/Linux x86-64
|
|
||||||
`struct user' format and GDB's register cache layout. */
|
|
||||||
@@ -85,6 +88,35 @@ static int amd64_linux_gregset64_reg_off
|
|
||||||
GNU/Linux i386 registers are all 32-bit, but since we're
|
|
||||||
little-endian we get away with that. */
|
|
||||||
|
|
||||||
+/* This info is not reusable from "i386-linux-nat.c" as gdb itself runs in
|
|
||||||
+ 64-bit mode and so ptrace(2) has 64-bit structure layout.
|
|
||||||
+ Just the corefile being generated has 32-bit layout so we need to do
|
|
||||||
+ a conversion specific to the i386-on-amd64 compatibility mode. */
|
|
||||||
+static int i386_linux_gregset32_reg_offset[] =
|
|
||||||
+{
|
|
||||||
+ 6 * 4, /* %eax */
|
|
||||||
+ 1 * 4, /* %ecx */
|
|
||||||
+ 2 * 4, /* %edx */
|
|
||||||
+ 0 * 4, /* %ebx */
|
|
||||||
+ 15 * 4, /* %esp */
|
|
||||||
+ 5 * 4, /* %ebp */
|
|
||||||
+ 3 * 4, /* %esi */
|
|
||||||
+ 4 * 4, /* %edi */
|
|
||||||
+ 12 * 4, /* %eip */
|
|
||||||
+ 14 * 4, /* %eflags */
|
|
||||||
+ 13 * 4, /* %cs */
|
|
||||||
+ 16 * 4, /* %ss */
|
|
||||||
+ 7 * 4, /* %ds */
|
|
||||||
+ 8 * 4, /* %es */
|
|
||||||
+ 9 * 4, /* %fs */
|
|
||||||
+ 10 * 4, /* %gs */
|
|
||||||
+ -1, -1, -1, -1, -1, -1, -1, -1,
|
|
||||||
+ -1, -1, -1, -1, -1, -1, -1, -1,
|
|
||||||
+ -1, -1, -1, -1, -1, -1, -1, -1,
|
|
||||||
+ -1,
|
|
||||||
+ 11 * 4 /* "orig_eax" */
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
/* From <sys/reg.h> on GNU/Linux i386. */
|
|
||||||
static int amd64_linux_gregset32_reg_offset[] =
|
|
||||||
{
|
|
||||||
@@ -103,6 +135,96 @@ static int amd64_linux_gregset32_reg_off
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
+/* This functions make ELF32 32-bit elfcore note sections
|
|
||||||
+ on amd64 environment. */
|
|
||||||
+
|
|
||||||
+static char *
|
|
||||||
+amd64_linux_elfcore_write_prpsinfo (bfd *abfd, char *buf, int *bufsiz,
|
|
||||||
+ const char *fname, const char *psargs)
|
|
||||||
+{
|
|
||||||
+ if (gdbarch_ptr_bit (target_gdbarch) == 32)
|
|
||||||
+ {
|
|
||||||
+ int note_type;
|
|
||||||
+ char *note_name = "CORE";
|
|
||||||
+ struct elf_prpsinfo32 data;
|
|
||||||
+ note_type = NT_PRPSINFO;
|
|
||||||
+
|
|
||||||
+ memset (&data, 0, sizeof (data));
|
|
||||||
+ strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
|
|
||||||
+ strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
|
|
||||||
+ return elfcore_write_note (abfd, buf, bufsiz,
|
|
||||||
+ note_name, note_type, &data, sizeof (data));
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ return elfcore_write_prpsinfo (abfd, buf, bufsiz, fname, psargs);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+amd64_linux_set_registers (const gdb_byte *gregs, gdb_byte *buf)
|
|
||||||
+{
|
|
||||||
+ int i;
|
|
||||||
+ /* Copy the i386 registers in the amd64 layout into i386 layout. */
|
|
||||||
+ for (i = 0; i < I386_NUM_GREGS; i++)
|
|
||||||
+ memcpy(buf + i386_linux_gregset32_reg_offset[i],
|
|
||||||
+ gregs + amd64_linux_gregset32_reg_offset[i], 4);
|
|
||||||
+ for (i = I386_CS_REGNUM; i <= I386_GS_REGNUM; i++)
|
|
||||||
+ memcpy(buf + i386_linux_gregset32_reg_offset[i],
|
|
||||||
+ gregs + amd64_linux_gregset32_reg_offset[i], 4);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static char *
|
|
||||||
+amd64_linux_elfcore_write_prstatus (bfd *abfd, char *buf, int *bufsiz,
|
|
||||||
+ long pid, int cursig, const void *gregs)
|
|
||||||
+{
|
|
||||||
+ if (gdbarch_ptr_bit (target_gdbarch) == 32)
|
|
||||||
+ {
|
|
||||||
+ char *note_name = "CORE";
|
|
||||||
+ struct elf_prstatus32 prstat;
|
|
||||||
+ memset (&prstat, 0, sizeof (prstat));
|
|
||||||
+ prstat.pr_pid = pid;
|
|
||||||
+ prstat.pr_cursig = cursig;
|
|
||||||
+ amd64_linux_set_registers (gregs, (gdb_byte *) &prstat.pr_reg);
|
|
||||||
+ return elfcore_write_note (abfd, buf, bufsiz, note_name,
|
|
||||||
+ NT_PRSTATUS, &prstat, sizeof (prstat));
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ return elfcore_write_prstatus (abfd, buf, bufsiz, pid, cursig, gregs);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static char *
|
|
||||||
+amd64_elfcore_write_prxfpreg32 (bfd *abfd, char *buf, int *bufsiz,
|
|
||||||
+ struct regcache *regcache)
|
|
||||||
+{
|
|
||||||
+ char *note_name = "LINUX";
|
|
||||||
+ elf_fpxregset32_t fpxregs32;
|
|
||||||
+
|
|
||||||
+ i387_collect_fxsave (regcache, -1, &fpxregs32);
|
|
||||||
+ return elfcore_write_note(abfd, buf, bufsiz,
|
|
||||||
+ note_name, NT_PRXFPREG, &fpxregs32,
|
|
||||||
+ sizeof(fpxregs32));
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static char *
|
|
||||||
+amd64_linux_elfcore_write_prfpreg (bfd *abfd, char *buf,
|
|
||||||
+ int *bufsiz, const void *fpregs, int size,
|
|
||||||
+ struct regcache *regcache)
|
|
||||||
+{
|
|
||||||
+ if (gdbarch_ptr_bit (target_gdbarch) == 32)
|
|
||||||
+ {
|
|
||||||
+ char *note_name = "CORE";
|
|
||||||
+ elf_fpregset32_t fpregs32;
|
|
||||||
+
|
|
||||||
+ i387_collect_fsave (regcache, -1, &fpregs32);
|
|
||||||
+ buf = elfcore_write_note(abfd, buf, bufsiz, note_name,
|
|
||||||
+ NT_FPREGSET, &fpregs32, sizeof(fpregs32));
|
|
||||||
+
|
|
||||||
+ return amd64_elfcore_write_prxfpreg32 (abfd, buf, bufsiz, regcache);
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ return elfcore_write_prfpreg (abfd, buf, bufsiz, fpregs, size);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
/* Transfering the general-purpose registers between GDB, inferiors
|
|
||||||
and core files. */
|
|
||||||
|
|
||||||
@@ -727,6 +849,11 @@ _initialize_amd64_linux_nat (void)
|
|
||||||
t->to_fetch_registers = amd64_linux_fetch_inferior_registers;
|
|
||||||
t->to_store_registers = amd64_linux_store_inferior_registers;
|
|
||||||
|
|
||||||
+ /* This functions make elfcore note sections. */
|
|
||||||
+ linux_elfcore_write_prpsinfo = amd64_linux_elfcore_write_prpsinfo;
|
|
||||||
+ linux_elfcore_write_prstatus = amd64_linux_elfcore_write_prstatus;
|
|
||||||
+ linux_elfcore_write_prfpreg = amd64_linux_elfcore_write_prfpreg;
|
|
||||||
+
|
|
||||||
/* Register the target. */
|
|
||||||
linux_nat_add_target (t);
|
|
||||||
linux_nat_set_new_thread (t, amd64_linux_new_thread);
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/config.in
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/config.in 2010-01-15 03:16:43.000000000 +0100
|
|
||||||
+++ gdb-7.0.50.20100115/gdb/config.in 2010-01-15 03:20:58.000000000 +0100
|
|
||||||
@@ -149,6 +149,9 @@
|
|
||||||
/* Define to 1 if you have the <elf_hp.h> header file. */
|
|
||||||
#undef HAVE_ELF_HP_H
|
|
||||||
|
|
||||||
+/* Define if struct elf_prstatus32 is available. */
|
|
||||||
+#undef HAVE_ELF_PRSTATUS32
|
|
||||||
+
|
|
||||||
/* Define to 1 if your system has the etext variable. */
|
|
||||||
#undef HAVE_ETEXT
|
|
||||||
|
|
||||||
@@ -490,6 +493,9 @@
|
|
||||||
/* Define to 1 if you have the <sys/poll.h> header file. */
|
|
||||||
#undef HAVE_SYS_POLL_H
|
|
||||||
|
|
||||||
+/* Define to 1 if you have the <sys/procfs32.h> header file. */
|
|
||||||
+#undef HAVE_SYS_PROCFS32_H
|
|
||||||
+
|
|
||||||
/* Define to 1 if you have the <sys/procfs.h> header file. */
|
|
||||||
#undef HAVE_SYS_PROCFS_H
|
|
||||||
|
|
||||||
@@ -517,6 +523,9 @@
|
|
||||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
|
||||||
#undef HAVE_SYS_TYPES_H
|
|
||||||
|
|
||||||
+/* Define to 1 if you have the <sys/user32.h> header file. */
|
|
||||||
+#undef HAVE_SYS_USER32_H
|
|
||||||
+
|
|
||||||
/* Define to 1 if you have the <sys/user.h> header file. */
|
|
||||||
#undef HAVE_SYS_USER_H
|
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/configure
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/configure 2010-01-15 03:16:43.000000000 +0100
|
|
||||||
+++ gdb-7.0.50.20100115/gdb/configure 2010-01-15 03:20:58.000000000 +0100
|
|
||||||
@@ -10043,6 +10043,268 @@ $as_echo "#define STDC_HEADERS 1" >>conf
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+for ac_header in sys/user32.h sys/procfs32.h
|
|
||||||
+do
|
|
||||||
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
||||||
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
||||||
+ echo "$as_me:$LINENO: checking for $ac_header" >&5
|
|
||||||
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
|
|
||||||
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
||||||
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
||||||
+fi
|
|
||||||
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
|
|
||||||
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
|
|
||||||
+else
|
|
||||||
+ # Is the header compilable?
|
|
||||||
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
|
|
||||||
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
|
|
||||||
+cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
+/* confdefs.h. */
|
|
||||||
+_ACEOF
|
|
||||||
+cat confdefs.h >>conftest.$ac_ext
|
|
||||||
+cat >>conftest.$ac_ext <<_ACEOF
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+$ac_includes_default
|
|
||||||
+#include <$ac_header>
|
|
||||||
+_ACEOF
|
|
||||||
+rm -f conftest.$ac_objext
|
|
||||||
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
||||||
+ (eval $ac_compile) 2>conftest.er1
|
|
||||||
+ ac_status=$?
|
|
||||||
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
||||||
+ rm -f conftest.er1
|
|
||||||
+ cat conftest.err >&5
|
|
||||||
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
+ (exit $ac_status); } &&
|
|
||||||
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
||||||
+ || test ! -s conftest.err'
|
|
||||||
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
||||||
+ (eval $ac_try) 2>&5
|
|
||||||
+ ac_status=$?
|
|
||||||
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
+ (exit $ac_status); }; } &&
|
|
||||||
+ { ac_try='test -s conftest.$ac_objext'
|
|
||||||
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
||||||
+ (eval $ac_try) 2>&5
|
|
||||||
+ ac_status=$?
|
|
||||||
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
+ (exit $ac_status); }; }; then
|
|
||||||
+ ac_header_compiler=yes
|
|
||||||
+else
|
|
||||||
+ echo "$as_me: failed program was:" >&5
|
|
||||||
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
+
|
|
||||||
+ac_header_compiler=no
|
|
||||||
+fi
|
|
||||||
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
|
|
||||||
+echo "${ECHO_T}$ac_header_compiler" >&6
|
|
||||||
+
|
|
||||||
+# Is the header present?
|
|
||||||
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
|
|
||||||
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
|
|
||||||
+cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
+/* confdefs.h. */
|
|
||||||
+_ACEOF
|
|
||||||
+cat confdefs.h >>conftest.$ac_ext
|
|
||||||
+cat >>conftest.$ac_ext <<_ACEOF
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+#include <$ac_header>
|
|
||||||
+_ACEOF
|
|
||||||
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
|
|
||||||
+ (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
|
|
||||||
+ ac_status=$?
|
|
||||||
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
||||||
+ rm -f conftest.er1
|
|
||||||
+ cat conftest.err >&5
|
|
||||||
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
+ (exit $ac_status); } >/dev/null; then
|
|
||||||
+ if test -s conftest.err; then
|
|
||||||
+ ac_cpp_err=$ac_c_preproc_warn_flag
|
|
||||||
+ ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
|
|
||||||
+ else
|
|
||||||
+ ac_cpp_err=
|
|
||||||
+ fi
|
|
||||||
+else
|
|
||||||
+ ac_cpp_err=yes
|
|
||||||
+fi
|
|
||||||
+if test -z "$ac_cpp_err"; then
|
|
||||||
+ ac_header_preproc=yes
|
|
||||||
+else
|
|
||||||
+ echo "$as_me: failed program was:" >&5
|
|
||||||
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
+
|
|
||||||
+ ac_header_preproc=no
|
|
||||||
+fi
|
|
||||||
+rm -f conftest.err conftest.$ac_ext
|
|
||||||
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
|
|
||||||
+echo "${ECHO_T}$ac_header_preproc" >&6
|
|
||||||
+
|
|
||||||
+# So? What about this header?
|
|
||||||
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
|
|
||||||
+ yes:no: )
|
|
||||||
+ { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
|
|
||||||
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
|
|
||||||
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
|
|
||||||
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
|
|
||||||
+ ac_header_preproc=yes
|
|
||||||
+ ;;
|
|
||||||
+ no:yes:* )
|
|
||||||
+ { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
|
|
||||||
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
|
|
||||||
+ { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
|
|
||||||
+echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
|
|
||||||
+ { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
|
|
||||||
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
|
|
||||||
+ { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
|
|
||||||
+echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
|
|
||||||
+ { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
|
|
||||||
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
|
|
||||||
+ { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
|
|
||||||
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
|
|
||||||
+ (
|
|
||||||
+ cat <<\_ASBOX
|
|
||||||
+## ------------------------------------------ ##
|
|
||||||
+## Report this to the AC_PACKAGE_NAME lists. ##
|
|
||||||
+## ------------------------------------------ ##
|
|
||||||
+_ASBOX
|
|
||||||
+ ) |
|
|
||||||
+ sed "s/^/$as_me: WARNING: /" >&2
|
|
||||||
+ ;;
|
|
||||||
+esac
|
|
||||||
+echo "$as_me:$LINENO: checking for $ac_header" >&5
|
|
||||||
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
|
|
||||||
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
||||||
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
||||||
+else
|
|
||||||
+ eval "$as_ac_Header=\$ac_header_preproc"
|
|
||||||
+fi
|
|
||||||
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
|
|
||||||
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
|
|
||||||
+ cat >>confdefs.h <<_ACEOF
|
|
||||||
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
|
||||||
+_ACEOF
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+done
|
|
||||||
+
|
|
||||||
+echo "$as_me:$LINENO: checking for struct elf_prstatus32.pr_reg" >&5
|
|
||||||
+echo $ECHO_N "checking for struct elf_prstatus32.pr_reg... $ECHO_C" >&6
|
|
||||||
+if test "${ac_cv_member_struct_elf_prstatus32_pr_reg+set}" = set; then
|
|
||||||
+ echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
||||||
+else
|
|
||||||
+ cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
+/* confdefs.h. */
|
|
||||||
+_ACEOF
|
|
||||||
+cat confdefs.h >>conftest.$ac_ext
|
|
||||||
+cat >>conftest.$ac_ext <<_ACEOF
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+#include <sys/procfs.h>
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main ()
|
|
||||||
+{
|
|
||||||
+static struct elf_prstatus32 ac_aggr;
|
|
||||||
+if (ac_aggr.pr_reg)
|
|
||||||
+return 0;
|
|
||||||
+ ;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+_ACEOF
|
|
||||||
+rm -f conftest.$ac_objext
|
|
||||||
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
||||||
+ (eval $ac_compile) 2>conftest.er1
|
|
||||||
+ ac_status=$?
|
|
||||||
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
||||||
+ rm -f conftest.er1
|
|
||||||
+ cat conftest.err >&5
|
|
||||||
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
+ (exit $ac_status); } &&
|
|
||||||
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
||||||
+ || test ! -s conftest.err'
|
|
||||||
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
||||||
+ (eval $ac_try) 2>&5
|
|
||||||
+ ac_status=$?
|
|
||||||
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
+ (exit $ac_status); }; } &&
|
|
||||||
+ { ac_try='test -s conftest.$ac_objext'
|
|
||||||
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
||||||
+ (eval $ac_try) 2>&5
|
|
||||||
+ ac_status=$?
|
|
||||||
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
+ (exit $ac_status); }; }; then
|
|
||||||
+ ac_cv_member_struct_elf_prstatus32_pr_reg=yes
|
|
||||||
+else
|
|
||||||
+ echo "$as_me: failed program was:" >&5
|
|
||||||
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
+
|
|
||||||
+cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
+/* confdefs.h. */
|
|
||||||
+_ACEOF
|
|
||||||
+cat confdefs.h >>conftest.$ac_ext
|
|
||||||
+cat >>conftest.$ac_ext <<_ACEOF
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+#include <sys/procfs.h>
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main ()
|
|
||||||
+{
|
|
||||||
+static struct elf_prstatus32 ac_aggr;
|
|
||||||
+if (sizeof ac_aggr.pr_reg)
|
|
||||||
+return 0;
|
|
||||||
+ ;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+_ACEOF
|
|
||||||
+rm -f conftest.$ac_objext
|
|
||||||
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
||||||
+ (eval $ac_compile) 2>conftest.er1
|
|
||||||
+ ac_status=$?
|
|
||||||
+ grep -v '^ *+' conftest.er1 >conftest.err
|
|
||||||
+ rm -f conftest.er1
|
|
||||||
+ cat conftest.err >&5
|
|
||||||
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
+ (exit $ac_status); } &&
|
|
||||||
+ { ac_try='test -z "$ac_c_werror_flag"
|
|
||||||
+ || test ! -s conftest.err'
|
|
||||||
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
||||||
+ (eval $ac_try) 2>&5
|
|
||||||
+ ac_status=$?
|
|
||||||
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
+ (exit $ac_status); }; } &&
|
|
||||||
+ { ac_try='test -s conftest.$ac_objext'
|
|
||||||
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
||||||
+ (eval $ac_try) 2>&5
|
|
||||||
+ ac_status=$?
|
|
||||||
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
+ (exit $ac_status); }; }; then
|
|
||||||
+ ac_cv_member_struct_elf_prstatus32_pr_reg=yes
|
|
||||||
+else
|
|
||||||
+ echo "$as_me: failed program was:" >&5
|
|
||||||
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
+
|
|
||||||
+ac_cv_member_struct_elf_prstatus32_pr_reg=no
|
|
||||||
+fi
|
|
||||||
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
+fi
|
|
||||||
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
+fi
|
|
||||||
+echo "$as_me:$LINENO: result: $ac_cv_member_struct_elf_prstatus32_pr_reg" >&5
|
|
||||||
+echo "${ECHO_T}$ac_cv_member_struct_elf_prstatus32_pr_reg" >&6
|
|
||||||
+if test $ac_cv_member_struct_elf_prstatus32_pr_reg = yes; then
|
|
||||||
+
|
|
||||||
+cat >>confdefs.h <<\_ACEOF
|
|
||||||
+#define HAVE_ELF_PRSTATUS32 1
|
|
||||||
+_ACEOF
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
# elf_hp.h is for HP/UX 64-bit shared library support.
|
|
||||||
# FIXME: kettenis/20030102: In most cases we include these (ctype.h, time.h)
|
|
||||||
# unconditionally, so what's the point in checking these?
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/configure.ac
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/configure.ac 2010-01-15 03:16:43.000000000 +0100
|
|
||||||
+++ gdb-7.0.50.20100115/gdb/configure.ac 2010-01-15 03:20:58.000000000 +0100
|
|
||||||
@@ -758,6 +758,11 @@ AC_SUBST(PYTHON_CFLAGS)
|
|
||||||
AC_HEADER_DIRENT
|
|
||||||
AC_HEADER_STAT
|
|
||||||
AC_HEADER_STDC
|
|
||||||
+AC_CHECK_HEADERS([sys/user32.h sys/procfs32.h])
|
|
||||||
+AC_CHECK_MEMBER([struct elf_prstatus32.pr_reg],
|
|
||||||
+ [AC_DEFINE(HAVE_ELF_PRSTATUS32, 1,
|
|
||||||
+ [Define if struct elf_prstatus32 is available. ])],
|
|
||||||
+ [], [#include <sys/procfs.h>])
|
|
||||||
# elf_hp.h is for HP/UX 64-bit shared library support.
|
|
||||||
# FIXME: kettenis/20030102: In most cases we include these (ctype.h, time.h)
|
|
||||||
# unconditionally, so what's the point in checking these?
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/gcore.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/gcore.c 2010-01-15 03:17:59.000000000 +0100
|
|
||||||
+++ gdb-7.0.50.20100115/gdb/gcore.c 2010-01-15 03:20:58.000000000 +0100
|
|
||||||
@@ -376,6 +376,11 @@ gcore_create_callback (CORE_ADDR vaddr,
|
|
||||||
asection *osec;
|
|
||||||
flagword flags = SEC_ALLOC | SEC_HAS_CONTENTS | SEC_LOAD;
|
|
||||||
|
|
||||||
+ /* Some Linux kernel versions around 2.6.17 have for i386 inferiors running
|
|
||||||
+ in compatibility mode on amd64 kernel their VSYSCALL page (at 0xffffe000)
|
|
||||||
+ protected as RWX==000 by default and gdb fails to read the library header
|
|
||||||
+ upon loading the core. This is a Linux kernel bug being fixed. */
|
|
||||||
+
|
|
||||||
/* If the memory segment has no permissions set, ignore it, otherwise
|
|
||||||
when we later try to access it for read/write, we'll get an error
|
|
||||||
or jam the kernel. */
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/gdb_procfs32.h
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
||||||
+++ gdb-7.0.50.20100115/gdb/gdb_procfs32.h 2010-01-15 03:20:58.000000000 +0100
|
|
||||||
@@ -0,0 +1,128 @@
|
|
||||||
+#ifdef HAVE_SYS_PROCFS32_H
|
|
||||||
+#include <sys/procfs32.h>
|
|
||||||
+#elif !defined HAVE_ELF_PRSTATUS32
|
|
||||||
+
|
|
||||||
+/* Copyright (C) 2006 Free Software Foundation, Inc.
|
|
||||||
+ This file is part of the GNU C Library.
|
|
||||||
+
|
|
||||||
+ The GNU C Library is free software; you can redistribute it and/or
|
|
||||||
+ modify it under the terms of the GNU Lesser General Public
|
|
||||||
+ License as published by the Free Software Foundation; either
|
|
||||||
+ version 2.1 of the License, or (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
+ Lesser General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU Lesser General Public
|
|
||||||
+ License along with the GNU C Library; if not, write to the Free
|
|
||||||
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
+ 02111-1307 USA. */
|
|
||||||
+
|
|
||||||
+#ifndef _SYS_PROCFS32_H
|
|
||||||
+#define _SYS_PROCFS32_H 1
|
|
||||||
+
|
|
||||||
+/* This is somewhat modelled after the file of the same name on SVR4
|
|
||||||
+ systems. It provides a definition of the core file format for ELF
|
|
||||||
+ used on Linux. It doesn't have anything to do with the /proc file
|
|
||||||
+ system, even though Linux has one.
|
|
||||||
+
|
|
||||||
+ Anyway, the whole purpose of this file is for GDB and GDB only.
|
|
||||||
+ Don't read too much into it. Don't use it for anything other than
|
|
||||||
+ GDB unless you know what you are doing. */
|
|
||||||
+
|
|
||||||
+#include <features.h>
|
|
||||||
+#include <sys/time.h>
|
|
||||||
+#include <sys/types.h>
|
|
||||||
+#include "gdb_user32.h"
|
|
||||||
+
|
|
||||||
+/* We define here only the symbols differing from their 64-bit variant. */
|
|
||||||
+#include <sys/procfs.h>
|
|
||||||
+
|
|
||||||
+__BEGIN_DECLS
|
|
||||||
+
|
|
||||||
+/* Type for a general-purpose register. */
|
|
||||||
+typedef unsigned int elf_greg32_t;
|
|
||||||
+
|
|
||||||
+/* And the whole bunch of them. We could have used `struct
|
|
||||||
+ user_regs_struct' directly in the typedef, but tradition says that
|
|
||||||
+ the register set is an array, which does have some peculiar
|
|
||||||
+ semantics, so leave it that way. */
|
|
||||||
+#define ELF_NGREG32 (sizeof (struct user_regs32_struct) / sizeof(elf_greg32_t))
|
|
||||||
+typedef elf_greg32_t elf_gregset32_t[ELF_NGREG32];
|
|
||||||
+
|
|
||||||
+/* Register set for the floating-point registers. */
|
|
||||||
+typedef struct user_fpregs32_struct elf_fpregset32_t;
|
|
||||||
+
|
|
||||||
+/* Register set for the extended floating-point registers. Includes
|
|
||||||
+ the Pentium III SSE registers in addition to the classic
|
|
||||||
+ floating-point stuff. */
|
|
||||||
+typedef struct user_fpxregs32_struct elf_fpxregset32_t;
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+/* Definitions to generate Intel SVR4-like core files. These mostly
|
|
||||||
+ have the same names as the SVR4 types with "elf_" tacked on the
|
|
||||||
+ front to prevent clashes with Linux definitions, and the typedef
|
|
||||||
+ forms have been avoided. This is mostly like the SVR4 structure,
|
|
||||||
+ but more Linuxy, with things that Linux does not support and which
|
|
||||||
+ GDB doesn't really use excluded. */
|
|
||||||
+
|
|
||||||
+struct prstatus32_timeval
|
|
||||||
+ {
|
|
||||||
+ int tv_sec;
|
|
||||||
+ int tv_usec;
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+struct elf_prstatus32
|
|
||||||
+ {
|
|
||||||
+ struct elf_siginfo pr_info; /* Info associated with signal. */
|
|
||||||
+ short int pr_cursig; /* Current signal. */
|
|
||||||
+ unsigned int pr_sigpend; /* Set of pending signals. */
|
|
||||||
+ unsigned int pr_sighold; /* Set of held signals. */
|
|
||||||
+ __pid_t pr_pid;
|
|
||||||
+ __pid_t pr_ppid;
|
|
||||||
+ __pid_t pr_pgrp;
|
|
||||||
+ __pid_t pr_sid;
|
|
||||||
+ struct prstatus32_timeval pr_utime; /* User time. */
|
|
||||||
+ struct prstatus32_timeval pr_stime; /* System time. */
|
|
||||||
+ struct prstatus32_timeval pr_cutime; /* Cumulative user time. */
|
|
||||||
+ struct prstatus32_timeval pr_cstime; /* Cumulative system time. */
|
|
||||||
+ elf_gregset32_t pr_reg; /* GP registers. */
|
|
||||||
+ int pr_fpvalid; /* True if math copro being used. */
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+struct elf_prpsinfo32
|
|
||||||
+ {
|
|
||||||
+ char pr_state; /* Numeric process state. */
|
|
||||||
+ char pr_sname; /* Char for pr_state. */
|
|
||||||
+ char pr_zomb; /* Zombie. */
|
|
||||||
+ char pr_nice; /* Nice val. */
|
|
||||||
+ unsigned int pr_flag; /* Flags. */
|
|
||||||
+ unsigned short int pr_uid;
|
|
||||||
+ unsigned short int pr_gid;
|
|
||||||
+ int pr_pid, pr_ppid, pr_pgrp, pr_sid;
|
|
||||||
+ /* Lots missing */
|
|
||||||
+ char pr_fname[16]; /* Filename of executable. */
|
|
||||||
+ char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+/* The rest of this file provides the types for emulation of the
|
|
||||||
+ Solaris <proc_service.h> interfaces that should be implemented by
|
|
||||||
+ users of libthread_db. */
|
|
||||||
+
|
|
||||||
+/* Register sets. Linux has different names. */
|
|
||||||
+typedef elf_gregset_t prgregset32_t;
|
|
||||||
+typedef elf_fpregset_t prfpregset32_t;
|
|
||||||
+
|
|
||||||
+/* Process status and info. In the end we do provide typedefs for them. */
|
|
||||||
+typedef struct elf_prstatus32 prstatus32_t;
|
|
||||||
+typedef struct elf_prpsinfo32 prpsinfo32_t;
|
|
||||||
+
|
|
||||||
+__END_DECLS
|
|
||||||
+
|
|
||||||
+#endif /* _SYS_PROCFS32_H */
|
|
||||||
+
|
|
||||||
+#endif /* HAVE_SYS_PROCFS32_H */
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/gdb_user32.h
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
||||||
+++ gdb-7.0.50.20100115/gdb/gdb_user32.h 2010-01-15 03:20:58.000000000 +0100
|
|
||||||
@@ -0,0 +1,108 @@
|
|
||||||
+#ifdef HAVE_SYS_USER32_H
|
|
||||||
+#include <sys/user32.h>
|
|
||||||
+#else
|
|
||||||
+
|
|
||||||
+#ifdef HAVE_STDINT_H
|
|
||||||
+#include <stdint.h>
|
|
||||||
+typedef int32_t gdb_int32_t;
|
|
||||||
+typedef uint32_t gdb_uint32_t;
|
|
||||||
+#else
|
|
||||||
+typedef signed int gdb_uint32_t;
|
|
||||||
+typedef unsigned int gdb_uint32_t;
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+/* Copyright (C) 2006 Free Software Foundation, Inc.
|
|
||||||
+ This file is part of the GNU C Library.
|
|
||||||
+
|
|
||||||
+ The GNU C Library is free software; you can redistribute it and/or
|
|
||||||
+ modify it under the terms of the GNU Lesser General Public
|
|
||||||
+ License as published by the Free Software Foundation; either
|
|
||||||
+ version 2.1 of the License, or (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
+ Lesser General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU Lesser General Public
|
|
||||||
+ License along with the GNU C Library; if not, write to the Free
|
|
||||||
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
+ 02111-1307 USA. */
|
|
||||||
+
|
|
||||||
+#ifndef _SYS_USER32_H
|
|
||||||
+#define _SYS_USER32_H 1
|
|
||||||
+
|
|
||||||
+/* These are the 32-bit x86 structures. */
|
|
||||||
+
|
|
||||||
+struct user_fpregs32_struct
|
|
||||||
+{
|
|
||||||
+ int32_t cwd;
|
|
||||||
+ int32_t swd;
|
|
||||||
+ int32_t twd;
|
|
||||||
+ int32_t fip;
|
|
||||||
+ int32_t fcs;
|
|
||||||
+ int32_t foo;
|
|
||||||
+ int32_t fos;
|
|
||||||
+ int32_t st_space [20];
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+struct user_fpxregs32_struct
|
|
||||||
+{
|
|
||||||
+ unsigned short int cwd;
|
|
||||||
+ unsigned short int swd;
|
|
||||||
+ unsigned short int twd;
|
|
||||||
+ unsigned short int fop;
|
|
||||||
+ int32_t fip;
|
|
||||||
+ int32_t fcs;
|
|
||||||
+ int32_t foo;
|
|
||||||
+ int32_t fos;
|
|
||||||
+ int32_t mxcsr;
|
|
||||||
+ int32_t reserved;
|
|
||||||
+ int32_t st_space[32]; /* 8*16 bytes for each FP-reg = 128 bytes */
|
|
||||||
+ int32_t xmm_space[32]; /* 8*16 bytes for each XMM-reg = 128 bytes */
|
|
||||||
+ int32_t padding[56];
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+struct user_regs32_struct
|
|
||||||
+{
|
|
||||||
+ int32_t ebx;
|
|
||||||
+ int32_t ecx;
|
|
||||||
+ int32_t edx;
|
|
||||||
+ int32_t esi;
|
|
||||||
+ int32_t edi;
|
|
||||||
+ int32_t ebp;
|
|
||||||
+ int32_t eax;
|
|
||||||
+ int32_t xds;
|
|
||||||
+ int32_t xes;
|
|
||||||
+ int32_t xfs;
|
|
||||||
+ int32_t xgs;
|
|
||||||
+ int32_t orig_eax;
|
|
||||||
+ int32_t eip;
|
|
||||||
+ int32_t xcs;
|
|
||||||
+ int32_t eflags;
|
|
||||||
+ int32_t esp;
|
|
||||||
+ int32_t xss;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+struct user32
|
|
||||||
+{
|
|
||||||
+ struct user_regs32_struct regs;
|
|
||||||
+ int u_fpvalid;
|
|
||||||
+ struct user_fpregs32_struct i387;
|
|
||||||
+ uint32_t u_tsize;
|
|
||||||
+ uint32_t u_dsize;
|
|
||||||
+ uint32_t u_ssize;
|
|
||||||
+ uint32_t start_code;
|
|
||||||
+ uint32_t start_stack;
|
|
||||||
+ int32_t signal;
|
|
||||||
+ int reserved;
|
|
||||||
+ struct user_regs32_struct* u_ar0;
|
|
||||||
+ struct user_fpregs32_struct* u_fpstate;
|
|
||||||
+ uint32_t magic;
|
|
||||||
+ char u_comm [32];
|
|
||||||
+ int u_debugreg [8];
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+#endif /* _SYS_USER32_H */
|
|
||||||
+
|
|
||||||
+#endif /* HAVE_SYS_USER32_H */
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/linux-nat.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/linux-nat.c 2010-01-15 03:20:45.000000000 +0100
|
|
||||||
+++ gdb-7.0.50.20100115/gdb/linux-nat.c 2010-01-15 03:20:58.000000000 +0100
|
|
||||||
@@ -225,6 +225,21 @@ static LONGEST (*super_xfer_partial) (st
|
|
||||||
const gdb_byte *,
|
|
||||||
ULONGEST, LONGEST);
|
|
||||||
|
|
||||||
+/* This functions make elfcore note sections.
|
|
||||||
+ They may get overriden by code adjusting data for multi-target builds. */
|
|
||||||
+char *(*linux_elfcore_write_prpsinfo)
|
|
||||||
+ (bfd *, char *, int *, const char *, const char *) = elfcore_write_prpsinfo;
|
|
||||||
+char *(*linux_elfcore_write_prstatus)
|
|
||||||
+ (bfd *, char *, int *, long, int, const void *) = elfcore_write_prstatus;
|
|
||||||
+static char *
|
|
||||||
+linux_elfcore_write_prfpreg_bfd (bfd *abfd, char *buf, int *bufsiz,
|
|
||||||
+ const void *fpregs, int size, struct regcache *regcache)
|
|
||||||
+{
|
|
||||||
+ return elfcore_write_prfpreg (abfd, buf, bufsiz, fpregs, size);
|
|
||||||
+}
|
|
||||||
+char *(*linux_elfcore_write_prfpreg) (bfd *, char *, int *, const void *, int,
|
|
||||||
+ struct regcache *) = linux_elfcore_write_prfpreg_bfd;
|
|
||||||
+
|
|
||||||
static int debug_linux_nat;
|
|
||||||
static void
|
|
||||||
show_debug_linux_nat (struct ui_file *file, int from_tty,
|
|
||||||
@@ -4187,7 +4202,7 @@ linux_nat_do_thread_registers (bfd *obfd
|
|
||||||
else
|
|
||||||
fill_gregset (regcache, &gregs, -1);
|
|
||||||
|
|
||||||
- note_data = (char *) elfcore_write_prstatus (obfd,
|
|
||||||
+ note_data = (char *) linux_elfcore_write_prstatus (obfd,
|
|
||||||
note_data,
|
|
||||||
note_size,
|
|
||||||
lwp,
|
|
||||||
@@ -4237,10 +4252,10 @@ linux_nat_do_thread_registers (bfd *obfd
|
|
||||||
else
|
|
||||||
fill_fpregset (regcache, &fpregs, -1);
|
|
||||||
|
|
||||||
- note_data = (char *) elfcore_write_prfpreg (obfd,
|
|
||||||
+ note_data = (char *) linux_elfcore_write_prfpreg (obfd,
|
|
||||||
note_data,
|
|
||||||
note_size,
|
|
||||||
- &fpregs, sizeof (fpregs));
|
|
||||||
+ &fpregs, sizeof (fpregs), regcache);
|
|
||||||
}
|
|
||||||
|
|
||||||
return note_data;
|
|
||||||
@@ -4423,9 +4438,9 @@ linux_nat_make_corefile_notes (bfd *obfd
|
|
||||||
psargs_end - string_end);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
- note_data = (char *) elfcore_write_prpsinfo (obfd,
|
|
||||||
- note_data,
|
|
||||||
- note_size, fname, psargs);
|
|
||||||
+ note_data = (char *) linux_elfcore_write_prpsinfo (obfd, note_data,
|
|
||||||
+ note_size, fname,
|
|
||||||
+ psargs);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Dump information for threads. */
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/linux-nat.h
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/linux-nat.h 2010-01-15 03:17:07.000000000 +0100
|
|
||||||
+++ gdb-7.0.50.20100115/gdb/linux-nat.h 2010-01-15 03:21:26.000000000 +0100
|
|
||||||
@@ -169,3 +169,12 @@ struct siginfo *linux_nat_get_siginfo (p
|
|
||||||
|
|
||||||
/* Compute and return the processor core of a given thread. */
|
|
||||||
int linux_nat_core_of_thread_1 (ptid_t ptid);
|
|
||||||
+
|
|
||||||
+/* These functions make elfcore note sections.
|
|
||||||
+ They may get overriden by code adjusting data for multi-target builds. */
|
|
||||||
+extern char *(*linux_elfcore_write_prpsinfo)
|
|
||||||
+ (bfd *, char *, int *, const char *, const char *);
|
|
||||||
+extern char *(*linux_elfcore_write_prstatus)
|
|
||||||
+ (bfd *, char *, int *, long, int, const void *);
|
|
||||||
+extern char *(*linux_elfcore_write_prfpreg)
|
|
||||||
+ (bfd *, char *, int *, const void *, int, struct regcache *);
|
|
@ -34,7 +34,7 @@ diff -u -rup gdb-6.3-orig/gdb/testsuite/gdb.base/unwind-leak.c gdb-6.3/gdb/tests
|
|||||||
diff -u -rup gdb-6.3-orig/gdb/testsuite/gdb.base/unwind-leak.exp gdb-6.3/gdb/testsuite/gdb.base/unwind-leak.exp
|
diff -u -rup gdb-6.3-orig/gdb/testsuite/gdb.base/unwind-leak.exp gdb-6.3/gdb/testsuite/gdb.base/unwind-leak.exp
|
||||||
--- gdb-6.3-orig/gdb/testsuite/gdb.base/unwind-leak.exp 2007-12-19 15:12:53.000000000 -0500
|
--- gdb-6.3-orig/gdb/testsuite/gdb.base/unwind-leak.exp 2007-12-19 15:12:53.000000000 -0500
|
||||||
+++ gdb-6.3/gdb/testsuite/gdb.base/unwind-leak.exp 2007-12-19 15:11:35.000000000 -0500
|
+++ gdb-6.3/gdb/testsuite/gdb.base/unwind-leak.exp 2007-12-19 15:11:35.000000000 -0500
|
||||||
@@ -0,0 +1,90 @@
|
@@ -0,0 +1,83 @@
|
||||||
+# Copyright 2007 Free Software Foundation, Inc.
|
+# Copyright 2007 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -51,13 +51,6 @@ diff -u -rup gdb-6.3-orig/gdb/testsuite/gdb.base/unwind-leak.exp gdb-6.3/gdb/tes
|
|||||||
+# along with this program; if not, write to the Free Software
|
+# along with this program; if not, write to the Free Software
|
||||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+set testfile unwind-leak
|
+set testfile unwind-leak
|
||||||
+set srcfile ${testfile}.c
|
+set srcfile ${testfile}.c
|
||||||
+set shfile ${objdir}/${subdir}/${testfile}-gdb.sh
|
+set shfile ${objdir}/${subdir}/${testfile}-gdb.sh
|
||||||
|
@ -3,7 +3,7 @@ Fix has been committed to:
|
|||||||
|
|
||||||
--- /dev/null 2007-12-14 20:45:09.113039517 +0100
|
--- /dev/null 2007-12-14 20:45:09.113039517 +0100
|
||||||
+++ gdb-6.5/gdb/testsuite/gdb.base/watchpoint-during-step.exp 2007-12-24 19:42:00.000000000 +0100
|
+++ gdb-6.5/gdb/testsuite/gdb.base/watchpoint-during-step.exp 2007-12-24 19:42:00.000000000 +0100
|
||||||
@@ -0,0 +1,51 @@
|
@@ -0,0 +1,44 @@
|
||||||
+# Copyright 2007 Free Software Foundation, Inc.
|
+# Copyright 2007 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -20,13 +20,6 @@ Fix has been committed to:
|
|||||||
+# along with this program; if not, write to the Free Software
|
+# along with this program; if not, write to the Free Software
|
||||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+set testfile watchpoint-during-step
|
+set testfile watchpoint-during-step
|
||||||
+set srcfile ${testfile}.c
|
+set srcfile ${testfile}.c
|
||||||
+set binfile ${objdir}/${subdir}/${testfile}
|
+set binfile ${objdir}/${subdir}/${testfile}
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
Dependency on: gdb-6.5-bz185337-resolve-tls-without-debuginfo-v2.patch
|
|
||||||
|
|
||||||
|
|
||||||
2006-09-01 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* target.c (target_translate_tls_address): Fix for separate debuginfo.
|
|
||||||
|
|
||||||
|
|
||||||
diff -rup gdb-6.5.orig/gdb/target.c gdb-6.5/gdb/target.c
|
|
||||||
--- gdb-6.5.orig/gdb/target.c 2006-09-20 17:13:35.000000000 -0400
|
|
||||||
+++ gdb-6.5/gdb/target.c 2006-09-20 17:15:53.000000000 -0400
|
|
||||||
@@ -769,6 +769,12 @@ target_translate_tls_address (struct obj
|
|
||||||
ptid_t ptid = inferior_ptid;
|
|
||||||
volatile struct gdb_exception ex;
|
|
||||||
|
|
||||||
+ /* Resolve: Cannot find shared library
|
|
||||||
+ `/usr/lib/debug/lib/lib....so.debug' in dynamic linker's load
|
|
||||||
+ module list */
|
|
||||||
+ if (objfile->separate_debug_objfile_backlink != NULL)
|
|
||||||
+ objfile = objfile->separate_debug_objfile_backlink;
|
|
||||||
+
|
|
||||||
TRY_CATCH (ex, RETURN_MASK_ALL)
|
|
||||||
{
|
|
||||||
CORE_ADDR lm_addr;
|
|
@ -1,7 +1,7 @@
|
|||||||
Index: gdb-7.0.50.20100115/gdb/event-top.c
|
Index: gdb-7.1.90.20100806/gdb/event-top.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/event-top.c 2010-01-01 08:31:31.000000000 +0100
|
--- gdb-7.1.90.20100806.orig/gdb/event-top.c 2010-08-06 17:42:01.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/event-top.c 2010-01-15 11:45:20.000000000 +0100
|
+++ gdb-7.1.90.20100806/gdb/event-top.c 2010-08-06 17:42:05.000000000 +0200
|
||||||
@@ -33,6 +33,7 @@
|
@@ -33,6 +33,7 @@
|
||||||
#include "cli/cli-script.h" /* for reset_command_nest_depth */
|
#include "cli/cli-script.h" /* for reset_command_nest_depth */
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
@ -28,11 +28,11 @@ Index: gdb-7.0.50.20100115/gdb/event-top.c
|
|||||||
/* Each interpreter has its own rules on displaying the command
|
/* Each interpreter has its own rules on displaying the command
|
||||||
prompt. */
|
prompt. */
|
||||||
if (!current_interp_display_prompt_p ())
|
if (!current_interp_display_prompt_p ())
|
||||||
Index: gdb-7.0.50.20100115/gdb/elfread.c
|
Index: gdb-7.1.90.20100806/gdb/elfread.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/elfread.c 2010-01-15 11:43:30.000000000 +0100
|
--- gdb-7.1.90.20100806.orig/gdb/elfread.c 2010-08-06 17:42:01.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/elfread.c 2010-01-15 11:45:34.000000000 +0100
|
+++ gdb-7.1.90.20100806/gdb/elfread.c 2010-08-06 18:11:49.000000000 +0200
|
||||||
@@ -40,6 +40,7 @@
|
@@ -42,6 +42,7 @@
|
||||||
#include "gdbcore.h"
|
#include "gdbcore.h"
|
||||||
#include "gdbcmd.h"
|
#include "gdbcmd.h"
|
||||||
#include "observer.h"
|
#include "observer.h"
|
||||||
@ -40,7 +40,7 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
|
|
||||||
extern void _initialize_elfread (void);
|
extern void _initialize_elfread (void);
|
||||||
|
|
||||||
@@ -1119,8 +1120,353 @@ build_id_to_filename (struct build_id *b
|
@@ -1371,8 +1372,357 @@ build_id_to_filename (struct build_id *b
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,8 +113,12 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
+# define rpmtsInitIterator_p rpmtsInitIterator
|
+# define rpmtsInitIterator_p rpmtsInitIterator
|
||||||
+#endif /* !DLOPEN_LIBRPM */
|
+#endif /* !DLOPEN_LIBRPM */
|
||||||
+
|
+
|
||||||
+ if (filename == NULL)
|
+ gdb_assert (filename != NULL);
|
||||||
+ return 0;
|
+ if (filename[0] != '/')
|
||||||
|
+ {
|
||||||
|
+ warning (_("Ignoring non-absolute filename: <%s>"), filename);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
+
|
+
|
||||||
+ if (!rpm_init_done)
|
+ if (!rpm_init_done)
|
||||||
+ {
|
+ {
|
||||||
@ -395,7 +399,7 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
avoidance. */
|
avoidance. */
|
||||||
|
|
||||||
struct missing_filepair
|
struct missing_filepair
|
||||||
@@ -1174,11 +1520,17 @@ missing_filepair_change (void)
|
@@ -1426,11 +1776,17 @@ missing_filepair_change (void)
|
||||||
/* All their memory came just from missing_filepair_OBSTACK. */
|
/* All their memory came just from missing_filepair_OBSTACK. */
|
||||||
missing_filepair_hash = NULL;
|
missing_filepair_hash = NULL;
|
||||||
}
|
}
|
||||||
@ -413,7 +417,7 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
missing_filepair_change ();
|
missing_filepair_change ();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1245,14 +1597,34 @@ debug_print_missing (const char *binary,
|
@@ -1497,14 +1853,35 @@ debug_print_missing (const char *binary,
|
||||||
|
|
||||||
*slot = missing_filepair;
|
*slot = missing_filepair;
|
||||||
|
|
||||||
@ -439,7 +443,8 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+ if (missing_exec != MISSING_EXEC_ENLISTED)
|
+ if (missing_exec != MISSING_EXEC_ENLISTED)
|
||||||
+ if (missing_rpm_enlist (binary) == 0 && missing_rpm_enlist (debug) == 0)
|
+ if ((binary[0] == 0 || missing_rpm_enlist (binary) == 0)
|
||||||
|
+ && (debug == NULL || missing_rpm_enlist (debug) == 0))
|
||||||
+#endif /* HAVE_LIBRPM */
|
+#endif /* HAVE_LIBRPM */
|
||||||
+ {
|
+ {
|
||||||
+ /* We do not collect and flush these messages as each such message
|
+ /* We do not collect and flush these messages as each such message
|
||||||
@ -455,11 +460,11 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
Index: gdb-7.0.50.20100115/gdb/symfile.h
|
Index: gdb-7.1.90.20100806/gdb/symfile.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/symfile.h 2010-01-15 11:12:33.000000000 +0100
|
--- gdb-7.1.90.20100806.orig/gdb/symfile.h 2010-08-06 17:42:01.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/symfile.h 2010-01-15 11:45:20.000000000 +0100
|
+++ gdb-7.1.90.20100806/gdb/symfile.h 2010-08-06 17:42:05.000000000 +0200
|
||||||
@@ -398,6 +398,7 @@ extern struct build_id *build_id_addr_ge
|
@@ -577,6 +577,7 @@ extern struct build_id *build_id_addr_ge
|
||||||
extern char *build_id_to_filename (struct build_id *build_id,
|
extern char *build_id_to_filename (struct build_id *build_id,
|
||||||
char **link_return, int add_debug_suffix);
|
char **link_return, int add_debug_suffix);
|
||||||
extern void debug_print_missing (const char *binary, const char *debug);
|
extern void debug_print_missing (const char *binary, const char *debug);
|
||||||
@ -467,11 +472,11 @@ Index: gdb-7.0.50.20100115/gdb/symfile.h
|
|||||||
|
|
||||||
/* From dwarf2read.c */
|
/* From dwarf2read.c */
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/testsuite/lib/gdb.exp
|
Index: gdb-7.1.90.20100806/gdb/testsuite/lib/gdb.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/testsuite/lib/gdb.exp 2010-01-15 11:12:33.000000000 +0100
|
--- gdb-7.1.90.20100806.orig/gdb/testsuite/lib/gdb.exp 2010-08-06 17:42:01.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/testsuite/lib/gdb.exp 2010-01-15 11:45:20.000000000 +0100
|
+++ gdb-7.1.90.20100806/gdb/testsuite/lib/gdb.exp 2010-08-06 17:42:05.000000000 +0200
|
||||||
@@ -1248,7 +1248,7 @@ proc default_gdb_start { } {
|
@@ -1359,7 +1359,7 @@ proc default_gdb_start { } {
|
||||||
warning "Couldn't set the width to 0."
|
warning "Couldn't set the width to 0."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -480,10 +485,10 @@ Index: gdb-7.0.50.20100115/gdb/testsuite/lib/gdb.exp
|
|||||||
send_gdb "set build-id-verbose 0\n"
|
send_gdb "set build-id-verbose 0\n"
|
||||||
gdb_expect 10 {
|
gdb_expect 10 {
|
||||||
-re "$gdb_prompt $" {
|
-re "$gdb_prompt $" {
|
||||||
Index: gdb-7.0.50.20100115/gdb/testsuite/lib/mi-support.exp
|
Index: gdb-7.1.90.20100806/gdb/testsuite/lib/mi-support.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/testsuite/lib/mi-support.exp 2010-01-15 11:12:33.000000000 +0100
|
--- gdb-7.1.90.20100806.orig/gdb/testsuite/lib/mi-support.exp 2010-08-06 17:42:01.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/testsuite/lib/mi-support.exp 2010-01-15 11:45:20.000000000 +0100
|
+++ gdb-7.1.90.20100806/gdb/testsuite/lib/mi-support.exp 2010-08-06 17:42:05.000000000 +0200
|
||||||
@@ -221,7 +221,7 @@ proc default_mi_gdb_start { args } {
|
@@ -221,7 +221,7 @@ proc default_mi_gdb_start { args } {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -493,10 +498,10 @@ Index: gdb-7.0.50.20100115/gdb/testsuite/lib/mi-support.exp
|
|||||||
send_gdb "190-gdb-set build-id-verbose 0\n"
|
send_gdb "190-gdb-set build-id-verbose 0\n"
|
||||||
gdb_expect 10 {
|
gdb_expect 10 {
|
||||||
-re ".*190-gdb-set build-id-verbose 0\r\n190\\\^done\r\n$mi_gdb_prompt$" {
|
-re ".*190-gdb-set build-id-verbose 0\r\n190\\\^done\r\n$mi_gdb_prompt$" {
|
||||||
Index: gdb-7.0.50.20100115/gdb/tui/tui-interp.c
|
Index: gdb-7.1.90.20100806/gdb/tui/tui-interp.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/tui/tui-interp.c 2010-01-01 08:32:07.000000000 +0100
|
--- gdb-7.1.90.20100806.orig/gdb/tui/tui-interp.c 2010-08-06 17:42:01.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/tui/tui-interp.c 2010-01-15 11:45:20.000000000 +0100
|
+++ gdb-7.1.90.20100806/gdb/tui/tui-interp.c 2010-08-06 17:42:05.000000000 +0200
|
||||||
@@ -30,6 +30,7 @@
|
@@ -30,6 +30,7 @@
|
||||||
#include "tui/tui.h"
|
#include "tui/tui.h"
|
||||||
#include "tui/tui-io.h"
|
#include "tui/tui-io.h"
|
||||||
@ -505,7 +510,7 @@ Index: gdb-7.0.50.20100115/gdb/tui/tui-interp.c
|
|||||||
|
|
||||||
/* Set to 1 when the TUI mode must be activated when we first start
|
/* Set to 1 when the TUI mode must be activated when we first start
|
||||||
gdb. */
|
gdb. */
|
||||||
@@ -128,6 +129,8 @@ tui_command_loop (void *data)
|
@@ -146,6 +147,8 @@ tui_command_loop (void *data)
|
||||||
char *a_prompt;
|
char *a_prompt;
|
||||||
char *gdb_prompt = get_prompt ();
|
char *gdb_prompt = get_prompt ();
|
||||||
|
|
||||||
@ -514,10 +519,10 @@ Index: gdb-7.0.50.20100115/gdb/tui/tui-interp.c
|
|||||||
/* Tell readline what the prompt to display is and what function
|
/* Tell readline what the prompt to display is and what function
|
||||||
it will need to call after a whole line is read. This also
|
it will need to call after a whole line is read. This also
|
||||||
displays the first prompt. */
|
displays the first prompt. */
|
||||||
Index: gdb-7.0.50.20100115/gdb/aclocal.m4
|
Index: gdb-7.1.90.20100806/gdb/aclocal.m4
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/aclocal.m4 2009-11-11 05:42:39.000000000 +0100
|
--- gdb-7.1.90.20100806.orig/gdb/aclocal.m4 2010-08-06 17:42:01.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/aclocal.m4 2010-01-15 11:45:20.000000000 +0100
|
+++ gdb-7.1.90.20100806/gdb/aclocal.m4 2010-08-06 17:42:05.000000000 +0200
|
||||||
@@ -19,6 +19,162 @@ You have another version of autoconf. I
|
@@ -19,6 +19,162 @@ You have another version of autoconf. I
|
||||||
If you have problems, you may need to regenerate the build system entirely.
|
If you have problems, you may need to regenerate the build system entirely.
|
||||||
To do so, use the procedure documented by the package, typically `autoreconf'.])])
|
To do so, use the procedure documented by the package, typically `autoreconf'.])])
|
||||||
@ -681,11 +686,11 @@ Index: gdb-7.0.50.20100115/gdb/aclocal.m4
|
|||||||
# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
|
||||||
#
|
#
|
||||||
# This file is free software; the Free Software Foundation
|
# This file is free software; the Free Software Foundation
|
||||||
Index: gdb-7.0.50.20100115/gdb/config.in
|
Index: gdb-7.1.90.20100806/gdb/config.in
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/config.in 2010-01-15 03:22:31.000000000 +0100
|
--- gdb-7.1.90.20100806.orig/gdb/config.in 2010-08-06 17:42:01.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/config.in 2010-01-15 11:45:20.000000000 +0100
|
+++ gdb-7.1.90.20100806/gdb/config.in 2010-08-06 17:42:05.000000000 +0200
|
||||||
@@ -42,6 +42,9 @@
|
@@ -46,6 +46,9 @@
|
||||||
/* Define to BFD's default target vector. */
|
/* Define to BFD's default target vector. */
|
||||||
#undef DEFAULT_BFD_VEC
|
#undef DEFAULT_BFD_VEC
|
||||||
|
|
||||||
@ -695,9 +700,9 @@ Index: gdb-7.0.50.20100115/gdb/config.in
|
|||||||
/* Define to 1 if translation of program messages to the user's native
|
/* Define to 1 if translation of program messages to the user's native
|
||||||
language is requested. */
|
language is requested. */
|
||||||
#undef ENABLE_NLS
|
#undef ENABLE_NLS
|
||||||
@@ -221,6 +224,9 @@
|
@@ -231,6 +234,9 @@
|
||||||
/* Define if Python 2.6 is being used. */
|
/* Define if Python 2.7 is being used. */
|
||||||
#undef HAVE_LIBPYTHON2_6
|
#undef HAVE_LIBPYTHON2_7
|
||||||
|
|
||||||
+/* Define if librpm library is being used. */
|
+/* Define if librpm library is being used. */
|
||||||
+#undef HAVE_LIBRPM
|
+#undef HAVE_LIBRPM
|
||||||
@ -705,11 +710,11 @@ Index: gdb-7.0.50.20100115/gdb/config.in
|
|||||||
/* Define if libunwind library is being used. */
|
/* Define if libunwind library is being used. */
|
||||||
#undef HAVE_LIBUNWIND
|
#undef HAVE_LIBUNWIND
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/configure
|
Index: gdb-7.1.90.20100806/gdb/configure
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/configure 2010-01-15 03:22:31.000000000 +0100
|
--- gdb-7.1.90.20100806.orig/gdb/configure 2010-08-06 17:42:01.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/configure 2010-01-15 11:45:20.000000000 +0100
|
+++ gdb-7.1.90.20100806/gdb/configure 2010-08-06 17:42:05.000000000 +0200
|
||||||
@@ -676,6 +676,9 @@ REPORT_BUGS_TO
|
@@ -679,6 +679,9 @@ REPORT_BUGS_TO
|
||||||
PKGVERSION
|
PKGVERSION
|
||||||
TARGET_OBS
|
TARGET_OBS
|
||||||
subdirs
|
subdirs
|
||||||
@ -719,7 +724,7 @@ Index: gdb-7.0.50.20100115/gdb/configure
|
|||||||
pythondir
|
pythondir
|
||||||
GDB_DATADIR_PATH
|
GDB_DATADIR_PATH
|
||||||
GDB_DATADIR
|
GDB_DATADIR
|
||||||
@@ -888,6 +891,7 @@ with_separate_debug_dir
|
@@ -948,6 +951,7 @@ with_separate_debug_dir
|
||||||
with_gdb_datadir
|
with_gdb_datadir
|
||||||
with_relocated_sources
|
with_relocated_sources
|
||||||
with_pythondir
|
with_pythondir
|
||||||
@ -727,7 +732,7 @@ Index: gdb-7.0.50.20100115/gdb/configure
|
|||||||
enable_targets
|
enable_targets
|
||||||
enable_64_bit_bfd
|
enable_64_bit_bfd
|
||||||
enable_gdbcli
|
enable_gdbcli
|
||||||
@@ -928,6 +932,9 @@ LDFLAGS
|
@@ -988,6 +992,9 @@ LDFLAGS
|
||||||
LIBS
|
LIBS
|
||||||
CPPFLAGS
|
CPPFLAGS
|
||||||
CPP
|
CPP
|
||||||
@ -737,7 +742,7 @@ Index: gdb-7.0.50.20100115/gdb/configure
|
|||||||
YACC
|
YACC
|
||||||
YFLAGS
|
YFLAGS
|
||||||
XMKMF'
|
XMKMF'
|
||||||
@@ -1593,6 +1600,8 @@ Optional Packages:
|
@@ -1653,6 +1660,8 @@ Optional Packages:
|
||||||
[DATADIR/gdb]
|
[DATADIR/gdb]
|
||||||
--with-pythondir install Python data files in this path
|
--with-pythondir install Python data files in this path
|
||||||
[DATADIR/gdb/python]
|
[DATADIR/gdb/python]
|
||||||
@ -746,7 +751,7 @@ Index: gdb-7.0.50.20100115/gdb/configure
|
|||||||
--with-libunwind use libunwind frame unwinding support
|
--with-libunwind use libunwind frame unwinding support
|
||||||
--with-curses use the curses library instead of the termcap
|
--with-curses use the curses library instead of the termcap
|
||||||
library
|
library
|
||||||
@@ -1627,6 +1636,9 @@ Some influential environment variables:
|
@@ -1688,6 +1697,9 @@ Some influential environment variables:
|
||||||
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
|
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
|
||||||
you have headers in a nonstandard directory <include dir>
|
you have headers in a nonstandard directory <include dir>
|
||||||
CPP C preprocessor
|
CPP C preprocessor
|
||||||
@ -756,7 +761,7 @@ Index: gdb-7.0.50.20100115/gdb/configure
|
|||||||
YACC The `Yet Another C Compiler' implementation to use. Defaults to
|
YACC The `Yet Another C Compiler' implementation to use. Defaults to
|
||||||
the first program found out of: `bison -y', `byacc', `yacc'.
|
the first program found out of: `bison -y', `byacc', `yacc'.
|
||||||
YFLAGS The list of arguments that will be passed by default to $YACC.
|
YFLAGS The list of arguments that will be passed by default to $YACC.
|
||||||
@@ -6760,6 +6772,486 @@ else
|
@@ -7951,6 +7963,485 @@ _ACEOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
@ -1239,291 +1244,14 @@ Index: gdb-7.0.50.20100115/gdb/configure
|
|||||||
+ fi
|
+ fi
|
||||||
+ fi
|
+ fi
|
||||||
+fi
|
+fi
|
||||||
+
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -10043,265 +10535,25 @@ $as_echo "#define STDC_HEADERS 1" >>conf
|
Index: gdb-7.1.90.20100806/gdb/configure.ac
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
-
|
|
||||||
-
|
|
||||||
for ac_header in sys/user32.h sys/procfs32.h
|
|
||||||
-do
|
|
||||||
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
||||||
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
||||||
- echo "$as_me:$LINENO: checking for $ac_header" >&5
|
|
||||||
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
|
|
||||||
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
||||||
- echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
||||||
-fi
|
|
||||||
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
|
|
||||||
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
|
|
||||||
-else
|
|
||||||
- # Is the header compilable?
|
|
||||||
-echo "$as_me:$LINENO: checking $ac_header usability" >&5
|
|
||||||
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
|
|
||||||
-cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
-/* confdefs.h. */
|
|
||||||
-_ACEOF
|
|
||||||
-cat confdefs.h >>conftest.$ac_ext
|
|
||||||
-cat >>conftest.$ac_ext <<_ACEOF
|
|
||||||
-/* end confdefs.h. */
|
|
||||||
-$ac_includes_default
|
|
||||||
-#include <$ac_header>
|
|
||||||
-_ACEOF
|
|
||||||
-rm -f conftest.$ac_objext
|
|
||||||
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
||||||
- (eval $ac_compile) 2>conftest.er1
|
|
||||||
- ac_status=$?
|
|
||||||
- grep -v '^ *+' conftest.er1 >conftest.err
|
|
||||||
- rm -f conftest.er1
|
|
||||||
- cat conftest.err >&5
|
|
||||||
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
- (exit $ac_status); } &&
|
|
||||||
- { ac_try='test -z "$ac_c_werror_flag"
|
|
||||||
- || test ! -s conftest.err'
|
|
||||||
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
||||||
- (eval $ac_try) 2>&5
|
|
||||||
- ac_status=$?
|
|
||||||
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
- (exit $ac_status); }; } &&
|
|
||||||
- { ac_try='test -s conftest.$ac_objext'
|
|
||||||
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
||||||
- (eval $ac_try) 2>&5
|
|
||||||
- ac_status=$?
|
|
||||||
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
- (exit $ac_status); }; }; then
|
|
||||||
- ac_header_compiler=yes
|
|
||||||
-else
|
|
||||||
- echo "$as_me: failed program was:" >&5
|
|
||||||
-sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
-
|
|
||||||
-ac_header_compiler=no
|
|
||||||
-fi
|
|
||||||
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
-echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
|
|
||||||
-echo "${ECHO_T}$ac_header_compiler" >&6
|
|
||||||
-
|
|
||||||
-# Is the header present?
|
|
||||||
-echo "$as_me:$LINENO: checking $ac_header presence" >&5
|
|
||||||
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
|
|
||||||
-cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
-/* confdefs.h. */
|
|
||||||
-_ACEOF
|
|
||||||
-cat confdefs.h >>conftest.$ac_ext
|
|
||||||
-cat >>conftest.$ac_ext <<_ACEOF
|
|
||||||
-/* end confdefs.h. */
|
|
||||||
-#include <$ac_header>
|
|
||||||
-_ACEOF
|
|
||||||
-if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
|
|
||||||
- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
|
|
||||||
- ac_status=$?
|
|
||||||
- grep -v '^ *+' conftest.er1 >conftest.err
|
|
||||||
- rm -f conftest.er1
|
|
||||||
- cat conftest.err >&5
|
|
||||||
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
- (exit $ac_status); } >/dev/null; then
|
|
||||||
- if test -s conftest.err; then
|
|
||||||
- ac_cpp_err=$ac_c_preproc_warn_flag
|
|
||||||
- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
|
|
||||||
- else
|
|
||||||
- ac_cpp_err=
|
|
||||||
- fi
|
|
||||||
-else
|
|
||||||
- ac_cpp_err=yes
|
|
||||||
-fi
|
|
||||||
-if test -z "$ac_cpp_err"; then
|
|
||||||
- ac_header_preproc=yes
|
|
||||||
-else
|
|
||||||
- echo "$as_me: failed program was:" >&5
|
|
||||||
-sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
-
|
|
||||||
- ac_header_preproc=no
|
|
||||||
-fi
|
|
||||||
-rm -f conftest.err conftest.$ac_ext
|
|
||||||
-echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
|
|
||||||
-echo "${ECHO_T}$ac_header_preproc" >&6
|
|
||||||
-
|
|
||||||
-# So? What about this header?
|
|
||||||
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
|
|
||||||
- yes:no: )
|
|
||||||
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
|
|
||||||
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
|
|
||||||
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
|
|
||||||
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
|
|
||||||
- ac_header_preproc=yes
|
|
||||||
- ;;
|
|
||||||
- no:yes:* )
|
|
||||||
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
|
|
||||||
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
|
|
||||||
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
|
|
||||||
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
|
|
||||||
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
|
|
||||||
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
|
|
||||||
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
|
|
||||||
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
|
|
||||||
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
|
|
||||||
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
|
|
||||||
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
|
|
||||||
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
|
|
||||||
- (
|
|
||||||
- cat <<\_ASBOX
|
|
||||||
-## ------------------------------------------ ##
|
|
||||||
-## Report this to the AC_PACKAGE_NAME lists. ##
|
|
||||||
-## ------------------------------------------ ##
|
|
||||||
-_ASBOX
|
|
||||||
- ) |
|
|
||||||
- sed "s/^/$as_me: WARNING: /" >&2
|
|
||||||
- ;;
|
|
||||||
-esac
|
|
||||||
-echo "$as_me:$LINENO: checking for $ac_header" >&5
|
|
||||||
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
|
|
||||||
-if eval "test \"\${$as_ac_Header+set}\" = set"; then
|
|
||||||
- echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
||||||
-else
|
|
||||||
- eval "$as_ac_Header=\$ac_header_preproc"
|
|
||||||
-fi
|
|
||||||
-echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
|
|
||||||
-echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
|
|
||||||
-
|
|
||||||
-fi
|
|
||||||
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
|
|
||||||
+do :
|
|
||||||
+ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
||||||
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
|
|
||||||
+eval as_val=\$$as_ac_Header
|
|
||||||
+ if test "x$as_val" = x""yes; then :
|
|
||||||
cat >>confdefs.h <<_ACEOF
|
|
||||||
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
|
||||||
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
|
|
||||||
_ACEOF
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
done
|
|
||||||
|
|
||||||
-echo "$as_me:$LINENO: checking for struct elf_prstatus32.pr_reg" >&5
|
|
||||||
-echo $ECHO_N "checking for struct elf_prstatus32.pr_reg... $ECHO_C" >&6
|
|
||||||
-if test "${ac_cv_member_struct_elf_prstatus32_pr_reg+set}" = set; then
|
|
||||||
- echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
||||||
-else
|
|
||||||
- cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
-/* confdefs.h. */
|
|
||||||
-_ACEOF
|
|
||||||
-cat confdefs.h >>conftest.$ac_ext
|
|
||||||
-cat >>conftest.$ac_ext <<_ACEOF
|
|
||||||
-/* end confdefs.h. */
|
|
||||||
-#include <sys/procfs.h>
|
|
||||||
-
|
|
||||||
-int
|
|
||||||
-main ()
|
|
||||||
-{
|
|
||||||
-static struct elf_prstatus32 ac_aggr;
|
|
||||||
-if (ac_aggr.pr_reg)
|
|
||||||
-return 0;
|
|
||||||
- ;
|
|
||||||
- return 0;
|
|
||||||
-}
|
|
||||||
-_ACEOF
|
|
||||||
-rm -f conftest.$ac_objext
|
|
||||||
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
||||||
- (eval $ac_compile) 2>conftest.er1
|
|
||||||
- ac_status=$?
|
|
||||||
- grep -v '^ *+' conftest.er1 >conftest.err
|
|
||||||
- rm -f conftest.er1
|
|
||||||
- cat conftest.err >&5
|
|
||||||
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
- (exit $ac_status); } &&
|
|
||||||
- { ac_try='test -z "$ac_c_werror_flag"
|
|
||||||
- || test ! -s conftest.err'
|
|
||||||
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
||||||
- (eval $ac_try) 2>&5
|
|
||||||
- ac_status=$?
|
|
||||||
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
- (exit $ac_status); }; } &&
|
|
||||||
- { ac_try='test -s conftest.$ac_objext'
|
|
||||||
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
||||||
- (eval $ac_try) 2>&5
|
|
||||||
- ac_status=$?
|
|
||||||
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
- (exit $ac_status); }; }; then
|
|
||||||
- ac_cv_member_struct_elf_prstatus32_pr_reg=yes
|
|
||||||
-else
|
|
||||||
- echo "$as_me: failed program was:" >&5
|
|
||||||
-sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
-
|
|
||||||
-cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
-/* confdefs.h. */
|
|
||||||
-_ACEOF
|
|
||||||
-cat confdefs.h >>conftest.$ac_ext
|
|
||||||
-cat >>conftest.$ac_ext <<_ACEOF
|
|
||||||
-/* end confdefs.h. */
|
|
||||||
-#include <sys/procfs.h>
|
|
||||||
-
|
|
||||||
-int
|
|
||||||
-main ()
|
|
||||||
-{
|
|
||||||
-static struct elf_prstatus32 ac_aggr;
|
|
||||||
-if (sizeof ac_aggr.pr_reg)
|
|
||||||
-return 0;
|
|
||||||
- ;
|
|
||||||
- return 0;
|
|
||||||
-}
|
|
||||||
-_ACEOF
|
|
||||||
-rm -f conftest.$ac_objext
|
|
||||||
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
|
|
||||||
- (eval $ac_compile) 2>conftest.er1
|
|
||||||
- ac_status=$?
|
|
||||||
- grep -v '^ *+' conftest.er1 >conftest.err
|
|
||||||
- rm -f conftest.er1
|
|
||||||
- cat conftest.err >&5
|
|
||||||
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
- (exit $ac_status); } &&
|
|
||||||
- { ac_try='test -z "$ac_c_werror_flag"
|
|
||||||
- || test ! -s conftest.err'
|
|
||||||
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
||||||
- (eval $ac_try) 2>&5
|
|
||||||
- ac_status=$?
|
|
||||||
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
- (exit $ac_status); }; } &&
|
|
||||||
- { ac_try='test -s conftest.$ac_objext'
|
|
||||||
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
|
||||||
- (eval $ac_try) 2>&5
|
|
||||||
- ac_status=$?
|
|
||||||
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
- (exit $ac_status); }; }; then
|
|
||||||
- ac_cv_member_struct_elf_prstatus32_pr_reg=yes
|
|
||||||
-else
|
|
||||||
- echo "$as_me: failed program was:" >&5
|
|
||||||
-sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
-
|
|
||||||
-ac_cv_member_struct_elf_prstatus32_pr_reg=no
|
|
||||||
-fi
|
|
||||||
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
-fi
|
|
||||||
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
-fi
|
|
||||||
-echo "$as_me:$LINENO: result: $ac_cv_member_struct_elf_prstatus32_pr_reg" >&5
|
|
||||||
-echo "${ECHO_T}$ac_cv_member_struct_elf_prstatus32_pr_reg" >&6
|
|
||||||
-if test $ac_cv_member_struct_elf_prstatus32_pr_reg = yes; then
|
|
||||||
+ac_fn_c_check_member "$LINENO" "struct elf_prstatus32" "pr_reg" "ac_cv_member_struct_elf_prstatus32_pr_reg" "#include <sys/procfs.h>
|
|
||||||
+"
|
|
||||||
+if test "x$ac_cv_member_struct_elf_prstatus32_pr_reg" = x""yes; then :
|
|
||||||
|
|
||||||
-cat >>confdefs.h <<\_ACEOF
|
|
||||||
-#define HAVE_ELF_PRSTATUS32 1
|
|
||||||
-_ACEOF
|
|
||||||
+$as_echo "#define HAVE_ELF_PRSTATUS32 1" >>confdefs.h
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/configure.ac
|
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/configure.ac 2010-01-15 03:22:31.000000000 +0100
|
--- gdb-7.1.90.20100806.orig/gdb/configure.ac 2010-08-06 17:42:01.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/configure.ac 2010-01-15 11:45:20.000000000 +0100
|
+++ gdb-7.1.90.20100806/gdb/configure.ac 2010-08-06 17:42:05.000000000 +0200
|
||||||
@@ -152,6 +152,199 @@ else
|
@@ -152,6 +152,198 @@ else
|
||||||
fi
|
fi
|
||||||
AC_SUBST(pythondir)
|
AC_SUBST(pythondir)
|
||||||
|
|
||||||
@ -1719,14 +1447,13 @@ Index: gdb-7.0.50.20100115/gdb/configure.ac
|
|||||||
+ fi
|
+ fi
|
||||||
+ fi
|
+ fi
|
||||||
+fi
|
+fi
|
||||||
+
|
|
||||||
|
|
||||||
AC_CONFIG_SUBDIRS(doc testsuite)
|
AC_CONFIG_SUBDIRS(doc testsuite)
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/acinclude.m4
|
Index: gdb-7.1.90.20100806/gdb/acinclude.m4
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/acinclude.m4 2010-01-08 08:16:43.000000000 +0100
|
--- gdb-7.1.90.20100806.orig/gdb/acinclude.m4 2010-08-06 17:42:01.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/acinclude.m4 2010-01-15 11:45:20.000000000 +0100
|
+++ gdb-7.1.90.20100806/gdb/acinclude.m4 2010-08-06 17:42:05.000000000 +0200
|
||||||
@@ -1,3 +1,5 @@
|
@@ -1,3 +1,5 @@
|
||||||
+# serial 1
|
+# serial 1
|
||||||
+
|
+
|
||||||
|
@ -1,19 +1,18 @@
|
|||||||
Index: gdb-7.0.50.20100115/gdb/corelow.c
|
Index: gdb-7.1.90.20100711/gdb/corelow.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/corelow.c 2010-01-04 15:57:43.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/corelow.c 2010-05-14 01:53:32.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/corelow.c 2010-01-15 11:14:05.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/corelow.c 2010-07-12 11:07:33.000000000 +0200
|
||||||
@@ -46,6 +46,10 @@
|
@@ -47,6 +47,9 @@
|
||||||
#include "solib.h"
|
|
||||||
#include "filenames.h"
|
#include "filenames.h"
|
||||||
#include "progspace.h"
|
#include "progspace.h"
|
||||||
|
#include "objfiles.h"
|
||||||
+#include "auxv.h"
|
+#include "auxv.h"
|
||||||
+#include "elf/common.h"
|
+#include "elf/common.h"
|
||||||
+#include "objfiles.h"
|
|
||||||
+#include "gdbcmd.h"
|
+#include "gdbcmd.h"
|
||||||
|
|
||||||
|
|
||||||
#ifndef O_LARGEFILE
|
#ifndef O_LARGEFILE
|
||||||
@@ -290,6 +294,52 @@ add_to_thread_list (bfd *abfd, asection
|
@@ -289,6 +292,52 @@ add_to_thread_list (bfd *abfd, asection
|
||||||
inferior_ptid = ptid; /* Yes, make it current */
|
inferior_ptid = ptid; /* Yes, make it current */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -66,7 +65,7 @@ Index: gdb-7.0.50.20100115/gdb/corelow.c
|
|||||||
/* This routine opens and sets up the core file bfd. */
|
/* This routine opens and sets up the core file bfd. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -387,6 +437,12 @@ core_open (char *filename, int from_tty)
|
@@ -386,6 +435,12 @@ core_open (char *filename, int from_tty)
|
||||||
push_target (&core_ops);
|
push_target (&core_ops);
|
||||||
discard_cleanups (old_chain);
|
discard_cleanups (old_chain);
|
||||||
|
|
||||||
@ -79,7 +78,7 @@ Index: gdb-7.0.50.20100115/gdb/corelow.c
|
|||||||
/* Do this before acknowledging the inferior, so if
|
/* Do this before acknowledging the inferior, so if
|
||||||
post_create_inferior throws (can happen easilly if you're loading
|
post_create_inferior throws (can happen easilly if you're loading
|
||||||
a core file with the wrong exec), we aren't left with threads
|
a core file with the wrong exec), we aren't left with threads
|
||||||
@@ -925,4 +981,11 @@ _initialize_corelow (void)
|
@@ -924,4 +979,11 @@ _initialize_corelow (void)
|
||||||
init_core_ops ();
|
init_core_ops ();
|
||||||
|
|
||||||
add_target (&core_ops);
|
add_target (&core_ops);
|
||||||
@ -91,11 +90,11 @@ Index: gdb-7.0.50.20100115/gdb/corelow.c
|
|||||||
+ NULL, NULL, NULL,
|
+ NULL, NULL, NULL,
|
||||||
+ &setlist, &showlist);
|
+ &setlist, &showlist);
|
||||||
}
|
}
|
||||||
Index: gdb-7.0.50.20100115/gdb/doc/gdb.texinfo
|
Index: gdb-7.1.90.20100711/gdb/doc/gdb.texinfo
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/doc/gdb.texinfo 2010-01-15 03:23:50.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/doc/gdb.texinfo 2010-07-12 10:59:30.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/doc/gdb.texinfo 2010-01-15 11:12:33.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/doc/gdb.texinfo 2010-07-12 11:05:57.000000000 +0200
|
||||||
@@ -14258,6 +14258,27 @@ information files.
|
@@ -14980,6 +14980,27 @@ information files.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@ -123,11 +122,11 @@ Index: gdb-7.0.50.20100115/gdb/doc/gdb.texinfo
|
|||||||
@cindex @code{.gnu_debuglink} sections
|
@cindex @code{.gnu_debuglink} sections
|
||||||
@cindex debug link sections
|
@cindex debug link sections
|
||||||
A debug link is a special section of the executable file named
|
A debug link is a special section of the executable file named
|
||||||
Index: gdb-7.0.50.20100115/gdb/solib-svr4.c
|
Index: gdb-7.1.90.20100711/gdb/solib-svr4.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/solib-svr4.c 2010-01-15 03:22:13.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/solib-svr4.c 2010-07-12 10:00:56.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/solib-svr4.c 2010-01-15 11:12:33.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/solib-svr4.c 2010-07-12 11:05:57.000000000 +0200
|
||||||
@@ -1116,9 +1116,49 @@ svr4_current_sos (void)
|
@@ -1181,9 +1181,49 @@ svr4_current_sos (void)
|
||||||
safe_strerror (errcode));
|
safe_strerror (errcode));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -180,14 +179,14 @@ Index: gdb-7.0.50.20100115/gdb/solib-svr4.c
|
|||||||
}
|
}
|
||||||
xfree (buffer);
|
xfree (buffer);
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/elfread.c
|
Index: gdb-7.1.90.20100711/gdb/elfread.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/elfread.c 2010-01-15 03:22:13.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/elfread.c 2010-07-12 10:00:56.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/elfread.c 2010-01-15 11:43:30.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/elfread.c 2010-07-12 11:30:30.000000000 +0200
|
||||||
@@ -36,6 +36,10 @@
|
@@ -38,6 +38,10 @@
|
||||||
#include "gdb-stabs.h"
|
|
||||||
#include "complaints.h"
|
|
||||||
#include "demangle.h"
|
#include "demangle.h"
|
||||||
|
#include "psympriv.h"
|
||||||
|
#include "gdbtypes.h"
|
||||||
+#include "libbfd.h"
|
+#include "libbfd.h"
|
||||||
+#include "gdbcore.h"
|
+#include "gdbcore.h"
|
||||||
+#include "gdbcmd.h"
|
+#include "gdbcmd.h"
|
||||||
@ -195,10 +194,10 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
|
|
||||||
extern void _initialize_elfread (void);
|
extern void _initialize_elfread (void);
|
||||||
|
|
||||||
@@ -567,6 +571,20 @@ elf_symtab_read (struct objfile *objfile
|
@@ -818,16 +822,65 @@ resolve_gnu_ifunc (const char *function_
|
||||||
}
|
return 0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
+/* Locate NT_GNU_BUILD_ID and return its matching debug filename.
|
+/* Locate NT_GNU_BUILD_ID and return its matching debug filename.
|
||||||
+ FIXME: NOTE decoding should be unified with the BFD core notes decoding. */
|
+ FIXME: NOTE decoding should be unified with the BFD core notes decoding. */
|
||||||
+
|
+
|
||||||
@ -213,10 +212,10 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
+ fprintf_filtered (file, _("Verbosity level of the build-id locator is %s.\n"),
|
+ fprintf_filtered (file, _("Verbosity level of the build-id locator is %s.\n"),
|
||||||
+ value);
|
+ value);
|
||||||
+}
|
+}
|
||||||
|
+
|
||||||
struct build_id
|
struct build_id
|
||||||
{
|
{
|
||||||
@@ -574,10 +592,44 @@ struct build_id
|
size_t size;
|
||||||
gdb_byte data[1];
|
gdb_byte data[1];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -263,7 +262,7 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
{
|
{
|
||||||
struct build_id *retval;
|
struct build_id *retval;
|
||||||
|
|
||||||
@@ -593,6 +645,348 @@ build_id_bfd_get (bfd *abfd)
|
@@ -843,6 +896,348 @@ build_id_bfd_get (bfd *abfd)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -612,7 +611,7 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
/* Return if FILENAME has NT_GNU_BUILD_ID matching the CHECK value. */
|
/* Return if FILENAME has NT_GNU_BUILD_ID matching the CHECK value. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -607,7 +1001,7 @@ build_id_verify (const char *filename, s
|
@@ -857,7 +1252,7 @@ build_id_verify (const char *filename, s
|
||||||
if (abfd == NULL)
|
if (abfd == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -621,7 +620,7 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
|
|
||||||
if (found == NULL)
|
if (found == NULL)
|
||||||
warning (_("File \"%s\" has no build-id, file skipped"), filename);
|
warning (_("File \"%s\" has no build-id, file skipped"), filename);
|
||||||
@@ -626,14 +1020,16 @@ build_id_verify (const char *filename, s
|
@@ -874,14 +1269,16 @@ build_id_verify (const char *filename, s
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -642,7 +641,7 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
|
|
||||||
/* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
|
/* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
|
||||||
cause "/.build-id/..." lookups. */
|
cause "/.build-id/..." lookups. */
|
||||||
@@ -664,7 +1060,10 @@ build_id_to_debug_filename (struct build
|
@@ -912,7 +1309,10 @@ build_id_to_debug_filename (struct build
|
||||||
*s++ = '/';
|
*s++ = '/';
|
||||||
while (size-- > 0)
|
while (size-- > 0)
|
||||||
s += sprintf (s, "%02x", (unsigned) *data++);
|
s += sprintf (s, "%02x", (unsigned) *data++);
|
||||||
@ -654,7 +653,7 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
|
|
||||||
/* lrealpath() is expensive even for the usually non-existent files. */
|
/* lrealpath() is expensive even for the usually non-existent files. */
|
||||||
if (access (link, F_OK) == 0)
|
if (access (link, F_OK) == 0)
|
||||||
@@ -677,17 +1076,188 @@ build_id_to_debug_filename (struct build
|
@@ -925,26 +1325,201 @@ build_id_to_debug_filename (struct build
|
||||||
}
|
}
|
||||||
|
|
||||||
if (retval != NULL)
|
if (retval != NULL)
|
||||||
@ -699,9 +698,9 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
+ xfree (link);
|
+ xfree (link);
|
||||||
+ xfree (link_all);
|
+ xfree (link_all);
|
||||||
+
|
+
|
||||||
return retval;
|
+ return retval;
|
||||||
}
|
+}
|
||||||
|
+
|
||||||
+/* This MISSING_FILEPAIR_HASH tracker is used only for the duplicite messages
|
+/* This MISSING_FILEPAIR_HASH tracker is used only for the duplicite messages
|
||||||
+ Try to install the hash file ...
|
+ Try to install the hash file ...
|
||||||
+ avoidance. */
|
+ avoidance. */
|
||||||
@ -724,9 +723,9 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
+
|
+
|
||||||
+ retval = obstack_alloc (&missing_filepair_obstack, size);
|
+ retval = obstack_alloc (&missing_filepair_obstack, size);
|
||||||
+ memset (retval, 0, size);
|
+ memset (retval, 0, size);
|
||||||
+ return retval;
|
return retval;
|
||||||
+}
|
}
|
||||||
+
|
|
||||||
+static hashval_t
|
+static hashval_t
|
||||||
+missing_filepair_hash_func (const struct missing_filepair *elem)
|
+missing_filepair_hash_func (const struct missing_filepair *elem)
|
||||||
+{
|
+{
|
||||||
@ -843,10 +842,6 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
+find_separate_debug_file_by_buildid (struct objfile *objfile,
|
+find_separate_debug_file_by_buildid (struct objfile *objfile,
|
||||||
+ char **build_id_filename_return)
|
+ char **build_id_filename_return)
|
||||||
{
|
{
|
||||||
asection *sect;
|
|
||||||
char *basename, *name_copy, *debugdir;
|
|
||||||
@@ -699,12 +1269,16 @@ find_separate_debug_file_by_buildid (str
|
|
||||||
int i;
|
|
||||||
struct build_id *build_id;
|
struct build_id *build_id;
|
||||||
|
|
||||||
- build_id = build_id_bfd_get (objfile->obfd);
|
- build_id = build_id_bfd_get (objfile->obfd);
|
||||||
@ -864,7 +859,7 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
xfree (build_id);
|
xfree (build_id);
|
||||||
/* Prevent looping on a stripped .debug file. */
|
/* Prevent looping on a stripped .debug file. */
|
||||||
if (build_id_name != NULL && strcmp (build_id_name, objfile->name) == 0)
|
if (build_id_name != NULL && strcmp (build_id_name, objfile->name) == 0)
|
||||||
@@ -714,7 +1288,7 @@ find_separate_debug_file_by_buildid (str
|
@@ -954,7 +1529,7 @@ find_separate_debug_file_by_buildid (str
|
||||||
xfree (build_id_name);
|
xfree (build_id_name);
|
||||||
}
|
}
|
||||||
else if (build_id_name != NULL)
|
else if (build_id_name != NULL)
|
||||||
@ -873,9 +868,9 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -887,9 +1461,10 @@ elf_symfile_read (struct objfile *objfil
|
@@ -1131,9 +1706,10 @@ elf_symfile_read (struct objfile *objfil
|
||||||
`.gnu_debuglink' may no longer be present with `.note.gnu.build-id'. */
|
`.gnu_debuglink' may no longer be present with `.note.gnu.build-id'. */
|
||||||
else
|
if (!objfile_has_partial_symbols (objfile))
|
||||||
{
|
{
|
||||||
- char *debugfile;
|
- char *debugfile;
|
||||||
+ char *debugfile, *build_id_filename;
|
+ char *debugfile, *build_id_filename;
|
||||||
@ -886,7 +881,7 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
|
|
||||||
if (debugfile == NULL)
|
if (debugfile == NULL)
|
||||||
debugfile = find_separate_debug_file_by_debuglink (objfile);
|
debugfile = find_separate_debug_file_by_debuglink (objfile);
|
||||||
@@ -900,6 +1475,12 @@ elf_symfile_read (struct objfile *objfil
|
@@ -1145,6 +1721,12 @@ elf_symfile_read (struct objfile *objfil
|
||||||
symbol_file_add_separate (abfd, symfile_flags, objfile);
|
symbol_file_add_separate (abfd, symfile_flags, objfile);
|
||||||
xfree (debugfile);
|
xfree (debugfile);
|
||||||
}
|
}
|
||||||
@ -899,7 +894,7 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1072,4 +1653,16 @@ void
|
@@ -1304,4 +1886,16 @@ void
|
||||||
_initialize_elfread (void)
|
_initialize_elfread (void)
|
||||||
{
|
{
|
||||||
add_symtab_fns (&elf_sym_fns);
|
add_symtab_fns (&elf_sym_fns);
|
||||||
@ -916,13 +911,13 @@ Index: gdb-7.0.50.20100115/gdb/elfread.c
|
|||||||
+
|
+
|
||||||
+ observer_attach_executable_changed (debug_print_executable_changed);
|
+ observer_attach_executable_changed (debug_print_executable_changed);
|
||||||
}
|
}
|
||||||
Index: gdb-7.0.50.20100115/gdb/symfile.h
|
Index: gdb-7.1.90.20100711/gdb/symfile.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/symfile.h 2010-01-15 03:22:13.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/symfile.h 2010-05-08 06:58:45.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/symfile.h 2010-01-15 11:12:33.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/symfile.h 2010-07-12 11:06:18.000000000 +0200
|
||||||
@@ -392,6 +392,13 @@ extern int symfile_map_offsets_to_segmen
|
@@ -562,6 +562,13 @@ void free_symfile_segment_data (struct s
|
||||||
struct symfile_segment_data *get_symfile_segment_data (bfd *abfd);
|
|
||||||
void free_symfile_segment_data (struct symfile_segment_data *data);
|
extern struct cleanup *increment_reading_symtab (void);
|
||||||
|
|
||||||
+/* build-id support. */
|
+/* build-id support. */
|
||||||
+struct build_id;
|
+struct build_id;
|
||||||
@ -934,11 +929,11 @@ Index: gdb-7.0.50.20100115/gdb/symfile.h
|
|||||||
/* From dwarf2read.c */
|
/* From dwarf2read.c */
|
||||||
|
|
||||||
extern int dwarf2_has_info (struct objfile *);
|
extern int dwarf2_has_info (struct objfile *);
|
||||||
Index: gdb-7.0.50.20100115/gdb/testsuite/lib/gdb.exp
|
Index: gdb-7.1.90.20100711/gdb/testsuite/lib/gdb.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/testsuite/lib/gdb.exp 2010-01-15 03:22:13.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/testsuite/lib/gdb.exp 2010-07-12 10:00:56.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/testsuite/lib/gdb.exp 2010-01-15 11:12:33.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/testsuite/lib/gdb.exp 2010-07-12 11:05:57.000000000 +0200
|
||||||
@@ -1248,6 +1248,16 @@ proc default_gdb_start { } {
|
@@ -1353,6 +1353,16 @@ proc default_gdb_start { } {
|
||||||
warning "Couldn't set the width to 0."
|
warning "Couldn't set the width to 0."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -955,10 +950,10 @@ Index: gdb-7.0.50.20100115/gdb/testsuite/lib/gdb.exp
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/testsuite/lib/mi-support.exp
|
Index: gdb-7.1.90.20100711/gdb/testsuite/lib/mi-support.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/testsuite/lib/mi-support.exp 2010-01-12 22:40:25.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/testsuite/lib/mi-support.exp 2010-03-15 04:43:13.000000000 +0100
|
||||||
+++ gdb-7.0.50.20100115/gdb/testsuite/lib/mi-support.exp 2010-01-15 11:12:33.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/testsuite/lib/mi-support.exp 2010-07-12 11:05:57.000000000 +0200
|
||||||
@@ -221,6 +221,16 @@ proc default_mi_gdb_start { args } {
|
@@ -221,6 +221,16 @@ proc default_mi_gdb_start { args } {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -976,13 +971,13 @@ Index: gdb-7.0.50.20100115/gdb/testsuite/lib/mi-support.exp
|
|||||||
|
|
||||||
detect_async
|
detect_async
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/objfiles.h
|
Index: gdb-7.1.90.20100711/gdb/objfiles.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/objfiles.h 2010-01-15 03:22:13.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/objfiles.h 2010-04-14 19:26:11.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/objfiles.h 2010-01-15 11:14:42.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/objfiles.h 2010-07-12 11:07:08.000000000 +0200
|
||||||
@@ -440,6 +440,10 @@ struct objfile
|
@@ -426,6 +426,10 @@ struct objfile
|
||||||
|
|
||||||
#define OBJF_MAIN (1 << 7)
|
#define OBJF_USERLOADED (1 << 3) /* User loaded */
|
||||||
|
|
||||||
+/* This file was loaded according to the BUILD_ID_CORE_LOADS rules. */
|
+/* This file was loaded according to the BUILD_ID_CORE_LOADS rules. */
|
||||||
+
|
+
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=225783
|
|
||||||
|
|
||||||
--- gdb-6.8/gdb/testsuite/gdb.base/prelink.exp.orig 2008-07-12 08:56:43.000000000 +0200
|
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.base/prelink.exp 2008-07-12 08:59:59.000000000 +0200
|
|
||||||
@@ -55,7 +55,7 @@ if { [gdb_compile "${srcdir}/${subdir}/$
|
|
||||||
# single new unprelinked library address without wasting the first one/two
|
|
||||||
# memory areas. We do not care of the efficiency of loading such resulting
|
|
||||||
# exec-shield unfriendly prelinked library.
|
|
||||||
-if {[catch "system \"prelink -qNR --no-exec-shield ${libfile}\""] != 0} {
|
|
||||||
+if {[catch "system \"/usr/sbin/prelink -qNR --no-exec-shield ${libfile}\""] != 0} {
|
|
||||||
# Maybe we don't have prelink.
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
@@ -96,11 +96,11 @@ if { $found == 0 } {
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
-if {[catch "system \"prelink -uN ${libfile}\""] != 0} {
|
|
||||||
+if {[catch "system \"/usr/sbin/prelink -uN ${libfile}\""] != 0} {
|
|
||||||
untested "${testfile}.so was not prelinked, maybe system libraries are not prelinked?"
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
-catch "system \"prelink -qNR --no-exec-shield ${libfile}\""
|
|
||||||
+catch "system \"/usr/sbin/prelink -qNR --no-exec-shield ${libfile}\""
|
|
||||||
|
|
||||||
# Start with a fresh gdb
|
|
||||||
|
|
@ -68,7 +68,7 @@
|
|||||||
+}
|
+}
|
||||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||||
+++ ./gdb/testsuite/gdb.base/gcorebg.exp 25 Feb 2007 12:21:20 -0000
|
+++ ./gdb/testsuite/gdb.base/gcorebg.exp 25 Feb 2007 12:21:20 -0000
|
||||||
@@ -0,0 +1,120 @@
|
@@ -0,0 +1,113 @@
|
||||||
+# Copyright 2007 Free Software Foundation, Inc.
|
+# Copyright 2007 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -93,13 +93,6 @@
|
|||||||
+# It also tests a regression with `gdb_gcore.sh' being run without its
|
+# It also tests a regression with `gdb_gcore.sh' being run without its
|
||||||
+# accessible terminal.
|
+# accessible terminal.
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+if ![info exists GCORE] {
|
+if ![info exists GCORE] {
|
||||||
+ set GCORE "${srcdir}/../gdb_gcore.sh"
|
+ set GCORE "${srcdir}/../gdb_gcore.sh"
|
||||||
+}
|
+}
|
||||||
|
@ -82,7 +82,7 @@ Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.base/fork-detach.exp
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.base/fork-detach.exp 2010-01-15 03:22:52.000000000 +0100
|
+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.base/fork-detach.exp 2010-01-15 03:22:52.000000000 +0100
|
||||||
@@ -0,0 +1,43 @@
|
@@ -0,0 +1,36 @@
|
||||||
+# Copyright 2007 Free Software Foundation, Inc.
|
+# Copyright 2007 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -99,13 +99,6 @@ Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.base/fork-detach.exp
|
|||||||
+# along with this program; if not, write to the Free Software
|
+# along with this program; if not, write to the Free Software
|
||||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+set testfile fork-detach
|
+set testfile fork-detach
|
||||||
+set srcfile ${testfile}.c
|
+set srcfile ${testfile}.c
|
||||||
+set binfile ${objdir}/${subdir}/${testfile}
|
+set binfile ${objdir}/${subdir}/${testfile}
|
||||||
|
@ -1,216 +0,0 @@
|
|||||||
Test GCORE on 32bit inferiors on 64bit platforms.
|
|
||||||
|
|
||||||
UNSUPPORTED results are valid for `-m64' on 32bit targets.
|
|
||||||
|
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100203/gdb/testsuite/gdb.base/gcore.exp
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.50.20100203.orig/gdb/testsuite/gdb.base/gcore.exp 2010-02-01 18:15:36.000000000 +0100
|
|
||||||
+++ gdb-7.0.50.20100203/gdb/testsuite/gdb.base/gcore.exp 2010-02-03 06:39:54.000000000 +0100
|
|
||||||
@@ -28,9 +28,14 @@ set testfile "gcore"
|
|
||||||
set srcfile ${testfile}.c
|
|
||||||
set binfile ${objdir}/${subdir}/${testfile}
|
|
||||||
|
|
||||||
-if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
|
|
||||||
- untested gcore.exp
|
|
||||||
- return -1
|
|
||||||
+# `-static-libgcc' to avoid dependency on `libgcc.{i386,ppc}'.
|
|
||||||
+foreach additional_flags {{} {-m32 -static-libgcc} {-m64 -static-libgcc}} {
|
|
||||||
+
|
|
||||||
+set prefix "arch{$additional_flags}:"
|
|
||||||
+
|
|
||||||
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug additional_flags=$additional_flags]] != "" } {
|
|
||||||
+ unsupported "${prefix} gcore.exp"
|
|
||||||
+ continue
|
|
||||||
}
|
|
||||||
|
|
||||||
# Start with a fresh gdb.
|
|
||||||
@@ -45,23 +50,23 @@ send_gdb "help gcore\n"
|
|
||||||
gdb_expect {
|
|
||||||
-re "Undefined command: .gcore.*$gdb_prompt $" {
|
|
||||||
# gcore command not supported -- nothing to test here.
|
|
||||||
- unsupported "gdb does not support gcore on this target"
|
|
||||||
- return -1;
|
|
||||||
+ unsupported "${prefix} gdb does not support gcore on this target"
|
|
||||||
+ continue
|
|
||||||
}
|
|
||||||
-re "Save a core file .*$gdb_prompt $" {
|
|
||||||
- pass "help gcore"
|
|
||||||
+ pass "${prefix} help gcore"
|
|
||||||
}
|
|
||||||
-re ".*$gdb_prompt $" {
|
|
||||||
- fail "help gcore"
|
|
||||||
+ fail "${prefix} help gcore"
|
|
||||||
}
|
|
||||||
timeout {
|
|
||||||
- fail "help gcore (timeout)"
|
|
||||||
+ fail "${prefix} help gcore (timeout)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if { ! [ runto_main ] } then {
|
|
||||||
- untested gcore.exp
|
|
||||||
- return -1
|
|
||||||
+ untested "${prefix} gcore.exp"
|
|
||||||
+ continue
|
|
||||||
}
|
|
||||||
|
|
||||||
proc capture_command_output { command prefix } {
|
|
||||||
@@ -69,7 +74,7 @@ proc capture_command_output { command pr
|
|
||||||
global expect_out
|
|
||||||
|
|
||||||
set output_string ""
|
|
||||||
- gdb_test_multiple "$command" "capture_command_output for $command" {
|
|
||||||
+ gdb_test_multiple "$command" "${prefix} capture_command_output for $command" {
|
|
||||||
-re "${command}\[\r\n\]+${prefix}(.*)\[\r\n\]+$gdb_prompt $" {
|
|
||||||
set output_string $expect_out(1,string)
|
|
||||||
}
|
|
||||||
@@ -103,22 +108,22 @@ set escapedfilename [string_to_regexp ${
|
|
||||||
|
|
||||||
set core_supported 0
|
|
||||||
gdb_test_multiple "gcore ${objdir}/${subdir}/gcore.test" \
|
|
||||||
- "save a corefile" \
|
|
||||||
+ "${prefix} save a corefile" \
|
|
||||||
{
|
|
||||||
-re "Saved corefile ${escapedfilename}\[\r\n\]+$gdb_prompt $" {
|
|
||||||
- pass "save a corefile"
|
|
||||||
+ pass "${prefix} save a corefile"
|
|
||||||
global core_supported
|
|
||||||
set core_supported 1
|
|
||||||
}
|
|
||||||
-re "Can't create a corefile\[\r\n\]+$gdb_prompt $" {
|
|
||||||
- unsupported "save a corefile"
|
|
||||||
+ unsupported "${prefix} save a corefile"
|
|
||||||
global core_supported
|
|
||||||
set core_supported 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if {!$core_supported} {
|
|
||||||
- return -1
|
|
||||||
+ continue
|
|
||||||
}
|
|
||||||
|
|
||||||
# Now restart gdb and load the corefile.
|
|
||||||
@@ -130,31 +135,31 @@ gdb_load ${binfile}
|
|
||||||
send_gdb "core ${objdir}/${subdir}/gcore.test\n"
|
|
||||||
gdb_expect {
|
|
||||||
-re ".* is not a core dump:.*$gdb_prompt $" {
|
|
||||||
- fail "re-load generated corefile (bad file format)"
|
|
||||||
+ fail "${prefix} re-load generated corefile (bad file format)"
|
|
||||||
# No use proceeding from here.
|
|
||||||
- return;
|
|
||||||
+ continue
|
|
||||||
}
|
|
||||||
-re ".*: No such file or directory.*$gdb_prompt $" {
|
|
||||||
- fail "re-load generated corefile (file not found)"
|
|
||||||
+ fail "${prefix} re-load generated corefile (file not found)"
|
|
||||||
# No use proceeding from here.
|
|
||||||
- return;
|
|
||||||
+ continue
|
|
||||||
}
|
|
||||||
-re ".*Couldn't find .* registers in core file.*$gdb_prompt $" {
|
|
||||||
- fail "re-load generated corefile (incomplete note section)"
|
|
||||||
+ fail "${prefix} re-load generated corefile (incomplete note section)"
|
|
||||||
}
|
|
||||||
-re "Core was generated by .*$gdb_prompt $" {
|
|
||||||
- pass "re-load generated corefile"
|
|
||||||
+ pass "${prefix} re-load generated corefile"
|
|
||||||
}
|
|
||||||
-re ".*$gdb_prompt $" {
|
|
||||||
- fail "re-load generated corefile"
|
|
||||||
+ fail "${prefix} re-load generated corefile"
|
|
||||||
}
|
|
||||||
timeout {
|
|
||||||
- fail "re-load generated corefile (timeout)"
|
|
||||||
+ fail "${prefix} re-load generated corefile (timeout)"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
send_gdb "where\n"
|
|
||||||
-gdb_expect_list "where in corefile" ".*$gdb_prompt $" {
|
|
||||||
+gdb_expect_list "${prefix} where in corefile" ".*$gdb_prompt $" {
|
|
||||||
".*\[\r\n\]+#0 .* terminal_func \\(\\) at "
|
|
||||||
".*\[\r\n\]+#1 .* array_func \\(\\) at "
|
|
||||||
".*\[\r\n\]+#2 .* factorial_func \\(value=1\\) at "
|
|
||||||
@@ -168,61 +173,64 @@ gdb_expect_list "where in corefile" ".*$
|
|
||||||
|
|
||||||
set post_corefile_regs [capture_command_output "info registers" ""]
|
|
||||||
if ![string compare $pre_corefile_regs $post_corefile_regs] then {
|
|
||||||
- pass "corefile restored general registers"
|
|
||||||
+ pass "${prefix} corefile restored general registers"
|
|
||||||
} else {
|
|
||||||
- fail "corefile restored general registers"
|
|
||||||
+ fail "${prefix} corefile restored general registers"
|
|
||||||
}
|
|
||||||
|
|
||||||
set post_corefile_allregs [capture_command_output "info all-reg" ""]
|
|
||||||
if ![string compare $pre_corefile_allregs $post_corefile_allregs] then {
|
|
||||||
- pass "corefile restored all registers"
|
|
||||||
+ pass "${prefix} corefile restored all registers"
|
|
||||||
} else {
|
|
||||||
- fail "corefile restored all registers"
|
|
||||||
+ fail "${prefix} corefile restored all registers"
|
|
||||||
}
|
|
||||||
|
|
||||||
set post_corefile_extern_array \
|
|
||||||
[capture_command_output "print extern_array" "$print_prefix"]
|
|
||||||
if ![string compare $pre_corefile_extern_array $post_corefile_extern_array] {
|
|
||||||
- pass "corefile restored extern array"
|
|
||||||
+ pass "${prefix} corefile restored extern array"
|
|
||||||
} else {
|
|
||||||
- fail "corefile restored extern array"
|
|
||||||
+ fail "${prefix} corefile restored extern array"
|
|
||||||
}
|
|
||||||
|
|
||||||
set post_corefile_static_array \
|
|
||||||
[capture_command_output "print static_array" "$print_prefix"]
|
|
||||||
if ![string compare $pre_corefile_static_array $post_corefile_static_array] {
|
|
||||||
- pass "corefile restored static array"
|
|
||||||
+ pass "${prefix} corefile restored static array"
|
|
||||||
} else {
|
|
||||||
- fail "corefile restored static array"
|
|
||||||
+ fail "${prefix} corefile restored static array"
|
|
||||||
}
|
|
||||||
|
|
||||||
set post_corefile_uninit_array \
|
|
||||||
[capture_command_output "print un_initialized_array" "$print_prefix"]
|
|
||||||
if ![string compare $pre_corefile_uninit_array $post_corefile_uninit_array] {
|
|
||||||
- pass "corefile restored un-initialized array"
|
|
||||||
+ pass "${prefix} corefile restored un-initialized array"
|
|
||||||
} else {
|
|
||||||
- fail "corefile restored un-initialized array"
|
|
||||||
+ fail "${prefix} corefile restored un-initialized array"
|
|
||||||
}
|
|
||||||
|
|
||||||
set post_corefile_heap_string \
|
|
||||||
[capture_command_output "print heap_string" "$print_prefix"]
|
|
||||||
if ![string compare $pre_corefile_heap_string $post_corefile_heap_string] {
|
|
||||||
- pass "corefile restored heap array"
|
|
||||||
+ pass "${prefix} corefile restored heap array"
|
|
||||||
} else {
|
|
||||||
- fail "corefile restored heap array"
|
|
||||||
+ fail "${prefix} corefile restored heap array"
|
|
||||||
}
|
|
||||||
|
|
||||||
set post_corefile_local_array \
|
|
||||||
[capture_command_output "print array_func::local_array" "$print_prefix"]
|
|
||||||
if ![string compare $pre_corefile_local_array $post_corefile_local_array] {
|
|
||||||
- pass "corefile restored stack array"
|
|
||||||
+ pass "${prefix} corefile restored stack array"
|
|
||||||
} else {
|
|
||||||
- fail "corefile restored stack array"
|
|
||||||
+ fail "${prefix} corefile restored stack array"
|
|
||||||
}
|
|
||||||
|
|
||||||
set post_corefile_backtrace [capture_command_output "backtrace" ""]
|
|
||||||
if ![string compare $pre_corefile_backtrace $post_corefile_backtrace] {
|
|
||||||
- pass "corefile restored backtrace"
|
|
||||||
+ pass "${prefix} corefile restored backtrace"
|
|
||||||
} else {
|
|
||||||
- fail "corefile restored backtrace"
|
|
||||||
+ fail "${prefix} corefile restored backtrace"
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+# $additional_flags:
|
|
||||||
}
|
|
@ -1,8 +1,8 @@
|
|||||||
Index: gdb-6.8.50.20090811/gdb/infrun.c
|
Index: gdb-7.1.90.20100711/gdb/infrun.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.50.20090811.orig/gdb/infrun.c 2009-08-12 06:56:29.000000000 +0200
|
--- gdb-7.1.90.20100711.orig/gdb/infrun.c 2010-07-12 10:05:26.000000000 +0200
|
||||||
+++ gdb-6.8.50.20090811/gdb/infrun.c 2009-08-12 07:13:08.000000000 +0200
|
+++ gdb-7.1.90.20100711/gdb/infrun.c 2010-07-12 10:58:56.000000000 +0200
|
||||||
@@ -1075,7 +1075,7 @@ static const char *scheduler_enums[] = {
|
@@ -1491,7 +1491,7 @@ static const char *scheduler_enums[] = {
|
||||||
schedlock_step,
|
schedlock_step,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
@ -11,10 +11,10 @@ Index: gdb-6.8.50.20090811/gdb/infrun.c
|
|||||||
static void
|
static void
|
||||||
show_scheduler_mode (struct ui_file *file, int from_tty,
|
show_scheduler_mode (struct ui_file *file, int from_tty,
|
||||||
struct cmd_list_element *c, const char *value)
|
struct cmd_list_element *c, const char *value)
|
||||||
Index: gdb-6.8.50.20090811/gdb/testsuite/gdb.mi/mi-console.exp
|
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.mi/mi-console.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.50.20090811.orig/gdb/testsuite/gdb.mi/mi-console.exp 2009-08-12 06:56:29.000000000 +0200
|
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.mi/mi-console.exp 2010-01-01 08:32:03.000000000 +0100
|
||||||
+++ gdb-6.8.50.20090811/gdb/testsuite/gdb.mi/mi-console.exp 2009-08-12 06:58:45.000000000 +0200
|
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.mi/mi-console.exp 2010-07-12 10:58:56.000000000 +0200
|
||||||
@@ -47,6 +47,9 @@ if { [gdb_compile "${srcdir}/${subdir}/
|
@@ -47,6 +47,9 @@ if { [gdb_compile "${srcdir}/${subdir}/
|
||||||
|
|
||||||
mi_run_to_main
|
mi_run_to_main
|
||||||
@ -25,10 +25,10 @@ Index: gdb-6.8.50.20090811/gdb/testsuite/gdb.mi/mi-console.exp
|
|||||||
# Next over the hello() call which will produce lots of output
|
# Next over the hello() call which will produce lots of output
|
||||||
mi_gdb_test "220-exec-next" \
|
mi_gdb_test "220-exec-next" \
|
||||||
"220\\^running(\r\n\\*running,thread-id=\"all\")?" \
|
"220\\^running(\r\n\\*running,thread-id=\"all\")?" \
|
||||||
Index: gdb-6.8.50.20090811/gdb/testsuite/gdb.mi/mi2-console.exp
|
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.mi/mi2-console.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.50.20090811.orig/gdb/testsuite/gdb.mi/mi2-console.exp 2009-08-12 06:56:29.000000000 +0200
|
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.mi/mi2-console.exp 2010-05-26 20:12:13.000000000 +0200
|
||||||
+++ gdb-6.8.50.20090811/gdb/testsuite/gdb.mi/mi2-console.exp 2009-08-12 06:58:45.000000000 +0200
|
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.mi/mi2-console.exp 2010-07-12 10:59:14.000000000 +0200
|
||||||
@@ -47,6 +47,9 @@ if { [gdb_compile "${srcdir}/${subdir}/
|
@@ -47,6 +47,9 @@ if { [gdb_compile "${srcdir}/${subdir}/
|
||||||
|
|
||||||
mi_run_to_main
|
mi_run_to_main
|
||||||
@ -37,13 +37,13 @@ Index: gdb-6.8.50.20090811/gdb/testsuite/gdb.mi/mi2-console.exp
|
|||||||
+mi_gdb_test "210-gdb-set scheduler-locking off" "210\\^done" "set scheduler-locking off"
|
+mi_gdb_test "210-gdb-set scheduler-locking off" "210\\^done" "set scheduler-locking off"
|
||||||
+
|
+
|
||||||
# Next over the hello() call which will produce lots of output
|
# Next over the hello() call which will produce lots of output
|
||||||
send_gdb "220-exec-next\n"
|
gdb_test_multiple "220-exec-next" "Started step over hello" {
|
||||||
gdb_expect {
|
-re "220\\^running\r\n(\\*running,thread-id=\"all\"\r\n)?$mi_gdb_prompt" {
|
||||||
Index: gdb-6.8.50.20090811/gdb/testsuite/gdb.mi/mi-cli.exp
|
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.mi/mi-cli.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.50.20090811.orig/gdb/testsuite/gdb.mi/mi-cli.exp 2009-06-09 19:12:42.000000000 +0200
|
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.mi/mi-cli.exp 2010-01-19 09:00:39.000000000 +0100
|
||||||
+++ gdb-6.8.50.20090811/gdb/testsuite/gdb.mi/mi-cli.exp 2009-08-12 07:13:32.000000000 +0200
|
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.mi/mi-cli.exp 2010-07-12 10:58:56.000000000 +0200
|
||||||
@@ -173,7 +173,7 @@ mi_execute_to "exec-continue" "breakpoin
|
@@ -176,7 +176,7 @@ mi_execute_to "exec-continue" "breakpoin
|
||||||
# Test that the token is output even for CLI commands
|
# Test that the token is output even for CLI commands
|
||||||
# Also test that *stopped includes frame information.
|
# Also test that *stopped includes frame information.
|
||||||
mi_gdb_test "34 next" \
|
mi_gdb_test "34 next" \
|
||||||
|
@ -21,11 +21,11 @@
|
|||||||
|
|
||||||
Port to GDB-6.8pre.
|
Port to GDB-6.8pre.
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/inferior.h
|
Index: gdb-7.1.90.20100711/gdb/inferior.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/inferior.h 2010-01-15 03:16:43.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/inferior.h 2010-07-12 10:00:56.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/inferior.h 2010-01-15 03:17:07.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/inferior.h 2010-07-12 10:04:25.000000000 +0200
|
||||||
@@ -188,7 +188,15 @@ extern void reopen_exec_file (void);
|
@@ -198,7 +198,15 @@ extern void reopen_exec_file (void);
|
||||||
/* The `resume' routine should only be called in special circumstances.
|
/* The `resume' routine should only be called in special circumstances.
|
||||||
Normally, use `proceed', which handles a lot of bookkeeping. */
|
Normally, use `proceed', which handles a lot of bookkeeping. */
|
||||||
|
|
||||||
@ -42,11 +42,11 @@ Index: gdb-7.0.50.20100115/gdb/inferior.h
|
|||||||
|
|
||||||
/* From misc files */
|
/* From misc files */
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/infrun.c
|
Index: gdb-7.1.90.20100711/gdb/infrun.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/infrun.c 2010-01-15 03:16:43.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/infrun.c 2010-07-12 10:00:56.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/infrun.c 2010-01-15 03:17:32.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/infrun.c 2010-07-12 10:05:26.000000000 +0200
|
||||||
@@ -77,7 +77,7 @@ static int follow_fork (void);
|
@@ -76,7 +76,7 @@ static int follow_fork (void);
|
||||||
static void set_schedlock_func (char *args, int from_tty,
|
static void set_schedlock_func (char *args, int from_tty,
|
||||||
struct cmd_list_element *c);
|
struct cmd_list_element *c);
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ Index: gdb-7.0.50.20100115/gdb/infrun.c
|
|||||||
|
|
||||||
static int currently_stepping_or_nexting_callback (struct thread_info *tp,
|
static int currently_stepping_or_nexting_callback (struct thread_info *tp,
|
||||||
void *data);
|
void *data);
|
||||||
@@ -1363,7 +1363,7 @@ maybe_software_singlestep (struct gdbarc
|
@@ -1549,7 +1549,7 @@ maybe_software_singlestep (struct gdbarc
|
||||||
STEP nonzero if we should step (zero to continue instead).
|
STEP nonzero if we should step (zero to continue instead).
|
||||||
SIG is the signal to give the inferior (zero for none). */
|
SIG is the signal to give the inferior (zero for none). */
|
||||||
void
|
void
|
||||||
@ -64,7 +64,7 @@ Index: gdb-7.0.50.20100115/gdb/infrun.c
|
|||||||
{
|
{
|
||||||
int should_resume = 1;
|
int should_resume = 1;
|
||||||
struct cleanup *old_cleanups = make_cleanup (resume_cleanups, 0);
|
struct cleanup *old_cleanups = make_cleanup (resume_cleanups, 0);
|
||||||
@@ -1376,10 +1376,12 @@ resume (int step, enum target_signal sig
|
@@ -1562,10 +1562,12 @@ resume (int step, enum target_signal sig
|
||||||
QUIT;
|
QUIT;
|
||||||
|
|
||||||
if (debug_infrun)
|
if (debug_infrun)
|
||||||
@ -79,9 +79,9 @@ Index: gdb-7.0.50.20100115/gdb/infrun.c
|
|||||||
+ : "RESUME_STEP_NEEDED")),
|
+ : "RESUME_STEP_NEEDED")),
|
||||||
+ sig, tp->trap_expected);
|
+ sig, tp->trap_expected);
|
||||||
|
|
||||||
/* Some targets (e.g. Solaris x86) have a kernel bug when stepping
|
/* Normally, by the time we reach `resume', the breakpoints are either
|
||||||
over an instruction that causes a page fault without triggering
|
removed or inserted, as appropriate. The exception is if we're sitting
|
||||||
@@ -1501,9 +1503,10 @@ a command like `return' or `jump' to con
|
@@ -1678,9 +1680,10 @@ a command like `return' or `jump' to con
|
||||||
individually. */
|
individually. */
|
||||||
resume_ptid = inferior_ptid;
|
resume_ptid = inferior_ptid;
|
||||||
}
|
}
|
||||||
@ -94,7 +94,7 @@ Index: gdb-7.0.50.20100115/gdb/infrun.c
|
|||||||
{
|
{
|
||||||
/* User-settable 'scheduler' mode requires solo thread resume. */
|
/* User-settable 'scheduler' mode requires solo thread resume. */
|
||||||
resume_ptid = inferior_ptid;
|
resume_ptid = inferior_ptid;
|
||||||
@@ -1709,7 +1712,7 @@ proceed (CORE_ADDR addr, enum target_sig
|
@@ -1889,7 +1892,7 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||||
struct thread_info *tp;
|
struct thread_info *tp;
|
||||||
CORE_ADDR pc;
|
CORE_ADDR pc;
|
||||||
struct address_space *aspace;
|
struct address_space *aspace;
|
||||||
@ -103,7 +103,7 @@ Index: gdb-7.0.50.20100115/gdb/infrun.c
|
|||||||
|
|
||||||
/* If we're stopped at a fork/vfork, follow the branch set by the
|
/* If we're stopped at a fork/vfork, follow the branch set by the
|
||||||
"set follow-fork-mode" command; otherwise, we'll just proceed
|
"set follow-fork-mode" command; otherwise, we'll just proceed
|
||||||
@@ -1744,13 +1747,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
@@ -1924,13 +1927,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||||
actually be executing the breakpoint insn anyway.
|
actually be executing the breakpoint insn anyway.
|
||||||
We'll be (un-)executing the previous instruction. */
|
We'll be (un-)executing the previous instruction. */
|
||||||
|
|
||||||
@ -119,7 +119,7 @@ Index: gdb-7.0.50.20100115/gdb/infrun.c
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1781,13 +1784,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
@@ -1971,13 +1974,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||||
is required it returns TRUE and sets the current thread to
|
is required it returns TRUE and sets the current thread to
|
||||||
the old thread. */
|
the old thread. */
|
||||||
if (prepare_to_proceed (step))
|
if (prepare_to_proceed (step))
|
||||||
@ -135,7 +135,7 @@ Index: gdb-7.0.50.20100115/gdb/infrun.c
|
|||||||
{
|
{
|
||||||
tp->trap_expected = 1;
|
tp->trap_expected = 1;
|
||||||
/* If displaced stepping is enabled, we can step over the
|
/* If displaced stepping is enabled, we can step over the
|
||||||
@@ -1873,8 +1876,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
@@ -2064,8 +2067,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||||
/* Reset to normal state. */
|
/* Reset to normal state. */
|
||||||
init_infwait_state ();
|
init_infwait_state ();
|
||||||
|
|
||||||
@ -150,7 +150,7 @@ Index: gdb-7.0.50.20100115/gdb/infrun.c
|
|||||||
|
|
||||||
/* Wait for it to stop (if not standalone)
|
/* Wait for it to stop (if not standalone)
|
||||||
and in any case decode why it stopped, and act accordingly. */
|
and in any case decode why it stopped, and act accordingly. */
|
||||||
@@ -4655,13 +4663,18 @@ infrun: not switching back to stepped th
|
@@ -4903,13 +4911,18 @@ infrun: not switching back to stepped th
|
||||||
|
|
||||||
/* Is thread TP in the middle of single-stepping? */
|
/* Is thread TP in the middle of single-stepping? */
|
||||||
|
|
||||||
@ -174,11 +174,11 @@ Index: gdb-7.0.50.20100115/gdb/infrun.c
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Returns true if any thread *but* the one passed in "data" is in the
|
/* Returns true if any thread *but* the one passed in "data" is in the
|
||||||
Index: gdb-7.0.50.20100115/gdb/linux-nat.c
|
Index: gdb-7.1.90.20100711/gdb/linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/linux-nat.c 2010-01-15 03:16:43.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/linux-nat.c 2010-07-12 10:00:56.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/linux-nat.c 2010-01-15 03:17:07.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/linux-nat.c 2010-07-12 10:04:25.000000000 +0200
|
||||||
@@ -2883,7 +2883,10 @@ count_events_callback (struct lwp_info *
|
@@ -2827,7 +2827,10 @@ count_events_callback (struct lwp_info *
|
||||||
static int
|
static int
|
||||||
select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
|
select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
|
||||||
{
|
{
|
||||||
@ -190,10 +190,10 @@ Index: gdb-7.0.50.20100115/gdb/linux-nat.c
|
|||||||
return 1;
|
return 1;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
Index: gdb-7.0.50.20100115/gdb/linux-nat.h
|
Index: gdb-7.1.90.20100711/gdb/linux-nat.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/linux-nat.h 2010-01-12 22:40:24.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/linux-nat.h 2010-06-11 14:10:12.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/linux-nat.h 2010-01-15 03:17:07.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/linux-nat.h 2010-07-12 10:04:25.000000000 +0200
|
||||||
@@ -55,8 +55,8 @@ struct lwp_info
|
@@ -55,8 +55,8 @@ struct lwp_info
|
||||||
/* If non-zero, a pending wait status. */
|
/* If non-zero, a pending wait status. */
|
||||||
int status;
|
int status;
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
--- gdb-6.6/gdb/testsuite/gdb.threads/staticthreads.exp-orig 2005-04-30 21:56:47.000000000 +0200
|
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.threads/staticthreads.exp
|
||||||
+++ gdb-6.6/gdb/testsuite/gdb.threads/staticthreads.exp 2008-01-11 14:30:15.000000000 +0100
|
===================================================================
|
||||||
@@ -44,9 +44,21 @@ gdb_load ${binfile}
|
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.threads/staticthreads.exp 2010-06-02 23:53:28.000000000 +0200
|
||||||
gdb_test "set print sevenbit-strings" ""
|
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.threads/staticthreads.exp 2010-07-12 11:43:26.000000000 +0200
|
||||||
|
@@ -44,6 +44,18 @@ gdb_test_no_output "set print sevenbit-s
|
||||||
|
# See if the static multi-threaded program runs.
|
||||||
|
|
||||||
|
runto_main
|
||||||
+runto_main
|
|
||||||
+
|
+
|
||||||
+# See if we get excessive LWP there (patched glibc with unpatched GDB):
|
+# See if we get excessive LWP there (patched glibc with unpatched GDB):
|
||||||
+# * 2 Thread 135661664 (LWP 3856) main () at threadloop.c:41
|
+# * 2 Thread 135661664 (LWP 3856) main () at threadloop.c:41
|
||||||
@ -17,9 +18,6 @@
|
|||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
# See if the static multi-threaded program runs.
|
|
||||||
|
|
||||||
-runto_main
|
|
||||||
gdb_test "break sem_post"
|
gdb_test "break sem_post"
|
||||||
set test "Continue to main's call of sem_post"
|
set test "Continue to main's call of sem_post"
|
||||||
gdb_test_multiple "continue" "$test" {
|
gdb_test_multiple "continue" "$test" {
|
||||||
|
@ -641,7 +641,7 @@ http://sourceware.org/ml/gdb-patches/2007-12/msg00397.html
|
|||||||
+ .section .note.GNU-stack,"",@progbits
|
+ .section .note.GNU-stack,"",@progbits
|
||||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||||
+++ ./gdb/testsuite/gdb.arch/i386-interface.exp 22 Dec 2007 19:07:28 -0000
|
+++ ./gdb/testsuite/gdb.arch/i386-interface.exp 22 Dec 2007 19:07:28 -0000
|
||||||
@@ -0,0 +1,66 @@
|
@@ -0,0 +1,59 @@
|
||||||
+# Copyright 2007 Free Software Foundation, Inc.
|
+# Copyright 2007 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -665,13 +665,6 @@ http://sourceware.org/ml/gdb-patches/2007-12/msg00397.html
|
|||||||
+# Test basis recognization of DW_TAG_interface_type.
|
+# Test basis recognization of DW_TAG_interface_type.
|
||||||
+# GCC java_classify_record() produces it if returns RECORD_IS_INTERFACE.
|
+# GCC java_classify_record() produces it if returns RECORD_IS_INTERFACE.
|
||||||
+
|
+
|
||||||
+if $tracelevel {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+if {![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"]} then {
|
+if {![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"]} then {
|
||||||
+ verbose "Skipping i386 Java DW_TAG_interface_type test."
|
+ verbose "Skipping i386 Java DW_TAG_interface_type test."
|
||||||
+ return
|
+ return
|
||||||
|
@ -52,7 +52,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=224128
|
|||||||
+char_u u_typed[]="A";
|
+char_u u_typed[]="A";
|
||||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||||
+++ ./gdb/testsuite/gdb.base/charsign.exp 26 Jan 2007 10:32:00 -0000
|
+++ ./gdb/testsuite/gdb.base/charsign.exp 26 Jan 2007 10:32:00 -0000
|
||||||
@@ -0,0 +1,70 @@
|
@@ -0,0 +1,63 @@
|
||||||
+# Copyright 2007 Free Software Foundation, Inc.
|
+# Copyright 2007 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -69,13 +69,6 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=224128
|
|||||||
+# along with this program; if not, write to the Free Software
|
+# along with this program; if not, write to the Free Software
|
||||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
+
|
+
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+set testfile charsign
|
+set testfile charsign
|
||||||
+set srcfile ${testfile}.c
|
+set srcfile ${testfile}.c
|
||||||
+set binfile ${objdir}/${subdir}/${testfile}
|
+set binfile ${objdir}/${subdir}/${testfile}
|
||||||
|
@ -39,7 +39,7 @@ http://sourceware.org/ml/gdb-patches/2007-09/msg00228.html
|
|||||||
+}
|
+}
|
||||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||||
+++ ./gdb/testsuite/gdb.arch/ppc-clobbered-registers-O2.exp 3 Nov 2007 22:22:28 -0000
|
+++ ./gdb/testsuite/gdb.arch/ppc-clobbered-registers-O2.exp 3 Nov 2007 22:22:28 -0000
|
||||||
@@ -0,0 +1,61 @@
|
@@ -0,0 +1,54 @@
|
||||||
+# Copyright 2006 Free Software Foundation, Inc.
|
+# Copyright 2006 Free Software Foundation, Inc.
|
||||||
+#
|
+#
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
@ -58,16 +58,9 @@ http://sourceware.org/ml/gdb-patches/2007-09/msg00228.html
|
|||||||
+#
|
+#
|
||||||
+# This file is part of the gdb testsuite.
|
+# This file is part of the gdb testsuite.
|
||||||
+
|
+
|
||||||
+if $tracelevel {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+# Test displaying call clobbered registers in optimized binaries for ppc.
|
+# Test displaying call clobbered registers in optimized binaries for ppc.
|
||||||
+# GDB should not show incorrect values.
|
+# GDB should not show incorrect values.
|
||||||
+
|
+
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
+if ![istarget "powerpc*-*"] then {
|
+if ![istarget "powerpc*-*"] then {
|
||||||
+ verbose "Skipping powerpc* call clobbered registers testing."
|
+ verbose "Skipping powerpc* call clobbered registers testing."
|
||||||
+ return
|
+ return
|
||||||
|
@ -1,68 +0,0 @@
|
|||||||
http://sourceware.org/ml/gdb-patches/2010-03/msg01006.html
|
|
||||||
Subject: [patch or FYI] testsuite: Fix prelink.exp on system w/unprelinked system libs
|
|
||||||
|
|
||||||
Hi,
|
|
||||||
|
|
||||||
this is a more conservative variant superseded by:
|
|
||||||
[patch 4/6] testsuite: Unify to lib/prelink-support.exp
|
|
||||||
http://sourceware.org/ml/gdb-patches/2010-03/msg01002.html
|
|
||||||
where gdb.base/prelink.exp is reworked on generic lib/prelink-support.exp.
|
|
||||||
|
|
||||||
I prefer the [patch 4/6] over this patch but this mail can serve also as an
|
|
||||||
illustration of the current problem.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
If your system for some reason currently does not have all the libraries
|
|
||||||
prelinked gdb.base/prelink.exp will get UNRESOLVED randomly also affecting
|
|
||||||
testsuite results diff.
|
|
||||||
|
|
||||||
Apparently the testcase already tried to avoid any system libraries
|
|
||||||
dependencies by "-nodefaultlibs". But currently it does has not worked that
|
|
||||||
way.
|
|
||||||
|
|
||||||
"-lm" is contained already even in dejagnu's default_target_compile (not just
|
|
||||||
in gdb/testsuite/lib/ada.exp). But I do not know why it is there and which
|
|
||||||
systems would get broken by some global gdb/testsuite/ "-lm" removal.
|
|
||||||
|
|
||||||
|
|
||||||
Thanks,
|
|
||||||
Jan
|
|
||||||
|
|
||||||
|
|
||||||
2010-03-29 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
Fix testcase false UNRESOLVED if system libraries are not prelinked.
|
|
||||||
* gdb.base/prelink.exp: New variables compile, board, err and mathlib.
|
|
||||||
Set clear board mathlib for ${libfile} compilation.
|
|
||||||
|
|
||||||
--- a/gdb/testsuite/gdb.base/prelink.exp
|
|
||||||
+++ b/gdb/testsuite/gdb.base/prelink.exp
|
|
||||||
@@ -42,7 +42,25 @@ set testfile "prelink"
|
|
||||||
|
|
||||||
set libsrcfile ${testfile}-lib.c
|
|
||||||
set libfile ${objdir}/${subdir}/${testfile}.so
|
|
||||||
-if { [gdb_compile "${srcdir}/${subdir}/${libsrcfile}" "${libfile}" executable [list debug "additional_flags=-fpic -shared -nodefaultlibs"]] != ""} {
|
|
||||||
+
|
|
||||||
+# default_target_compile would otherwise add "-lm" making the testcase
|
|
||||||
+# dependent on whether the system libraries are already prelinked.
|
|
||||||
+# prelink: Could not set /lib64/libm-2.11.1.so owner or mode: Operation not permitted
|
|
||||||
+set compile {
|
|
||||||
+ gdb_compile "${srcdir}/${subdir}/${libsrcfile}" "${libfile}" executable [list debug "additional_flags=-fpic -shared -nodefaultlibs"]
|
|
||||||
+}
|
|
||||||
+set board [target_info name]
|
|
||||||
+if [board_info $board exists mathlib] {
|
|
||||||
+ set mathlib [board_info $dest mathlib]
|
|
||||||
+ set_board_info mathlib ""
|
|
||||||
+ set err [eval $compile]
|
|
||||||
+ set_board_info mathlib $mathlib
|
|
||||||
+} else {
|
|
||||||
+ set_board_info mathlib ""
|
|
||||||
+ set err [eval $compile]
|
|
||||||
+ unset_board_info mathlib
|
|
||||||
+}
|
|
||||||
+if {$err != ""} {
|
|
||||||
# If creating the shared library fails, maybe we don't have the right tools
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
|
|
@ -20,8 +20,10 @@ random FAIL: gdb.base/auxv.exp: matching auxv data from live and gcore
|
|||||||
gdb-6.8.50.20090209/gdb/testsuite/gdb.base/annota1.exp:
|
gdb-6.8.50.20090209/gdb/testsuite/gdb.base/annota1.exp:
|
||||||
frames-invalid can happen asynchronously.
|
frames-invalid can happen asynchronously.
|
||||||
|
|
||||||
--- ./gdb/testsuite/gdb.base/fileio.c 13 Jun 2006 08:55:22 -0000 1.10
|
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.base/fileio.c
|
||||||
+++ ./gdb/testsuite/gdb.base/fileio.c 8 Dec 2007 16:04:10 -0000
|
===================================================================
|
||||||
|
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.base/fileio.c 2009-10-01 17:39:13.000000000 +0200
|
||||||
|
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.base/fileio.c 2010-07-12 11:41:43.000000000 +0200
|
||||||
@@ -58,6 +58,8 @@ system (const char * string);
|
@@ -58,6 +58,8 @@ system (const char * string);
|
||||||
1) Invalid string/command. - returns 127. */
|
1) Invalid string/command. - returns 127. */
|
||||||
static const char *strerrno (int err);
|
static const char *strerrno (int err);
|
||||||
@ -69,9 +71,11 @@ frames-invalid can happen asynchronously.
|
|||||||
/* Don't change the order of the calls. They partly depend on each other */
|
/* Don't change the order of the calls. They partly depend on each other */
|
||||||
test_open ();
|
test_open ();
|
||||||
test_write ();
|
test_write ();
|
||||||
--- ./gdb/testsuite/gdb.base/fileio.exp 23 Aug 2007 18:14:16 -0000 1.12
|
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.base/fileio.exp
|
||||||
+++ ./gdb/testsuite/gdb.base/fileio.exp 8 Dec 2007 16:04:10 -0000
|
===================================================================
|
||||||
@@ -46,8 +46,8 @@ if [get_compiler_info ${binfile}] {
|
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.base/fileio.exp 2010-06-09 00:58:03.000000000 +0200
|
||||||
|
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.base/fileio.exp 2010-07-12 11:42:07.000000000 +0200
|
||||||
|
@@ -42,8 +42,8 @@ if [get_compiler_info ${binfile}] {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,16 +86,16 @@ frames-invalid can happen asynchronously.
|
|||||||
|
|
||||||
set oldtimeout $timeout
|
set oldtimeout $timeout
|
||||||
set timeout [expr "$timeout + 60"]
|
set timeout [expr "$timeout + 60"]
|
||||||
@@ -88,7 +88,7 @@ gdb_test continue \
|
@@ -85,7 +85,7 @@ gdb_test continue \
|
||||||
"Opening nonexistant file returns ENOENT"
|
|
||||||
|
gdb_test "continue" ".*" ""
|
||||||
|
|
||||||
send_gdb "continue\n" ; gdb_expect -re "$gdb_prompt $"
|
|
||||||
-catch "system \"chmod -f -w nowrt.fileio.test\""
|
-catch "system \"chmod -f -w nowrt.fileio.test\""
|
||||||
+catch "system \"chmod -f -w fileio.dir/nowrt.fileio.test\""
|
+catch "system \"chmod -f -w fileio.dir/nowrt.fileio.test\""
|
||||||
|
|
||||||
gdb_test continue \
|
gdb_test continue \
|
||||||
"Continuing\\..*open 5:.*EACCES$stop_msg" \
|
"Continuing\\..*open 5:.*EACCES$stop_msg" \
|
||||||
@@ -252,8 +252,8 @@ gdb_test continue \
|
@@ -250,8 +250,8 @@ gdb_test continue \
|
||||||
send_gdb "quit\n"
|
send_gdb "quit\n"
|
||||||
send_gdb "y\n"
|
send_gdb "y\n"
|
||||||
|
|
||||||
|
@ -1,146 +1,118 @@
|
|||||||
Index: gdb-7.1/bfd/elf-bfd.h
|
Index: gdb-7.1.90.20100711/bfd/elf-bfd.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.1.orig/bfd/elf-bfd.h 2010-02-09 13:14:42.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/bfd/elf-bfd.h 2010-06-27 06:07:51.000000000 +0200
|
||||||
+++ gdb-7.1/bfd/elf-bfd.h 2010-05-16 20:22:38.000000000 +0200
|
+++ gdb-7.1.90.20100711/bfd/elf-bfd.h 2010-07-12 23:00:04.000000000 +0200
|
||||||
@@ -2160,7 +2160,7 @@ extern Elf_Internal_Phdr * _bfd_elf_find
|
@@ -2171,8 +2171,9 @@ extern Elf_Internal_Phdr * _bfd_elf_find
|
||||||
|
/* Exported interface for writing elf corefile notes. */
|
||||||
extern char *elfcore_write_note
|
extern char *elfcore_write_note
|
||||||
(bfd *, char *, int *, const char *, int, const void *, int);
|
(bfd *, char *, int *, const char *, int, const void *, int);
|
||||||
|
+#include <sys/procfs.h>
|
||||||
extern char *elfcore_write_prpsinfo
|
extern char *elfcore_write_prpsinfo
|
||||||
- (bfd *, char *, int *, const char *, const char *);
|
- (bfd *, char *, int *, const char *, const char *);
|
||||||
+ (bfd *, char *, int *, void *, const char *, const char *);
|
+ (bfd *, char *, int *, const prpsinfo_t *);
|
||||||
extern char *elfcore_write_prstatus
|
extern char *elfcore_write_prstatus
|
||||||
(bfd *, char *, int *, long, int, const void *);
|
(bfd *, char *, int *, long, int, const void *);
|
||||||
extern char * elfcore_write_pstatus
|
extern char * elfcore_write_pstatus
|
||||||
Index: gdb-7.1/bfd/elf.c
|
Index: gdb-7.1.90.20100711/bfd/elf.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.1.orig/bfd/elf.c 2010-02-18 01:09:06.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/bfd/elf.c 2010-05-18 05:31:05.000000000 +0200
|
||||||
+++ gdb-7.1/bfd/elf.c 2010-05-16 20:25:15.000000000 +0200
|
+++ gdb-7.1.90.20100711/bfd/elf.c 2010-07-12 22:51:17.000000000 +0200
|
||||||
@@ -8545,6 +8545,7 @@ char *
|
@@ -8582,13 +8582,12 @@ elfcore_write_note (bfd *abfd,
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
-#if defined (HAVE_PRPSINFO_T) || defined (HAVE_PSINFO_T)
|
||||||
|
+#if defined (HAVE_PRPSINFO_T)
|
||||||
|
char *
|
||||||
elfcore_write_prpsinfo (bfd *abfd,
|
elfcore_write_prpsinfo (bfd *abfd,
|
||||||
char *buf,
|
char *buf,
|
||||||
int *bufsiz,
|
int *bufsiz,
|
||||||
+ void *info,
|
- const char *fname,
|
||||||
const char *fname,
|
- const char *psargs)
|
||||||
const char *psargs)
|
+ const prpsinfo_t *input)
|
||||||
{
|
{
|
||||||
@@ -8571,26 +8572,40 @@ elfcore_write_prpsinfo (bfd *abfd,
|
const char *note_name = "CORE";
|
||||||
int note_type = NT_PRPSINFO;
|
const struct elf_backend_data *bed = get_elf_backend_data (abfd);
|
||||||
#endif
|
@@ -8596,48 +8595,55 @@ elfcore_write_prpsinfo (bfd *abfd,
|
||||||
|
if (bed->elf_backend_write_core_note != NULL)
|
||||||
|
{
|
||||||
|
char *ret;
|
||||||
|
+ char fname[sizeof (input->pr_fname) + 1];
|
||||||
|
+ char psargs[sizeof (input->pr_psargs) + 1];
|
||||||
|
+
|
||||||
|
+ strncpy (fname, input->pr_fname, sizeof (input->pr_fname));
|
||||||
|
+ fname[sizeof (input->pr_fname)] = 0;
|
||||||
|
+ strncpy (psargs, input->pr_psargs, sizeof (input->pr_psargs));
|
||||||
|
+ psargs[sizeof (input->pr_psargs)] = 0;
|
||||||
|
+
|
||||||
|
ret = (*bed->elf_backend_write_core_note) (abfd, buf, bufsiz,
|
||||||
|
NT_PRPSINFO, fname, psargs);
|
||||||
|
if (ret != NULL)
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
- memset (&data, 0, sizeof (data));
|
-#if defined (HAVE_PRPSINFO32_T) || defined (HAVE_PSINFO32_T)
|
||||||
|
+#if defined (HAVE_PRPSINFO32_T)
|
||||||
|
if (bed->s->elfclass == ELFCLASS32)
|
||||||
|
{
|
||||||
|
-#if defined (HAVE_PSINFO32_T)
|
||||||
|
- psinfo32_t data;
|
||||||
|
- int note_type = NT_PSINFO;
|
||||||
|
-#else
|
||||||
|
prpsinfo32_t data;
|
||||||
|
int note_type = NT_PRPSINFO;
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
memset (&data, 0, sizeof (data));
|
||||||
- strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
|
- strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
|
||||||
- strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
|
- strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
|
||||||
+ if (info)
|
+ data.pr_state = input->pr_state;
|
||||||
+ memcpy (&data, info, sizeof (data));
|
+ data.pr_sname = input->pr_sname;
|
||||||
+ else
|
+ data.pr_zomb = input->pr_zomb;
|
||||||
+ {
|
+ data.pr_nice = input->pr_nice;
|
||||||
+ memset (&data, 0, sizeof (data));
|
+ data.pr_flag = input->pr_flag;
|
||||||
+ strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
|
+ data.pr_uid = input->pr_uid;
|
||||||
+ strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
|
+ data.pr_gid = input->pr_gid;
|
||||||
+ }
|
+ data.pr_pid = input->pr_pid;
|
||||||
+
|
+ data.pr_ppid = input->pr_ppid;
|
||||||
|
+ data.pr_pgrp = input->pr_pgrp;
|
||||||
|
+ data.pr_sid = input->pr_sid;
|
||||||
|
+ BFD_ASSERT (sizeof (data.pr_fname) == sizeof (input->pr_fname));
|
||||||
|
+ memcpy (data.pr_fname, input->pr_fname, sizeof (data.pr_fname));
|
||||||
|
+ BFD_ASSERT (sizeof (data.pr_psargs) == sizeof (input->pr_psargs));
|
||||||
|
+ memcpy (data.pr_psargs, input->pr_psargs, sizeof (data.pr_psargs));
|
||||||
return elfcore_write_note (abfd, buf, bufsiz,
|
return elfcore_write_note (abfd, buf, bufsiz,
|
||||||
note_name, note_type, &data, sizeof (data));
|
note_name, note_type, &data, sizeof (data));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
+/* gdb-6.8-bz254229-gcore-prpsinfo.patch misapplication glue. */
|
-#if defined (HAVE_PSINFO_T)
|
||||||
#if defined (HAVE_PSINFO_T)
|
- psinfo_t data;
|
||||||
psinfo_t data;
|
- int note_type = NT_PSINFO;
|
||||||
+/* gdb-6.8-bz254229-gcore-prpsinfo.patch misapplication glue. */
|
-#else
|
||||||
int note_type = NT_PSINFO;
|
- prpsinfo_t data;
|
||||||
#else
|
|
||||||
prpsinfo_t data;
|
|
||||||
int note_type = NT_PRPSINFO;
|
int note_type = NT_PRPSINFO;
|
||||||
#endif
|
-#endif
|
||||||
|
|
||||||
- memset (&data, 0, sizeof (data));
|
- memset (&data, 0, sizeof (data));
|
||||||
- strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
|
- strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
|
||||||
- strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
|
- strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
|
||||||
+ if (info)
|
|
||||||
+ memcpy (&data, info, sizeof (data));
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ memset (&data, 0, sizeof (data));
|
|
||||||
+ strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
|
|
||||||
+ strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
return elfcore_write_note (abfd, buf, bufsiz,
|
return elfcore_write_note (abfd, buf, bufsiz,
|
||||||
note_name, note_type, &data, sizeof (data));
|
- note_name, note_type, &data, sizeof (data));
|
||||||
|
+ note_name, note_type, input, sizeof (*input));
|
||||||
}
|
}
|
||||||
Index: gdb-7.1/gdb/amd64-linux-nat.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/amd64-linux-nat.c 2010-05-16 20:22:38.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/amd64-linux-nat.c 2010-05-16 20:22:38.000000000 +0200
|
|
||||||
@@ -140,6 +140,7 @@ static int amd64_linux_gregset32_reg_off
|
|
||||||
|
|
||||||
static char *
|
|
||||||
amd64_linux_elfcore_write_prpsinfo (bfd *abfd, char *buf, int *bufsiz,
|
|
||||||
+ void *info,
|
|
||||||
const char *fname, const char *psargs)
|
|
||||||
{
|
|
||||||
if (gdbarch_ptr_bit (target_gdbarch) == 32)
|
|
||||||
@@ -149,14 +150,20 @@ amd64_linux_elfcore_write_prpsinfo (bfd
|
|
||||||
struct elf_prpsinfo32 data;
|
|
||||||
note_type = NT_PRPSINFO;
|
|
||||||
|
|
||||||
- memset (&data, 0, sizeof (data));
|
|
||||||
- strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
|
|
||||||
- strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
|
|
||||||
+ if (info)
|
|
||||||
+ memcpy (&data, info, sizeof (data));
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ memset (&data, 0, sizeof (data));
|
|
||||||
+ strncpy (data.pr_fname, fname, sizeof (data.pr_fname));
|
|
||||||
+ strncpy (data.pr_psargs, psargs, sizeof (data.pr_psargs));
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
return elfcore_write_note (abfd, buf, bufsiz,
|
|
||||||
note_name, note_type, &data, sizeof (data));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- return elfcore_write_prpsinfo (abfd, buf, bufsiz, fname, psargs);
|
|
||||||
+ return elfcore_write_prpsinfo (abfd, buf, bufsiz, info, fname, psargs);
|
|
||||||
}
|
}
|
||||||
|
-#endif /* PSINFO_T or PRPSINFO_T */
|
||||||
|
+#endif /* PRPSINFO_T */
|
||||||
|
|
||||||
static void
|
#if defined (HAVE_PRSTATUS_T)
|
||||||
Index: gdb-7.1/gdb/fbsd-nat.c
|
char *
|
||||||
|
Index: gdb-7.1.90.20100711/gdb/linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.1.orig/gdb/fbsd-nat.c 2010-01-01 08:31:31.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/linux-nat.c 2010-07-12 23:05:22.000000000 +0200
|
||||||
+++ gdb-7.1/gdb/fbsd-nat.c 2010-05-16 20:22:38.000000000 +0200
|
+++ gdb-7.1.90.20100711/gdb/linux-nat.c 2010-07-12 22:57:34.000000000 +0200
|
||||||
@@ -211,6 +211,7 @@ fbsd_make_corefile_notes (bfd *obfd, int
|
@@ -4466,6 +4466,131 @@ linux_spu_make_corefile_notes (bfd *obfd
|
||||||
psargs = reconcat (psargs, psargs, " ", get_inferior_args (), NULL);
|
|
||||||
|
|
||||||
note_data = elfcore_write_prpsinfo (obfd, note_data, note_size,
|
|
||||||
+ NULL,
|
|
||||||
fname, psargs);
|
|
||||||
}
|
|
||||||
|
|
||||||
Index: gdb-7.1/gdb/linux-nat.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/linux-nat.c 2010-05-16 20:22:38.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/linux-nat.c 2010-05-16 20:22:38.000000000 +0200
|
|
||||||
@@ -56,6 +56,7 @@
|
|
||||||
#include "terminal.h"
|
|
||||||
#include <sys/vfs.h>
|
|
||||||
#include "solib.h"
|
|
||||||
+#include "gdb_procfs32.h" /* for struct elf_prpsinfo32 */
|
|
||||||
|
|
||||||
#ifndef SPUFS_MAGIC
|
|
||||||
#define SPUFS_MAGIC 0x23c9b64e
|
|
||||||
@@ -228,7 +229,7 @@ static LONGEST (*super_xfer_partial) (st
|
|
||||||
/* This functions make elfcore note sections.
|
|
||||||
They may get overriden by code adjusting data for multi-target builds. */
|
|
||||||
char *(*linux_elfcore_write_prpsinfo)
|
|
||||||
- (bfd *, char *, int *, const char *, const char *) = elfcore_write_prpsinfo;
|
|
||||||
+ (bfd *, char *, int *, void *, const char *, const char *) = elfcore_write_prpsinfo;
|
|
||||||
char *(*linux_elfcore_write_prstatus)
|
|
||||||
(bfd *, char *, int *, long, int, const void *) = elfcore_write_prstatus;
|
|
||||||
static char *
|
|
||||||
@@ -4507,6 +4508,159 @@ linux_spu_make_corefile_notes (bfd *obfd
|
|
||||||
return args.note_data;
|
return args.note_data;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,7 +125,7 @@ Index: gdb-7.1/gdb/linux-nat.c
|
|||||||
+ binfmt_elf.c. Unknown values are filled with zeroes. The structure is
|
+ binfmt_elf.c. Unknown values are filled with zeroes. The structure is
|
||||||
+ malloced. */
|
+ malloced. */
|
||||||
+
|
+
|
||||||
+static void*
|
+static const prpsinfo_t *
|
||||||
+fill_prpsinfo (void)
|
+fill_prpsinfo (void)
|
||||||
+{
|
+{
|
||||||
+ struct stat sb;
|
+ struct stat sb;
|
||||||
@ -173,6 +145,7 @@ Index: gdb-7.1/gdb/linux-nat.c
|
|||||||
+ obsolete there to <linux/sched.h> TASK_* constants. */
|
+ obsolete there to <linux/sched.h> TASK_* constants. */
|
||||||
+ const char state_string[] = "RSDTZW";
|
+ const char state_string[] = "RSDTZW";
|
||||||
+ int state_num;
|
+ int state_num;
|
||||||
|
+ static prpsinfo_t retval;
|
||||||
+
|
+
|
||||||
+ /* Get /proc/$PID/stat. */
|
+ /* Get /proc/$PID/stat. */
|
||||||
+ pid = ptid_get_pid (inferior_ptid);
|
+ pid = ptid_get_pid (inferior_ptid);
|
||||||
@ -249,108 +222,63 @@ Index: gdb-7.1/gdb/linux-nat.c
|
|||||||
+ state_num = 0;
|
+ state_num = 0;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+#if ULONG_MAX > 0xffffffffU
|
+ memset (&retval, 0, sizeof (retval));
|
||||||
+ /* We skip this code on 32-bit gdb. */
|
+ retval.pr_state = state_num;
|
||||||
+ if (gdbarch_ptr_bit (target_gdbarch) == 64)
|
+ retval.pr_sname = proc_state[0];
|
||||||
+ {
|
+ retval.pr_zomb = (proc_state[0] == 'Z');
|
||||||
+ struct elf_prpsinfo *info = xzalloc (sizeof (*info));
|
+ retval.pr_nice = proc_nice;
|
||||||
|
+ retval.pr_flag = flags;
|
||||||
|
+ retval.pr_uid = sb.st_uid;
|
||||||
|
+ retval.pr_gid = sb.st_gid;
|
||||||
|
+ retval.pr_pid = pid;
|
||||||
|
+ retval.pr_ppid = proc_ppid;
|
||||||
|
+ retval.pr_pgrp = proc_pgid;
|
||||||
|
+ retval.pr_sid = proc_sid;
|
||||||
|
+ strncpy (retval.pr_fname, proc_comm, sizeof (retval.pr_fname));
|
||||||
|
+ strncpy (retval.pr_psargs, proc_cmdline, sizeof (retval.pr_psargs));
|
||||||
+
|
+
|
||||||
+ info->pr_state = state_num;
|
+ return &retval;
|
||||||
+ info->pr_sname = proc_state[0];
|
|
||||||
+ info->pr_zomb = (proc_state[0] == 'Z');
|
|
||||||
+ info->pr_nice = proc_nice;
|
|
||||||
+ info->pr_flag = flags;
|
|
||||||
+ info->pr_uid = sb.st_uid;
|
|
||||||
+ info->pr_gid = sb.st_gid;
|
|
||||||
+ info->pr_pid = pid;
|
|
||||||
+ info->pr_ppid = proc_ppid;
|
|
||||||
+ info->pr_pgrp = proc_pgid;
|
|
||||||
+ info->pr_sid = proc_sid;
|
|
||||||
+ strncpy (info->pr_fname, proc_comm, sizeof (info->pr_fname));
|
|
||||||
+ strncpy (info->pr_psargs, proc_cmdline, sizeof (info->pr_psargs));
|
|
||||||
+
|
|
||||||
+ return info;
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+ if (gdbarch_ptr_bit (target_gdbarch) == 32)
|
|
||||||
+ {
|
|
||||||
+ struct elf_prpsinfo32 *info = xzalloc (sizeof (*info));
|
|
||||||
+
|
|
||||||
+ info->pr_state = state_num;
|
|
||||||
+ info->pr_sname = proc_state[0];
|
|
||||||
+ info->pr_zomb = (proc_state[0] == 'Z');
|
|
||||||
+ info->pr_nice = proc_nice;
|
|
||||||
+ info->pr_flag = flags;
|
|
||||||
+ info->pr_uid = sb.st_uid;
|
|
||||||
+ info->pr_gid = sb.st_gid;
|
|
||||||
+ info->pr_pid = pid;
|
|
||||||
+ info->pr_ppid = proc_ppid;
|
|
||||||
+ info->pr_pgrp = proc_pgid;
|
|
||||||
+ info->pr_sid = proc_sid;
|
|
||||||
+ strncpy (info->pr_fname, proc_comm, sizeof (info->pr_fname));
|
|
||||||
+ strncpy (info->pr_psargs, proc_cmdline, sizeof (info->pr_psargs));
|
|
||||||
+
|
|
||||||
+ return info;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return NULL;
|
|
||||||
+}
|
+}
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
/* Fills the "to_make_corefile_note" target vector. Builds the note
|
/* Fills the "to_make_corefile_note" target vector. Builds the note
|
||||||
section for a corefile, and returns it in a malloc buffer. */
|
section for a corefile, and returns it in a malloc buffer. */
|
||||||
|
|
||||||
@@ -4527,8 +4681,14 @@ linux_nat_make_corefile_notes (bfd *obfd
|
@@ -4484,26 +4609,11 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||||
|
|
||||||
if (get_exec_file (0))
|
if (get_exec_file (0))
|
||||||
{
|
{
|
||||||
+#if defined (HAVE_PRPSINFO_T)
|
- strncpy (fname, strrchr (get_exec_file (0), '/') + 1, sizeof (fname));
|
||||||
+ void *data = fill_prpsinfo ();
|
- strncpy (psargs, get_exec_file (0), sizeof (psargs));
|
||||||
+#define DATAPTR data
|
- if (get_inferior_args ())
|
||||||
+#else
|
- {
|
||||||
+#define DATAPTR NULL
|
- char *string_end;
|
||||||
strncpy (fname, strrchr (get_exec_file (0), '/') + 1, sizeof (fname));
|
- char *psargs_end = psargs + sizeof (psargs);
|
||||||
strncpy (psargs, get_exec_file (0), sizeof (psargs));
|
-
|
||||||
+#endif
|
- /* linux_elfcore_write_prpsinfo () handles zero unterminated
|
||||||
if (get_inferior_args ())
|
- strings fine. */
|
||||||
{
|
- string_end = memchr (psargs, 0, sizeof (psargs));
|
||||||
char *string_end;
|
- if (string_end != NULL)
|
||||||
@@ -4544,9 +4704,15 @@ linux_nat_make_corefile_notes (bfd *obfd
|
- {
|
||||||
psargs_end - string_end);
|
- *string_end++ = ' ';
|
||||||
}
|
- strncpy (string_end, get_inferior_args (),
|
||||||
}
|
- psargs_end - string_end);
|
||||||
- note_data = (char *) linux_elfcore_write_prpsinfo (obfd, note_data,
|
- }
|
||||||
- note_size, fname,
|
- }
|
||||||
+ note_data = (char *) linux_elfcore_write_prpsinfo (obfd,
|
+ const prpsinfo_t *data = fill_prpsinfo ();
|
||||||
+ note_data, note_size,
|
+
|
||||||
+ DATAPTR,
|
note_data = (char *) elfcore_write_prpsinfo (obfd,
|
||||||
+ fname,
|
note_data,
|
||||||
psargs);
|
- note_size, fname, psargs);
|
||||||
+#if defined (HAVE_PRPSINFO_T)
|
+ note_size, data);
|
||||||
+ xfree (DATAPTR);
|
|
||||||
+#endif
|
|
||||||
+#undef DATAPTR
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dump information for threads. */
|
/* Dump information for threads. */
|
||||||
Index: gdb-7.1/gdb/linux-nat.h
|
Index: gdb-7.1.90.20100711/gdb/procfs.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.1.orig/gdb/linux-nat.h 2010-05-16 20:22:37.000000000 +0200
|
--- gdb-7.1.90.20100711.orig/gdb/procfs.c 2010-07-07 18:15:16.000000000 +0200
|
||||||
+++ gdb-7.1/gdb/linux-nat.h 2010-05-16 20:22:38.000000000 +0200
|
+++ gdb-7.1.90.20100711/gdb/procfs.c 2010-07-12 23:05:23.000000000 +0200
|
||||||
@@ -173,7 +173,7 @@ int linux_nat_core_of_thread_1 (ptid_t p
|
@@ -5770,6 +5770,7 @@ procfs_make_note_section (bfd *obfd, int
|
||||||
/* These functions make elfcore note sections.
|
|
||||||
They may get overriden by code adjusting data for multi-target builds. */
|
|
||||||
extern char *(*linux_elfcore_write_prpsinfo)
|
|
||||||
- (bfd *, char *, int *, const char *, const char *);
|
|
||||||
+ (bfd *, char *, int *, void *, const char *, const char *);
|
|
||||||
extern char *(*linux_elfcore_write_prstatus)
|
|
||||||
(bfd *, char *, int *, long, int, const void *);
|
|
||||||
extern char *(*linux_elfcore_write_prfpreg)
|
|
||||||
Index: gdb-7.1/gdb/procfs.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/procfs.c 2010-02-15 18:35:49.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/procfs.c 2010-05-16 20:22:38.000000000 +0200
|
|
||||||
@@ -6184,6 +6184,7 @@ procfs_make_note_section (bfd *obfd, int
|
|
||||||
note_data = (char *) elfcore_write_prpsinfo (obfd,
|
note_data = (char *) elfcore_write_prpsinfo (obfd,
|
||||||
note_data,
|
note_data,
|
||||||
note_size,
|
note_size,
|
||||||
|
@ -1,20 +1,5 @@
|
|||||||
Fix resolving of variables at locations lists in prelinked libs (BZ 466901).
|
Fix resolving of variables at locations lists in prelinked libs (BZ 466901).
|
||||||
|
|
||||||
Index: gdb-6.8.50.20090909/gdb/dwarf2loc.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.50.20090909.orig/gdb/dwarf2loc.c 2009-09-09 20:08:03.000000000 +0200
|
|
||||||
+++ gdb-6.8.50.20090909/gdb/dwarf2loc.c 2009-09-09 20:10:35.000000000 +0200
|
|
||||||
@@ -56,7 +56,9 @@ find_location_expression (struct dwarf2_
|
|
||||||
CORE_ADDR low, high;
|
|
||||||
gdb_byte *loc_ptr, *buf_end;
|
|
||||||
int length;
|
|
||||||
- struct objfile *objfile = dwarf2_per_cu_objfile (baton->per_cu);
|
|
||||||
+ struct objfile *objfile1 = dwarf2_per_cu_objfile (baton->per_cu);
|
|
||||||
+ struct objfile *objfile = objfile1->separate_debug_objfile
|
|
||||||
+ ? objfile1->separate_debug_objfile : objfile1;
|
|
||||||
struct gdbarch *gdbarch = get_objfile_arch (objfile);
|
|
||||||
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
|
|
||||||
unsigned int addr_size = dwarf2_per_cu_addr_size (baton->per_cu);
|
|
||||||
Index: gdb-6.8.50.20090909/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp
|
Index: gdb-6.8.50.20090909/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
@ -1,236 +0,0 @@
|
|||||||
2008-07-10 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* breakpoint.c (fetch_watchpoint_value): New comment on unreachable
|
|
||||||
values.
|
|
||||||
(watch_command_1): New variable VAL_CHAIN. Refuse constant watchpoints.
|
|
||||||
* gdbtypes.h (TYPE_CODE_FUNC): New comment regarding pointers to it.
|
|
||||||
|
|
||||||
2008-07-10 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* gdb.texinfo (Set Watchpoints): Document constant value watchpoints.
|
|
||||||
|
|
||||||
2008-07-10 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* gdb.base/watchpoint.exp: Call TEST_CONSTANT_WATCHPOINT.
|
|
||||||
(test_constant_watchpoint): New function.
|
|
||||||
(test_inaccessible_watchpoint): Cleanup (delete) the watchpoint.
|
|
||||||
Test also a double-indirection watchpoint.
|
|
||||||
gdb.base/watchpoint.c (global_ptr_ptr): New variable.
|
|
||||||
(func4): New testing code for GLOBAL_PTR_PTR.
|
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/breakpoint.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/breakpoint.c 2010-01-15 11:46:29.000000000 +0100
|
|
||||||
+++ gdb-7.0.50.20100115/gdb/breakpoint.c 2010-01-15 11:49:49.000000000 +0100
|
|
||||||
@@ -947,7 +947,15 @@ is_hardware_watchpoint (struct breakpoin
|
|
||||||
If VAL_CHAIN is non-NULL, *VAL_CHAIN will be released from the
|
|
||||||
value chain. The caller must free the values individually. If
|
|
||||||
VAL_CHAIN is NULL, all generated values will be left on the value
|
|
||||||
- chain. */
|
|
||||||
+ chain.
|
|
||||||
+
|
|
||||||
+ Inferior unreachable values return:
|
|
||||||
+ Inferior `int *intp = NULL;' with `watch *intp':
|
|
||||||
+ *VALP is NULL, *RESULTP contains lazy LVAL_MEMORY address 0, *VAL_CHAIN
|
|
||||||
+ contains the *RESULTP element and also INTP as LVAL_MEMORY.
|
|
||||||
+ Inferior `int **intpp = NULL;' with `watch **intpp':
|
|
||||||
+ *VALP is NULL, *RESULTP is NULL, *VAL_CHAIN contains lazy LVAL_MEMORY
|
|
||||||
+ address 0 and also INTPP as LVAL_MEMORY. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
fetch_watchpoint_value (struct expression *exp, struct value **valp,
|
|
||||||
@@ -7264,7 +7272,7 @@ watch_command_1 (char *arg, int accessfl
|
|
||||||
struct breakpoint *b, *scope_breakpoint = NULL;
|
|
||||||
struct expression *exp;
|
|
||||||
struct block *exp_valid_block;
|
|
||||||
- struct value *val, *mark;
|
|
||||||
+ struct value *val, *mark, *val_chain;
|
|
||||||
struct frame_info *frame;
|
|
||||||
char *exp_start = NULL;
|
|
||||||
char *exp_end = NULL;
|
|
||||||
@@ -7352,6 +7360,27 @@ watch_command_1 (char *arg, int accessfl
|
|
||||||
exp_valid_block = innermost_block;
|
|
||||||
mark = value_mark ();
|
|
||||||
fetch_watchpoint_value (exp, &val, NULL, NULL);
|
|
||||||
+
|
|
||||||
+ /* VALUE_MARK gets us the same value as FETCH_WATCHPOINT_VALUE's VAL_CHAIN
|
|
||||||
+ parameter. Just this way we do not have to VALUE_FREE the chained VALUEs
|
|
||||||
+ ourselves. */
|
|
||||||
+ for (val_chain = value_mark ();
|
|
||||||
+ val_chain != mark;
|
|
||||||
+ val_chain = value_next (val_chain))
|
|
||||||
+ if ((VALUE_LVAL (val_chain) == lval_memory
|
|
||||||
+ && TYPE_CODE (value_type (val_chain)) != TYPE_CODE_FUNC)
|
|
||||||
+ || VALUE_LVAL (val_chain) == lval_register)
|
|
||||||
+ break;
|
|
||||||
+ if (val_chain == mark)
|
|
||||||
+ {
|
|
||||||
+ int len;
|
|
||||||
+
|
|
||||||
+ len = exp_end - exp_start;
|
|
||||||
+ while (len > 0 && isspace (exp_start[len - 1]))
|
|
||||||
+ len--;
|
|
||||||
+ error (_("Cannot watch constant value %.*s."), len, exp_start);
|
|
||||||
+ }
|
|
||||||
+ /* Break the values chain only after its check above. */
|
|
||||||
if (val != NULL)
|
|
||||||
release_value (val);
|
|
||||||
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/gdbtypes.h
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/gdbtypes.h 2010-01-15 03:22:31.000000000 +0100
|
|
||||||
+++ gdb-7.0.50.20100115/gdb/gdbtypes.h 2010-01-15 11:49:26.000000000 +0100
|
|
||||||
@@ -72,7 +72,22 @@ enum type_code
|
|
||||||
TYPE_CODE_UNION, /* C union or Pascal variant part */
|
|
||||||
TYPE_CODE_ENUM, /* Enumeration type */
|
|
||||||
TYPE_CODE_FLAGS, /* Bit flags type */
|
|
||||||
- TYPE_CODE_FUNC, /* Function type */
|
|
||||||
+
|
|
||||||
+ /* Function type. It is not a pointer to a function. Function reference
|
|
||||||
+ by its name (such as `printf') has this type. C automatically converts
|
|
||||||
+ this function type to a pointer to function for any operation except
|
|
||||||
+ `sizeof (function_type)' or `&function_type' (unary &).
|
|
||||||
+ `sizeof (function_type)' is undefined in C. But GCC provides extension
|
|
||||||
+ (info '(gcc)Pointer Arith') defining its size as 1 byte. DWARF does not
|
|
||||||
+ define its size but GDB defines the size the GCC compatible way - GDB
|
|
||||||
+ function MAKE_FUNCTION_TYPE. The address itself is not modifiable.
|
|
||||||
+ As the function type has size 1 but its real value has `sizeof
|
|
||||||
+ (CORE_ADDR)' we cannot use NOT_LVAL category because the address would
|
|
||||||
+ not fit in the VALUE_CONTENTS_RAW container of its VALUE. We use
|
|
||||||
+ LVAL_MEMORY (and its VALUE_ADDRESS field) for it but we must be careful
|
|
||||||
+ it is not lvalue, it is the only non-modifiable LVAL_MEMORY. */
|
|
||||||
+ TYPE_CODE_FUNC,
|
|
||||||
+
|
|
||||||
TYPE_CODE_INT, /* Integer type */
|
|
||||||
|
|
||||||
/* Floating type. This is *NOT* a complex type. Beware, there are parts
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/doc/gdb.texinfo
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/doc/gdb.texinfo 2010-01-15 11:12:33.000000000 +0100
|
|
||||||
+++ gdb-7.0.50.20100115/gdb/doc/gdb.texinfo 2010-01-15 11:49:26.000000000 +0100
|
|
||||||
@@ -3723,6 +3723,18 @@ This command prints a list of watchpoint
|
|
||||||
it is the same as @code{info break} (@pxref{Set Breaks}).
|
|
||||||
@end table
|
|
||||||
|
|
||||||
+If you watch for a change in a numerically entered address you need to
|
|
||||||
+dereference it as the address itself is just a constant number which will never
|
|
||||||
+change. @value{GDBN} refuses to create a watchpoint that watches
|
|
||||||
+a never-changing value:
|
|
||||||
+
|
|
||||||
+@smallexample
|
|
||||||
+(@value{GDBP}) watch 0x600850
|
|
||||||
+Cannot watch constant value 0x600850.
|
|
||||||
+(@value{GDBP}) watch *(int *) 0x600850
|
|
||||||
+Watchpoint 1: *(int *) 6293584
|
|
||||||
+@end smallexample
|
|
||||||
+
|
|
||||||
@value{GDBN} sets a @dfn{hardware watchpoint} if possible. Hardware
|
|
||||||
watchpoints execute very quickly, and the debugger reports a change in
|
|
||||||
value at the exact instruction where the change occurs. If @value{GDBN}
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.base/watchpoint.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/testsuite/gdb.base/watchpoint.c 2009-12-30 18:33:35.000000000 +0100
|
|
||||||
+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.base/watchpoint.c 2010-01-15 11:49:26.000000000 +0100
|
|
||||||
@@ -40,6 +40,7 @@ struct foo struct1, struct2, *ptr1, *ptr
|
|
||||||
int doread = 0;
|
|
||||||
|
|
||||||
char *global_ptr;
|
|
||||||
+char **global_ptr_ptr;
|
|
||||||
|
|
||||||
void marker1 ()
|
|
||||||
{
|
|
||||||
@@ -119,6 +120,10 @@ func4 ()
|
|
||||||
buf[0] = 3;
|
|
||||||
global_ptr = buf;
|
|
||||||
buf[0] = 7;
|
|
||||||
+ buf[1] = 5;
|
|
||||||
+ global_ptr_ptr = &global_ptr;
|
|
||||||
+ buf[0] = 9;
|
|
||||||
+ global_ptr++;
|
|
||||||
}
|
|
||||||
|
|
||||||
int main ()
|
|
||||||
Index: gdb-7.0.50.20100115/gdb/testsuite/gdb.base/watchpoint.exp
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/testsuite/gdb.base/watchpoint.exp 2010-01-01 08:32:01.000000000 +0100
|
|
||||||
+++ gdb-7.0.50.20100115/gdb/testsuite/gdb.base/watchpoint.exp 2010-01-15 11:50:21.000000000 +0100
|
|
||||||
@@ -641,7 +641,21 @@ proc test_watchpoint_and_breakpoint {} {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-
|
|
||||||
+
|
|
||||||
+proc test_constant_watchpoint {} {
|
|
||||||
+ global gdb_prompt
|
|
||||||
+
|
|
||||||
+ gdb_test "watch 5" "Cannot watch constant value 5." "number is constant"
|
|
||||||
+ gdb_test "watch marker1" "Cannot watch constant value marker1." \
|
|
||||||
+ "marker1 is constant"
|
|
||||||
+ gdb_test "watch count + 6" ".*atchpoint \[0-9\]+: count \\+ 6"
|
|
||||||
+ gdb_test "set \$expr_breakpoint_number = \$bpnum" ""
|
|
||||||
+ gdb_test "delete \$expr_breakpoint_number" ""
|
|
||||||
+ gdb_test "watch 7 + count" ".*atchpoint \[0-9\]+: 7 \\+ count"
|
|
||||||
+ gdb_test "set \$expr_breakpoint_number = \$bpnum" ""
|
|
||||||
+ gdb_test "delete \$expr_breakpoint_number" ""
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
proc test_inaccessible_watchpoint {} {
|
|
||||||
global gdb_prompt
|
|
||||||
|
|
||||||
@@ -662,7 +676,8 @@ proc test_inaccessible_watchpoint {} {
|
|
||||||
}
|
|
||||||
|
|
||||||
gdb_test "watch *global_ptr" ".*atchpoint \[0-9\]+: \\*global_ptr"
|
|
||||||
- gdb_test "next" ".*global_ptr = buf.*"
|
|
||||||
+ gdb_test "set \$global_ptr_breakpoint_number = \$bpnum" ""
|
|
||||||
+ gdb_test "next" ".*global_ptr = buf.*" "global_ptr next"
|
|
||||||
gdb_test_multiple "next" "next over ptr init" {
|
|
||||||
-re ".*atchpoint \[0-9\]+: \\*global_ptr\r\n\r\nOld value = .*\r\nNew value = 3 .*\r\n.*$gdb_prompt $" {
|
|
||||||
# We can not test for <unknown> here because NULL may be readable.
|
|
||||||
@@ -675,6 +690,28 @@ proc test_inaccessible_watchpoint {} {
|
|
||||||
pass "next over buffer set"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ gdb_test "delete \$global_ptr_breakpoint_number" ""
|
|
||||||
+ gdb_test "watch **global_ptr_ptr" ".*atchpoint \[0-9\]+: \\*\\*global_ptr_ptr"
|
|
||||||
+ gdb_test "set \$global_ptr_ptr_breakpoint_number = \$bpnum" ""
|
|
||||||
+ gdb_test "next" ".*global_ptr_ptr = &global_ptr.*" "gloabl_ptr_ptr next"
|
|
||||||
+ gdb_test_multiple "next" "next over global_ptr_ptr init" {
|
|
||||||
+ -re ".*atchpoint \[0-9\]+: \\*\\*global_ptr_ptr\r\n\r\nOld value = .*\r\nNew value = 7 .*\r\n.*$gdb_prompt $" {
|
|
||||||
+ # We can not test for <unknown> here because NULL may be readable.
|
|
||||||
+ # This test does rely on *NULL != 7.
|
|
||||||
+ pass "next over global_ptr_ptr init"
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ gdb_test_multiple "next" "next over global_ptr_ptr buffer set" {
|
|
||||||
+ -re ".*atchpoint \[0-9\]+: \\*\\*global_ptr_ptr\r\n\r\nOld value = 7 .*\r\nNew value = 9 .*\r\n.*$gdb_prompt $" {
|
|
||||||
+ pass "next over global_ptr_ptr buffer set"
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ gdb_test_multiple "next" "next over global_ptr_ptr pointer advance" {
|
|
||||||
+ -re ".*atchpoint \[0-9\]+: \\*\\*global_ptr_ptr\r\n\r\nOld value = 9 .*\r\nNew value = 5 .*\r\n.*$gdb_prompt $" {
|
|
||||||
+ pass "next over global_ptr_ptr pointer advance"
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ gdb_test "delete \$global_ptr_ptr_breakpoint_number" ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -851,6 +888,17 @@ if [initialize] then {
|
|
||||||
test_watchpoint_and_breakpoint
|
|
||||||
|
|
||||||
test_watchpoint_in_big_blob
|
|
||||||
+
|
|
||||||
+ # See above.
|
|
||||||
+ if [istarget "mips-idt-*"] then {
|
|
||||||
+ gdb_exit
|
|
||||||
+ gdb_start
|
|
||||||
+ gdb_reinitialize_dir $srcdir/$subdir
|
|
||||||
+ gdb_load $binfile
|
|
||||||
+ initialize
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ test_constant_watchpoint
|
|
||||||
}
|
|
||||||
|
|
||||||
# Restore old timeout
|
|
@ -1,8 +1,8 @@
|
|||||||
Index: gdb-7.0.50.20100115/gdb/dwarf2read.c
|
Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/dwarf2read.c 2010-01-15 11:52:59.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/dwarf2read.c 2010-07-12 23:07:35.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/dwarf2read.c 2010-01-15 11:53:57.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/dwarf2read.c 2010-07-13 00:13:02.000000000 +0200
|
||||||
@@ -2529,6 +2529,7 @@ scan_partial_symbols (struct partial_die
|
@@ -2251,6 +2251,7 @@ scan_partial_symbols (struct partial_die
|
||||||
add_partial_subprogram (pdi, lowpc, highpc, need_pc, cu);
|
add_partial_subprogram (pdi, lowpc, highpc, need_pc, cu);
|
||||||
break;
|
break;
|
||||||
case DW_TAG_variable:
|
case DW_TAG_variable:
|
||||||
@ -10,7 +10,7 @@ Index: gdb-7.0.50.20100115/gdb/dwarf2read.c
|
|||||||
case DW_TAG_typedef:
|
case DW_TAG_typedef:
|
||||||
case DW_TAG_union_type:
|
case DW_TAG_union_type:
|
||||||
if (!pdi->is_declaration)
|
if (!pdi->is_declaration)
|
||||||
@@ -2719,6 +2720,7 @@ add_partial_symbol (struct partial_die_i
|
@@ -2452,6 +2453,7 @@ add_partial_symbol (struct partial_die_i
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DW_TAG_variable:
|
case DW_TAG_variable:
|
||||||
@ -18,7 +18,15 @@ Index: gdb-7.0.50.20100115/gdb/dwarf2read.c
|
|||||||
if (pdi->is_external)
|
if (pdi->is_external)
|
||||||
{
|
{
|
||||||
/* Global Variable.
|
/* Global Variable.
|
||||||
@@ -4770,7 +4772,8 @@ dwarf2_add_field (struct field_info *fip
|
@@ -3289,6 +3291,7 @@ die_needs_namespace (struct die_info *di
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case DW_TAG_variable:
|
||||||
|
+ case DW_TAG_constant:
|
||||||
|
/* We only need to prefix "globally" visible variables. These include
|
||||||
|
any variable marked with DW_AT_external or any variable that
|
||||||
|
lives in a namespace. [Variables in anonymous namespaces
|
||||||
|
@@ -4638,7 +4641,8 @@ dwarf2_add_field (struct field_info *fip
|
||||||
fip->non_public_fields = 1;
|
fip->non_public_fields = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -28,7 +36,7 @@ Index: gdb-7.0.50.20100115/gdb/dwarf2read.c
|
|||||||
{
|
{
|
||||||
/* C++ static member. */
|
/* C++ static member. */
|
||||||
|
|
||||||
@@ -5339,7 +5342,8 @@ read_structure_type (struct die_info *di
|
@@ -5250,7 +5254,8 @@ read_structure_type (struct die_info *di
|
||||||
while (child_die && child_die->tag)
|
while (child_die && child_die->tag)
|
||||||
{
|
{
|
||||||
if (child_die->tag == DW_TAG_member
|
if (child_die->tag == DW_TAG_member
|
||||||
@ -38,7 +46,7 @@ Index: gdb-7.0.50.20100115/gdb/dwarf2read.c
|
|||||||
{
|
{
|
||||||
/* NOTE: carlton/2002-11-05: A C++ static data member
|
/* NOTE: carlton/2002-11-05: A C++ static data member
|
||||||
should be a DW_TAG_member that is a declaration, but
|
should be a DW_TAG_member that is a declaration, but
|
||||||
@@ -5459,6 +5463,7 @@ process_structure_scope (struct die_info
|
@@ -5396,6 +5401,7 @@ process_structure_scope (struct die_info
|
||||||
{
|
{
|
||||||
if (child_die->tag == DW_TAG_member
|
if (child_die->tag == DW_TAG_member
|
||||||
|| child_die->tag == DW_TAG_variable
|
|| child_die->tag == DW_TAG_variable
|
||||||
@ -46,7 +54,7 @@ Index: gdb-7.0.50.20100115/gdb/dwarf2read.c
|
|||||||
|| child_die->tag == DW_TAG_inheritance)
|
|| child_die->tag == DW_TAG_inheritance)
|
||||||
{
|
{
|
||||||
/* Do nothing. */
|
/* Do nothing. */
|
||||||
@@ -7134,6 +7139,7 @@ load_partial_dies (bfd *abfd, gdb_byte *
|
@@ -7109,6 +7115,7 @@ load_partial_dies (bfd *abfd, gdb_byte *
|
||||||
&& abbrev->tag != DW_TAG_subprogram
|
&& abbrev->tag != DW_TAG_subprogram
|
||||||
&& abbrev->tag != DW_TAG_lexical_block
|
&& abbrev->tag != DW_TAG_lexical_block
|
||||||
&& abbrev->tag != DW_TAG_variable
|
&& abbrev->tag != DW_TAG_variable
|
||||||
@ -54,7 +62,7 @@ Index: gdb-7.0.50.20100115/gdb/dwarf2read.c
|
|||||||
&& abbrev->tag != DW_TAG_namespace
|
&& abbrev->tag != DW_TAG_namespace
|
||||||
&& abbrev->tag != DW_TAG_module
|
&& abbrev->tag != DW_TAG_module
|
||||||
&& abbrev->tag != DW_TAG_member)
|
&& abbrev->tag != DW_TAG_member)
|
||||||
@@ -7242,6 +7248,7 @@ load_partial_dies (bfd *abfd, gdb_byte *
|
@@ -7217,6 +7224,7 @@ load_partial_dies (bfd *abfd, gdb_byte *
|
||||||
if (load_all
|
if (load_all
|
||||||
|| abbrev->tag == DW_TAG_subprogram
|
|| abbrev->tag == DW_TAG_subprogram
|
||||||
|| abbrev->tag == DW_TAG_variable
|
|| abbrev->tag == DW_TAG_variable
|
||||||
@ -62,7 +70,7 @@ Index: gdb-7.0.50.20100115/gdb/dwarf2read.c
|
|||||||
|| abbrev->tag == DW_TAG_namespace
|
|| abbrev->tag == DW_TAG_namespace
|
||||||
|| part_die->is_declaration)
|
|| part_die->is_declaration)
|
||||||
{
|
{
|
||||||
@@ -9016,6 +9023,11 @@ new_symbol (struct die_info *die, struct
|
@@ -9059,6 +9067,11 @@ new_symbol (struct die_info *die, struct
|
||||||
/* Do not add the symbol to any lists. It will be found via
|
/* Do not add the symbol to any lists. It will be found via
|
||||||
BLOCK_FUNCTION from the blockvector. */
|
BLOCK_FUNCTION from the blockvector. */
|
||||||
break;
|
break;
|
||||||
@ -72,5 +80,5 @@ Index: gdb-7.0.50.20100115/gdb/dwarf2read.c
|
|||||||
+ SYMBOL_TYPE (sym), NULL);
|
+ SYMBOL_TYPE (sym), NULL);
|
||||||
+ /* PASSTHRU */
|
+ /* PASSTHRU */
|
||||||
case DW_TAG_variable:
|
case DW_TAG_variable:
|
||||||
|
case DW_TAG_member:
|
||||||
/* Compilation with minimal debug info may result in variables
|
/* Compilation with minimal debug info may result in variables
|
||||||
with missing type entries. Change the misleading `void' type
|
|
||||||
|
@ -1,85 +0,0 @@
|
|||||||
Index: gdb-7.1/gdb/ppc-linux-nat.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/ppc-linux-nat.c 2010-07-29 16:43:11.000000000 -0300
|
|
||||||
+++ gdb-7.1/gdb/ppc-linux-nat.c 2010-07-29 16:45:01.000000000 -0300
|
|
||||||
@@ -807,7 +807,7 @@ store_vsx_register (const struct regcach
|
|
||||||
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
|
||||||
int vsxregsize = register_size (gdbarch, tdep->ppc_vsr0_upper_regnum);
|
|
||||||
|
|
||||||
- ret = ptrace (PTRACE_SETVSXREGS, tid, 0, ®s);
|
|
||||||
+ ret = ptrace (PTRACE_GETVSXREGS, tid, 0, ®s);
|
|
||||||
if (ret < 0)
|
|
||||||
{
|
|
||||||
if (errno == EIO)
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.arch/vsx-regs.exp
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/testsuite/gdb.arch/vsx-regs.exp 2010-01-01 05:32:00.000000000 -0200
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.arch/vsx-regs.exp 2010-07-29 17:11:18.000000000 -0300
|
|
||||||
@@ -14,8 +14,6 @@
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
#
|
|
||||||
|
|
||||||
-# Tests for Powerpc AltiVec register setting and fetching
|
|
||||||
-
|
|
||||||
if $tracelevel then {
|
|
||||||
strace $tracelevel
|
|
||||||
}
|
|
||||||
@@ -68,11 +66,13 @@ if ![runto_main] then {
|
|
||||||
|
|
||||||
# Data sets used throughout the test
|
|
||||||
|
|
||||||
-set vector_register1 ".uint128 = 0x3ff4cccccccccccc0000000000000000, v4_float = .0x1, 0xf99999a0, 0x0, 0x0., v4_int32 = .0x3ff4cccc, 0xcccccccc, 0x0, 0x0., v8_int16 = .0x3ff4, 0xcccc, 0xcccc, 0xcccc, 0x0, 0x0, 0x0, 0x0., v16_int8 = .0x3f, 0xf4, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0.."
|
|
||||||
+set vector_register1 ".uint128 = 0x3ff4cccccccccccc0000000000000000, v2_double = .0x1, 0x0., v4_float = .0x1, 0xf99999a0, 0x0, 0x0., v4_int32 = .0x3ff4cccc, 0xcccccccc, 0x0, 0x0., v8_int16 = .0x3ff4, 0xcccc, 0xcccc, 0xcccc, 0x0, 0x0, 0x0, 0x0., v16_int8 = .0x3f, 0xf4, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0.."
|
|
||||||
+
|
|
||||||
+set vector_register2 "uint128 = 0xdeadbeefdeadbeefdeadbeefdeadbeef, v2_double = .0x1, 0x1., v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef., v8_int16 = .0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef., v16_int8 = .0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef.."
|
|
||||||
|
|
||||||
-set vector_register2 "uint128 = 0xdeadbeefdeadbeefdeadbeefdeadbeef, v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef., v8_int16 = .0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef, 0xdead, 0xbeef., v16_int8 = .0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef.."
|
|
||||||
+set vector_register3 ".uint128 = 0x00000001000000010000000100000001, v2_double = .0x0, 0x0., v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1., v16_int8 = .0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1.."
|
|
||||||
|
|
||||||
-set vector_register3 ".uint128 = 0x00000001000000010000000100000001, v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1., v16_int8 = .0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1.."
|
|
||||||
+set vector_register3_vr ".uint128 = 0x00000001000000010000000100000001, v4_float = .0x0, 0x0, 0x0, 0x0., v4_int32 = .0x1, 0x1, 0x1, 0x1., v8_int16 = .0x0, 0x1, 0x0, 0x1, 0x0, 0x1, 0x0, 0x1., v16_int8 = .0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1.."
|
|
||||||
|
|
||||||
set float_register ".raw 0xdeadbeefdeadbeef."
|
|
||||||
|
|
||||||
@@ -80,7 +80,7 @@ set float_register ".raw 0xdeadbeefdeadb
|
|
||||||
|
|
||||||
# 1: Set F0~F31 registers and check if it reflects on VS0~VS31.
|
|
||||||
for {set i 0} {$i < 32} {incr i 1} {
|
|
||||||
- send_gdb "set \$f$i = 1\.3"
|
|
||||||
+ gdb_test "set \$f$i = 1\.3" ""
|
|
||||||
}
|
|
||||||
|
|
||||||
for {set i 0} {$i < 32} {incr i 1} {
|
|
||||||
@@ -90,7 +90,7 @@ for {set i 0} {$i < 32} {incr i 1} {
|
|
||||||
# 2: Set VS0~VS31 registers and check if it reflects on F0~F31.
|
|
||||||
for {set i 0} {$i < 32} {incr i 1} {
|
|
||||||
for {set j 0} {$j < 4} {incr j 1} {
|
|
||||||
- send_gdb "set \$vs$i.v4_int32\[$j\] = 0xdeadbeef"
|
|
||||||
+ gdb_test "set \$vs$i.v4_int32\[$j\] = 0xdeadbeef" ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ for {set i 0} {$i < 32} {incr i 1} {
|
|
||||||
# 1: Set VR0~VR31 registers and check if it reflects on VS32~VS63.
|
|
||||||
for {set i 0} {$i < 32} {incr i 1} {
|
|
||||||
for {set j 0} {$j < 4} {incr j 1} {
|
|
||||||
- send_gdb "set \$vr$i.v4_int32\[$j\] = 1"
|
|
||||||
+ gdb_test "set \$vr$i.v4_int32\[$j\] = 1" ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -117,12 +117,12 @@ for {set i 32} {$i < 64} {incr i 1} {
|
|
||||||
# 2: Set VS32~VS63 registers and check if it reflects on VR0~VR31.
|
|
||||||
for {set i 32} {$i < 64} {incr i 1} {
|
|
||||||
for {set j 0} {$j < 4} {incr j 1} {
|
|
||||||
- send_gdb "set \$vs$i.v4_int32\[$j\] = 1"
|
|
||||||
+ gdb_test "set \$vs$i.v4_int32\[$j\] = 1" ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for {set i 0} {$i < 32} {incr i 1} {
|
|
||||||
- gdb_test "info reg vr$i" "vr$i.*$vector_register3" "info reg vr$i"
|
|
||||||
+ gdb_test "info reg vr$i" "vr$i.*$vector_register3_vr" "info reg vr$i"
|
|
||||||
}
|
|
||||||
|
|
||||||
set escapedfilename [string_to_regexp ${objdir}/${subdir}/vsx-core.test]
|
|
@ -1,50 +0,0 @@
|
|||||||
--- gdb/tui/tui-regs.c 2010-01-01 08:32:07.000000000 +0100
|
|
||||||
+++ gdb/tui/tui-regs.c 2010-04-20 09:23:59.000000000 +0200
|
|
||||||
@@ -541,7 +541,12 @@
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (data->highlight)
|
|
||||||
- wstandout (win_info->handle);
|
|
||||||
+ /* We ignore the return value, casting it to void in order to avoid
|
|
||||||
+ a compiler warning. The warning itself was introduced by a patch
|
|
||||||
+ to ncurses 5.7 dated 2009-08-29, changing this macro to expand
|
|
||||||
+ to code that causes the compiler to generate an unused-value
|
|
||||||
+ warning. */
|
|
||||||
+ (void) wstandout (win_info->handle);
|
|
||||||
|
|
||||||
wmove (win_info->handle, 0, 0);
|
|
||||||
for (i = 1; i < win_info->width; i++)
|
|
||||||
@@ -551,7 +556,12 @@
|
|
||||||
waddstr (win_info->handle, data->content);
|
|
||||||
|
|
||||||
if (data->highlight)
|
|
||||||
- wstandend (win_info->handle);
|
|
||||||
+ /* We ignore the return value, casting it to void in order to avoid
|
|
||||||
+ a compiler warning. The warning itself was introduced by a patch
|
|
||||||
+ to ncurses 5.7 dated 2009-08-29, changing this macro to expand
|
|
||||||
+ to code that causes the compiler to generate an unused-value
|
|
||||||
+ warning. */
|
|
||||||
+ (void) wstandend (win_info->handle);
|
|
||||||
tui_refresh_win (win_info);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
--- gdb/tui/tui-stack.c 2010-01-01 08:32:07.000000000 +0100
|
|
||||||
+++ gdb/tui/tui-stack.c 2010-04-20 09:23:59.000000000 +0200
|
|
||||||
@@ -256,10 +256,15 @@
|
|
||||||
|
|
||||||
string = tui_make_status_line (&element->which_element.locator);
|
|
||||||
wmove (locator->handle, 0, 0);
|
|
||||||
- wstandout (locator->handle);
|
|
||||||
+ /* We ignore the return value from wstandout and wstandend, casting
|
|
||||||
+ them to void in order to avoid a compiler warning. The warning
|
|
||||||
+ itself was introduced by a patch to ncurses 5.7 dated 2009-08-29,
|
|
||||||
+ changing these macro to expand to code that causes the compiler
|
|
||||||
+ to generate an unused-value warning. */
|
|
||||||
+ (void) wstandout (locator->handle);
|
|
||||||
waddstr (locator->handle, string);
|
|
||||||
wclrtoeol (locator->handle);
|
|
||||||
- wstandend (locator->handle);
|
|
||||||
+ (void) wstandend (locator->handle);
|
|
||||||
tui_refresh_win (locator);
|
|
||||||
wmove (locator->handle, 0, 0);
|
|
||||||
xfree (string);
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:142c27d7970a4e652dc225d61d887777ae00cf22fdd75cd1e8e4e13bfbd85352
|
|
||||||
size 17977195
|
|
@ -1,536 +0,0 @@
|
|||||||
Index: gdb-7.1/gdb/defs.h
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/defs.h 2010-08-25 13:05:57.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/defs.h 2010-08-25 13:06:43.000000000 +0200
|
|
||||||
@@ -646,12 +646,14 @@ extern void init_source_path (void);
|
|
||||||
|
|
||||||
/* From exec.c */
|
|
||||||
|
|
||||||
+/* MODIFIED has value -1 for unknown, 0 for not modified, 1 for modified. */
|
|
||||||
+typedef int (*find_memory_region_t) (CORE_ADDR addr, unsigned long size,
|
|
||||||
+ int read, int write, int exec,
|
|
||||||
+ int modified, void *data);
|
|
||||||
+
|
|
||||||
/* Take over the 'find_mapped_memory' vector from exec.c. */
|
|
||||||
-extern void exec_set_find_memory_regions (int (*) (int (*) (CORE_ADDR,
|
|
||||||
- unsigned long,
|
|
||||||
- int, int, int,
|
|
||||||
- void *),
|
|
||||||
- void *));
|
|
||||||
+extern void exec_set_find_memory_regions (int (*func) (find_memory_region_t,
|
|
||||||
+ void *));
|
|
||||||
|
|
||||||
/* Possible lvalue types. Like enum language, this should be in
|
|
||||||
value.h, but needs to be here for the same reason. */
|
|
||||||
Index: gdb-7.1/gdb/exec.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/exec.c 2010-08-25 13:05:56.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/exec.c 2010-08-25 13:06:43.000000000 +0200
|
|
||||||
@@ -835,11 +835,7 @@ exec_has_memory (struct target_ops *ops)
|
|
||||||
/* Find mapped memory. */
|
|
||||||
|
|
||||||
extern void
|
|
||||||
-exec_set_find_memory_regions (int (*func) (int (*) (CORE_ADDR,
|
|
||||||
- unsigned long,
|
|
||||||
- int, int, int,
|
|
||||||
- void *),
|
|
||||||
- void *))
|
|
||||||
+exec_set_find_memory_regions (int (*func) (find_memory_region_t, void *))
|
|
||||||
{
|
|
||||||
exec_ops.to_find_memory_regions = func;
|
|
||||||
}
|
|
||||||
Index: gdb-7.1/gdb/fbsd-nat.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/fbsd-nat.c 2010-08-25 13:05:57.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/fbsd-nat.c 2010-08-25 13:06:43.000000000 +0200
|
|
||||||
@@ -92,9 +92,7 @@ fbsd_read_mapping (FILE *mapfile, unsign
|
|
||||||
argument to FUNC. */
|
|
||||||
|
|
||||||
int
|
|
||||||
-fbsd_find_memory_regions (int (*func) (CORE_ADDR, unsigned long,
|
|
||||||
- int, int, int, void *),
|
|
||||||
- void *obfd)
|
|
||||||
+fbsd_find_memory_regions (find_memory_region_t func, void *obfd)
|
|
||||||
{
|
|
||||||
pid_t pid = ptid_get_pid (inferior_ptid);
|
|
||||||
char *mapfilename;
|
|
||||||
@@ -135,7 +133,7 @@ fbsd_find_memory_regions (int (*func) (C
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Invoke the callback function to create the corefile segment. */
|
|
||||||
- func (start, size, read, write, exec, obfd);
|
|
||||||
+ func (start, size, read, write, exec, -1, obfd);
|
|
||||||
}
|
|
||||||
|
|
||||||
do_cleanups (cleanup);
|
|
||||||
Index: gdb-7.1/gdb/gcore.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/gcore.c 2010-08-25 13:05:56.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/gcore.c 2010-08-25 13:06:43.000000000 +0200
|
|
||||||
@@ -378,8 +378,8 @@ make_output_phdrs (bfd *obfd, asection *
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
-gcore_create_callback (CORE_ADDR vaddr, unsigned long size,
|
|
||||||
- int read, int write, int exec, void *data)
|
|
||||||
+gcore_create_callback (CORE_ADDR vaddr, unsigned long size, int read,
|
|
||||||
+ int write, int exec, int modified, void *data)
|
|
||||||
{
|
|
||||||
bfd *obfd = data;
|
|
||||||
asection *osec;
|
|
||||||
@@ -393,7 +393,7 @@ gcore_create_callback (CORE_ADDR vaddr,
|
|
||||||
/* If the memory segment has no permissions set, ignore it, otherwise
|
|
||||||
when we later try to access it for read/write, we'll get an error
|
|
||||||
or jam the kernel. */
|
|
||||||
- if (read == 0 && write == 0 && exec == 0)
|
|
||||||
+ if (read == 0 && write == 0 && exec == 0 && modified == 0)
|
|
||||||
{
|
|
||||||
if (info_verbose)
|
|
||||||
{
|
|
||||||
@@ -404,7 +404,7 @@ gcore_create_callback (CORE_ADDR vaddr,
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (write == 0 && !solib_keep_data_in_core (vaddr, size))
|
|
||||||
+ if (write == 0 && modified == 0 && !solib_keep_data_in_core (vaddr, size))
|
|
||||||
{
|
|
||||||
/* See if this region of memory lies inside a known file on disk.
|
|
||||||
If so, we can avoid copying its contents by clearing SEC_LOAD. */
|
|
||||||
@@ -436,10 +436,12 @@ gcore_create_callback (CORE_ADDR vaddr,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- keep:
|
|
||||||
- flags |= SEC_READONLY;
|
|
||||||
+ keep:;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (write == 0)
|
|
||||||
+ flags |= SEC_READONLY;
|
|
||||||
+
|
|
||||||
if (exec)
|
|
||||||
flags |= SEC_CODE;
|
|
||||||
else
|
|
||||||
@@ -466,9 +468,7 @@ gcore_create_callback (CORE_ADDR vaddr,
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
-objfile_find_memory_regions (int (*func) (CORE_ADDR, unsigned long,
|
|
||||||
- int, int, int, void *),
|
|
||||||
- void *obfd)
|
|
||||||
+objfile_find_memory_regions (find_memory_region_t func, void *obfd)
|
|
||||||
{
|
|
||||||
/* Use objfile data to create memory sections. */
|
|
||||||
struct objfile *objfile;
|
|
||||||
@@ -492,6 +492,7 @@ objfile_find_memory_regions (int (*func)
|
|
||||||
1, /* All sections will be readable. */
|
|
||||||
(flags & SEC_READONLY) == 0, /* Writable. */
|
|
||||||
(flags & SEC_CODE) != 0, /* Executable. */
|
|
||||||
+ -1, /* Modified is unknown. */
|
|
||||||
obfd);
|
|
||||||
if (ret != 0)
|
|
||||||
return ret;
|
|
||||||
@@ -504,6 +505,7 @@ objfile_find_memory_regions (int (*func)
|
|
||||||
1, /* Stack section will be readable. */
|
|
||||||
1, /* Stack section will be writable. */
|
|
||||||
0, /* Stack section will not be executable. */
|
|
||||||
+ 1, /* Stack section will be modified. */
|
|
||||||
obfd);
|
|
||||||
|
|
||||||
/* Make a heap segment. */
|
|
||||||
@@ -512,6 +514,7 @@ objfile_find_memory_regions (int (*func)
|
|
||||||
1, /* Heap section will be readable. */
|
|
||||||
1, /* Heap section will be writable. */
|
|
||||||
0, /* Heap section will not be executable. */
|
|
||||||
+ 1, /* Heap section will be modified. */
|
|
||||||
obfd);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
Index: gdb-7.1/gdb/gnu-nat.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/gnu-nat.c 2010-02-15 18:35:49.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/gnu-nat.c 2010-08-25 13:06:43.000000000 +0200
|
|
||||||
@@ -2475,11 +2475,7 @@ gnu_xfer_memory (CORE_ADDR memaddr, gdb_
|
|
||||||
|
|
||||||
/* Call FUNC on each memory region in the task. */
|
|
||||||
static int
|
|
||||||
-gnu_find_memory_regions (int (*func) (CORE_ADDR,
|
|
||||||
- unsigned long,
|
|
||||||
- int, int, int,
|
|
||||||
- void *),
|
|
||||||
- void *data)
|
|
||||||
+gnu_find_memory_regions (find_memory_region_t func, void *data)
|
|
||||||
{
|
|
||||||
error_t err;
|
|
||||||
task_t task;
|
|
||||||
@@ -2536,7 +2532,7 @@ gnu_find_memory_regions (int (*func) (CO
|
|
||||||
last_protection & VM_PROT_READ,
|
|
||||||
last_protection & VM_PROT_WRITE,
|
|
||||||
last_protection & VM_PROT_EXECUTE,
|
|
||||||
- data);
|
|
||||||
+ -1, data);
|
|
||||||
last_region_address = region_address;
|
|
||||||
last_region_end = region_address += region_length;
|
|
||||||
last_protection = protection;
|
|
||||||
@@ -2549,7 +2545,7 @@ gnu_find_memory_regions (int (*func) (CO
|
|
||||||
last_protection & VM_PROT_READ,
|
|
||||||
last_protection & VM_PROT_WRITE,
|
|
||||||
last_protection & VM_PROT_EXECUTE,
|
|
||||||
- data);
|
|
||||||
+ -1, data);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
Index: gdb-7.1/gdb/linux-nat.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/linux-nat.c 2010-08-25 13:05:57.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/linux-nat.c 2010-08-25 13:07:43.000000000 +0200
|
|
||||||
@@ -4198,7 +4198,7 @@ read_mapping (FILE *mapfile,
|
|
||||||
long long *endaddr,
|
|
||||||
char *permissions,
|
|
||||||
long long *offset,
|
|
||||||
- char *device, long long *inode, char *filename)
|
|
||||||
+ char *device, long long *inode, char *filename, int *modified)
|
|
||||||
{
|
|
||||||
int ret = fscanf (mapfile, "%llx-%llx %s %llx %s %llx",
|
|
||||||
addr, endaddr, permissions, offset, device, inode);
|
|
||||||
@@ -4216,6 +4216,40 @@ read_mapping (FILE *mapfile,
|
|
||||||
ret += fscanf (mapfile, "%[^\n]\n", filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (modified != NULL)
|
|
||||||
+ {
|
|
||||||
+ *modified = -1;
|
|
||||||
+ for (;;)
|
|
||||||
+ {
|
|
||||||
+ int ch;
|
|
||||||
+ char keyword[64 + 1];
|
|
||||||
+ unsigned long number;
|
|
||||||
+
|
|
||||||
+ ch = fgetc (mapfile);
|
|
||||||
+ if (ch != EOF)
|
|
||||||
+ ungetc (ch, mapfile);
|
|
||||||
+ if (ch < 'A' || ch > 'Z')
|
|
||||||
+ break;
|
|
||||||
+ if (fscanf (mapfile, "%64s%lu kB\n", keyword, &number) != 2)
|
|
||||||
+ {
|
|
||||||
+ warning (_("Error parsing /proc/PID/{s,}maps file"));
|
|
||||||
+ do
|
|
||||||
+ ch = fgetc (mapfile);
|
|
||||||
+ while (ch != EOF && ch != '\n');
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ if (number != 0 && (strcmp (keyword, "Shared_Dirty:") == 0
|
|
||||||
+ || strcmp (keyword, "Private_Dirty:") == 0
|
|
||||||
+ || strcmp (keyword, "Swap:") == 0))
|
|
||||||
+ *modified = 1;
|
|
||||||
+ else if (*modified == -1)
|
|
||||||
+ {
|
|
||||||
+ /* Valid line proves an smaps file is being read in. */
|
|
||||||
+ *modified = 0;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
return (ret != 0 && ret != EOF);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -4223,23 +4257,25 @@ read_mapping (FILE *mapfile,
|
|
||||||
regions in the inferior for a corefile. */
|
|
||||||
|
|
||||||
static int
|
|
||||||
-linux_nat_find_memory_regions (int (*func) (CORE_ADDR,
|
|
||||||
- unsigned long,
|
|
||||||
- int, int, int, void *), void *obfd)
|
|
||||||
+linux_nat_find_memory_regions (find_memory_region_t func, void *obfd)
|
|
||||||
{
|
|
||||||
int pid = PIDGET (inferior_ptid);
|
|
||||||
char mapsfilename[MAXPATHLEN];
|
|
||||||
FILE *mapsfile;
|
|
||||||
long long addr, endaddr, size, offset, inode;
|
|
||||||
char permissions[8], device[8], filename[MAXPATHLEN];
|
|
||||||
- int read, write, exec;
|
|
||||||
+ int read, write, exec, modified;
|
|
||||||
int ret;
|
|
||||||
struct cleanup *cleanup;
|
|
||||||
|
|
||||||
/* Compose the filename for the /proc memory map, and open it. */
|
|
||||||
- sprintf (mapsfilename, "/proc/%d/maps", pid);
|
|
||||||
+ sprintf (mapsfilename, "/proc/%d/smaps", pid);
|
|
||||||
if ((mapsfile = fopen (mapsfilename, "r")) == NULL)
|
|
||||||
- error (_("Could not open %s."), mapsfilename);
|
|
||||||
+ {
|
|
||||||
+ sprintf (mapsfilename, "/proc/%d/maps", pid);
|
|
||||||
+ if ((mapsfile = fopen (mapsfilename, "r")) == NULL)
|
|
||||||
+ error (_("Could not open %s."), mapsfilename);
|
|
||||||
+ }
|
|
||||||
cleanup = make_cleanup_fclose (mapsfile);
|
|
||||||
|
|
||||||
if (info_verbose)
|
|
||||||
@@ -4248,7 +4284,7 @@ linux_nat_find_memory_regions (int (*fun
|
|
||||||
|
|
||||||
/* Now iterate until end-of-file. */
|
|
||||||
while (read_mapping (mapsfile, &addr, &endaddr, &permissions[0],
|
|
||||||
- &offset, &device[0], &inode, &filename[0]))
|
|
||||||
+ &offset, &device[0], &inode, &filename[0], &modified))
|
|
||||||
{
|
|
||||||
size = endaddr - addr;
|
|
||||||
|
|
||||||
@@ -4271,7 +4307,7 @@ linux_nat_find_memory_regions (int (*fun
|
|
||||||
|
|
||||||
/* Invoke the callback function to create the corefile
|
|
||||||
segment. */
|
|
||||||
- func (addr, size, read, write, exec, obfd);
|
|
||||||
+ func (addr, size, read, write, exec, modified, obfd);
|
|
||||||
}
|
|
||||||
do_cleanups (cleanup);
|
|
||||||
return 0;
|
|
||||||
@@ -4902,7 +4938,8 @@ linux_nat_info_proc_cmd (char *args, int
|
|
||||||
}
|
|
||||||
|
|
||||||
while (read_mapping (procfile, &addr, &endaddr, &permissions[0],
|
|
||||||
- &offset, &device[0], &inode, &filename[0]))
|
|
||||||
+ &offset, &device[0], &inode, &filename[0],
|
|
||||||
+ NULL))
|
|
||||||
{
|
|
||||||
size = endaddr - addr;
|
|
||||||
|
|
||||||
Index: gdb-7.1/gdb/procfs.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/procfs.c 2010-08-25 13:05:57.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/procfs.c 2010-08-25 13:09:32.000000000 +0200
|
|
||||||
@@ -4049,7 +4049,7 @@ insert_dbx_link_bpt_in_file (int fd, COR
|
|
||||||
|
|
||||||
static int
|
|
||||||
insert_dbx_link_bpt_in_region (struct prmap *map,
|
|
||||||
- int (*child_func) (),
|
|
||||||
+ find_memory_region_t child_func,
|
|
||||||
void *data)
|
|
||||||
{
|
|
||||||
procinfo *pi = (procinfo *) data;
|
|
||||||
@@ -5570,9 +5570,9 @@ procfs_use_watchpoints (struct target_op
|
|
||||||
*/
|
|
||||||
|
|
||||||
static int
|
|
||||||
-iterate_over_mappings (procinfo *pi, int (*child_func) (), void *data,
|
|
||||||
+iterate_over_mappings (procinfo *pi, find_memory_region_t child_func, void *data,
|
|
||||||
int (*func) (struct prmap *map,
|
|
||||||
- int (*child_func) (),
|
|
||||||
+ find_memory_region_t child_func,
|
|
||||||
void *data))
|
|
||||||
{
|
|
||||||
char pathname[MAX_PROC_NAME_SIZE];
|
|
||||||
@@ -5691,10 +5691,7 @@ int solib_mappings_callback (struct prma
|
|
||||||
|
|
||||||
static int
|
|
||||||
find_memory_regions_callback (struct prmap *map,
|
|
||||||
- int (*func) (CORE_ADDR,
|
|
||||||
- unsigned long,
|
|
||||||
- int, int, int,
|
|
||||||
- void *),
|
|
||||||
+ find_memory_region_t func,
|
|
||||||
void *data)
|
|
||||||
{
|
|
||||||
return (*func) ((CORE_ADDR) map->pr_vaddr,
|
|
||||||
@@ -5702,7 +5699,7 @@ find_memory_regions_callback (struct prm
|
|
||||||
(map->pr_mflags & MA_READ) != 0,
|
|
||||||
(map->pr_mflags & MA_WRITE) != 0,
|
|
||||||
(map->pr_mflags & MA_EXEC) != 0,
|
|
||||||
- data);
|
|
||||||
+ -1, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
@@ -5721,11 +5718,7 @@ find_memory_regions_callback (struct prm
|
|
||||||
*/
|
|
||||||
|
|
||||||
static int
|
|
||||||
-proc_find_memory_regions (int (*func) (CORE_ADDR,
|
|
||||||
- unsigned long,
|
|
||||||
- int, int, int,
|
|
||||||
- void *),
|
|
||||||
- void *data)
|
|
||||||
+proc_find_memory_regions (find_memory_region_t func, void *data)
|
|
||||||
{
|
|
||||||
procinfo *pi = find_procinfo_or_die (PIDGET (inferior_ptid), 0);
|
|
||||||
|
|
||||||
@@ -5771,7 +5764,7 @@ mappingflags (long flags)
|
|
||||||
*/
|
|
||||||
|
|
||||||
static int
|
|
||||||
-info_mappings_callback (struct prmap *map, int (*ignore) (), void *unused)
|
|
||||||
+info_mappings_callback (struct prmap *map, find_memory_region_t ignore, void *unused)
|
|
||||||
{
|
|
||||||
unsigned int pr_off;
|
|
||||||
|
|
||||||
Index: gdb-7.1/gdb/target.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/target.c 2010-08-25 13:05:56.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/target.c 2010-08-25 13:06:43.000000000 +0200
|
|
||||||
@@ -2836,7 +2836,7 @@ dummy_pid_to_str (struct target_ops *ops
|
|
||||||
|
|
||||||
/* Error-catcher for target_find_memory_regions. */
|
|
||||||
static int
|
|
||||||
-dummy_find_memory_regions (int (*ignore1) (), void *ignore2)
|
|
||||||
+dummy_find_memory_regions (find_memory_region_t ignore1, void *ignore2)
|
|
||||||
{
|
|
||||||
error (_("Command not implemented for this target."));
|
|
||||||
return 0;
|
|
||||||
Index: gdb-7.1/gdb/target.h
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/target.h 2010-08-25 13:05:58.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/target.h 2010-08-25 13:06:43.000000000 +0200
|
|
||||||
@@ -479,11 +479,7 @@ struct target_ops
|
|
||||||
int (*to_async_mask) (int);
|
|
||||||
int (*to_supports_non_stop) (void);
|
|
||||||
/* find_memory_regions support method for gcore */
|
|
||||||
- int (*to_find_memory_regions) (int (*) (CORE_ADDR,
|
|
||||||
- unsigned long,
|
|
||||||
- int, int, int,
|
|
||||||
- void *),
|
|
||||||
- void *);
|
|
||||||
+ int (*to_find_memory_regions) (find_memory_region_t func, void *data);
|
|
||||||
/* make_corefile_notes support method for gcore */
|
|
||||||
char * (*to_make_corefile_notes) (bfd *, int *);
|
|
||||||
/* get_bookmark support method for bookmarks */
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.base/gcore-relro-lib.c
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.base/gcore-relro-lib.c 2010-08-25 13:06:43.000000000 +0200
|
|
||||||
@@ -0,0 +1,21 @@
|
|
||||||
+/* Copyright 2010 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This file is part of GDB.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+lib (void)
|
|
||||||
+{
|
|
||||||
+}
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.base/gcore-relro-main.c
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.base/gcore-relro-main.c 2010-08-25 13:06:43.000000000 +0200
|
|
||||||
@@ -0,0 +1,25 @@
|
|
||||||
+/* Copyright 2010 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This file is part of GDB.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
+
|
|
||||||
+extern void lib (void);
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main (void)
|
|
||||||
+{
|
|
||||||
+ lib ();
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.base/gcore-relro.exp
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.base/gcore-relro.exp 2010-08-25 13:06:43.000000000 +0200
|
|
||||||
@@ -0,0 +1,80 @@
|
|
||||||
+# Copyright 2010 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
|
||||||
+# it under the terms of the GNU General Public License as published by
|
|
||||||
+# the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+# (at your option) any later version.
|
|
||||||
+#
|
|
||||||
+# This program is distributed in the hope that it will be useful,
|
|
||||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+# GNU General Public License for more details.
|
|
||||||
+#
|
|
||||||
+# You should have received a copy of the GNU General Public License
|
|
||||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+if {[skip_shlib_tests]} {
|
|
||||||
+ return 0
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set testfile "gcore-relro"
|
|
||||||
+set srcmainfile ${testfile}-main.c
|
|
||||||
+set srclibfile ${testfile}-lib.c
|
|
||||||
+set libfile ${objdir}/${subdir}/${testfile}-lib.so
|
|
||||||
+set objfile ${objdir}/${subdir}/${testfile}-main.o
|
|
||||||
+set executable ${testfile}-main
|
|
||||||
+set binfile ${objdir}/${subdir}/${executable}
|
|
||||||
+set gcorefile ${objdir}/${subdir}/${executable}.gcore
|
|
||||||
+
|
|
||||||
+if { [gdb_compile_shlib ${srcdir}/${subdir}/${srclibfile} ${libfile} {debug}] != ""
|
|
||||||
+ || [gdb_compile ${srcdir}/${subdir}/${srcmainfile} ${objfile} object {debug}] != "" } {
|
|
||||||
+ untested ${testfile}.exp
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+set opts [list debug shlib=${libfile} additional_flags=-Wl,-z,relro]
|
|
||||||
+if { [gdb_compile ${objfile} ${binfile} executable $opts] != "" } {
|
|
||||||
+ unsupported "-Wl,-z,relro compilation failed"
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+clean_restart $executable
|
|
||||||
+gdb_load_shlibs $libfile
|
|
||||||
+
|
|
||||||
+# Does this gdb support gcore?
|
|
||||||
+set test "help gcore"
|
|
||||||
+gdb_test_multiple $test $test {
|
|
||||||
+ -re "Undefined command: .gcore.*\r\n$gdb_prompt $" {
|
|
||||||
+ # gcore command not supported -- nothing to test here.
|
|
||||||
+ unsupported "gdb does not support gcore on this target"
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+ -re "Save a core file .*\r\n$gdb_prompt $" {
|
|
||||||
+ pass $test
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+if { ![runto lib] } then {
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set escapedfilename [string_to_regexp ${gcorefile}]
|
|
||||||
+
|
|
||||||
+set test "save a corefile"
|
|
||||||
+gdb_test_multiple "gcore ${gcorefile}" $test {
|
|
||||||
+ -re "Saved corefile ${escapedfilename}\r\n$gdb_prompt $" {
|
|
||||||
+ pass $test
|
|
||||||
+ }
|
|
||||||
+ -re "Can't create a corefile\r\n$gdb_prompt $" {
|
|
||||||
+ unsupported $test
|
|
||||||
+ return -1
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+# Now restart gdb and load the corefile.
|
|
||||||
+
|
|
||||||
+clean_restart $executable
|
|
||||||
+gdb_load_shlibs $libfile
|
|
||||||
+
|
|
||||||
+gdb_test "core ${gcorefile}" "Core was generated by .*" "re-load generated corefile"
|
|
||||||
+
|
|
||||||
+gdb_test "frame" "#0 \[^\r\n\]* lib .*" "library got loaded"
|
|
3
gdb-7.2.tar.bz2
Normal file
3
gdb-7.2.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:bf444b88ab845243364c3d410be9e3f43a57f96ff594d65a37842ea03c3410f0
|
||||||
|
size 18530613
|
@ -1,25 +1,6 @@
|
|||||||
Archer-upstreamed:
|
Archer-upstreamed:
|
||||||
http://sourceware.org/ml/archer/2010-q2/msg00031.html
|
http://sourceware.org/ml/archer/2010-q2/msg00031.html
|
||||||
|
|
||||||
--- ./gdb/breakpoint.c 2010-05-29 01:12:32.000000000 +0200
|
|
||||||
+++ ./gdb/breakpoint.c 2010-05-29 01:22:21.000000000 +0200
|
|
||||||
@@ -1679,14 +1679,11 @@ create_exception_master_breakpoint (void
|
|
||||||
debug_hook = lookup_minimal_symbol_text ("_Unwind_DebugHook", objfile);
|
|
||||||
if (debug_hook != NULL)
|
|
||||||
{
|
|
||||||
- CORE_ADDR pc;
|
|
||||||
struct breakpoint *b;
|
|
||||||
|
|
||||||
- pc = find_function_start_pc (get_objfile_arch (objfile),
|
|
||||||
- SYMBOL_VALUE_ADDRESS (debug_hook),
|
|
||||||
- SYMBOL_OBJ_SECTION (debug_hook));
|
|
||||||
b = create_internal_breakpoint (get_objfile_arch (objfile),
|
|
||||||
- pc, bp_exception_master);
|
|
||||||
+ SYMBOL_VALUE_ADDRESS (debug_hook),
|
|
||||||
+ bp_exception_master);
|
|
||||||
b->addr_string = xstrdup ("_Unwind_DebugHook");
|
|
||||||
b->enable_state = bp_disabled;
|
|
||||||
}
|
|
||||||
--- ./gdb/testsuite/gdb.cp/cxxexec.cc 1970-01-01 01:00:00.000000000 +0100
|
--- ./gdb/testsuite/gdb.cp/cxxexec.cc 1970-01-01 01:00:00.000000000 +0100
|
||||||
+++ ./gdb/testsuite/gdb.cp/cxxexec.cc 2010-05-29 01:18:56.000000000 +0200
|
+++ ./gdb/testsuite/gdb.cp/cxxexec.cc 2010-05-29 01:18:56.000000000 +0200
|
||||||
@@ -0,0 +1,25 @@
|
@@ -0,0 +1,25 @@
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
Index: gdb-7.0.50.20100115/gdb/breakpoint.c
|
Index: gdb-7.1.90.20100711/gdb/breakpoint.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/breakpoint.c 2010-01-15 21:35:16.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/breakpoint.c 2010-07-12 23:07:33.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/breakpoint.c 2010-01-15 21:51:20.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/breakpoint.c 2010-07-13 00:38:04.000000000 +0200
|
||||||
@@ -9167,6 +9167,49 @@ update_breakpoint_locations (struct brea
|
@@ -10159,6 +10159,50 @@ update_breakpoint_locations (struct brea
|
||||||
update_global_location_list (1);
|
update_global_location_list (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,26 +49,27 @@ Index: gdb-7.0.50.20100115/gdb/breakpoint.c
|
|||||||
+ qsort (bp_location, bp_location_count, sizeof (*bp_location),
|
+ qsort (bp_location, bp_location_count, sizeof (*bp_location),
|
||||||
+ bp_location_compare);
|
+ bp_location_compare);
|
||||||
+}
|
+}
|
||||||
|
+
|
||||||
/* Reset a breakpoint given it's struct breakpoint * BINT.
|
/* Reset a breakpoint given it's struct breakpoint * BINT.
|
||||||
The value we return ends up being the return value from catch_errors.
|
The value we return ends up being the return value from catch_errors.
|
||||||
Index: gdb-7.0.50.20100115/gdb/breakpoint.h
|
Unused in this case. */
|
||||||
|
Index: gdb-7.1.90.20100711/gdb/breakpoint.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/breakpoint.h 2010-01-15 21:35:13.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/breakpoint.h 2010-07-12 23:07:33.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/breakpoint.h 2010-01-15 21:50:12.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/breakpoint.h 2010-07-13 00:37:34.000000000 +0200
|
||||||
@@ -1015,4 +1015,7 @@ extern struct breakpoint *get_tracepoint
|
@@ -1088,4 +1088,7 @@ extern void check_tracepoint_command (ch
|
||||||
is newly allocated; the caller should free when done with it. */
|
extern void start_rbreak_breakpoints (void);
|
||||||
extern VEC(breakpoint_p) *all_tracepoints (void);
|
extern void end_rbreak_breakpoints (void);
|
||||||
|
|
||||||
+extern void breakpoints_relocate (struct objfile *objfile,
|
+extern void breakpoints_relocate (struct objfile *objfile,
|
||||||
+ struct section_offsets *delta);
|
+ struct section_offsets *delta);
|
||||||
+
|
+
|
||||||
#endif /* !defined (BREAKPOINT_H) */
|
#endif /* !defined (BREAKPOINT_H) */
|
||||||
Index: gdb-7.0.50.20100115/gdb/objfiles.c
|
Index: gdb-7.1.90.20100711/gdb/objfiles.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.50.20100115.orig/gdb/objfiles.c 2010-01-15 21:35:13.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/objfiles.c 2010-05-16 02:46:46.000000000 +0200
|
||||||
+++ gdb-7.0.50.20100115/gdb/objfiles.c 2010-01-15 21:50:45.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/objfiles.c 2010-07-13 00:37:19.000000000 +0200
|
||||||
@@ -856,6 +856,11 @@ objfile_relocate1 (struct objfile *objfi
|
@@ -834,6 +834,11 @@ objfile_relocate1 (struct objfile *objfi
|
||||||
obj_section_addr (s));
|
obj_section_addr (s));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
Index: gdb-7.0.90.20100306/gdb/dwarf2read.c
|
Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.90.20100306.orig/gdb/dwarf2read.c 2010-03-06 23:27:30.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/dwarf2read.c 2010-07-13 00:26:25.000000000 +0200
|
||||||
+++ gdb-7.0.90.20100306/gdb/dwarf2read.c 2010-03-06 23:28:43.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/dwarf2read.c 2010-07-13 00:34:00.000000000 +0200
|
||||||
@@ -5910,7 +5910,12 @@ read_common_block (struct die_info *die,
|
@@ -5737,7 +5737,12 @@ read_common_block (struct die_info *die,
|
||||||
{
|
{
|
||||||
struct attribute *attr;
|
struct attribute *attr;
|
||||||
struct symbol *sym;
|
struct symbol *sym;
|
||||||
@ -16,7 +16,7 @@ Index: gdb-7.0.90.20100306/gdb/dwarf2read.c
|
|||||||
|
|
||||||
attr = dwarf2_attr (die, DW_AT_location, cu);
|
attr = dwarf2_attr (die, DW_AT_location, cu);
|
||||||
if (attr)
|
if (attr)
|
||||||
@@ -5919,6 +5924,7 @@ read_common_block (struct die_info *die,
|
@@ -5746,6 +5751,7 @@ read_common_block (struct die_info *die,
|
||||||
if (attr_form_is_block (attr))
|
if (attr_form_is_block (attr))
|
||||||
{
|
{
|
||||||
base = decode_locdesc (DW_BLOCK (attr), cu);
|
base = decode_locdesc (DW_BLOCK (attr), cu);
|
||||||
@ -24,7 +24,7 @@ Index: gdb-7.0.90.20100306/gdb/dwarf2read.c
|
|||||||
}
|
}
|
||||||
else if (attr_form_is_section_offset (attr))
|
else if (attr_form_is_section_offset (attr))
|
||||||
{
|
{
|
||||||
@@ -5980,12 +5986,15 @@ read_common_block (struct die_info *die,
|
@@ -5807,12 +5813,15 @@ read_common_block (struct die_info *die,
|
||||||
else
|
else
|
||||||
dwarf2_complex_location_expr_complaint ();
|
dwarf2_complex_location_expr_complaint ();
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ Index: gdb-7.0.90.20100306/gdb/dwarf2read.c
|
|||||||
else
|
else
|
||||||
SET_FIELD_PHYSNAME (*field, SYMBOL_LINKAGE_NAME (sym));
|
SET_FIELD_PHYSNAME (*field, SYMBOL_LINKAGE_NAME (sym));
|
||||||
FIELD_TYPE (*field) = SYMBOL_TYPE (sym);
|
FIELD_TYPE (*field) = SYMBOL_TYPE (sym);
|
||||||
@@ -5999,7 +6008,7 @@ read_common_block (struct die_info *die,
|
@@ -5826,7 +5835,7 @@ read_common_block (struct die_info *die,
|
||||||
|
|
||||||
sym = new_symbol (die, type, cu);
|
sym = new_symbol (die, type, cu);
|
||||||
/* SYMBOL_VALUE_ADDRESS never gets used as all its fields are static. */
|
/* SYMBOL_VALUE_ADDRESS never gets used as all its fields are static. */
|
||||||
@ -51,11 +51,11 @@ Index: gdb-7.0.90.20100306/gdb/dwarf2read.c
|
|||||||
|
|
||||||
set_die_type (die, type, cu);
|
set_die_type (die, type, cu);
|
||||||
}
|
}
|
||||||
Index: gdb-7.0.90.20100306/gdb/gdbtypes.h
|
Index: gdb-7.1.90.20100711/gdb/gdbtypes.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.90.20100306.orig/gdb/gdbtypes.h 2010-03-06 23:26:34.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/gdbtypes.h 2010-07-12 23:07:34.000000000 +0200
|
||||||
+++ gdb-7.0.90.20100306/gdb/gdbtypes.h 2010-03-06 23:28:43.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/gdbtypes.h 2010-07-13 00:34:00.000000000 +0200
|
||||||
@@ -412,6 +412,7 @@ enum type_instance_flag_value
|
@@ -395,6 +395,7 @@ enum type_instance_flag_value
|
||||||
enum field_loc_kind
|
enum field_loc_kind
|
||||||
{
|
{
|
||||||
FIELD_LOC_KIND_BITPOS, /* bitpos */
|
FIELD_LOC_KIND_BITPOS, /* bitpos */
|
||||||
@ -63,7 +63,7 @@ Index: gdb-7.0.90.20100306/gdb/gdbtypes.h
|
|||||||
FIELD_LOC_KIND_PHYSADDR, /* physaddr */
|
FIELD_LOC_KIND_PHYSADDR, /* physaddr */
|
||||||
FIELD_LOC_KIND_PHYSNAME /* physname */
|
FIELD_LOC_KIND_PHYSNAME /* physname */
|
||||||
};
|
};
|
||||||
@@ -591,6 +592,7 @@ struct main_type
|
@@ -577,6 +578,7 @@ struct main_type
|
||||||
is the location (in the target) of the static field.
|
is the location (in the target) of the static field.
|
||||||
Otherwise, physname is the mangled label of the static field. */
|
Otherwise, physname is the mangled label of the static field. */
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ Index: gdb-7.0.90.20100306/gdb/gdbtypes.h
|
|||||||
CORE_ADDR physaddr;
|
CORE_ADDR physaddr;
|
||||||
char *physname;
|
char *physname;
|
||||||
}
|
}
|
||||||
@@ -1091,6 +1093,7 @@ extern void allocate_gnat_aux_type (stru
|
@@ -1073,6 +1075,7 @@ extern void allocate_gnat_aux_type (stru
|
||||||
#define FIELD_LOC_KIND(thisfld) ((thisfld).loc_kind)
|
#define FIELD_LOC_KIND(thisfld) ((thisfld).loc_kind)
|
||||||
#define FIELD_BITPOS(thisfld) ((thisfld).loc.bitpos)
|
#define FIELD_BITPOS(thisfld) ((thisfld).loc.bitpos)
|
||||||
#define FIELD_STATIC_PHYSNAME(thisfld) ((thisfld).loc.physname)
|
#define FIELD_STATIC_PHYSNAME(thisfld) ((thisfld).loc.physname)
|
||||||
@ -79,7 +79,7 @@ Index: gdb-7.0.90.20100306/gdb/gdbtypes.h
|
|||||||
#define FIELD_STATIC_PHYSADDR(thisfld) ((thisfld).loc.physaddr)
|
#define FIELD_STATIC_PHYSADDR(thisfld) ((thisfld).loc.physaddr)
|
||||||
#define SET_FIELD_BITPOS(thisfld, bitpos) \
|
#define SET_FIELD_BITPOS(thisfld, bitpos) \
|
||||||
(FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_BITPOS, \
|
(FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_BITPOS, \
|
||||||
@@ -1098,6 +1101,7 @@ extern void allocate_gnat_aux_type (stru
|
@@ -1080,6 +1083,7 @@ extern void allocate_gnat_aux_type (stru
|
||||||
#define SET_FIELD_PHYSNAME(thisfld, name) \
|
#define SET_FIELD_PHYSNAME(thisfld, name) \
|
||||||
(FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSNAME, \
|
(FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSNAME, \
|
||||||
FIELD_STATIC_PHYSNAME (thisfld) = (name))
|
FIELD_STATIC_PHYSNAME (thisfld) = (name))
|
||||||
@ -87,7 +87,7 @@ Index: gdb-7.0.90.20100306/gdb/gdbtypes.h
|
|||||||
#define SET_FIELD_PHYSADDR(thisfld, addr) \
|
#define SET_FIELD_PHYSADDR(thisfld, addr) \
|
||||||
(FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSADDR, \
|
(FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSADDR, \
|
||||||
FIELD_STATIC_PHYSADDR (thisfld) = (addr))
|
FIELD_STATIC_PHYSADDR (thisfld) = (addr))
|
||||||
@@ -1110,6 +1114,7 @@ extern void allocate_gnat_aux_type (stru
|
@@ -1092,6 +1096,7 @@ extern void allocate_gnat_aux_type (stru
|
||||||
#define TYPE_FIELD_LOC_KIND(thistype, n) FIELD_LOC_KIND (TYPE_FIELD (thistype, n))
|
#define TYPE_FIELD_LOC_KIND(thistype, n) FIELD_LOC_KIND (TYPE_FIELD (thistype, n))
|
||||||
#define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS (TYPE_FIELD (thistype, n))
|
#define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS (TYPE_FIELD (thistype, n))
|
||||||
#define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME (TYPE_FIELD (thistype, n))
|
#define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME (TYPE_FIELD (thistype, n))
|
||||||
@ -95,11 +95,11 @@ Index: gdb-7.0.90.20100306/gdb/gdbtypes.h
|
|||||||
#define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR (TYPE_FIELD (thistype, n))
|
#define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR (TYPE_FIELD (thistype, n))
|
||||||
#define TYPE_FIELD_ARTIFICIAL(thistype, n) FIELD_ARTIFICIAL(TYPE_FIELD(thistype,n))
|
#define TYPE_FIELD_ARTIFICIAL(thistype, n) FIELD_ARTIFICIAL(TYPE_FIELD(thistype,n))
|
||||||
#define TYPE_FIELD_BITSIZE(thistype, n) FIELD_BITSIZE(TYPE_FIELD(thistype,n))
|
#define TYPE_FIELD_BITSIZE(thistype, n) FIELD_BITSIZE(TYPE_FIELD(thistype,n))
|
||||||
Index: gdb-7.0.90.20100306/gdb/jv-lang.c
|
Index: gdb-7.1.90.20100711/gdb/jv-lang.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.90.20100306.orig/gdb/jv-lang.c 2010-03-06 23:19:13.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/jv-lang.c 2010-05-17 19:18:39.000000000 +0200
|
||||||
+++ gdb-7.0.90.20100306/gdb/jv-lang.c 2010-03-06 23:28:43.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/jv-lang.c 2010-07-13 00:34:00.000000000 +0200
|
||||||
@@ -416,7 +416,8 @@ java_link_class_type (struct gdbarch *gd
|
@@ -409,7 +409,8 @@ java_link_class_type (struct gdbarch *gd
|
||||||
|
|
||||||
fields = NULL;
|
fields = NULL;
|
||||||
nfields--; /* First set up dummy "class" field. */
|
nfields--; /* First set up dummy "class" field. */
|
||||||
@ -109,7 +109,7 @@ Index: gdb-7.0.90.20100306/gdb/jv-lang.c
|
|||||||
TYPE_FIELD_NAME (type, nfields) = "class";
|
TYPE_FIELD_NAME (type, nfields) = "class";
|
||||||
TYPE_FIELD_TYPE (type, nfields) = value_type (clas);
|
TYPE_FIELD_TYPE (type, nfields) = value_type (clas);
|
||||||
SET_TYPE_FIELD_PRIVATE (type, nfields);
|
SET_TYPE_FIELD_PRIVATE (type, nfields);
|
||||||
@@ -462,7 +463,8 @@ java_link_class_type (struct gdbarch *gd
|
@@ -457,7 +458,8 @@ java_link_class_type (struct gdbarch *gd
|
||||||
SET_TYPE_FIELD_PROTECTED (type, i);
|
SET_TYPE_FIELD_PROTECTED (type, i);
|
||||||
}
|
}
|
||||||
if (accflags & 0x0008) /* ACC_STATIC */
|
if (accflags & 0x0008) /* ACC_STATIC */
|
||||||
@ -119,27 +119,27 @@ Index: gdb-7.0.90.20100306/gdb/jv-lang.c
|
|||||||
else
|
else
|
||||||
TYPE_FIELD_BITPOS (type, i) = 8 * boffset;
|
TYPE_FIELD_BITPOS (type, i) = 8 * boffset;
|
||||||
if (accflags & 0x8000) /* FIELD_UNRESOLVED_FLAG */
|
if (accflags & 0x8000) /* FIELD_UNRESOLVED_FLAG */
|
||||||
Index: gdb-7.0.90.20100306/gdb/value.c
|
Index: gdb-7.1.90.20100711/gdb/value.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-7.0.90.20100306.orig/gdb/value.c 2010-03-06 23:19:13.000000000 +0100
|
--- gdb-7.1.90.20100711.orig/gdb/value.c 2010-07-12 23:07:33.000000000 +0200
|
||||||
+++ gdb-7.0.90.20100306/gdb/value.c 2010-03-06 23:28:43.000000000 +0100
|
+++ gdb-7.1.90.20100711/gdb/value.c 2010-07-13 00:35:21.000000000 +0200
|
||||||
@@ -1897,7 +1897,8 @@ value_static_field (struct type *type, i
|
@@ -1943,7 +1943,8 @@ value_static_field (struct type *type, i
|
||||||
if (TYPE_FIELD_LOC_KIND (type, fieldno) == FIELD_LOC_KIND_PHYSADDR)
|
|
||||||
{
|
{
|
||||||
retval = value_at (TYPE_FIELD_TYPE (type, fieldno),
|
case FIELD_LOC_KIND_PHYSADDR:
|
||||||
- TYPE_FIELD_STATIC_PHYSADDR (type, fieldno));
|
retval = value_at_lazy (TYPE_FIELD_TYPE (type, fieldno),
|
||||||
+ TYPE_FIELD_STATIC_PHYSADDR (type, fieldno)
|
- TYPE_FIELD_STATIC_PHYSADDR (type, fieldno));
|
||||||
+ + (TYPE_OBJFILE (type) == NULL ? 0 : ANOFFSET (TYPE_OBJFILE (type)->section_offsets, SECT_OFF_TEXT (TYPE_OBJFILE (type)))));
|
+ TYPE_FIELD_STATIC_PHYSADDR (type, fieldno)
|
||||||
}
|
+ + (TYPE_OBJFILE (type) == NULL ? 0 : ANOFFSET (TYPE_OBJFILE (type)->section_offsets, SECT_OFF_TEXT (TYPE_OBJFILE (type)))));
|
||||||
else
|
break;
|
||||||
|
case FIELD_LOC_KIND_PHYSNAME:
|
||||||
{
|
{
|
||||||
@@ -1927,7 +1928,8 @@ value_static_field (struct type *type, i
|
@@ -1977,7 +1978,8 @@ value_static_field (struct type *type, i
|
||||||
}
|
}
|
||||||
if (retval && VALUE_LVAL (retval) == lval_memory)
|
if (retval && VALUE_LVAL (retval) == lval_memory)
|
||||||
SET_FIELD_PHYSADDR (TYPE_FIELD (type, fieldno),
|
SET_FIELD_PHYSADDR (TYPE_FIELD (type, fieldno),
|
||||||
- value_address (retval));
|
- value_address (retval));
|
||||||
+ value_address (retval)
|
+ value_address (retval)
|
||||||
+ - (TYPE_OBJFILE (type) == NULL ? 0 : ANOFFSET (TYPE_OBJFILE (type)->section_offsets, SECT_OFF_TEXT (TYPE_OBJFILE (type)))));
|
+ - (TYPE_OBJFILE (type) == NULL ? 0 : ANOFFSET (TYPE_OBJFILE (type)->section_offsets, SECT_OFF_TEXT (TYPE_OBJFILE (type)))));
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return retval;
|
default:
|
||||||
}
|
|
||||||
|
@ -1,105 +0,0 @@
|
|||||||
commit a683bac73af74a757591672d89d720169c0b5ec9
|
|
||||||
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
Date: Thu May 13 18:08:30 2010 +0200
|
|
||||||
|
|
||||||
Support DW_AT_upper_bound is referencing an optimized-out variable.
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=591879
|
|
||||||
|
|
||||||
--- a/gdb/dwarf2loc.c
|
|
||||||
+++ b/gdb/dwarf2loc.c
|
|
||||||
@@ -383,6 +383,9 @@ dwarf_loclist_baton_eval (struct dwarf2_loclist_baton *dllbaton,
|
|
||||||
size_t size;
|
|
||||||
struct value *val;
|
|
||||||
|
|
||||||
+ if (!dllbaton)
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
data = find_location_expression (dllbaton, &size,
|
|
||||||
get_frame_address_in_block (frame));
|
|
||||||
if (data == NULL)
|
|
||||||
--- a/gdb/dwarf2read.c
|
|
||||||
+++ b/gdb/dwarf2read.c
|
|
||||||
@@ -11693,6 +11693,11 @@ dwarf2_attr_to_loclist_baton (struct attribute *attr, struct dwarf2_cu *cu)
|
|
||||||
{
|
|
||||||
struct dwarf2_loclist_baton *baton;
|
|
||||||
|
|
||||||
+ /* DW_AT_location of the referenced DIE may be missing if the referenced
|
|
||||||
+ variable has been optimized out. */
|
|
||||||
+ if (!attr)
|
|
||||||
+ return NULL;
|
|
||||||
+
|
|
||||||
if (!(attr_form_is_section_offset (attr)
|
|
||||||
/* ".debug_loc" may not exist at all, or the offset may be outside
|
|
||||||
the section. If so, fall through to the complaint in the
|
|
||||||
--- a/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S
|
|
||||||
+++ b/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.S
|
|
||||||
@@ -51,6 +51,17 @@ vardata:
|
|
||||||
.4byte .Llen_var-.Lcu1_begin /* DW_AT_upper_bound */
|
|
||||||
.byte 0 /* End of children of die */
|
|
||||||
|
|
||||||
+ /* DW_AT_upper_bound is referencing an optimized-out variable. */
|
|
||||||
+.Larrayb_type:
|
|
||||||
+ .uleb128 2 /* Abbrev: DW_TAG_array_type */
|
|
||||||
+ .4byte .Lchar_type-.Lcu1_begin /* DW_AT_type */
|
|
||||||
+
|
|
||||||
+ .uleb128 3 /* Abbrev: DW_TAG_subrange_type */
|
|
||||||
+ .4byte .Luint_type-.Lcu1_begin /* DW_AT_type */
|
|
||||||
+ .byte 0 /* DW_AT_lower_bound */
|
|
||||||
+ .4byte .Llenb_var-.Lcu1_begin /* DW_AT_upper_bound */
|
|
||||||
+ .byte 0 /* End of children of die */
|
|
||||||
+
|
|
||||||
.Luint_type:
|
|
||||||
.uleb128 4 /* Abbrev: DW_TAG_base_type */
|
|
||||||
.4byte .Luint_str /* DW_AT_name */
|
|
||||||
@@ -69,9 +80,24 @@ vardata:
|
|
||||||
.4byte .Luint_type-.Lcu1_begin /* DW_AT_type */
|
|
||||||
.4byte .Llen_loclist-.Lloclist /* DW_AT_location */
|
|
||||||
|
|
||||||
+ /* optimized-out variable for b_string. */
|
|
||||||
+.Llenb_var:
|
|
||||||
+ .uleb128 7 /* Abbrev: DW_TAG_variable artificial no DW_AT_location */
|
|
||||||
+ .byte 1 /* DW_AT_artificial */
|
|
||||||
+ .4byte .Luint_type-.Lcu1_begin /* DW_AT_type */
|
|
||||||
+
|
|
||||||
.uleb128 6 /* Abbrev: DW_TAG_variable DW_FORM_string */
|
|
||||||
.string "a_string" /* DW_AT_name */
|
|
||||||
- .4byte .Larray_type-.Lcu1_begin/* DW_AT_type */
|
|
||||||
+ .4byte .Larray_type-.Lcu1_begin /* DW_AT_type */
|
|
||||||
+ .byte 2f - 1f /* DW_AT_location */
|
|
||||||
+1: .byte 3 /* DW_OP_addr */
|
|
||||||
+ .4byte vardata /* <addr> */
|
|
||||||
+2:
|
|
||||||
+
|
|
||||||
+ /* DW_AT_upper_bound is referencing an optimized-out variable. */
|
|
||||||
+ .uleb128 6 /* Abbrev: DW_TAG_variable DW_FORM_string */
|
|
||||||
+ .string "b_string" /* DW_AT_name */
|
|
||||||
+ .4byte .Larrayb_type-.Lcu1_begin /* DW_AT_type */
|
|
||||||
.byte 2f - 1f /* DW_AT_location */
|
|
||||||
1: .byte 3 /* DW_OP_addr */
|
|
||||||
.4byte vardata /* <addr> */
|
|
||||||
@@ -164,6 +190,16 @@ vardata:
|
|
||||||
.byte 0x0 /* Terminator */
|
|
||||||
.byte 0x0 /* Terminator */
|
|
||||||
|
|
||||||
+ .uleb128 7 /* Abbrev code */
|
|
||||||
+ .uleb128 0x34 /* DW_TAG_variable */
|
|
||||||
+ .byte 0x0 /* no_children */
|
|
||||||
+ .uleb128 0x34 /* DW_AT_artificial */
|
|
||||||
+ .uleb128 0x0c /* DW_FORM_flag */
|
|
||||||
+ .uleb128 0x49 /* DW_AT_type */
|
|
||||||
+ .uleb128 0x13 /* DW_FORM_ref4 */
|
|
||||||
+ .byte 0x0 /* Terminator */
|
|
||||||
+ .byte 0x0 /* Terminator */
|
|
||||||
+
|
|
||||||
.byte 0x0 /* Terminator */
|
|
||||||
|
|
||||||
/* String table */
|
|
||||||
--- a/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp
|
|
||||||
+++ b/gdb/testsuite/gdb.dwarf2/dw2-bound-loclist.exp
|
|
||||||
@@ -46,3 +46,6 @@ if ![runto "*main"] {
|
|
||||||
|
|
||||||
gdb_test "p a_string" { = "seen"}
|
|
||||||
gdb_test "ptype a_string" {type = char \[4\]}
|
|
||||||
+
|
|
||||||
+gdb_test "p b_string" { = (0x[0-9a-f]+ )?"seennotseen"}
|
|
||||||
+gdb_test "ptype b_string" {type = char \[\]}
|
|
@ -1,21 +0,0 @@
|
|||||||
commit ec5a7769d5c05542d12fc21afa25f32360db7de4
|
|
||||||
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
Date: Wed May 12 22:00:46 2010 +0200
|
|
||||||
|
|
||||||
Fix mb_reserve:
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=590635
|
|
||||||
|
|
||||||
diff --git a/gdb/testsuite/gdb.base/vla-overflow.exp b/gdb/testsuite/gdb.base/vla-overflow.exp
|
|
||||||
index 7203a48..24a608f 100644
|
|
||||||
--- a/gdb/testsuite/gdb.base/vla-overflow.exp
|
|
||||||
+++ b/gdb/testsuite/gdb.base/vla-overflow.exp
|
|
||||||
@@ -66,7 +66,8 @@ proc memory_v_pages_get {} {
|
|
||||||
|
|
||||||
set pages_found [memory_v_pages_get]
|
|
||||||
|
|
||||||
-set mb_reserve 10
|
|
||||||
+# s390x with glibc-debuginfo.s390x installed used approx. 16MB.
|
|
||||||
+set mb_reserve 40
|
|
||||||
verbose -log "pages_found = $pages_found, mb_reserve = $mb_reserve"
|
|
||||||
set kb_found [expr $pages_found * $pagesize / 1024]
|
|
||||||
set kb_permit [expr $kb_found + 1 * 1024 + $mb_reserve * 1024]
|
|
22582
gdb-archer.patch
22582
gdb-archer.patch
File diff suppressed because it is too large
Load Diff
@ -1,26 +1,20 @@
|
|||||||
--- a/gdb/config/i386/linux64.mh
|
Index: gdb-7.1.90.20100711/gdb/config/i386/linux64.mh
|
||||||
+++ b/gdb/config/i386/linux64.mh
|
===================================================================
|
||||||
|
--- gdb-7.1.90.20100711.orig/gdb/config/i386/linux64.mh 2010-05-28 20:50:31.000000000 +0200
|
||||||
|
+++ gdb-7.1.90.20100711/gdb/config/i386/linux64.mh 2010-07-13 19:02:54.000000000 +0200
|
||||||
@@ -2,7 +2,7 @@
|
@@ -2,7 +2,7 @@
|
||||||
NATDEPFILES= inf-ptrace.o fork-child.o \
|
NATDEPFILES= inf-ptrace.o fork-child.o \
|
||||||
i386-nat.o amd64-nat.o amd64-linux-nat.o linux-nat.o \
|
i386-nat.o amd64-nat.o amd64-linux-nat.o linux-nat.o \
|
||||||
proc-service.o linux-thread-db.o linux-fork.o
|
proc-service.o linux-thread-db.o linux-fork.o
|
||||||
-NAT_FILE= config/nm-linux.h
|
-NAT_FILE= config/nm-linux.h
|
||||||
+NAT_FILE= nm-linux64.h
|
+NAT_FILE= nm-linux64.h
|
||||||
|
NAT_CDEPS = $(srcdir)/proc-service.list
|
||||||
|
|
||||||
# The dynamically loaded libthread_db needs access to symbols in the
|
# The dynamically loaded libthread_db needs access to symbols in the
|
||||||
# gdb executable.
|
Index: gdb-7.1.90.20100711/gdb/config/i386/nm-linux64.h
|
||||||
--- a/gdb/config/i386/nm-linux.h
|
===================================================================
|
||||||
+++ b/gdb/config/i386/nm-linux.h
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
@@ -29,4 +29,7 @@
|
+++ gdb-7.1.90.20100711/gdb/config/i386/nm-linux64.h 2010-07-13 19:02:28.000000000 +0200
|
||||||
#define FILL_FPXREGSET
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+/* Red Hat backward compatibility with gdb-6.8. */
|
|
||||||
+#define target_can_use_hardware_watchpoint(type, cnt, ot) 1
|
|
||||||
+
|
|
||||||
#endif /* nm-linux.h */
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gdb/config/i386/nm-linux64.h
|
|
||||||
@@ -0,0 +1,28 @@
|
@@ -0,0 +1,28 @@
|
||||||
+/* Native support for GNU/Linux amd64.
|
+/* Native support for GNU/Linux amd64.
|
||||||
+
|
+
|
||||||
@ -50,9 +44,11 @@
|
|||||||
+#define target_can_use_hardware_watchpoint(type, cnt, ot) 1
|
+#define target_can_use_hardware_watchpoint(type, cnt, ot) 1
|
||||||
+
|
+
|
||||||
+#endif /* NM_LINUX64_H */
|
+#endif /* NM_LINUX64_H */
|
||||||
--- a/gdb/target.h
|
Index: gdb-7.1.90.20100711/gdb/target.h
|
||||||
+++ b/gdb/target.h
|
===================================================================
|
||||||
@@ -1257,8 +1257,10 @@ extern char *normal_pid_to_str (ptid_t ptid);
|
--- gdb-7.1.90.20100711.orig/gdb/target.h 2010-07-12 23:07:34.000000000 +0200
|
||||||
|
+++ gdb-7.1.90.20100711/gdb/target.h 2010-07-13 19:02:28.000000000 +0200
|
||||||
|
@@ -1298,8 +1298,10 @@ extern char *normal_pid_to_str (ptid_t p
|
||||||
bp_hardware_breakpoint. CNT is the number of such watchpoints used so far
|
bp_hardware_breakpoint. CNT is the number of such watchpoints used so far
|
||||||
(including this one?). OTHERTYPE is who knows what... */
|
(including this one?). OTHERTYPE is who knows what... */
|
||||||
|
|
||||||
@ -63,8 +59,10 @@
|
|||||||
|
|
||||||
#define target_region_ok_for_hw_watchpoint(addr, len) \
|
#define target_region_ok_for_hw_watchpoint(addr, len) \
|
||||||
(*current_target.to_region_ok_for_hw_watchpoint) (addr, len)
|
(*current_target.to_region_ok_for_hw_watchpoint) (addr, len)
|
||||||
--- /dev/null
|
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp
|
||||||
+++ b/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.base/watchpoint-hw-before-run.exp 2010-07-13 19:02:28.000000000 +0200
|
||||||
@@ -0,0 +1,40 @@
|
@@ -0,0 +1,40 @@
|
||||||
+# Copyright 2009, 2010 Free Software Foundation, Inc.
|
+# Copyright 2009, 2010 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
|
12
gdb-bz555076-gcore-small-height.patch
Normal file
12
gdb-bz555076-gcore-small-height.patch
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
--- a/gdb/gdb_gcore.sh
|
||||||
|
+++ b/gdb/gdb_gcore.sh
|
||||||
|
@@ -64,6 +64,9 @@ for pid in $*
|
||||||
|
do
|
||||||
|
# Write gdb script for pid $pid.
|
||||||
|
cat >>$tmpfile <<EOF
|
||||||
|
+set pagination off
|
||||||
|
+set width 0
|
||||||
|
+set height 0
|
||||||
|
attach $pid
|
||||||
|
gcore $name.$pid
|
||||||
|
detach
|
@ -1,427 +0,0 @@
|
|||||||
commit e5ea8d026015c2a0c7774788b425914857de1ffb
|
|
||||||
Author: pmuldoon <pmuldoon>
|
|
||||||
Date: Wed Apr 14 12:02:42 2010 +0000
|
|
||||||
|
|
||||||
2010-04-14 Phil Muldoon <pmuldoon@redhat.com>
|
|
||||||
|
|
||||||
PR python/11381
|
|
||||||
|
|
||||||
* python/py-prettyprint.c (pretty_print_one_value): Test for
|
|
||||||
Py_None.
|
|
||||||
(print_string_repr): Test for Py_None. Set flags accordingly.
|
|
||||||
Return value depending on return type.
|
|
||||||
(print_children): Take a value indicating whether data was printed
|
|
||||||
before this function was called. Alter output accordingly.
|
|
||||||
(apply_val_pretty_printer): Capture return value from
|
|
||||||
print_string_repr and pass to print_children.
|
|
||||||
|
|
||||||
2010-04-14 Phil Muldoon <pmuldoon@redhat.com>
|
|
||||||
|
|
||||||
* gdb.python/py-prettyprint.py (NoStringContainerPrinter): New printer.
|
|
||||||
* gdb.python/py-prettyprint.c: Add justchildren struct, typedefs.
|
|
||||||
* gdb.python/py-prettyprint.exp: New test for to_string returning None.
|
|
||||||
* gdb.python/py-mi.exp: New test for to_string returning None.
|
|
||||||
|
|
||||||
2010-04-14 Phil Muldoon <pmuldoon@redhat.com>
|
|
||||||
|
|
||||||
* gdb.texinfo (Pretty Printing): Document behaviour when to_string
|
|
||||||
returns None.
|
|
||||||
|
|
||||||
### a/gdb/ChangeLog
|
|
||||||
### b/gdb/ChangeLog
|
|
||||||
## -1,3 +1,16 @@
|
|
||||||
+2010-04-14 Phil Muldoon <pmuldoon@redhat.com>
|
|
||||||
+
|
|
||||||
+ PR python/11381
|
|
||||||
+
|
|
||||||
+ * python/py-prettyprint.c (pretty_print_one_value): Test for
|
|
||||||
+ Py_None.
|
|
||||||
+ (print_string_repr): Test for Py_None. Set flags accordingly.
|
|
||||||
+ Return value depending on return type.
|
|
||||||
+ (print_children): Take a value indicating whether data was printed
|
|
||||||
+ before this function was called. Alter output accordingly.
|
|
||||||
+ (apply_val_pretty_printer): Capture return value from
|
|
||||||
+ print_string_repr and pass to print_children.
|
|
||||||
+
|
|
||||||
2010-04-13 Mark Kettenis <kettenis@gnu.org>
|
|
||||||
|
|
||||||
PR corefiles/11481
|
|
||||||
### a/gdb/doc/ChangeLog
|
|
||||||
### b/gdb/doc/ChangeLog
|
|
||||||
## -1,3 +1,8 @@
|
|
||||||
+2010-04-14 Phil Muldoon <pmuldoon@redhat.com>
|
|
||||||
+
|
|
||||||
+ * gdb.texinfo (Pretty Printing): Document behaviour when to_string
|
|
||||||
+ returns None.
|
|
||||||
+
|
|
||||||
2010-04-09 Stan Shebs <stan@codesourcery.com>
|
|
||||||
|
|
||||||
* gdb.texinfo (gdb/mi Tracepoint Commands) <-trace-status>:
|
|
||||||
Index: gdb-7.1/gdb/doc/gdb.texinfo
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/doc/gdb.texinfo 2010-06-30 03:22:07.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/doc/gdb.texinfo 2010-06-30 03:22:20.000000000 +0200
|
|
||||||
@@ -20344,6 +20344,9 @@ the resulting value. Again, this may re
|
|
||||||
pretty-printer. Python scalars (integers, floats, and booleans) and
|
|
||||||
strings are convertible to @code{gdb.Value}; other types are not.
|
|
||||||
|
|
||||||
+Finally, if this method returns @code{None} then no further operations
|
|
||||||
+are peformed in this method and nothing is printed.
|
|
||||||
+
|
|
||||||
If the result is not one of these types, an exception is raised.
|
|
||||||
@end defop
|
|
||||||
|
|
||||||
Index: gdb-7.1/gdb/python/py-prettyprint.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/python/py-prettyprint.c 2010-06-30 03:22:02.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/python/py-prettyprint.c 2010-06-30 03:23:38.000000000 +0200
|
|
||||||
@@ -125,9 +125,12 @@ find_pretty_printer (PyObject *value)
|
|
||||||
|
|
||||||
/* Pretty-print a single value, via the printer object PRINTER.
|
|
||||||
If the function returns a string, a PyObject containing the string
|
|
||||||
- is returned. Otherwise, if the function returns a value,
|
|
||||||
- *OUT_VALUE is set to the value, and NULL is returned. On error,
|
|
||||||
- *OUT_VALUE is set to NULL, and NULL is returned. */
|
|
||||||
+ is returned. If the function returns Py_NONE that means the pretty
|
|
||||||
+ printer returned the Python None as a value. Otherwise, if the
|
|
||||||
+ function returns a value, *OUT_VALUE is set to the value, and NULL
|
|
||||||
+ is returned. On error, *OUT_VALUE is set to NULL, and NULL is
|
|
||||||
+ returned. */
|
|
||||||
+
|
|
||||||
static PyObject *
|
|
||||||
pretty_print_one_value (PyObject *printer, struct value **out_value)
|
|
||||||
{
|
|
||||||
@@ -140,7 +143,8 @@ pretty_print_one_value (PyObject *printe
|
|
||||||
result = PyObject_CallMethodObjArgs (printer, gdbpy_to_string_cst, NULL);
|
|
||||||
if (result)
|
|
||||||
{
|
|
||||||
- if (! gdbpy_is_string (result) && ! gdbpy_is_lazy_string (result))
|
|
||||||
+ if (! gdbpy_is_string (result) && ! gdbpy_is_lazy_string (result)
|
|
||||||
+ && result != Py_None)
|
|
||||||
{
|
|
||||||
*out_value = convert_value_from_python (result);
|
|
||||||
if (PyErr_Occurred ())
|
|
||||||
@@ -184,8 +188,11 @@ gdbpy_get_display_hint (PyObject *printe
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Helper for apply_val_pretty_printer which calls to_string and
|
|
||||||
- formats the result. */
|
|
||||||
-static void
|
|
||||||
+ formats the result. If the value returnd is Py_None, nothing is
|
|
||||||
+ printed and the function returns a 1; in all other cases data is
|
|
||||||
+ printed as given by the pretty printer and the function returns 0.
|
|
||||||
+*/
|
|
||||||
+static int
|
|
||||||
print_string_repr (PyObject *printer, const char *hint,
|
|
||||||
struct ui_file *stream, int recurse,
|
|
||||||
const struct value_print_options *options,
|
|
||||||
@@ -194,52 +201,58 @@ print_string_repr (PyObject *printer, co
|
|
||||||
{
|
|
||||||
struct value *replacement = NULL;
|
|
||||||
PyObject *py_str = NULL;
|
|
||||||
+ int is_py_none = 0;
|
|
||||||
|
|
||||||
py_str = pretty_print_one_value (printer, &replacement);
|
|
||||||
if (py_str)
|
|
||||||
{
|
|
||||||
- gdb_byte *output = NULL;
|
|
||||||
- long length;
|
|
||||||
- struct type *type;
|
|
||||||
- char *encoding = NULL;
|
|
||||||
- PyObject *string = NULL;
|
|
||||||
- int is_lazy;
|
|
||||||
-
|
|
||||||
- is_lazy = gdbpy_is_lazy_string (py_str);
|
|
||||||
- if (is_lazy)
|
|
||||||
- output = gdbpy_extract_lazy_string (py_str, &type, &length, &encoding);
|
|
||||||
+ if (py_str == Py_None)
|
|
||||||
+ is_py_none = 1;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
- string = python_string_to_target_python_string (py_str);
|
|
||||||
- if (string)
|
|
||||||
+ gdb_byte *output = NULL;
|
|
||||||
+ long length;
|
|
||||||
+ struct type *type;
|
|
||||||
+ char *encoding = NULL;
|
|
||||||
+ PyObject *string = NULL;
|
|
||||||
+ int is_lazy;
|
|
||||||
+
|
|
||||||
+ is_lazy = gdbpy_is_lazy_string (py_str);
|
|
||||||
+ if (is_lazy)
|
|
||||||
+ output = gdbpy_extract_lazy_string (py_str, &type, &length, &encoding);
|
|
||||||
+ else
|
|
||||||
{
|
|
||||||
- output = PyString_AsString (string);
|
|
||||||
- length = PyString_Size (string);
|
|
||||||
- type = builtin_type (gdbarch)->builtin_char;
|
|
||||||
+ string = python_string_to_target_python_string (py_str);
|
|
||||||
+ if (string)
|
|
||||||
+ {
|
|
||||||
+ output = PyString_AsString (string);
|
|
||||||
+ length = PyString_Size (string);
|
|
||||||
+ type = builtin_type (gdbarch)->builtin_char;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ gdbpy_print_stack ();
|
|
||||||
+
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (output)
|
|
||||||
+ {
|
|
||||||
+ if (is_lazy || (hint && !strcmp (hint, "string")))
|
|
||||||
+ LA_PRINT_STRING (stream, type, output, length, encoding,
|
|
||||||
+ 0, options);
|
|
||||||
+ else
|
|
||||||
+ fputs_filtered (output, stream);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gdbpy_print_stack ();
|
|
||||||
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- if (output)
|
|
||||||
- {
|
|
||||||
- if (is_lazy || (hint && !strcmp (hint, "string")))
|
|
||||||
- LA_PRINT_STRING (stream, type, output, length, encoding,
|
|
||||||
- 0, options);
|
|
||||||
+ if (string)
|
|
||||||
+ Py_DECREF (string);
|
|
||||||
else
|
|
||||||
- fputs_filtered (output, stream);
|
|
||||||
- }
|
|
||||||
- else
|
|
||||||
- gdbpy_print_stack ();
|
|
||||||
-
|
|
||||||
- if (string)
|
|
||||||
- Py_DECREF (string);
|
|
||||||
- else
|
|
||||||
- xfree (output);
|
|
||||||
+ xfree (output);
|
|
||||||
|
|
||||||
- xfree (encoding);
|
|
||||||
- Py_DECREF (py_str);
|
|
||||||
+ xfree (encoding);
|
|
||||||
+ Py_DECREF (py_str);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
else if (replacement)
|
|
||||||
{
|
|
||||||
@@ -250,6 +263,8 @@ print_string_repr (PyObject *printer, co
|
|
||||||
}
|
|
||||||
else
|
|
||||||
gdbpy_print_stack ();
|
|
||||||
+
|
|
||||||
+ return is_py_none;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -328,12 +343,14 @@ push_dummy_python_frame ()
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Helper for apply_val_pretty_printer that formats children of the
|
|
||||||
- printer, if any exist. */
|
|
||||||
+ printer, if any exist. If is_py_none is true, then nothing has
|
|
||||||
+ been printed by to_string, and format output accordingly. */
|
|
||||||
static void
|
|
||||||
print_children (PyObject *printer, const char *hint,
|
|
||||||
struct ui_file *stream, int recurse,
|
|
||||||
const struct value_print_options *options,
|
|
||||||
- const struct language_defn *language)
|
|
||||||
+ const struct language_defn *language,
|
|
||||||
+ int is_py_none)
|
|
||||||
{
|
|
||||||
int is_map, is_array, done_flag, pretty;
|
|
||||||
unsigned int i;
|
|
||||||
@@ -413,7 +430,13 @@ print_children (PyObject *printer, const
|
|
||||||
2. Arrays. Always print a ",".
|
|
||||||
3. Other. Always print a ",". */
|
|
||||||
if (i == 0)
|
|
||||||
- fputs_filtered (" = {", stream);
|
|
||||||
+ {
|
|
||||||
+ if (is_py_none)
|
|
||||||
+ fputs_filtered ("{", stream);
|
|
||||||
+ else
|
|
||||||
+ fputs_filtered (" = {", stream);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
else if (! is_map || i % 2 == 0)
|
|
||||||
fputs_filtered (pretty ? "," : ", ", stream);
|
|
||||||
|
|
||||||
@@ -537,7 +560,7 @@ apply_val_pretty_printer (struct type *t
|
|
||||||
char *hint = NULL;
|
|
||||||
struct cleanup *cleanups;
|
|
||||||
int result = 0;
|
|
||||||
-
|
|
||||||
+ int is_py_none = 0;
|
|
||||||
cleanups = ensure_python_env (gdbarch, language);
|
|
||||||
|
|
||||||
/* Instantiate the printer. */
|
|
||||||
@@ -562,9 +585,11 @@ apply_val_pretty_printer (struct type *t
|
|
||||||
make_cleanup (free_current_contents, &hint);
|
|
||||||
|
|
||||||
/* Print the section */
|
|
||||||
- print_string_repr (printer, hint, stream, recurse, options, language,
|
|
||||||
- gdbarch);
|
|
||||||
- print_children (printer, hint, stream, recurse, options, language);
|
|
||||||
+ is_py_none = print_string_repr (printer, hint, stream, recurse,
|
|
||||||
+ options, language, gdbarch);
|
|
||||||
+ print_children (printer, hint, stream, recurse, options, language,
|
|
||||||
+ is_py_none);
|
|
||||||
+
|
|
||||||
result = 1;
|
|
||||||
|
|
||||||
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.python/py-mi.exp
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/testsuite/gdb.python/py-mi.exp 2010-01-14 09:03:37.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.python/py-mi.exp 2010-06-30 03:22:20.000000000 +0200
|
|
||||||
@@ -61,6 +61,16 @@ mi_list_varobj_children container {
|
|
||||||
|
|
||||||
mi_delete_varobj container "delete varobj"
|
|
||||||
|
|
||||||
+mi_create_dynamic_varobj nscont nstype \
|
|
||||||
+ "create nscont varobj, no pretty-printing"
|
|
||||||
+
|
|
||||||
+mi_list_varobj_children nscont {
|
|
||||||
+ { nscont.len len 0 int }
|
|
||||||
+ { nscont.elements elements 1 "int ." }
|
|
||||||
+} "examine nscont children=0, no pretty-printing"
|
|
||||||
+
|
|
||||||
+mi_delete_varobj nscont "delete varobj"
|
|
||||||
+
|
|
||||||
mi_gdb_test "-enable-pretty-printing" ""
|
|
||||||
|
|
||||||
mi_create_varobj_checked string string_1 \
|
|
||||||
@@ -239,4 +249,29 @@ mi_continue_to_line \
|
|
||||||
|
|
||||||
mi_varobj_update_with_type_change container int 0 "update after type change"
|
|
||||||
|
|
||||||
+
|
|
||||||
+mi_continue_to_line \
|
|
||||||
+ [gdb_get_line_number {break to inspect struct and union} ${testfile}.c] \
|
|
||||||
+ "step to outer breakpoint"
|
|
||||||
+
|
|
||||||
+mi_create_dynamic_varobj nscont nstype \
|
|
||||||
+ "create nstype varobj"
|
|
||||||
+
|
|
||||||
+mi_list_varobj_children nscont {
|
|
||||||
+ { {nscont.\[0\]} {\[0\]} 0 int }
|
|
||||||
+ { {nscont.\[1\]} {\[1\]} 0 int }
|
|
||||||
+} "list children after setting update range"
|
|
||||||
+
|
|
||||||
+mi_gdb_test "-var-set-visualizer nscont None" \
|
|
||||||
+ "\\^done" \
|
|
||||||
+ "clear visualizer"
|
|
||||||
+
|
|
||||||
+mi_gdb_test "-var-update nscont" \
|
|
||||||
+ "\\^done,changelist=\\\[\\\]" \
|
|
||||||
+ "varobj update after clearing"
|
|
||||||
+
|
|
||||||
+mi_gdb_test "-var-set-visualizer nscont gdb.default_visualizer" \
|
|
||||||
+ "\\^done" \
|
|
||||||
+ "choose default visualizer"
|
|
||||||
+
|
|
||||||
remote_file host delete ${remote_python_file}
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.python/py-prettyprint.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/testsuite/gdb.python/py-prettyprint.c 2010-01-14 09:03:37.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.python/py-prettyprint.c 2010-06-30 03:22:20.000000000 +0200
|
|
||||||
@@ -119,6 +119,15 @@ typedef struct string_repr
|
|
||||||
|
|
||||||
/* This lets us avoid malloc. */
|
|
||||||
int array[100];
|
|
||||||
+int narray[10];
|
|
||||||
+
|
|
||||||
+struct justchildren
|
|
||||||
+{
|
|
||||||
+ int len;
|
|
||||||
+ int *elements;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+typedef struct justchildren nostring_type;
|
|
||||||
|
|
||||||
struct container
|
|
||||||
{
|
|
||||||
@@ -196,7 +205,9 @@ main ()
|
|
||||||
const struct string_repr cstring = { { "const string" } };
|
|
||||||
/* Clearing by being `static' could invoke an other GDB C++ bug. */
|
|
||||||
struct nullstr nullstr;
|
|
||||||
-
|
|
||||||
+ nostring_type nstype;
|
|
||||||
+ nstype.elements = narray;
|
|
||||||
+ nstype.len = 0;
|
|
||||||
|
|
||||||
init_ss(&ss, 1, 2);
|
|
||||||
init_ss(ssa+0, 3, 4);
|
|
||||||
@@ -249,5 +260,9 @@ main ()
|
|
||||||
do_nothing ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+ nstype.elements[0] = 7;
|
|
||||||
+ nstype.elements[1] = 42;
|
|
||||||
+ nstype.len = 2;
|
|
||||||
+
|
|
||||||
return 0; /* break to inspect struct and union */
|
|
||||||
}
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.python/py-prettyprint.exp
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/testsuite/gdb.python/py-prettyprint.exp 2010-06-30 03:22:02.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.python/py-prettyprint.exp 2010-06-30 03:24:14.000000000 +0200
|
|
||||||
@@ -115,6 +115,7 @@ proc run_lang_tests {lang} {
|
|
||||||
|
|
||||||
gdb_test "print nullstr" "RuntimeError: Error reading string from inferior.*"
|
|
||||||
|
|
||||||
+ gdb_test "print nstype" " = {$nl *.0. = 7,$nl *.1. = 42$nl}"
|
|
||||||
gdb_test "continue" "Program exited normally\."
|
|
||||||
|
|
||||||
remote_file host delete ${remote_python_file}
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.python/py-prettyprint.py
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/testsuite/gdb.python/py-prettyprint.py 2010-01-14 09:03:37.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.python/py-prettyprint.py 2010-06-30 03:22:20.000000000 +0200
|
|
||||||
@@ -53,6 +53,33 @@ class ContainerPrinter:
|
|
||||||
def children(self):
|
|
||||||
return self._iterator(self.val['elements'], self.val['len'])
|
|
||||||
|
|
||||||
+# Test a printer where to_string is None
|
|
||||||
+class NoStringContainerPrinter:
|
|
||||||
+ class _iterator:
|
|
||||||
+ def __init__ (self, pointer, len):
|
|
||||||
+ self.start = pointer
|
|
||||||
+ self.pointer = pointer
|
|
||||||
+ self.end = pointer + len
|
|
||||||
+
|
|
||||||
+ def __iter__(self):
|
|
||||||
+ return self
|
|
||||||
+
|
|
||||||
+ def next(self):
|
|
||||||
+ if self.pointer == self.end:
|
|
||||||
+ raise StopIteration
|
|
||||||
+ result = self.pointer
|
|
||||||
+ self.pointer = self.pointer + 1
|
|
||||||
+ return ('[%d]' % int (result - self.start), result.dereference())
|
|
||||||
+
|
|
||||||
+ def __init__(self, val):
|
|
||||||
+ self.val = val
|
|
||||||
+
|
|
||||||
+ def to_string(self):
|
|
||||||
+ return None
|
|
||||||
+
|
|
||||||
+ def children(self):
|
|
||||||
+ return self._iterator(self.val['elements'], self.val['len'])
|
|
||||||
+
|
|
||||||
class pp_s:
|
|
||||||
def __init__(self, val):
|
|
||||||
self.val = val
|
|
||||||
@@ -190,8 +217,10 @@ def register_pretty_printers ():
|
|
||||||
# both the C and C++ cases.
|
|
||||||
pretty_printers_dict[re.compile ('^struct string_repr$')] = string_print
|
|
||||||
pretty_printers_dict[re.compile ('^struct container$')] = ContainerPrinter
|
|
||||||
+ pretty_printers_dict[re.compile ('^struct justchildren$')] = NoStringContainerPrinter
|
|
||||||
pretty_printers_dict[re.compile ('^string_repr$')] = string_print
|
|
||||||
pretty_printers_dict[re.compile ('^container$')] = ContainerPrinter
|
|
||||||
+ pretty_printers_dict[re.compile ('^justchildren$')] = NoStringContainerPrinter
|
|
||||||
|
|
||||||
pretty_printers_dict[re.compile ('^struct ns$')] = pp_ns
|
|
||||||
pretty_printers_dict[re.compile ('^ns$')] = pp_ns
|
|
@ -1,159 +0,0 @@
|
|||||||
http://sourceware.org/ml/gdb-patches/2010-02/msg00625.html
|
|
||||||
Subject: RFC: fix bug with std::terminate handler
|
|
||||||
|
|
||||||
I would appreciate comments on this patch.
|
|
||||||
|
|
||||||
This comes from an automatically-reported bug in the Red Hat bugzilla:
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=562975
|
|
||||||
|
|
||||||
call_function_by_hand installs a momentary breakpoint on std::terminate,
|
|
||||||
and then deletes it later. However, this can cause a double deletion of
|
|
||||||
the breakpoint. In the bug, the called function is dlopen, which causes
|
|
||||||
gdb to enter solib_add, which calls breakpoint_re_set, deleting the
|
|
||||||
momentary breakpoint.
|
|
||||||
|
|
||||||
This fix works by creating the momentary breakpoint with an internal
|
|
||||||
breakpoint number, and then trying to delete the breakpoint by number.
|
|
||||||
|
|
||||||
This bug does not always manifest in a crash. In fact, I couldn't make
|
|
||||||
it crash here, but I could observe the problem under valgrind.
|
|
||||||
|
|
||||||
Built and regtested on x86-64 (compile farm). I also manually verified
|
|
||||||
it using valgrind.
|
|
||||||
|
|
||||||
I think this patch is mildly ugly, due to the introduction of
|
|
||||||
set_momentary_breakpoint_at_pc_with_number. However, in the absence of
|
|
||||||
comments, I plan to check it in after a reasonable waiting period.
|
|
||||||
|
|
||||||
Tom
|
|
||||||
|
|
||||||
2010-02-25 Tom Tromey <tromey@redhat.com>
|
|
||||||
|
|
||||||
* infcall.c (do_delete_breakpoint_by_number): New function.
|
|
||||||
(call_function_by_hand): Refer to momentary breakpoint by number.
|
|
||||||
* breakpoint.h (set_momentary_breakpoint_at_pc_with_number):
|
|
||||||
Declare.
|
|
||||||
* breakpoint.c (set_momentary_breakpoint_at_pc_with_number): New
|
|
||||||
function.
|
|
||||||
|
|
||||||
Index: gdb-7.0.90.20100312/gdb/breakpoint.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.90.20100312.orig/gdb/breakpoint.c 2010-03-12 14:54:26.000000000 +0100
|
|
||||||
+++ gdb-7.0.90.20100312/gdb/breakpoint.c 2010-03-12 14:54:53.000000000 +0100
|
|
||||||
@@ -6115,6 +6115,20 @@ set_momentary_breakpoint_at_pc (struct g
|
|
||||||
|
|
||||||
return set_momentary_breakpoint (gdbarch, sal, null_frame_id, type);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+/* Like set_momentary_breakpoint_at_pc, but ensure that the new
|
|
||||||
+ breakpoint has a number. */
|
|
||||||
+
|
|
||||||
+struct breakpoint *
|
|
||||||
+set_momentary_breakpoint_at_pc_with_number (struct gdbarch *gdbarch,
|
|
||||||
+ CORE_ADDR pc,
|
|
||||||
+ enum bptype type)
|
|
||||||
+{
|
|
||||||
+ struct breakpoint *result = set_momentary_breakpoint_at_pc (gdbarch, pc,
|
|
||||||
+ type);
|
|
||||||
+ result->number = internal_breakpoint_number--;
|
|
||||||
+ return result;
|
|
||||||
+}
|
|
||||||
|
|
||||||
|
|
||||||
/* Tell the user we have just set a breakpoint B. */
|
|
||||||
Index: gdb-7.0.90.20100312/gdb/breakpoint.h
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.90.20100312.orig/gdb/breakpoint.h 2010-03-12 14:54:26.000000000 +0100
|
|
||||||
+++ gdb-7.0.90.20100312/gdb/breakpoint.h 2010-03-12 14:54:53.000000000 +0100
|
|
||||||
@@ -774,6 +774,9 @@ extern struct breakpoint *set_momentary_
|
|
||||||
extern struct breakpoint *set_momentary_breakpoint_at_pc
|
|
||||||
(struct gdbarch *, CORE_ADDR pc, enum bptype type);
|
|
||||||
|
|
||||||
+extern struct breakpoint *set_momentary_breakpoint_at_pc_with_number
|
|
||||||
+ (struct gdbarch *, CORE_ADDR pc, enum bptype type);
|
|
||||||
+
|
|
||||||
extern struct breakpoint *clone_momentary_breakpoint (struct breakpoint *bpkt);
|
|
||||||
|
|
||||||
extern void set_ignore_count (int, int, int);
|
|
||||||
Index: gdb-7.0.90.20100312/gdb/infcall.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.0.90.20100312.orig/gdb/infcall.c 2010-03-12 14:54:26.000000000 +0100
|
|
||||||
+++ gdb-7.0.90.20100312/gdb/infcall.c 2010-03-12 14:55:19.000000000 +0100
|
|
||||||
@@ -410,6 +410,18 @@ run_inferior_call (struct thread_info *c
|
|
||||||
return e;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* A cleanup function that deletes a breakpoint, if it still exists,
|
|
||||||
+ given the breakpoint's number. */
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+do_delete_breakpoint_by_number (void *arg)
|
|
||||||
+{
|
|
||||||
+ int *num = arg;
|
|
||||||
+ struct breakpoint *bp = get_breakpoint (*num);
|
|
||||||
+ if (bp)
|
|
||||||
+ delete_breakpoint (bp);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* All this stuff with a dummy frame may seem unnecessarily complicated
|
|
||||||
(why not just save registers in GDB?). The purpose of pushing a dummy
|
|
||||||
frame which looks just like a real frame is so that if you call a
|
|
||||||
@@ -447,7 +459,8 @@ call_function_by_hand (struct value *fun
|
|
||||||
struct cleanup *args_cleanup;
|
|
||||||
struct frame_info *frame;
|
|
||||||
struct gdbarch *gdbarch;
|
|
||||||
- struct breakpoint *terminate_bp = NULL;
|
|
||||||
+ int terminate_bp_num = 0;
|
|
||||||
+ CORE_ADDR terminate_bp_addr = 0;
|
|
||||||
struct minimal_symbol *tm;
|
|
||||||
struct cleanup *terminate_bp_cleanup = NULL;
|
|
||||||
ptid_t call_thread_ptid;
|
|
||||||
@@ -765,8 +778,13 @@ call_function_by_hand (struct value *fun
|
|
||||||
struct minimal_symbol *tm = lookup_minimal_symbol ("std::terminate()",
|
|
||||||
NULL, NULL);
|
|
||||||
if (tm != NULL)
|
|
||||||
- terminate_bp = set_momentary_breakpoint_at_pc
|
|
||||||
+ {
|
|
||||||
+ struct breakpoint *bp;
|
|
||||||
+ bp = set_momentary_breakpoint_at_pc_with_number
|
|
||||||
(gdbarch, SYMBOL_VALUE_ADDRESS (tm), bp_breakpoint);
|
|
||||||
+ terminate_bp_num = bp->number;
|
|
||||||
+ terminate_bp_addr = bp->loc->address;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Everything's ready, push all the info needed to restore the
|
|
||||||
@@ -780,8 +798,9 @@ call_function_by_hand (struct value *fun
|
|
||||||
discard_cleanups (inf_status_cleanup);
|
|
||||||
|
|
||||||
/* Register a clean-up for unwind_on_terminating_exception_breakpoint. */
|
|
||||||
- if (terminate_bp)
|
|
||||||
- terminate_bp_cleanup = make_cleanup_delete_breakpoint (terminate_bp);
|
|
||||||
+ if (terminate_bp_num != 0)
|
|
||||||
+ terminate_bp_cleanup = make_cleanup (do_delete_breakpoint_by_number,
|
|
||||||
+ &terminate_bp_num);
|
|
||||||
|
|
||||||
/* - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP -
|
|
||||||
If you're looking to implement asynchronous dummy-frames, then
|
|
||||||
@@ -947,9 +966,9 @@ When the function is done executing, GDB
|
|
||||||
in an inferior function call. Rewind, and warn the
|
|
||||||
user. */
|
|
||||||
|
|
||||||
- if (terminate_bp != NULL
|
|
||||||
+ if (terminate_bp_num != 0
|
|
||||||
&& (inferior_thread ()->stop_bpstat->breakpoint_at->address
|
|
||||||
- == terminate_bp->loc->address))
|
|
||||||
+ == terminate_bp_addr))
|
|
||||||
{
|
|
||||||
/* We must get back to the frame we were before the
|
|
||||||
dummy call. */
|
|
||||||
@@ -998,7 +1017,7 @@ When the function is done executing, GDB
|
|
||||||
|
|
||||||
/* If we get here and the std::terminate() breakpoint has been set,
|
|
||||||
it has to be cleaned manually. */
|
|
||||||
- if (terminate_bp)
|
|
||||||
+ if (terminate_bp_num != 0)
|
|
||||||
do_cleanups (terminate_bp_cleanup);
|
|
||||||
|
|
||||||
/* If we get here the called FUNCTION ran to completion,
|
|
69
gdb-bz568248-oom-is-error.patch
Normal file
69
gdb-bz568248-oom-is-error.patch
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
http://sourceware.org/ml/gdb-patches/2010-06/msg00005.html
|
||||||
|
Subject: [rfc patch] nomem: internal_error -> error
|
||||||
|
|
||||||
|
Hi,
|
||||||
|
|
||||||
|
unfortunately I see this problem reproducible only with the
|
||||||
|
archer-jankratochvil-vla branch (VLA = Variable Length Arrays - char[var]).
|
||||||
|
OTOH this branch I hopefully submit in some form for FSF GDB later.
|
||||||
|
|
||||||
|
In this case (a general problem but tested for example on Fedora 13 i686):
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char **argv)
|
||||||
|
{
|
||||||
|
char a[argc];
|
||||||
|
return a[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
(gdb) start
|
||||||
|
(gdb) print a
|
||||||
|
../../gdb/utils.c:1251: internal-error: virtual memory exhausted: can't allocate 4294951689 bytes.
|
||||||
|
|
||||||
|
It is apparently because boundary for the variable `a' is not initialized
|
||||||
|
there. Users notice it due to Eclipse-CDT trying to automatically display all
|
||||||
|
the local variables on each step.
|
||||||
|
|
||||||
|
|
||||||
|
Apparentl no regressions on {x86_64,x86_64-m32,i686}-fedora13-linux-gnu.
|
||||||
|
But is anone aware of the reasons to use internal_error there?
|
||||||
|
I find simple error as a perfectly reasonable there.
|
||||||
|
(history only tracks it since the initial import)
|
||||||
|
|
||||||
|
IIRC this idea has been discussed with Tom Tromey, not sure of its origin.
|
||||||
|
|
||||||
|
I understand it may be offtopic for FSF GDB but from some GDB crashes I am not
|
||||||
|
sure if it can happen only due to the VLA variables.
|
||||||
|
|
||||||
|
|
||||||
|
Thanks,
|
||||||
|
Jan
|
||||||
|
|
||||||
|
|
||||||
|
gdb/
|
||||||
|
2010-06-01 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
|
* utils.c (nomem): Change internal_error to error.
|
||||||
|
|
||||||
|
--- a/gdb/utils.c
|
||||||
|
+++ b/gdb/utils.c
|
||||||
|
@@ -1265,15 +1265,9 @@ void
|
||||||
|
nomem (long size)
|
||||||
|
{
|
||||||
|
if (size > 0)
|
||||||
|
- {
|
||||||
|
- internal_error (__FILE__, __LINE__,
|
||||||
|
- _("virtual memory exhausted: can't allocate %ld bytes."),
|
||||||
|
- size);
|
||||||
|
- }
|
||||||
|
+ error (_("virtual memory exhausted: can't allocate %ld bytes."), size);
|
||||||
|
else
|
||||||
|
- {
|
||||||
|
- internal_error (__FILE__, __LINE__, _("virtual memory exhausted."));
|
||||||
|
- }
|
||||||
|
+ error (_("virtual memory exhausted."));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The xmalloc() (libiberty.h) family of memory management routines.
|
||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
RFA: update `print' docs
|
|
||||||
http://sourceware.org/ml/gdb-patches/2010-03/msg00236.html
|
|
||||||
http://sourceware.org/ml/gdb-cvs/2010-03/msg00048.html
|
|
||||||
|
|
||||||
### src/gdb/doc/ChangeLog 2010/03/01 17:19:22 1.1017
|
|
||||||
### src/gdb/doc/ChangeLog 2010/03/05 20:01:21 1.1018
|
|
||||||
## -1,3 +1,8 @@
|
|
||||||
+2010-03-05 Tom Tromey <tromey@redhat.com>
|
|
||||||
+
|
|
||||||
+ * gdb.texinfo (Data): Link to pretty-printing.
|
|
||||||
+ (Output Formats): Likewise. Correct text.
|
|
||||||
+
|
|
||||||
2010-03-01 Daniel Jacobowitz <dan@codesourcery.com>
|
|
||||||
|
|
||||||
* gdb.texinfo (Types): Describe <struct> and <flags>.
|
|
||||||
--- src/gdb/doc/gdb.texinfo 2010/03/01 17:19:22 1.676
|
|
||||||
+++ src/gdb/doc/gdb.texinfo 2010/03/05 20:01:21 1.677
|
|
||||||
@@ -6661,7 +6661,8 @@
|
|
||||||
command (abbreviated @code{p}), or its synonym @code{inspect}. It
|
|
||||||
evaluates and prints the value of an expression of the language your
|
|
||||||
program is written in (@pxref{Languages, ,Using @value{GDBN} with
|
|
||||||
-Different Languages}).
|
|
||||||
+Different Languages}). It may also print the expression using a
|
|
||||||
+Python-based pretty-printer (@pxref{Pretty Printing}).
|
|
||||||
|
|
||||||
@table @code
|
|
||||||
@item print @var{expr}
|
|
||||||
@@ -7159,8 +7160,10 @@
|
|
||||||
@item r
|
|
||||||
@cindex raw printing
|
|
||||||
Print using the @samp{raw} formatting. By default, @value{GDBN} will
|
|
||||||
-use a type-specific pretty-printer. The @samp{r} format bypasses any
|
|
||||||
-pretty-printer which might exist for the value's type.
|
|
||||||
+use a Python-based pretty-printer, if one is available (@pxref{Pretty
|
|
||||||
+Printing}). This typically results in a higher-level display of the
|
|
||||||
+value's contents. The @samp{r} format bypasses any Python
|
|
||||||
+pretty-printer which might exist.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
For example, to print the program counter in hex (@pxref{Registers}), type
|
|
@ -1,182 +0,0 @@
|
|||||||
Re: [patch] doc-python: Pretty Printing split user / developer
|
|
||||||
http://sourceware.org/ml/gdb-patches/2010-04/msg00757.html
|
|
||||||
http://sourceware.org/ml/gdb-cvs/2010-04/msg00221.html
|
|
||||||
|
|
||||||
[ Backported for Fedora. ]
|
|
||||||
|
|
||||||
### src/gdb/doc/ChangeLog 2010/04/22 04:09:25 1.1053
|
|
||||||
### src/gdb/doc/ChangeLog 2010/04/22 16:32:43 1.1054
|
|
||||||
## -1,3 +1,14 @@
|
|
||||||
+2010-04-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
+
|
|
||||||
+ * gdb.texinfo (Data): New @menu reference to Pretty Printing.
|
|
||||||
+ (Python API): Change the reference to Pretty Printing API.
|
|
||||||
+ (Pretty Printing): Move the user part under the Data node. Reformat
|
|
||||||
+ the sample output to 72 columns. Create a new reference to Pretty
|
|
||||||
+ Printing API. Rename the API part ...
|
|
||||||
+ (Pretty Printing API): To a new node name.
|
|
||||||
+ (Selecting Pretty-Printers, Progspaces In Python, Objfiles In Python)
|
|
||||||
+ (GDB/MI Variable Objects): Change references to Pretty Printing API.
|
|
||||||
+
|
|
||||||
2010-04-21 Stan Shebs <stan@codesourcery.com>
|
|
||||||
|
|
||||||
* gdb.texinfo (Tracepoint Actions): Mention synonymy of actions
|
|
||||||
--- gdb-7.1/gdb/doc/gdb.texinfo.orig 2010-04-22 19:08:30.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/doc/gdb.texinfo 2010-04-22 19:10:41.000000000 +0200
|
|
||||||
@@ -6727,6 +6727,7 @@ Table}.
|
|
||||||
* Memory:: Examining memory
|
|
||||||
* Auto Display:: Automatic display
|
|
||||||
* Print Settings:: Print settings
|
|
||||||
+* Pretty Printing:: Python pretty printing
|
|
||||||
* Value History:: Value history
|
|
||||||
* Convenience Vars:: Convenience variables
|
|
||||||
* Registers:: Registers
|
|
||||||
@@ -7897,6 +7898,42 @@ Do not pretty print C@t{++} virtual func
|
|
||||||
Show whether C@t{++} virtual function tables are pretty printed, or not.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
+@node Pretty Printing
|
|
||||||
+@section Pretty Printing
|
|
||||||
+
|
|
||||||
+@value{GDBN} provides a mechanism to allow pretty-printing of values using
|
|
||||||
+Python code. It greatly simplifies the display of complex objects. This
|
|
||||||
+mechanism works for both MI and the CLI.
|
|
||||||
+
|
|
||||||
+For example, here is how a C@t{++} @code{std::string} looks without a
|
|
||||||
+pretty-printer:
|
|
||||||
+
|
|
||||||
+@smallexample
|
|
||||||
+(@value{GDBP}) print s
|
|
||||||
+$1 = @{
|
|
||||||
+ static npos = 4294967295,
|
|
||||||
+ _M_dataplus = @{
|
|
||||||
+ <std::allocator<char>> = @{
|
|
||||||
+ <__gnu_cxx::new_allocator<char>> = @{
|
|
||||||
+ <No data fields>@}, <No data fields>
|
|
||||||
+ @},
|
|
||||||
+ members of std::basic_string<char, std::char_traits<char>,
|
|
||||||
+ std::allocator<char> >::_Alloc_hider:
|
|
||||||
+ _M_p = 0x804a014 "abcd"
|
|
||||||
+ @}
|
|
||||||
+@}
|
|
||||||
+@end smallexample
|
|
||||||
+
|
|
||||||
+With a pretty-printer for @code{std::string} only the contents are printed:
|
|
||||||
+
|
|
||||||
+@smallexample
|
|
||||||
+(@value{GDBP}) print s
|
|
||||||
+$2 = "abcd"
|
|
||||||
+@end smallexample
|
|
||||||
+
|
|
||||||
+For implementing pretty printers for new types you should read the Python API
|
|
||||||
+details (@pxref{Pretty Printing API}).
|
|
||||||
+
|
|
||||||
@node Value History
|
|
||||||
@section Value History
|
|
||||||
|
|
||||||
@@ -19608,8 +19645,8 @@ situation, a Python @code{KeyboardInterr
|
|
||||||
* Exception Handling::
|
|
||||||
* Auto-loading:: Automatically loading Python code.
|
|
||||||
* Values From Inferior:: Python representation of values.
|
|
||||||
-* Types In Python:: Python representation of types.
|
|
||||||
-* Pretty Printing:: Pretty-printing values.
|
|
||||||
+* Types In Python:: Python representation of types.
|
|
||||||
+* Pretty Printing API:: Pretty-printing values.
|
|
||||||
* Selecting Pretty-Printers:: How GDB chooses a pretty-printer.
|
|
||||||
* Inferiors In Python:: Python representation of inferiors (processes)
|
|
||||||
* Threads In Python:: Accessing inferior threads from Python.
|
|
||||||
@@ -20241,37 +20278,10 @@ A function internal to @value{GDBN}. Th
|
|
||||||
convenience functions.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
-@node Pretty Printing
|
|
||||||
-@subsubsection Pretty Printing
|
|
||||||
-
|
|
||||||
-@value{GDBN} provides a mechanism to allow pretty-printing of values
|
|
||||||
-using Python code. The pretty-printer API allows application-specific
|
|
||||||
-code to greatly simplify the display of complex objects. This
|
|
||||||
-mechanism works for both MI and the CLI.
|
|
||||||
-
|
|
||||||
-For example, here is how a C@t{++} @code{std::string} looks without a
|
|
||||||
-pretty-printer:
|
|
||||||
+@node Pretty Printing API
|
|
||||||
+@subsubsection Pretty Printing API
|
|
||||||
|
|
||||||
-@smallexample
|
|
||||||
-(@value{GDBP}) print s
|
|
||||||
-$1 = @{
|
|
||||||
- static npos = 4294967295,
|
|
||||||
- _M_dataplus = @{
|
|
||||||
- <std::allocator<char>> = @{
|
|
||||||
- <__gnu_cxx::new_allocator<char>> = @{<No data fields>@}, <No data fields>@},
|
|
||||||
- members of std::basic_string<char, std::char_traits<char>, std::allocator<char> >::_Alloc_hider:
|
|
||||||
- _M_p = 0x804a014 "abcd"
|
|
||||||
- @}
|
|
||||||
-@}
|
|
||||||
-@end smallexample
|
|
||||||
-
|
|
||||||
-After a pretty-printer for @code{std::string} has been installed, only
|
|
||||||
-the contents are printed:
|
|
||||||
-
|
|
||||||
-@smallexample
|
|
||||||
-(@value{GDBP}) print s
|
|
||||||
-$2 = "abcd"
|
|
||||||
-@end smallexample
|
|
||||||
+An example output is provided (@pxref{Pretty Printing}).
|
|
||||||
|
|
||||||
A pretty-printer is just an object that holds a value and implements a
|
|
||||||
specific interface, defined here.
|
|
||||||
@@ -20359,7 +20369,7 @@ attribute.
|
|
||||||
|
|
||||||
A function on one of these lists is passed a single @code{gdb.Value}
|
|
||||||
argument and should return a pretty-printer object conforming to the
|
|
||||||
-interface definition above (@pxref{Pretty Printing}). If a function
|
|
||||||
+interface definition above (@pxref{Pretty Printing API}). If a function
|
|
||||||
cannot create a pretty-printer for the value, it should return
|
|
||||||
@code{None}.
|
|
||||||
|
|
||||||
@@ -20436,7 +20446,7 @@ printers with a specific objfile, @value
|
|
||||||
printers for the specific version of the library used by each
|
|
||||||
inferior.
|
|
||||||
|
|
||||||
-To continue the @code{std::string} example (@pxref{Pretty Printing}),
|
|
||||||
+To continue the @code{std::string} example (@pxref{Pretty Printing API}),
|
|
||||||
this code might appear in @code{gdb.libstdcxx.v6}:
|
|
||||||
|
|
||||||
@smallexample
|
|
||||||
@@ -21048,7 +21058,7 @@ The @code{pretty_printers} attribute is
|
|
||||||
used to look up pretty-printers. A @code{Value} is passed to each
|
|
||||||
function in order; if the function returns @code{None}, then the
|
|
||||||
search continues. Otherwise, the return value should be an object
|
|
||||||
-which is used to format the value. @xref{Pretty Printing}, for more
|
|
||||||
+which is used to format the value. @xref{Pretty Printing API}, for more
|
|
||||||
information.
|
|
||||||
@end defivar
|
|
||||||
|
|
||||||
@@ -24875,7 +24885,7 @@ then this attribute will not be present.
|
|
||||||
@item displayhint
|
|
||||||
A dynamic varobj can supply a display hint to the front end. The
|
|
||||||
value comes directly from the Python pretty-printer object's
|
|
||||||
-@code{display_hint} method. @xref{Pretty Printing}.
|
|
||||||
+@code{display_hint} method. @xref{Pretty Printing API}.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
Typical output will look like this:
|
|
||||||
@@ -25047,7 +25057,7 @@ The result may have its own attributes:
|
|
||||||
@item displayhint
|
|
||||||
A dynamic varobj can supply a display hint to the front end. The
|
|
||||||
value comes directly from the Python pretty-printer object's
|
|
||||||
-@code{display_hint} method. @xref{Pretty Printing}.
|
|
||||||
+@code{display_hint} method. @xref{Pretty Printing API}.
|
|
||||||
|
|
||||||
@item has_more
|
|
||||||
This is an integer attribute which is nonzero if there are children
|
|
||||||
@@ -25411,7 +25421,7 @@ single argument. @value{GDBN} will call
|
|
||||||
the varobj @var{name} as an argument (this is done so that the same
|
|
||||||
Python pretty-printing code can be used for both the CLI and MI).
|
|
||||||
When called, this object must return an object which conforms to the
|
|
||||||
-pretty-printing interface (@pxref{Pretty Printing}).
|
|
||||||
+pretty-printing interface (@pxref{Pretty Printing API}).
|
|
||||||
|
|
||||||
The pre-defined function @code{gdb.default_visualizer} may be used to
|
|
||||||
select a visualizer by following the built-in process
|
|
@ -1,73 +0,0 @@
|
|||||||
http://sourceware.org/ml/gdb-patches/2010-04/msg00055.html
|
|
||||||
Subject: [patch] Fix dangling displays in separate debug
|
|
||||||
|
|
||||||
[ Backported. ]
|
|
||||||
|
|
||||||
Hi,
|
|
||||||
|
|
||||||
gdb.base/solib-display.exp using _separate_ debug info:
|
|
||||||
3: c_global = gdbtypes.c:1369: internal-error: check_typedef: Assertion `type' failed.
|
|
||||||
A problem internal to GDB has been detected,
|
|
||||||
|
|
||||||
This problem was fixed before by:
|
|
||||||
[patch 1/8] Types GC [unloading observer]
|
|
||||||
http://sourceware.org/ml/gdb-patches/2009-05/msg00544.html
|
|
||||||
Re: [patch 3/8] Types GC [display_uses_solib_p to exp_iterate]
|
|
||||||
http://sourceware.org/ml/gdb-patches/2009-07/msg00054.html
|
|
||||||
|
|
||||||
but as that patchset is still not in providing this temporary fixup instead.
|
|
||||||
|
|
||||||
One may only address that gdb.base/solib-display.exp was testing symbol
|
|
||||||
in-objfile while now it tests only symbol in-sepdebug-objfile and no longer
|
|
||||||
the in-objfile case. I find the in-sepdebug-objfile as a superset of
|
|
||||||
in-objfile test but I can rework it if anyones addresses this test change.
|
|
||||||
|
|
||||||
No regressions on {x86_64,x86_64-m32,i686}-fedora12-linux-gnu.
|
|
||||||
|
|
||||||
|
|
||||||
Thanks,
|
|
||||||
Jan
|
|
||||||
|
|
||||||
|
|
||||||
gdb/
|
|
||||||
2010-04-03 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* printcmd.c (display_uses_solib_p): Check also
|
|
||||||
SEPARATE_DEBUG_OBJFILE.
|
|
||||||
|
|
||||||
gdb/testsuite/
|
|
||||||
2010-04-03 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* gdb.base/solib-display.exp (split solib): New.
|
|
||||||
|
|
||||||
--- a/gdb/printcmd.c
|
|
||||||
+++ b/gdb/printcmd.c
|
|
||||||
@@ -1845,7 +1845,10 @@ clear_dangling_display_expressions (stru
|
|
||||||
|
|
||||||
for (d = display_chain; d != NULL; d = d->next)
|
|
||||||
if (block_objfile (d->block) == objfile
|
|
||||||
- || (d->exp && exp_uses_objfile (d->exp, objfile)))
|
|
||||||
+ || (d->exp && exp_uses_objfile (d->exp, objfile))
|
|
||||||
+ || (objfile->separate_debug_objfile
|
|
||||||
+ && (block_objfile (d->block) == objfile->separate_debug_objfile
|
|
||||||
+ || (d->exp && exp_uses_objfile (d->exp, objfile->separate_debug_objfile)))))
|
|
||||||
{
|
|
||||||
xfree (d->exp);
|
|
||||||
d->exp = NULL;
|
|
||||||
--- a/gdb/testsuite/gdb.base/solib-display.exp
|
|
||||||
+++ b/gdb/testsuite/gdb.base/solib-display.exp
|
|
||||||
@@ -53,6 +53,13 @@ if { [gdb_compile_shlib ${srcfile_lib} ${binfile_lib} $lib_flags] != ""
|
|
||||||
return -1
|
|
||||||
}
|
|
||||||
|
|
||||||
+set test "split solib"
|
|
||||||
+if {[gdb_gnu_strip_debug $binfile_lib] != 0} {
|
|
||||||
+ fail $test
|
|
||||||
+} else {
|
|
||||||
+ pass $test
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
gdb_exit
|
|
||||||
gdb_start
|
|
||||||
gdb_reinitialize_dir $srcdir/$subdir
|
|
||||||
|
|
@ -9,9 +9,11 @@ Neither its obstack-leak.patch nor
|
|||||||
http://sourceware.org/ml/gdb-patches/2010-05/msg00271.html
|
http://sourceware.org/ml/gdb-patches/2010-05/msg00271.html
|
||||||
is needed as the linked list is used instead.
|
is needed as the linked list is used instead.
|
||||||
|
|
||||||
--- ./gdb/dwarf2read.c 2010-05-13 18:26:22.000000000 +0200
|
Index: gdb-7.1.90.20100721/gdb/dwarf2read.c
|
||||||
+++ ./gdb/dwarf2read.c 2010-05-13 18:45:04.000000000 +0200
|
===================================================================
|
||||||
@@ -251,6 +251,28 @@ struct comp_unit_head
|
--- gdb-7.1.90.20100721.orig/gdb/dwarf2read.c 2010-07-22 11:59:19.000000000 +0200
|
||||||
|
+++ gdb-7.1.90.20100721/gdb/dwarf2read.c 2010-07-22 12:00:08.000000000 +0200
|
||||||
|
@@ -253,6 +253,28 @@ struct comp_unit_head
|
||||||
unsigned int first_die_offset;
|
unsigned int first_die_offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -40,7 +42,7 @@ is needed as the linked list is used instead.
|
|||||||
/* Internal state when decoding a particular compilation unit. */
|
/* Internal state when decoding a particular compilation unit. */
|
||||||
struct dwarf2_cu
|
struct dwarf2_cu
|
||||||
{
|
{
|
||||||
@@ -329,6 +351,10 @@ struct dwarf2_cu
|
@@ -331,6 +353,10 @@ struct dwarf2_cu
|
||||||
/* Header data from the line table, during full symbol processing. */
|
/* Header data from the line table, during full symbol processing. */
|
||||||
struct line_header *line_header;
|
struct line_header *line_header;
|
||||||
|
|
||||||
@ -51,17 +53,17 @@ is needed as the linked list is used instead.
|
|||||||
/* Mark used when releasing cached dies. */
|
/* Mark used when releasing cached dies. */
|
||||||
unsigned int mark : 1;
|
unsigned int mark : 1;
|
||||||
|
|
||||||
@@ -1208,6 +1234,9 @@ static void destroy_section (struct dwar
|
@@ -1239,6 +1265,9 @@ static gdb_byte *partial_read_comp_unit_
|
||||||
static struct dwarf2_locexpr_baton *dwarf2_attr_to_locexpr_baton
|
static void init_cu_die_reader (struct die_reader_specs *reader,
|
||||||
(struct attribute *attr, struct dwarf2_cu *cu);
|
struct dwarf2_cu *cu);
|
||||||
|
|
||||||
+static const char *dwarf2_physname (char *name, struct die_info *die,
|
+static const char *dwarf2_physname (char *name, struct die_info *die,
|
||||||
+ struct dwarf2_cu *cu);
|
+ struct dwarf2_cu *cu);
|
||||||
+
|
+
|
||||||
/* Try to locate the sections we need for DWARF 2 debugging
|
#if WORDS_BIGENDIAN
|
||||||
information and return true if we have enough to do something. */
|
|
||||||
|
|
||||||
@@ -3435,6 +3464,58 @@ load_full_comp_unit (struct dwarf2_per_c
|
/* Convert VALUE between big- and little-endian. */
|
||||||
|
@@ -4103,6 +4132,58 @@ load_full_comp_unit (struct dwarf2_per_c
|
||||||
discard_cleanups (free_cu_cleanup);
|
discard_cleanups (free_cu_cleanup);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,8 +122,8 @@ is needed as the linked list is used instead.
|
|||||||
/* Generate full symbol information for PST and CU, whose DIEs have
|
/* Generate full symbol information for PST and CU, whose DIEs have
|
||||||
already been loaded into memory. */
|
already been loaded into memory. */
|
||||||
|
|
||||||
@@ -3447,7 +3528,7 @@ process_full_comp_unit (struct dwarf2_pe
|
@@ -4113,7 +4194,7 @@ process_full_comp_unit (struct dwarf2_pe
|
||||||
bfd *abfd = objfile->obfd;
|
struct objfile *objfile = per_cu->objfile;
|
||||||
CORE_ADDR lowpc, highpc;
|
CORE_ADDR lowpc, highpc;
|
||||||
struct symtab *symtab;
|
struct symtab *symtab;
|
||||||
- struct cleanup *back_to;
|
- struct cleanup *back_to;
|
||||||
@ -129,7 +131,7 @@ is needed as the linked list is used instead.
|
|||||||
CORE_ADDR baseaddr;
|
CORE_ADDR baseaddr;
|
||||||
|
|
||||||
baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
|
baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
|
||||||
@@ -3457,11 +3538,22 @@ process_full_comp_unit (struct dwarf2_pe
|
@@ -4123,11 +4204,22 @@ process_full_comp_unit (struct dwarf2_pe
|
||||||
|
|
||||||
cu->list_in_scope = &file_symbols;
|
cu->list_in_scope = &file_symbols;
|
||||||
|
|
||||||
@ -152,7 +154,7 @@ is needed as the linked list is used instead.
|
|||||||
/* Some compilers don't define a DW_AT_high_pc attribute for the
|
/* Some compilers don't define a DW_AT_high_pc attribute for the
|
||||||
compilation unit. If the DW_AT_high_pc is missing, synthesize
|
compilation unit. If the DW_AT_high_pc is missing, synthesize
|
||||||
it, by scanning the DIE's below the compilation unit. */
|
it, by scanning the DIE's below the compilation unit. */
|
||||||
@@ -5093,7 +5185,6 @@ dwarf2_add_member_fn (struct field_info
|
@@ -5838,7 +5930,6 @@ dwarf2_add_member_fn (struct field_info
|
||||||
int i;
|
int i;
|
||||||
struct fn_field *fnp;
|
struct fn_field *fnp;
|
||||||
char *fieldname;
|
char *fieldname;
|
||||||
@ -160,7 +162,7 @@ is needed as the linked list is used instead.
|
|||||||
struct nextfnfield *new_fnfield;
|
struct nextfnfield *new_fnfield;
|
||||||
struct type *this_type;
|
struct type *this_type;
|
||||||
|
|
||||||
@@ -5105,9 +5196,6 @@ dwarf2_add_member_fn (struct field_info
|
@@ -5850,9 +5941,6 @@ dwarf2_add_member_fn (struct field_info
|
||||||
if (fieldname == NULL)
|
if (fieldname == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -170,7 +172,7 @@ is needed as the linked list is used instead.
|
|||||||
/* Look up member function name in fieldlist. */
|
/* Look up member function name in fieldlist. */
|
||||||
for (i = 0; i < fip->nfnfields; i++)
|
for (i = 0; i < fip->nfnfields; i++)
|
||||||
{
|
{
|
||||||
@@ -5133,7 +5221,7 @@ dwarf2_add_member_fn (struct field_info
|
@@ -5878,7 +5966,7 @@ dwarf2_add_member_fn (struct field_info
|
||||||
flp->name = fieldname;
|
flp->name = fieldname;
|
||||||
flp->length = 0;
|
flp->length = 0;
|
||||||
flp->head = NULL;
|
flp->head = NULL;
|
||||||
@ -179,7 +181,7 @@ is needed as the linked list is used instead.
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Create a new member function field and chain it to the field list
|
/* Create a new member function field and chain it to the field list
|
||||||
@@ -5147,9 +5235,19 @@ dwarf2_add_member_fn (struct field_info
|
@@ -5892,9 +5980,19 @@ dwarf2_add_member_fn (struct field_info
|
||||||
|
|
||||||
/* Fill in the member function field info. */
|
/* Fill in the member function field info. */
|
||||||
fnp = &new_fnfield->fnfield;
|
fnp = &new_fnfield->fnfield;
|
||||||
@ -202,7 +204,7 @@ is needed as the linked list is used instead.
|
|||||||
fnp->type = alloc_type (objfile);
|
fnp->type = alloc_type (objfile);
|
||||||
this_type = read_type_die (die, cu);
|
this_type = read_type_die (die, cu);
|
||||||
if (this_type && TYPE_CODE (this_type) == TYPE_CODE_FUNC)
|
if (this_type && TYPE_CODE (this_type) == TYPE_CODE_FUNC)
|
||||||
@@ -5175,7 +5273,7 @@ dwarf2_add_member_fn (struct field_info
|
@@ -5920,7 +6018,7 @@ dwarf2_add_member_fn (struct field_info
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
complaint (&symfile_complaints, _("member function type missing for '%s'"),
|
complaint (&symfile_complaints, _("member function type missing for '%s'"),
|
||||||
@ -211,7 +213,7 @@ is needed as the linked list is used instead.
|
|||||||
|
|
||||||
/* Get fcontext from DW_AT_containing_type if present. */
|
/* Get fcontext from DW_AT_containing_type if present. */
|
||||||
if (dwarf2_attr (die, DW_AT_containing_type, cu) != NULL)
|
if (dwarf2_attr (die, DW_AT_containing_type, cu) != NULL)
|
||||||
@@ -7500,7 +7598,9 @@ load_partial_dies (bfd *abfd, gdb_byte *
|
@@ -8299,7 +8397,9 @@ load_partial_dies (bfd *abfd, gdb_byte *
|
||||||
|| last_die->tag == DW_TAG_interface_type
|
|| last_die->tag == DW_TAG_interface_type
|
||||||
|| last_die->tag == DW_TAG_structure_type
|
|| last_die->tag == DW_TAG_structure_type
|
||||||
|| last_die->tag == DW_TAG_union_type))
|
|| last_die->tag == DW_TAG_union_type))
|
||||||
@ -222,8 +224,10 @@ is needed as the linked list is used instead.
|
|||||||
&& (last_die->tag == DW_TAG_subprogram
|
&& (last_die->tag == DW_TAG_subprogram
|
||||||
|| last_die->tag == DW_TAG_lexical_block))))
|
|| last_die->tag == DW_TAG_lexical_block))))
|
||||||
{
|
{
|
||||||
--- ./gdb/testsuite/gdb.dwarf2/pr11465.S 1970-01-01 01:00:00.000000000 +0100
|
Index: gdb-7.1.90.20100721/gdb/testsuite/gdb.dwarf2/pr11465.S
|
||||||
+++ ./gdb/testsuite/gdb.dwarf2/pr11465.S 2010-05-13 18:39:00.000000000 +0200
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-7.1.90.20100721/gdb/testsuite/gdb.dwarf2/pr11465.S 2010-07-22 11:59:29.000000000 +0200
|
||||||
@@ -0,0 +1,355 @@
|
@@ -0,0 +1,355 @@
|
||||||
+/* Copyright 2010 Free Software Foundation, Inc.
|
+/* Copyright 2010 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
@ -580,8 +584,10 @@ is needed as the linked list is used instead.
|
|||||||
+.LASF4:
|
+.LASF4:
|
||||||
+ .string "GNU C++ 4.4.2"
|
+ .string "GNU C++ 4.4.2"
|
||||||
+ .ident "GCC: (GNU) 4.4.2"
|
+ .ident "GCC: (GNU) 4.4.2"
|
||||||
--- ./gdb/testsuite/gdb.dwarf2/pr11465.exp 1970-01-01 01:00:00.000000000 +0100
|
Index: gdb-7.1.90.20100721/gdb/testsuite/gdb.dwarf2/pr11465.exp
|
||||||
+++ ./gdb/testsuite/gdb.dwarf2/pr11465.exp 2010-05-13 18:39:00.000000000 +0200
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-7.1.90.20100721/gdb/testsuite/gdb.dwarf2/pr11465.exp 2010-07-22 11:59:29.000000000 +0200
|
||||||
@@ -0,0 +1,39 @@
|
@@ -0,0 +1,39 @@
|
||||||
+# Copyright 2010 Free Software Foundation, Inc.
|
+# Copyright 2010 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
|
@ -1,187 +0,0 @@
|
|||||||
http://sourceware.org/ml/gdb-patches/2010-03/msg01039.html
|
|
||||||
Subject: [patch] Fix crash on NULL function's TYPE_FIELD_TYPE
|
|
||||||
|
|
||||||
Hi,
|
|
||||||
|
|
||||||
seen one possibility of a crash.
|
|
||||||
|
|
||||||
#0 c_print_type (type=0x0, ...)
|
|
||||||
#1 in c_type_print_args (type=0xfceb890,
|
|
||||||
|
|
||||||
(The real reason of a reported GDB crash was different, though.)
|
|
||||||
|
|
||||||
|
|
||||||
Thanks,
|
|
||||||
Jan
|
|
||||||
|
|
||||||
|
|
||||||
gdb/
|
|
||||||
2010-03-30 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
Fix crash on reading wrong function declaration DWARF.
|
|
||||||
* dwarf2read.c (read_subroutine_type): New variable void_type.
|
|
||||||
Pre-fill all TYPE_FIELD_TYPEs. Move nparams and iparams initialization
|
|
||||||
more close to their use.
|
|
||||||
|
|
||||||
gdb/testsuite/
|
|
||||||
2010-03-30 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* gdb.dwarf2/dw2-bad-parameter-type.exp,
|
|
||||||
gdb.dwarf2/dw2-bad-parameter-type.S: New.
|
|
||||||
|
|
||||||
--- a/gdb/dwarf2read.c
|
|
||||||
+++ b/gdb/dwarf2read.c
|
|
||||||
@@ -5938,13 +5938,14 @@ read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu)
|
|
||||||
|
|
||||||
if (die->child != NULL)
|
|
||||||
{
|
|
||||||
+ struct type *void_type = objfile_type (cu->objfile)->builtin_void;
|
|
||||||
struct die_info *child_die;
|
|
||||||
- int nparams = 0;
|
|
||||||
- int iparams = 0;
|
|
||||||
+ int nparams, iparams;
|
|
||||||
|
|
||||||
/* Count the number of parameters.
|
|
||||||
FIXME: GDB currently ignores vararg functions, but knows about
|
|
||||||
vararg member functions. */
|
|
||||||
+ nparams = 0;
|
|
||||||
child_die = die->child;
|
|
||||||
while (child_die && child_die->tag)
|
|
||||||
{
|
|
||||||
@@ -5960,6 +5961,12 @@ read_subroutine_type (struct die_info *die, struct dwarf2_cu *cu)
|
|
||||||
TYPE_FIELDS (ftype) = (struct field *)
|
|
||||||
TYPE_ZALLOC (ftype, nparams * sizeof (struct field));
|
|
||||||
|
|
||||||
+ /* TYPE_FIELD_TYPE must never be NULL. Pre-fill the array to ensure it
|
|
||||||
+ even if we error out during the parameters reading below. */
|
|
||||||
+ for (iparams = 0; iparams < nparams; iparams++)
|
|
||||||
+ TYPE_FIELD_TYPE (ftype, iparams) = void_type;
|
|
||||||
+
|
|
||||||
+ iparams = 0;
|
|
||||||
child_die = die->child;
|
|
||||||
while (child_die && child_die->tag)
|
|
||||||
{
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.S
|
|
||||||
@@ -0,0 +1,73 @@
|
|
||||||
+/* Copyright 2010 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
+
|
|
||||||
+ .section .debug_info
|
|
||||||
+debug_start:
|
|
||||||
+ .long debug_end - 1f /* Length of Compilation Unit Info */
|
|
||||||
+1:
|
|
||||||
+ .2byte 0x3 /* DWARF version number */
|
|
||||||
+ .long .Ldebug_abbrev0 /* Offset Into Abbrev. Section */
|
|
||||||
+ .byte 0x4 /* Pointer Size (in bytes) */
|
|
||||||
+ .uleb128 0x1 /* (DIE (0xb) DW_TAG_compile_unit) */
|
|
||||||
+ .ascii "GNU C 4.4.3\0" /* DW_AT_producer */
|
|
||||||
+ .byte 0x1 /* DW_AT_language */
|
|
||||||
+ .ascii "1.c\0" /* DW_AT_name */
|
|
||||||
+ .uleb128 0x4 /* (DIE (0x3c) DW_TAG_subprogram) */
|
|
||||||
+ .ascii "f\0" /* DW_AT_name */
|
|
||||||
+/* Value 0 would require has_section_at_zero != 0 (which is true, though). */
|
|
||||||
+ .long 1 /* DW_AT_low_pc */
|
|
||||||
+ .long 2 /* DW_AT_high_pc */
|
|
||||||
+ .byte 0x1 /* DW_AT_prototyped */
|
|
||||||
+ .uleb128 0x5 /* (DIE (0x42) DW_TAG_formal_parameter) */
|
|
||||||
+/* Invalid value. */
|
|
||||||
+ .long 0x0 /* DW_AT_type */
|
|
||||||
+ .byte 0x0 /* end of children of DIE 0x3c */
|
|
||||||
+ .byte 0x0 /* end of children of DIE 0xb */
|
|
||||||
+debug_end:
|
|
||||||
+
|
|
||||||
+ .section .debug_abbrev
|
|
||||||
+.Ldebug_abbrev0:
|
|
||||||
+ .uleb128 0x1 /* (abbrev code) */
|
|
||||||
+ .uleb128 0x11 /* (TAG: DW_TAG_compile_unit) */
|
|
||||||
+ .byte 0x1 /* DW_children_yes */
|
|
||||||
+ .uleb128 0x25 /* (DW_AT_producer) */
|
|
||||||
+ .uleb128 0x8 /* (DW_FORM_string) */
|
|
||||||
+ .uleb128 0x13 /* (DW_AT_language) */
|
|
||||||
+ .uleb128 0xb /* (DW_FORM_data1) */
|
|
||||||
+ .uleb128 0x3 /* (DW_AT_name) */
|
|
||||||
+ .uleb128 0x8 /* (DW_FORM_string) */
|
|
||||||
+ .byte 0x0
|
|
||||||
+ .byte 0x0
|
|
||||||
+ .uleb128 0x4 /* (abbrev code) */
|
|
||||||
+ .uleb128 0x2e /* (TAG: DW_TAG_subprogram) */
|
|
||||||
+ .byte 0x1 /* DW_children_yes */
|
|
||||||
+ .uleb128 0x3 /* (DW_AT_name) */
|
|
||||||
+ .uleb128 0x8 /* (DW_FORM_string) */
|
|
||||||
+ .uleb128 0x11 /* (DW_AT_low_pc) */
|
|
||||||
+ .uleb128 0x1 /* (DW_FORM_addr) */
|
|
||||||
+ .uleb128 0x12 /* (DW_AT_high_pc) */
|
|
||||||
+ .uleb128 0x1 /* (DW_FORM_addr) */
|
|
||||||
+ .uleb128 0x27 /* (DW_AT_prototyped) */
|
|
||||||
+ .uleb128 0xc /* (DW_FORM_flag) */
|
|
||||||
+ .byte 0x0
|
|
||||||
+ .byte 0x0
|
|
||||||
+ .uleb128 0x5 /* (abbrev code) */
|
|
||||||
+ .uleb128 0x5 /* (TAG: DW_TAG_formal_parameter) */
|
|
||||||
+ .byte 0x0 /* DW_children_no */
|
|
||||||
+ .uleb128 0x49 /* (DW_AT_type) */
|
|
||||||
+ .uleb128 0x13 /* (DW_FORM_ref4) */
|
|
||||||
+ .byte 0x0
|
|
||||||
+ .byte 0x0
|
|
||||||
+ .byte 0x0
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gdb/testsuite/gdb.dwarf2/dw2-bad-parameter-type.exp
|
|
||||||
@@ -0,0 +1,44 @@
|
|
||||||
+# Copyright 2010 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
|
||||||
+# it under the terms of the GNU General Public License as published by
|
|
||||||
+# the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+# (at your option) any later version.
|
|
||||||
+#
|
|
||||||
+# This program is distributed in the hope that it will be useful,
|
|
||||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+# GNU General Public License for more details.
|
|
||||||
+#
|
|
||||||
+# You should have received a copy of the GNU General Public License
|
|
||||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+# This test can only be run on targets which support DWARF-2 and use gas.
|
|
||||||
+# For now pick a sampling of likely targets.
|
|
||||||
+if {![istarget *-*-linux*]
|
|
||||||
+ && ![istarget *-*-gnu*]
|
|
||||||
+ && ![istarget *-*-elf*]
|
|
||||||
+ && ![istarget *-*-openbsd*]
|
|
||||||
+ && ![istarget arm-*-eabi*]
|
|
||||||
+ && ![istarget powerpc-*-eabi*]} {
|
|
||||||
+ return 0
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set testfile "dw2-bad-parameter-type"
|
|
||||||
+set srcfile ${testfile}.S
|
|
||||||
+set executable ${testfile}.x
|
|
||||||
+set binfile ${objdir}/${subdir}/${executable}
|
|
||||||
+
|
|
||||||
+# First try referencing DW_AT_frame_base which is not defined.
|
|
||||||
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != "" } {
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+clean_restart $executable
|
|
||||||
+
|
|
||||||
+# The first access (as we do not use -readnow) prints some:
|
|
||||||
+# Dwarf Error: Cannot find DIE at 0x0 referenced from DIE at 0x29 [in module ...]
|
|
||||||
+gdb_test "ptype f"
|
|
||||||
+
|
|
||||||
+gdb_test "ptype f"
|
|
||||||
+gdb_test "p 5" " = 5" "is alive"
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -1,751 +0,0 @@
|
|||||||
[ Backported. ]
|
|
||||||
|
|
||||||
commit cb928c67c90cfb5bbb0636d91855b95e51ad275d
|
|
||||||
Author: Daniel Jacobowitz <dan@debian.org>
|
|
||||||
Date: Mon Mar 1 17:19:21 2010 +0000
|
|
||||||
|
|
||||||
* gdbtypes.c (append_composite_type_field_raw): New.
|
|
||||||
(append_composite_type_field_aligned): Use the new function.
|
|
||||||
* gdbtypes.h (append_composite_type_field_raw): Declare.
|
|
||||||
* target-descriptions.c (struct tdesc_type_field): Add start and end.
|
|
||||||
(struct tdesc_type_flag): New type.
|
|
||||||
(struct tdesc_type): Add TDESC_TYPE_STRUCT and TDESC_TYPE_FLAGS to
|
|
||||||
kind. Add size to u.u. Add u.f for flags.
|
|
||||||
(tdesc_gdb_type): Handle TDESC_TYPE_STRUCT and TDESC_TYPE_FLAGS.
|
|
||||||
(tdesc_free_type): Likewise.
|
|
||||||
(tdesc_create_struct, tdesc_set_struct_size, tdesc_create_flags): New.
|
|
||||||
(tdesc_add_field): Handle TDESC_TYPE_STRUCT.
|
|
||||||
(tdesc_add_bitfield, tdesc_add_flag): New.
|
|
||||||
* target-descriptions.h (tdesc_create_struct, tdesc_set_struct_size)
|
|
||||||
(tdesc_create_flags, tdesc_add_bitfield, tdesc_add_flag): Declare.
|
|
||||||
* xml-tdesc.c (struct tdesc_parsing_data): Rename current_union to
|
|
||||||
current_type. Add current_type_size and current_type_is_flags.
|
|
||||||
(tdesc_start_union): Clear the new fields.
|
|
||||||
(tdesc_start_struct, tdesc_start_flags): New.
|
|
||||||
(tdesc_start_field): Handle struct fields, including bitfields.
|
|
||||||
(field_attributes): Make type optional. Add start and end.
|
|
||||||
(union_children): Rename to struct_union_children.
|
|
||||||
(union_attributes): Rename to struct_union_attributes. Add optional
|
|
||||||
size.
|
|
||||||
(flags_attributes): New.
|
|
||||||
(feature_children): Add struct and flags.
|
|
||||||
* features/gdb-target.dtd: Add flags and struct to features.
|
|
||||||
Make field type optional. Add field start and end.
|
|
||||||
|
|
||||||
doc/
|
|
||||||
* gdb.texinfo (Types): Describe <struct> and <flags>.
|
|
||||||
|
|
||||||
testsuite/
|
|
||||||
* gdb.xml/extra-regs.xml: Add struct1, struct2, and flags
|
|
||||||
types. Add structreg, bitfields, and flags registers.
|
|
||||||
* gdb.xml/tdesc-regs.exp: Test structreg and bitfields
|
|
||||||
registers.
|
|
||||||
|
|
||||||
--- gdb-7.1-p0/gdb/doc/gdb.texinfo 2010-04-03 20:24:51.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/doc/gdb.texinfo 2010-04-03 21:04:13.000000000 +0200
|
|
||||||
@@ -33115,6 +33115,47 @@ each of which has a @var{name} and a @va
|
|
||||||
</union>
|
|
||||||
@end smallexample
|
|
||||||
|
|
||||||
+@cindex <struct>
|
|
||||||
+If a register's value is composed from several separate values, define
|
|
||||||
+it with a structure type. There are two forms of the @samp{<struct>}
|
|
||||||
+element; a @samp{<struct>} element must either contain only bitfields
|
|
||||||
+or contain no bitfields. If the structure contains only bitfields,
|
|
||||||
+its total size in bytes must be specified, each bitfield must have an
|
|
||||||
+explicit start and end, and bitfields are automatically assigned an
|
|
||||||
+integer type. The field's @var{start} should be less than or
|
|
||||||
+equal to its @var{end}, and zero represents the least significant bit.
|
|
||||||
+
|
|
||||||
+@smallexample
|
|
||||||
+<struct id="@var{id}" size="@var{size}">
|
|
||||||
+ <field name="@var{name}" start="@var{start}" end="@var{end}"/>
|
|
||||||
+ @dots{}
|
|
||||||
+</struct>
|
|
||||||
+@end smallexample
|
|
||||||
+
|
|
||||||
+If the structure contains no bitfields, then each field has an
|
|
||||||
+explicit type, and no implicit padding is added.
|
|
||||||
+
|
|
||||||
+@smallexample
|
|
||||||
+<struct id="@var{id}">
|
|
||||||
+ <field name="@var{name}" type="@var{type}"/>
|
|
||||||
+ @dots{}
|
|
||||||
+</struct>
|
|
||||||
+@end smallexample
|
|
||||||
+
|
|
||||||
+@cindex <flags>
|
|
||||||
+If a register's value is a series of single-bit flags, define it with
|
|
||||||
+a flags type. The @samp{<flags>} element has an explicit @var{size}
|
|
||||||
+and contains one or more @samp{<field>} elements. Each field has a
|
|
||||||
+@var{name}, a @var{start}, and an @var{end}. Only single-bit flags
|
|
||||||
+are supported.
|
|
||||||
+
|
|
||||||
+@smallexample
|
|
||||||
+<flags id="@var{id}" size="@var{size}">
|
|
||||||
+ <field name="@var{name}" start="@var{start}" end="@var{end}"/>
|
|
||||||
+ @dots{}
|
|
||||||
+</flags>
|
|
||||||
+@end smallexample
|
|
||||||
+
|
|
||||||
@subsection Registers
|
|
||||||
@cindex <reg>
|
|
||||||
|
|
||||||
--- gdb-7.1-p0/gdb/features/gdb-target.dtd 2010-01-01 08:31:48.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/features/gdb-target.dtd 2010-04-03 21:04:13.000000000 +0200
|
|
||||||
@@ -19,7 +19,8 @@
|
|
||||||
|
|
||||||
<!ELEMENT compatible (#PCDATA)>
|
|
||||||
|
|
||||||
-<!ELEMENT feature ((vector | union)*, reg*)>
|
|
||||||
+<!ELEMENT feature
|
|
||||||
+ ((vector | flags | struct | union )*, reg*)>
|
|
||||||
<!ATTLIST feature
|
|
||||||
name ID #REQUIRED>
|
|
||||||
|
|
||||||
@@ -39,6 +40,16 @@
|
|
||||||
type CDATA #REQUIRED
|
|
||||||
count CDATA #REQUIRED>
|
|
||||||
|
|
||||||
+<!ELEMENT flags (field+)>
|
|
||||||
+<!ATTLIST flags
|
|
||||||
+ id CDATA #REQUIRED
|
|
||||||
+ size CDATA #REQUIRED>
|
|
||||||
+
|
|
||||||
+<!ELEMENT struct (field+)>
|
|
||||||
+<!ATTLIST struct
|
|
||||||
+ id CDATA #REQUIRED
|
|
||||||
+ size CDATA #IMPLIED>
|
|
||||||
+
|
|
||||||
<!ELEMENT union (field+)>
|
|
||||||
<!ATTLIST union
|
|
||||||
id CDATA #REQUIRED>
|
|
||||||
@@ -46,7 +57,9 @@
|
|
||||||
<!ELEMENT field EMPTY>
|
|
||||||
<!ATTLIST field
|
|
||||||
name CDATA #REQUIRED
|
|
||||||
- type CDATA #REQUIRED>
|
|
||||||
+ type CDATA #IMPLIED
|
|
||||||
+ start CDATA #IMPLIED
|
|
||||||
+ end CDATA #IMPLIED>
|
|
||||||
|
|
||||||
<!ENTITY % xinclude SYSTEM "xinclude.dtd">
|
|
||||||
%xinclude;
|
|
||||||
--- gdb-7.1-p0/gdb/gdbtypes.c 2010-04-03 20:24:51.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/gdbtypes.c 2010-04-03 21:04:13.000000000 +0200
|
|
||||||
@@ -3798,10 +3798,11 @@ arch_composite_type (struct gdbarch *gdb
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add new field with name NAME and type FIELD to composite type T.
|
|
||||||
- ALIGNMENT (if non-zero) specifies the minimum field alignment. */
|
|
||||||
-void
|
|
||||||
-append_composite_type_field_aligned (struct type *t, char *name,
|
|
||||||
- struct type *field, int alignment)
|
|
||||||
+ Do not set the field's position or adjust the type's length;
|
|
||||||
+ the caller should do so. Return the new field. */
|
|
||||||
+struct field *
|
|
||||||
+append_composite_type_field_raw (struct type *t, char *name,
|
|
||||||
+ struct type *field)
|
|
||||||
{
|
|
||||||
struct field *f;
|
|
||||||
TYPE_NFIELDS (t) = TYPE_NFIELDS (t) + 1;
|
|
||||||
@@ -3811,6 +3812,16 @@ append_composite_type_field_aligned (str
|
|
||||||
memset (f, 0, sizeof f[0]);
|
|
||||||
FIELD_TYPE (f[0]) = field;
|
|
||||||
FIELD_NAME (f[0]) = name;
|
|
||||||
+ return f;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* Add new field with name NAME and type FIELD to composite type T.
|
|
||||||
+ ALIGNMENT (if non-zero) specifies the minimum field alignment. */
|
|
||||||
+void
|
|
||||||
+append_composite_type_field_aligned (struct type *t, char *name,
|
|
||||||
+ struct type *field, int alignment)
|
|
||||||
+{
|
|
||||||
+ struct field *f = append_composite_type_field_raw (t, name, field);
|
|
||||||
if (TYPE_CODE (t) == TYPE_CODE_UNION)
|
|
||||||
{
|
|
||||||
if (TYPE_LENGTH (t) < TYPE_LENGTH (field))
|
|
||||||
--- gdb-7.1-p0/gdb/gdbtypes.h 2010-04-03 20:24:51.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/gdbtypes.h 2010-04-03 21:04:13.000000000 +0200
|
|
||||||
@@ -1395,6 +1395,8 @@ extern void append_composite_type_field_
|
|
||||||
char *name,
|
|
||||||
struct type *field,
|
|
||||||
int alignment);
|
|
||||||
+struct field *append_composite_type_field_raw (struct type *t, char *name,
|
|
||||||
+ struct type *field);
|
|
||||||
|
|
||||||
/* Helper functions to construct a bit flags type. An initially empty
|
|
||||||
type is created using arch_flag_type(). Flags are then added using
|
|
||||||
--- gdb-7.1-p0/gdb/target-descriptions.c 2010-02-10 19:45:02.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/target-descriptions.c 2010-04-03 21:04:13.000000000 +0200
|
|
||||||
@@ -90,9 +90,17 @@ typedef struct tdesc_type_field
|
|
||||||
{
|
|
||||||
char *name;
|
|
||||||
struct tdesc_type *type;
|
|
||||||
+ int start, end;
|
|
||||||
} tdesc_type_field;
|
|
||||||
DEF_VEC_O(tdesc_type_field);
|
|
||||||
|
|
||||||
+typedef struct tdesc_type_flag
|
|
||||||
+{
|
|
||||||
+ char *name;
|
|
||||||
+ int start;
|
|
||||||
+} tdesc_type_flag;
|
|
||||||
+DEF_VEC_O(tdesc_type_flag);
|
|
||||||
+
|
|
||||||
typedef struct tdesc_type
|
|
||||||
{
|
|
||||||
/* The name of this type. */
|
|
||||||
@@ -123,7 +131,9 @@ typedef struct tdesc_type
|
|
||||||
|
|
||||||
/* Types defined by a target feature. */
|
|
||||||
TDESC_TYPE_VECTOR,
|
|
||||||
- TDESC_TYPE_UNION
|
|
||||||
+ TDESC_TYPE_STRUCT,
|
|
||||||
+ TDESC_TYPE_UNION,
|
|
||||||
+ TDESC_TYPE_FLAGS
|
|
||||||
} kind;
|
|
||||||
|
|
||||||
/* Kind-specific data. */
|
|
||||||
@@ -136,11 +146,19 @@ typedef struct tdesc_type
|
|
||||||
int count;
|
|
||||||
} v;
|
|
||||||
|
|
||||||
- /* Union type. */
|
|
||||||
+ /* Struct or union type. */
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
VEC(tdesc_type_field) *fields;
|
|
||||||
+ LONGEST size;
|
|
||||||
} u;
|
|
||||||
+
|
|
||||||
+ /* Flags type. */
|
|
||||||
+ struct
|
|
||||||
+ {
|
|
||||||
+ VEC(tdesc_type_flag) *flags;
|
|
||||||
+ LONGEST size;
|
|
||||||
+ } f;
|
|
||||||
} u;
|
|
||||||
} *tdesc_type_p;
|
|
||||||
DEF_VEC_P(tdesc_type_p);
|
|
||||||
@@ -652,6 +670,66 @@ tdesc_gdb_type (struct gdbarch *gdbarch,
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ case TDESC_TYPE_STRUCT:
|
|
||||||
+ {
|
|
||||||
+ struct type *type, *field_type;
|
|
||||||
+ struct tdesc_type_field *f;
|
|
||||||
+ int ix;
|
|
||||||
+
|
|
||||||
+ type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
|
|
||||||
+ TYPE_NAME (type) = xstrdup (tdesc_type->name);
|
|
||||||
+ TYPE_TAG_NAME (type) = TYPE_NAME (type);
|
|
||||||
+
|
|
||||||
+ for (ix = 0;
|
|
||||||
+ VEC_iterate (tdesc_type_field, tdesc_type->u.u.fields, ix, f);
|
|
||||||
+ ix++)
|
|
||||||
+ {
|
|
||||||
+ if (f->type == NULL)
|
|
||||||
+ {
|
|
||||||
+ /* Bitfield. */
|
|
||||||
+ struct field *fld;
|
|
||||||
+ struct type *field_type;
|
|
||||||
+ int bitsize, total_size;
|
|
||||||
+
|
|
||||||
+ /* This invariant should be preserved while creating
|
|
||||||
+ types. */
|
|
||||||
+ gdb_assert (tdesc_type->u.u.size != 0);
|
|
||||||
+ if (tdesc_type->u.u.size > 4)
|
|
||||||
+ field_type = builtin_type (gdbarch)->builtin_uint64;
|
|
||||||
+ else
|
|
||||||
+ field_type = builtin_type (gdbarch)->builtin_uint32;
|
|
||||||
+
|
|
||||||
+ fld = append_composite_type_field_raw (type, xstrdup (f->name),
|
|
||||||
+ field_type);
|
|
||||||
+
|
|
||||||
+ /* For little-endian, BITPOS counts from the LSB of
|
|
||||||
+ the structure and marks the LSB of the field. For
|
|
||||||
+ big-endian, BITPOS counts from the MSB of the
|
|
||||||
+ structure and marks the MSB of the field. Either
|
|
||||||
+ way, it is the number of bits to the "left" of the
|
|
||||||
+ field. To calculate this in big-endian, we need
|
|
||||||
+ the total size of the structure. */
|
|
||||||
+ bitsize = f->end - f->start + 1;
|
|
||||||
+ total_size = tdesc_type->u.u.size * TARGET_CHAR_BIT;
|
|
||||||
+ if (gdbarch_bits_big_endian (gdbarch))
|
|
||||||
+ FIELD_BITPOS (fld[0]) = total_size - f->start - bitsize;
|
|
||||||
+ else
|
|
||||||
+ FIELD_BITPOS (fld[0]) = f->start;
|
|
||||||
+ FIELD_BITSIZE (fld[0]) = bitsize;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ field_type = tdesc_gdb_type (gdbarch, f->type);
|
|
||||||
+ append_composite_type_field (type, xstrdup (f->name),
|
|
||||||
+ field_type);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (tdesc_type->u.u.size != 0)
|
|
||||||
+ TYPE_LENGTH (type) = tdesc_type->u.u.size;
|
|
||||||
+ return type;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
case TDESC_TYPE_UNION:
|
|
||||||
{
|
|
||||||
struct type *type, *field_type;
|
|
||||||
@@ -668,12 +746,30 @@ tdesc_gdb_type (struct gdbarch *gdbarch,
|
|
||||||
field_type = tdesc_gdb_type (gdbarch, f->type);
|
|
||||||
append_composite_type_field (type, xstrdup (f->name), field_type);
|
|
||||||
|
|
||||||
- /* If any of the children of this union are vectors, flag the
|
|
||||||
+ /* If any of the children of a union are vectors, flag the
|
|
||||||
union as a vector also. This allows e.g. a union of two
|
|
||||||
vector types to show up automatically in "info vector". */
|
|
||||||
if (TYPE_VECTOR (field_type))
|
|
||||||
TYPE_VECTOR (type) = 1;
|
|
||||||
}
|
|
||||||
+ return type;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ case TDESC_TYPE_FLAGS:
|
|
||||||
+ {
|
|
||||||
+ struct type *type, *field_type;
|
|
||||||
+ struct tdesc_type_flag *f;
|
|
||||||
+ int ix;
|
|
||||||
+
|
|
||||||
+ type = arch_flags_type (gdbarch, xstrdup (tdesc_type->name),
|
|
||||||
+ tdesc_type->u.f.size);
|
|
||||||
+ for (ix = 0;
|
|
||||||
+ VEC_iterate (tdesc_type_flag, tdesc_type->u.f.flags, ix, f);
|
|
||||||
+ ix++)
|
|
||||||
+ /* Note that contrary to the function name, this call will
|
|
||||||
+ just set the properties of an already-allocated
|
|
||||||
+ field. */
|
|
||||||
+ append_flags_type_flag (type, f->start, f->name);
|
|
||||||
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
@@ -1161,6 +1257,7 @@ tdesc_free_type (struct tdesc_type *type
|
|
||||||
|
|
||||||
switch (type->kind)
|
|
||||||
{
|
|
||||||
+ case TDESC_TYPE_STRUCT:
|
|
||||||
case TDESC_TYPE_UNION:
|
|
||||||
{
|
|
||||||
struct tdesc_type_field *f;
|
|
||||||
@@ -1175,6 +1272,20 @@ tdesc_free_type (struct tdesc_type *type
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
+ case TDESC_TYPE_FLAGS:
|
|
||||||
+ {
|
|
||||||
+ struct tdesc_type_flag *f;
|
|
||||||
+ int ix;
|
|
||||||
+
|
|
||||||
+ for (ix = 0;
|
|
||||||
+ VEC_iterate (tdesc_type_flag, type->u.f.flags, ix, f);
|
|
||||||
+ ix++)
|
|
||||||
+ xfree (f->name);
|
|
||||||
+
|
|
||||||
+ VEC_free (tdesc_type_flag, type->u.f.flags);
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
@@ -1199,6 +1310,29 @@ tdesc_create_vector (struct tdesc_featur
|
|
||||||
}
|
|
||||||
|
|
||||||
struct tdesc_type *
|
|
||||||
+tdesc_create_struct (struct tdesc_feature *feature, const char *name)
|
|
||||||
+{
|
|
||||||
+ struct tdesc_type *type = XZALLOC (struct tdesc_type);
|
|
||||||
+
|
|
||||||
+ type->name = xstrdup (name);
|
|
||||||
+ type->kind = TDESC_TYPE_STRUCT;
|
|
||||||
+
|
|
||||||
+ VEC_safe_push (tdesc_type_p, feature->types, type);
|
|
||||||
+ return type;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* Set the total length of TYPE. Structs which contain bitfields may
|
|
||||||
+ omit the reserved bits, so the end of the last field may not
|
|
||||||
+ suffice. */
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+tdesc_set_struct_size (struct tdesc_type *type, LONGEST size)
|
|
||||||
+{
|
|
||||||
+ gdb_assert (type->kind == TDESC_TYPE_STRUCT);
|
|
||||||
+ type->u.u.size = size;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+struct tdesc_type *
|
|
||||||
tdesc_create_union (struct tdesc_feature *feature, const char *name)
|
|
||||||
{
|
|
||||||
struct tdesc_type *type = XZALLOC (struct tdesc_type);
|
|
||||||
@@ -1210,13 +1344,32 @@ tdesc_create_union (struct tdesc_feature
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
|
|
||||||
+struct tdesc_type *
|
|
||||||
+tdesc_create_flags (struct tdesc_feature *feature, const char *name,
|
|
||||||
+ LONGEST size)
|
|
||||||
+{
|
|
||||||
+ struct tdesc_type *type = XZALLOC (struct tdesc_type);
|
|
||||||
+
|
|
||||||
+ type->name = xstrdup (name);
|
|
||||||
+ type->kind = TDESC_TYPE_FLAGS;
|
|
||||||
+ type->u.f.size = size;
|
|
||||||
+
|
|
||||||
+ VEC_safe_push (tdesc_type_p, feature->types, type);
|
|
||||||
+ return type;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* Add a new field. Return a temporary pointer to the field, which
|
|
||||||
+ is only valid until the next call to tdesc_add_field (the vector
|
|
||||||
+ might be reallocated). */
|
|
||||||
+
|
|
||||||
void
|
|
||||||
tdesc_add_field (struct tdesc_type *type, const char *field_name,
|
|
||||||
struct tdesc_type *field_type)
|
|
||||||
{
|
|
||||||
struct tdesc_type_field f = { 0 };
|
|
||||||
|
|
||||||
- gdb_assert (type->kind == TDESC_TYPE_UNION);
|
|
||||||
+ gdb_assert (type->kind == TDESC_TYPE_UNION
|
|
||||||
+ || type->kind == TDESC_TYPE_STRUCT);
|
|
||||||
|
|
||||||
f.name = xstrdup (field_name);
|
|
||||||
f.type = field_type;
|
|
||||||
@@ -1224,6 +1377,37 @@ tdesc_add_field (struct tdesc_type *type
|
|
||||||
VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Add a new bitfield. */
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+tdesc_add_bitfield (struct tdesc_type *type, const char *field_name,
|
|
||||||
+ int start, int end)
|
|
||||||
+{
|
|
||||||
+ struct tdesc_type_field f = { 0 };
|
|
||||||
+
|
|
||||||
+ gdb_assert (type->kind == TDESC_TYPE_STRUCT);
|
|
||||||
+
|
|
||||||
+ f.name = xstrdup (field_name);
|
|
||||||
+ f.start = start;
|
|
||||||
+ f.end = end;
|
|
||||||
+
|
|
||||||
+ VEC_safe_push (tdesc_type_field, type->u.u.fields, &f);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+tdesc_add_flag (struct tdesc_type *type, int start,
|
|
||||||
+ const char *flag_name)
|
|
||||||
+{
|
|
||||||
+ struct tdesc_type_flag f = { 0 };
|
|
||||||
+
|
|
||||||
+ gdb_assert (type->kind == TDESC_TYPE_FLAGS);
|
|
||||||
+
|
|
||||||
+ f.name = xstrdup (flag_name);
|
|
||||||
+ f.start = start;
|
|
||||||
+
|
|
||||||
+ VEC_safe_push (tdesc_type_flag, type->u.f.flags, &f);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
tdesc_free_feature (struct tdesc_feature *feature)
|
|
||||||
{
|
|
||||||
--- gdb-7.1-p0/gdb/target-descriptions.h 2010-02-10 19:45:03.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/target-descriptions.h 2010-04-03 21:04:13.000000000 +0200
|
|
||||||
@@ -205,10 +205,20 @@ struct tdesc_type *tdesc_create_vector (
|
|
||||||
const char *name,
|
|
||||||
struct tdesc_type *field_type,
|
|
||||||
int count);
|
|
||||||
+struct tdesc_type *tdesc_create_struct (struct tdesc_feature *feature,
|
|
||||||
+ const char *name);
|
|
||||||
+void tdesc_set_struct_size (struct tdesc_type *type, LONGEST size);
|
|
||||||
struct tdesc_type *tdesc_create_union (struct tdesc_feature *feature,
|
|
||||||
const char *name);
|
|
||||||
+struct tdesc_type *tdesc_create_flags (struct tdesc_feature *feature,
|
|
||||||
+ const char *name,
|
|
||||||
+ LONGEST size);
|
|
||||||
void tdesc_add_field (struct tdesc_type *type, const char *field_name,
|
|
||||||
struct tdesc_type *field_type);
|
|
||||||
+void tdesc_add_bitfield (struct tdesc_type *type, const char *field_name,
|
|
||||||
+ int start, int end);
|
|
||||||
+void tdesc_add_flag (struct tdesc_type *type, int start,
|
|
||||||
+ const char *flag_name);
|
|
||||||
void tdesc_create_reg (struct tdesc_feature *feature, const char *name,
|
|
||||||
int regnum, int save_restore, const char *group,
|
|
||||||
int bitsize, const char *type);
|
|
||||||
--- gdb-7.1-p0/gdb/testsuite/gdb.xml/extra-regs.xml 2007-02-08 22:00:36.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.xml/extra-regs.xml 2010-04-03 21:04:13.000000000 +0200
|
|
||||||
@@ -8,9 +8,27 @@
|
|
||||||
<field name="v2" type="v2int16"/>
|
|
||||||
</union>
|
|
||||||
|
|
||||||
+ <struct id="struct1">
|
|
||||||
+ <field name="v4" type="v4int8"/>
|
|
||||||
+ <field name="v2" type="v2int16"/>
|
|
||||||
+ </struct>
|
|
||||||
+
|
|
||||||
+ <struct id="struct2" size="8">
|
|
||||||
+ <field name="f1" start="0" end="34"/>
|
|
||||||
+ <field name="f2" start="63" end="63"/>
|
|
||||||
+ </struct>
|
|
||||||
+
|
|
||||||
+ <flags id="flags" size="4">
|
|
||||||
+ <field name="X" start="0" end="0"/>
|
|
||||||
+ <field name="Y" start="2" end="2"/>
|
|
||||||
+ </flags>
|
|
||||||
+
|
|
||||||
<reg name="extrareg" bitsize="32"/>
|
|
||||||
<reg name="uintreg" bitsize="32" type="uint32"/>
|
|
||||||
<reg name="vecreg" bitsize="32" type="v4int8"/>
|
|
||||||
<reg name="unionreg" bitsize="32" type="vecint"/>
|
|
||||||
+ <reg name="structreg" bitsize="64" type="struct1"/>
|
|
||||||
+ <reg name="bitfields" bitsize="64" type="struct2"/>
|
|
||||||
+ <reg name="flags" bitsize="32" type="flags"/>
|
|
||||||
</feature>
|
|
||||||
</target>
|
|
||||||
--- gdb-7.1-p0/gdb/testsuite/gdb.xml/tdesc-regs.exp 2010-04-03 20:59:52.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.xml/tdesc-regs.exp 2010-04-03 21:04:13.000000000 +0200
|
|
||||||
@@ -141,6 +141,11 @@ gdb_test "ptype \$vecreg" "type = int8_t
|
|
||||||
gdb_test "ptype \$unionreg" \
|
|
||||||
"type = union {\r\n *v4int8 v4;\r\n *v2int16 v2;\r\n}"
|
|
||||||
gdb_test "ptype \$unionreg.v4" "type = int8_t \\\[4\\\]"
|
|
||||||
+gdb_test "ptype \$structreg" \
|
|
||||||
+ "type = struct struct1 {\r\n *v4int8 v4;\r\n *v2int16 v2;\r\n}"
|
|
||||||
+gdb_test "ptype \$structreg.v4" "type = int8_t \\\[4\\\]"
|
|
||||||
+gdb_test "ptype \$bitfields" \
|
|
||||||
+ "type = struct struct2 {\r\n *uint64_t f1 : 35;\r\n *uint64_t f2 : 1;\r\n}"
|
|
||||||
|
|
||||||
load_description "core-only.xml" ""
|
|
||||||
# The extra register from the previous description should be gone.
|
|
||||||
--- gdb-7.1-p0/gdb/xml-tdesc.c 2010-01-01 08:31:46.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/xml-tdesc.c 2010-04-03 21:04:13.000000000 +0200
|
|
||||||
@@ -85,8 +85,15 @@ struct tdesc_parsing_data
|
|
||||||
it does not have its own. This starts at zero. */
|
|
||||||
int next_regnum;
|
|
||||||
|
|
||||||
- /* The union we are currently parsing, or last parsed. */
|
|
||||||
- struct tdesc_type *current_union;
|
|
||||||
+ /* The struct or union we are currently parsing, or last parsed. */
|
|
||||||
+ struct tdesc_type *current_type;
|
|
||||||
+
|
|
||||||
+ /* The byte size of the current struct type, if specified. Zero
|
|
||||||
+ if not specified. */
|
|
||||||
+ int current_type_size;
|
|
||||||
+
|
|
||||||
+ /* Whether the current type is a flags type. */
|
|
||||||
+ int current_type_is_flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Handle the end of an <architecture> element and its value. */
|
|
||||||
@@ -229,11 +236,57 @@ tdesc_start_union (struct gdb_xml_parser
|
|
||||||
struct tdesc_parsing_data *data = user_data;
|
|
||||||
char *id = VEC_index (gdb_xml_value_s, attributes, 0)->value;
|
|
||||||
|
|
||||||
- data->current_union = tdesc_create_union (data->current_feature, id);
|
|
||||||
+ data->current_type = tdesc_create_union (data->current_feature, id);
|
|
||||||
+ data->current_type_size = 0;
|
|
||||||
+ data->current_type_is_flags = 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* Handle the start of a <struct> element. Initialize the type and
|
|
||||||
+ record it with the current feature. */
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+tdesc_start_struct (struct gdb_xml_parser *parser,
|
|
||||||
+ const struct gdb_xml_element *element,
|
|
||||||
+ void *user_data, VEC(gdb_xml_value_s) *attributes)
|
|
||||||
+{
|
|
||||||
+ struct tdesc_parsing_data *data = user_data;
|
|
||||||
+ char *id = VEC_index (gdb_xml_value_s, attributes, 0)->value;
|
|
||||||
+ struct tdesc_type *type;
|
|
||||||
+
|
|
||||||
+ type = tdesc_create_struct (data->current_feature, id);
|
|
||||||
+ data->current_type = type;
|
|
||||||
+ data->current_type_size = 0;
|
|
||||||
+ data->current_type_is_flags = 0;
|
|
||||||
+
|
|
||||||
+ if (VEC_length (gdb_xml_value_s, attributes) > 1)
|
|
||||||
+ {
|
|
||||||
+ int size = (int) * (ULONGEST *)
|
|
||||||
+ VEC_index (gdb_xml_value_s, attributes, 1)->value;
|
|
||||||
+ tdesc_set_struct_size (type, size);
|
|
||||||
+ data->current_type_size = size;
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+tdesc_start_flags (struct gdb_xml_parser *parser,
|
|
||||||
+ const struct gdb_xml_element *element,
|
|
||||||
+ void *user_data, VEC(gdb_xml_value_s) *attributes)
|
|
||||||
+{
|
|
||||||
+ struct tdesc_parsing_data *data = user_data;
|
|
||||||
+ char *id = VEC_index (gdb_xml_value_s, attributes, 0)->value;
|
|
||||||
+ int length = (int) * (ULONGEST *)
|
|
||||||
+ VEC_index (gdb_xml_value_s, attributes, 1)->value;
|
|
||||||
+ struct tdesc_type *type;
|
|
||||||
+
|
|
||||||
+ type = tdesc_create_flags (data->current_feature, id, length);
|
|
||||||
+
|
|
||||||
+ data->current_type = type;
|
|
||||||
+ data->current_type_size = 0;
|
|
||||||
+ data->current_type_is_flags = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Handle the start of a <field> element. Attach the field to the
|
|
||||||
- current union. */
|
|
||||||
+ current struct or union. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
tdesc_start_field (struct gdb_xml_parser *parser,
|
|
||||||
@@ -241,20 +294,84 @@ tdesc_start_field (struct gdb_xml_parser
|
|
||||||
void *user_data, VEC(gdb_xml_value_s) *attributes)
|
|
||||||
{
|
|
||||||
struct tdesc_parsing_data *data = user_data;
|
|
||||||
+ int ix = 0, length;
|
|
||||||
struct gdb_xml_value *attrs = VEC_address (gdb_xml_value_s, attributes);
|
|
||||||
struct tdesc_type *field_type;
|
|
||||||
char *field_name, *field_type_id;
|
|
||||||
+ int start, end;
|
|
||||||
|
|
||||||
- field_name = attrs[0].value;
|
|
||||||
- field_type_id = attrs[1].value;
|
|
||||||
+ length = VEC_length (gdb_xml_value_s, attributes);
|
|
||||||
|
|
||||||
- field_type = tdesc_named_type (data->current_feature, field_type_id);
|
|
||||||
- if (field_type == NULL)
|
|
||||||
- gdb_xml_error (parser, _("Union field \"%s\" references undefined "
|
|
||||||
- "type \"%s\""),
|
|
||||||
- field_name, field_type_id);
|
|
||||||
+ field_name = attrs[ix++].value;
|
|
||||||
+
|
|
||||||
+ if (ix < length && strcmp (attrs[ix].name, "type") == 0)
|
|
||||||
+ field_type_id = attrs[ix++].value;
|
|
||||||
+ else
|
|
||||||
+ field_type_id = NULL;
|
|
||||||
+
|
|
||||||
+ if (ix < length && strcmp (attrs[ix].name, "start") == 0)
|
|
||||||
+ start = * (ULONGEST *) attrs[ix++].value;
|
|
||||||
+ else
|
|
||||||
+ start = -1;
|
|
||||||
+
|
|
||||||
+ if (ix < length && strcmp (attrs[ix].name, "end") == 0)
|
|
||||||
+ end = * (ULONGEST *) attrs[ix++].value;
|
|
||||||
+ else
|
|
||||||
+ end = -1;
|
|
||||||
+
|
|
||||||
+ if (field_type_id != NULL)
|
|
||||||
+ {
|
|
||||||
+ if (data->current_type_is_flags)
|
|
||||||
+ gdb_xml_error (parser, _("Cannot add typed field \"%s\" to flags"),
|
|
||||||
+ field_name);
|
|
||||||
+ if (data->current_type_size != 0)
|
|
||||||
+ gdb_xml_error (parser,
|
|
||||||
+ _("Explicitly sized type can not contain non-bitfield \"%s\""),
|
|
||||||
+ field_name);
|
|
||||||
+
|
|
||||||
+ field_type = tdesc_named_type (data->current_feature, field_type_id);
|
|
||||||
+ if (field_type == NULL)
|
|
||||||
+ gdb_xml_error (parser, _("Field \"%s\" references undefined "
|
|
||||||
+ "type \"%s\""),
|
|
||||||
+ field_name, field_type_id);
|
|
||||||
+
|
|
||||||
+ tdesc_add_field (data->current_type, field_name, field_type);
|
|
||||||
+ }
|
|
||||||
+ else if (start != -1 && end != -1)
|
|
||||||
+ {
|
|
||||||
+ struct tdesc_type *t = data->current_type;
|
|
||||||
+
|
|
||||||
+ if (data->current_type_is_flags)
|
|
||||||
+ tdesc_add_flag (t, start, field_name);
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ if (data->current_type_size == 0)
|
|
||||||
+ gdb_xml_error (parser,
|
|
||||||
+ _("Implicitly sized type can not contain bitfield \"%s\""),
|
|
||||||
+ field_name);
|
|
||||||
+
|
|
||||||
+ if (end >= 64)
|
|
||||||
+ gdb_xml_error (parser,
|
|
||||||
+ _("Bitfield \"%s\" goes past 64 bits (unsupported)"),
|
|
||||||
+ field_name);
|
|
||||||
+
|
|
||||||
+ /* Assume that the bit numbering in XML is "lsb-zero". Most
|
|
||||||
+ architectures other than PowerPC use this ordering. In
|
|
||||||
+ the future, we can add an XML tag to indicate "msb-zero"
|
|
||||||
+ numbering. */
|
|
||||||
+ if (start > end)
|
|
||||||
+ gdb_xml_error (parser, _("Bitfield \"%s\" has start after end"),
|
|
||||||
+ field_name);
|
|
||||||
|
|
||||||
- tdesc_add_field (data->current_union, field_name, field_type);
|
|
||||||
+ if (end >= data->current_type_size * TARGET_CHAR_BIT)
|
|
||||||
+ gdb_xml_error (parser, _("Bitfield \"%s\" does not fit in struct"));
|
|
||||||
+
|
|
||||||
+ tdesc_add_bitfield (t, field_name, start, end);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ gdb_xml_error (parser, _("Field \"%s\" has neither type nor bit position"),
|
|
||||||
+ field_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Handle the start of a <vector> element. Initialize the type and
|
|
||||||
@@ -287,11 +404,13 @@ tdesc_start_vector (struct gdb_xml_parse
|
|
||||||
|
|
||||||
static const struct gdb_xml_attribute field_attributes[] = {
|
|
||||||
{ "name", GDB_XML_AF_NONE, NULL, NULL },
|
|
||||||
- { "type", GDB_XML_AF_NONE, NULL, NULL },
|
|
||||||
+ { "type", GDB_XML_AF_OPTIONAL, NULL, NULL },
|
|
||||||
+ { "start", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
|
|
||||||
+ { "end", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
|
|
||||||
{ NULL, GDB_XML_AF_NONE, NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
-static const struct gdb_xml_element union_children[] = {
|
|
||||||
+static const struct gdb_xml_element struct_union_children[] = {
|
|
||||||
{ "field", field_attributes, NULL, GDB_XML_EF_REPEATABLE,
|
|
||||||
tdesc_start_field, NULL },
|
|
||||||
{ NULL, NULL, NULL, GDB_XML_EF_NONE, NULL, NULL }
|
|
||||||
@@ -308,8 +427,15 @@ static const struct gdb_xml_attribute re
|
|
||||||
{ NULL, GDB_XML_AF_NONE, NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
-static const struct gdb_xml_attribute union_attributes[] = {
|
|
||||||
+static const struct gdb_xml_attribute struct_union_attributes[] = {
|
|
||||||
{ "id", GDB_XML_AF_NONE, NULL, NULL },
|
|
||||||
+ { "size", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL},
|
|
||||||
+ { NULL, GDB_XML_AF_NONE, NULL, NULL }
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static const struct gdb_xml_attribute flags_attributes[] = {
|
|
||||||
+ { "id", GDB_XML_AF_NONE, NULL, NULL },
|
|
||||||
+ { "size", GDB_XML_AF_NONE, gdb_xml_parse_attr_ulongest, NULL},
|
|
||||||
{ NULL, GDB_XML_AF_NONE, NULL, NULL }
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -329,9 +455,15 @@ static const struct gdb_xml_element feat
|
|
||||||
{ "reg", reg_attributes, NULL,
|
|
||||||
GDB_XML_EF_OPTIONAL | GDB_XML_EF_REPEATABLE,
|
|
||||||
tdesc_start_reg, NULL },
|
|
||||||
- { "union", union_attributes, union_children,
|
|
||||||
+ { "struct", struct_union_attributes, struct_union_children,
|
|
||||||
+ GDB_XML_EF_OPTIONAL | GDB_XML_EF_REPEATABLE,
|
|
||||||
+ tdesc_start_struct, NULL },
|
|
||||||
+ { "union", struct_union_attributes, struct_union_children,
|
|
||||||
GDB_XML_EF_OPTIONAL | GDB_XML_EF_REPEATABLE,
|
|
||||||
tdesc_start_union, NULL },
|
|
||||||
+ { "flags", flags_attributes, struct_union_children,
|
|
||||||
+ GDB_XML_EF_OPTIONAL | GDB_XML_EF_REPEATABLE,
|
|
||||||
+ tdesc_start_flags, NULL },
|
|
||||||
{ "vector", vector_attributes, NULL,
|
|
||||||
GDB_XML_EF_OPTIONAL | GDB_XML_EF_REPEATABLE,
|
|
||||||
tdesc_start_vector, NULL },
|
|
@ -1,457 +0,0 @@
|
|||||||
[ Backported. ]
|
|
||||||
|
|
||||||
commit 0257d639d42f896a359993ae8adb5792e280f65f
|
|
||||||
Author: H.J. Lu <hjl.tools@gmail.com>
|
|
||||||
Date: Mon Mar 1 17:26:02 2010 +0000
|
|
||||||
|
|
||||||
Remove TDESC_TYPE_I386_EFLAGS and TDESC_TYPE_I386_MXCSR.
|
|
||||||
|
|
||||||
2010-03-01 H.J. Lu <hongjiu.lu@intel.com>
|
|
||||||
|
|
||||||
* target-descriptions.c (tdesc_type): Remove
|
|
||||||
TDESC_TYPE_I386_EFLAGS and TDESC_TYPE_I386_MXCSR.
|
|
||||||
(tdesc_predefined_types): Likewise.
|
|
||||||
(tdesc_gdb_type): Likewise. Pass NULL to append_flags_type_flag
|
|
||||||
if flag name is empty.
|
|
||||||
(maint_print_c_tdesc_cmd): Handle TDESC_TYPE_FLAGS.
|
|
||||||
|
|
||||||
* features/i386/32bit-core.xml: Define i386_eflags.
|
|
||||||
* features/i386/64bit-core.xml: Likewise.
|
|
||||||
|
|
||||||
* features/i386/32bit-sse.xml: Define i386_mxcsr.
|
|
||||||
* features/i386/64bit-sse.xml: Likewise.
|
|
||||||
|
|
||||||
* features/i386/amd64-linux.c: Regenerated.
|
|
||||||
* features/i386/amd64.c: Likewise.
|
|
||||||
* features/i386/i386-linux.c: Likewise.
|
|
||||||
* features/i386/i386.c: Likewise.
|
|
||||||
|
|
||||||
--- gdb-7.1-p1/gdb/features/i386/32bit-core.xml 2010-02-08 06:08:46.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/features/i386/32bit-core.xml 2010-04-03 21:06:12.000000000 +0200
|
|
||||||
@@ -7,6 +7,26 @@
|
|
||||||
|
|
||||||
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
|
|
||||||
<feature name="org.gnu.gdb.i386.core">
|
|
||||||
+ <flags id="i386_eflags" size="4">
|
|
||||||
+ <field name="CF" start="0" end="0"/>
|
|
||||||
+ <field name="" start="1" end="1"/>
|
|
||||||
+ <field name="PF" start="2" end="2"/>
|
|
||||||
+ <field name="AF" start="4" end="4"/>
|
|
||||||
+ <field name="ZF" start="6" end="6"/>
|
|
||||||
+ <field name="SF" start="7" end="7"/>
|
|
||||||
+ <field name="TF" start="8" end="8"/>
|
|
||||||
+ <field name="IF" start="9" end="9"/>
|
|
||||||
+ <field name="DF" start="10" end="10"/>
|
|
||||||
+ <field name="OF" start="11" end="11"/>
|
|
||||||
+ <field name="NT" start="14" end="14"/>
|
|
||||||
+ <field name="RF" start="16" end="16"/>
|
|
||||||
+ <field name="VM" start="17" end="17"/>
|
|
||||||
+ <field name="AC" start="18" end="18"/>
|
|
||||||
+ <field name="VIF" start="19" end="19"/>
|
|
||||||
+ <field name="VIP" start="20" end="20"/>
|
|
||||||
+ <field name="ID" start="21" end="21"/>
|
|
||||||
+ </flags>
|
|
||||||
+
|
|
||||||
<reg name="eax" bitsize="32" type="int32"/>
|
|
||||||
<reg name="ecx" bitsize="32" type="int32"/>
|
|
||||||
<reg name="edx" bitsize="32" type="int32"/>
|
|
||||||
--- gdb-7.1-p1/gdb/features/i386/32bit-sse.xml 2010-02-08 06:08:46.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/features/i386/32bit-sse.xml 2010-04-03 21:06:12.000000000 +0200
|
|
||||||
@@ -22,6 +22,22 @@
|
|
||||||
<field name="v2_int64" type="v2i64"/>
|
|
||||||
<field name="uint128" type="uint128"/>
|
|
||||||
</union>
|
|
||||||
+ <flags id="i386_mxcsr" size="4">
|
|
||||||
+ <field name="IE" start="0" end="0"/>
|
|
||||||
+ <field name="DE" start="1" end="1"/>
|
|
||||||
+ <field name="ZE" start="2" end="2"/>
|
|
||||||
+ <field name="OE" start="3" end="3"/>
|
|
||||||
+ <field name="UE" start="4" end="4"/>
|
|
||||||
+ <field name="PE" start="5" end="5"/>
|
|
||||||
+ <field name="DAZ" start="6" end="6"/>
|
|
||||||
+ <field name="IM" start="7" end="7"/>
|
|
||||||
+ <field name="DM" start="8" end="8"/>
|
|
||||||
+ <field name="ZM" start="9" end="9"/>
|
|
||||||
+ <field name="OM" start="10" end="10"/>
|
|
||||||
+ <field name="UM" start="11" end="11"/>
|
|
||||||
+ <field name="PM" start="12" end="12"/>
|
|
||||||
+ <field name="FZ" start="15" end="15"/>
|
|
||||||
+ </flags>
|
|
||||||
|
|
||||||
<reg name="xmm0" bitsize="128" type="vec128" regnum="32"/>
|
|
||||||
<reg name="xmm1" bitsize="128" type="vec128"/>
|
|
||||||
--- gdb-7.1-p1/gdb/features/i386/64bit-core.xml 2010-02-08 06:08:46.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/features/i386/64bit-core.xml 2010-04-03 21:06:12.000000000 +0200
|
|
||||||
@@ -7,6 +7,26 @@
|
|
||||||
|
|
||||||
<!DOCTYPE feature SYSTEM "gdb-target.dtd">
|
|
||||||
<feature name="org.gnu.gdb.i386.core">
|
|
||||||
+ <flags id="i386_eflags" size="4">
|
|
||||||
+ <field name="CF" start="0" end="0"/>
|
|
||||||
+ <field name="" start="1" end="1"/>
|
|
||||||
+ <field name="PF" start="2" end="2"/>
|
|
||||||
+ <field name="AF" start="4" end="4"/>
|
|
||||||
+ <field name="ZF" start="6" end="6"/>
|
|
||||||
+ <field name="SF" start="7" end="7"/>
|
|
||||||
+ <field name="TF" start="8" end="8"/>
|
|
||||||
+ <field name="IF" start="9" end="9"/>
|
|
||||||
+ <field name="DF" start="10" end="10"/>
|
|
||||||
+ <field name="OF" start="11" end="11"/>
|
|
||||||
+ <field name="NT" start="14" end="14"/>
|
|
||||||
+ <field name="RF" start="16" end="16"/>
|
|
||||||
+ <field name="VM" start="17" end="17"/>
|
|
||||||
+ <field name="AC" start="18" end="18"/>
|
|
||||||
+ <field name="VIF" start="19" end="19"/>
|
|
||||||
+ <field name="VIP" start="20" end="20"/>
|
|
||||||
+ <field name="ID" start="21" end="21"/>
|
|
||||||
+ </flags>
|
|
||||||
+
|
|
||||||
<reg name="rax" bitsize="64" type="int64"/>
|
|
||||||
<reg name="rbx" bitsize="64" type="int64"/>
|
|
||||||
<reg name="rcx" bitsize="64" type="int64"/>
|
|
||||||
--- gdb-7.1-p1/gdb/features/i386/64bit-sse.xml 2010-02-08 06:08:46.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/features/i386/64bit-sse.xml 2010-04-03 21:06:12.000000000 +0200
|
|
||||||
@@ -22,6 +22,22 @@
|
|
||||||
<field name="v2_int64" type="v2i64"/>
|
|
||||||
<field name="uint128" type="uint128"/>
|
|
||||||
</union>
|
|
||||||
+ <flags id="i386_mxcsr" size="4">
|
|
||||||
+ <field name="IE" start="0" end="0"/>
|
|
||||||
+ <field name="DE" start="1" end="1"/>
|
|
||||||
+ <field name="ZE" start="2" end="2"/>
|
|
||||||
+ <field name="OE" start="3" end="3"/>
|
|
||||||
+ <field name="UE" start="4" end="4"/>
|
|
||||||
+ <field name="PE" start="5" end="5"/>
|
|
||||||
+ <field name="DAZ" start="6" end="6"/>
|
|
||||||
+ <field name="IM" start="7" end="7"/>
|
|
||||||
+ <field name="DM" start="8" end="8"/>
|
|
||||||
+ <field name="ZM" start="9" end="9"/>
|
|
||||||
+ <field name="OM" start="10" end="10"/>
|
|
||||||
+ <field name="UM" start="11" end="11"/>
|
|
||||||
+ <field name="PM" start="12" end="12"/>
|
|
||||||
+ <field name="FZ" start="15" end="15"/>
|
|
||||||
+ </flags>
|
|
||||||
|
|
||||||
<reg name="xmm0" bitsize="128" type="vec128" regnum="40"/>
|
|
||||||
<reg name="xmm1" bitsize="128" type="vec128"/>
|
|
||||||
--- gdb-7.1-p1/gdb/features/i386/amd64-linux.c 2010-02-08 06:08:46.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/features/i386/amd64-linux.c 2010-04-03 21:06:12.000000000 +0200
|
|
||||||
@@ -17,6 +17,25 @@ initialize_tdesc_amd64_linux (void)
|
|
||||||
set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
|
|
||||||
|
|
||||||
feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
|
|
||||||
+ field_type = tdesc_create_flags (feature, "i386_eflags", 4);
|
|
||||||
+ tdesc_add_flag (field_type, 0, "CF");
|
|
||||||
+ tdesc_add_flag (field_type, 1, "");
|
|
||||||
+ tdesc_add_flag (field_type, 2, "PF");
|
|
||||||
+ tdesc_add_flag (field_type, 4, "AF");
|
|
||||||
+ tdesc_add_flag (field_type, 6, "ZF");
|
|
||||||
+ tdesc_add_flag (field_type, 7, "SF");
|
|
||||||
+ tdesc_add_flag (field_type, 8, "TF");
|
|
||||||
+ tdesc_add_flag (field_type, 9, "IF");
|
|
||||||
+ tdesc_add_flag (field_type, 10, "DF");
|
|
||||||
+ tdesc_add_flag (field_type, 11, "OF");
|
|
||||||
+ tdesc_add_flag (field_type, 14, "NT");
|
|
||||||
+ tdesc_add_flag (field_type, 16, "RF");
|
|
||||||
+ tdesc_add_flag (field_type, 17, "VM");
|
|
||||||
+ tdesc_add_flag (field_type, 18, "AC");
|
|
||||||
+ tdesc_add_flag (field_type, 19, "VIF");
|
|
||||||
+ tdesc_add_flag (field_type, 20, "VIP");
|
|
||||||
+ tdesc_add_flag (field_type, 21, "ID");
|
|
||||||
+
|
|
||||||
tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
|
|
||||||
tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
|
|
||||||
tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
|
|
||||||
@@ -93,6 +112,22 @@ initialize_tdesc_amd64_linux (void)
|
|
||||||
field_type = tdesc_named_type (feature, "uint128");
|
|
||||||
tdesc_add_field (type, "uint128", field_type);
|
|
||||||
|
|
||||||
+ field_type = tdesc_create_flags (feature, "i386_mxcsr", 4);
|
|
||||||
+ tdesc_add_flag (field_type, 0, "IE");
|
|
||||||
+ tdesc_add_flag (field_type, 1, "DE");
|
|
||||||
+ tdesc_add_flag (field_type, 2, "ZE");
|
|
||||||
+ tdesc_add_flag (field_type, 3, "OE");
|
|
||||||
+ tdesc_add_flag (field_type, 4, "UE");
|
|
||||||
+ tdesc_add_flag (field_type, 5, "PE");
|
|
||||||
+ tdesc_add_flag (field_type, 6, "DAZ");
|
|
||||||
+ tdesc_add_flag (field_type, 7, "IM");
|
|
||||||
+ tdesc_add_flag (field_type, 8, "DM");
|
|
||||||
+ tdesc_add_flag (field_type, 9, "ZM");
|
|
||||||
+ tdesc_add_flag (field_type, 10, "OM");
|
|
||||||
+ tdesc_add_flag (field_type, 11, "UM");
|
|
||||||
+ tdesc_add_flag (field_type, 12, "PM");
|
|
||||||
+ tdesc_add_flag (field_type, 15, "FZ");
|
|
||||||
+
|
|
||||||
tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
|
|
||||||
tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
|
|
||||||
tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
|
|
||||||
--- gdb-7.1-p1/gdb/features/i386/amd64.c 2010-02-08 06:08:46.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/features/i386/amd64.c 2010-04-03 21:06:12.000000000 +0200
|
|
||||||
@@ -15,6 +15,25 @@ initialize_tdesc_amd64 (void)
|
|
||||||
set_tdesc_architecture (result, bfd_scan_arch ("i386:x86-64"));
|
|
||||||
|
|
||||||
feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
|
|
||||||
+ field_type = tdesc_create_flags (feature, "i386_eflags", 4);
|
|
||||||
+ tdesc_add_flag (field_type, 0, "CF");
|
|
||||||
+ tdesc_add_flag (field_type, 1, "");
|
|
||||||
+ tdesc_add_flag (field_type, 2, "PF");
|
|
||||||
+ tdesc_add_flag (field_type, 4, "AF");
|
|
||||||
+ tdesc_add_flag (field_type, 6, "ZF");
|
|
||||||
+ tdesc_add_flag (field_type, 7, "SF");
|
|
||||||
+ tdesc_add_flag (field_type, 8, "TF");
|
|
||||||
+ tdesc_add_flag (field_type, 9, "IF");
|
|
||||||
+ tdesc_add_flag (field_type, 10, "DF");
|
|
||||||
+ tdesc_add_flag (field_type, 11, "OF");
|
|
||||||
+ tdesc_add_flag (field_type, 14, "NT");
|
|
||||||
+ tdesc_add_flag (field_type, 16, "RF");
|
|
||||||
+ tdesc_add_flag (field_type, 17, "VM");
|
|
||||||
+ tdesc_add_flag (field_type, 18, "AC");
|
|
||||||
+ tdesc_add_flag (field_type, 19, "VIF");
|
|
||||||
+ tdesc_add_flag (field_type, 20, "VIP");
|
|
||||||
+ tdesc_add_flag (field_type, 21, "ID");
|
|
||||||
+
|
|
||||||
tdesc_create_reg (feature, "rax", 0, 1, NULL, 64, "int64");
|
|
||||||
tdesc_create_reg (feature, "rbx", 1, 1, NULL, 64, "int64");
|
|
||||||
tdesc_create_reg (feature, "rcx", 2, 1, NULL, 64, "int64");
|
|
||||||
@@ -91,6 +110,22 @@ initialize_tdesc_amd64 (void)
|
|
||||||
field_type = tdesc_named_type (feature, "uint128");
|
|
||||||
tdesc_add_field (type, "uint128", field_type);
|
|
||||||
|
|
||||||
+ field_type = tdesc_create_flags (feature, "i386_mxcsr", 4);
|
|
||||||
+ tdesc_add_flag (field_type, 0, "IE");
|
|
||||||
+ tdesc_add_flag (field_type, 1, "DE");
|
|
||||||
+ tdesc_add_flag (field_type, 2, "ZE");
|
|
||||||
+ tdesc_add_flag (field_type, 3, "OE");
|
|
||||||
+ tdesc_add_flag (field_type, 4, "UE");
|
|
||||||
+ tdesc_add_flag (field_type, 5, "PE");
|
|
||||||
+ tdesc_add_flag (field_type, 6, "DAZ");
|
|
||||||
+ tdesc_add_flag (field_type, 7, "IM");
|
|
||||||
+ tdesc_add_flag (field_type, 8, "DM");
|
|
||||||
+ tdesc_add_flag (field_type, 9, "ZM");
|
|
||||||
+ tdesc_add_flag (field_type, 10, "OM");
|
|
||||||
+ tdesc_add_flag (field_type, 11, "UM");
|
|
||||||
+ tdesc_add_flag (field_type, 12, "PM");
|
|
||||||
+ tdesc_add_flag (field_type, 15, "FZ");
|
|
||||||
+
|
|
||||||
tdesc_create_reg (feature, "xmm0", 40, 1, NULL, 128, "vec128");
|
|
||||||
tdesc_create_reg (feature, "xmm1", 41, 1, NULL, 128, "vec128");
|
|
||||||
tdesc_create_reg (feature, "xmm2", 42, 1, NULL, 128, "vec128");
|
|
||||||
--- gdb-7.1-p1/gdb/features/i386/i386-linux.c 2010-02-08 06:08:46.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/features/i386/i386-linux.c 2010-04-03 21:06:12.000000000 +0200
|
|
||||||
@@ -17,6 +17,25 @@ initialize_tdesc_i386_linux (void)
|
|
||||||
set_tdesc_osabi (result, osabi_from_tdesc_string ("GNU/Linux"));
|
|
||||||
|
|
||||||
feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
|
|
||||||
+ field_type = tdesc_create_flags (feature, "i386_eflags", 4);
|
|
||||||
+ tdesc_add_flag (field_type, 0, "CF");
|
|
||||||
+ tdesc_add_flag (field_type, 1, "");
|
|
||||||
+ tdesc_add_flag (field_type, 2, "PF");
|
|
||||||
+ tdesc_add_flag (field_type, 4, "AF");
|
|
||||||
+ tdesc_add_flag (field_type, 6, "ZF");
|
|
||||||
+ tdesc_add_flag (field_type, 7, "SF");
|
|
||||||
+ tdesc_add_flag (field_type, 8, "TF");
|
|
||||||
+ tdesc_add_flag (field_type, 9, "IF");
|
|
||||||
+ tdesc_add_flag (field_type, 10, "DF");
|
|
||||||
+ tdesc_add_flag (field_type, 11, "OF");
|
|
||||||
+ tdesc_add_flag (field_type, 14, "NT");
|
|
||||||
+ tdesc_add_flag (field_type, 16, "RF");
|
|
||||||
+ tdesc_add_flag (field_type, 17, "VM");
|
|
||||||
+ tdesc_add_flag (field_type, 18, "AC");
|
|
||||||
+ tdesc_add_flag (field_type, 19, "VIF");
|
|
||||||
+ tdesc_add_flag (field_type, 20, "VIP");
|
|
||||||
+ tdesc_add_flag (field_type, 21, "ID");
|
|
||||||
+
|
|
||||||
tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
|
|
||||||
tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
|
|
||||||
tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
|
|
||||||
@@ -88,6 +107,22 @@ initialize_tdesc_i386_linux (void)
|
|
||||||
field_type = tdesc_named_type (feature, "uint128");
|
|
||||||
tdesc_add_field (type, "uint128", field_type);
|
|
||||||
|
|
||||||
+ field_type = tdesc_create_flags (feature, "i386_mxcsr", 4);
|
|
||||||
+ tdesc_add_flag (field_type, 0, "IE");
|
|
||||||
+ tdesc_add_flag (field_type, 1, "DE");
|
|
||||||
+ tdesc_add_flag (field_type, 2, "ZE");
|
|
||||||
+ tdesc_add_flag (field_type, 3, "OE");
|
|
||||||
+ tdesc_add_flag (field_type, 4, "UE");
|
|
||||||
+ tdesc_add_flag (field_type, 5, "PE");
|
|
||||||
+ tdesc_add_flag (field_type, 6, "DAZ");
|
|
||||||
+ tdesc_add_flag (field_type, 7, "IM");
|
|
||||||
+ tdesc_add_flag (field_type, 8, "DM");
|
|
||||||
+ tdesc_add_flag (field_type, 9, "ZM");
|
|
||||||
+ tdesc_add_flag (field_type, 10, "OM");
|
|
||||||
+ tdesc_add_flag (field_type, 11, "UM");
|
|
||||||
+ tdesc_add_flag (field_type, 12, "PM");
|
|
||||||
+ tdesc_add_flag (field_type, 15, "FZ");
|
|
||||||
+
|
|
||||||
tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
|
|
||||||
tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
|
|
||||||
tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
|
|
||||||
--- gdb-7.1-p1/gdb/features/i386/i386.c 2010-02-08 06:08:46.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/features/i386/i386.c 2010-04-03 21:06:12.000000000 +0200
|
|
||||||
@@ -15,6 +15,25 @@ initialize_tdesc_i386 (void)
|
|
||||||
set_tdesc_architecture (result, bfd_scan_arch ("i386"));
|
|
||||||
|
|
||||||
feature = tdesc_create_feature (result, "org.gnu.gdb.i386.core");
|
|
||||||
+ field_type = tdesc_create_flags (feature, "i386_eflags", 4);
|
|
||||||
+ tdesc_add_flag (field_type, 0, "CF");
|
|
||||||
+ tdesc_add_flag (field_type, 1, "");
|
|
||||||
+ tdesc_add_flag (field_type, 2, "PF");
|
|
||||||
+ tdesc_add_flag (field_type, 4, "AF");
|
|
||||||
+ tdesc_add_flag (field_type, 6, "ZF");
|
|
||||||
+ tdesc_add_flag (field_type, 7, "SF");
|
|
||||||
+ tdesc_add_flag (field_type, 8, "TF");
|
|
||||||
+ tdesc_add_flag (field_type, 9, "IF");
|
|
||||||
+ tdesc_add_flag (field_type, 10, "DF");
|
|
||||||
+ tdesc_add_flag (field_type, 11, "OF");
|
|
||||||
+ tdesc_add_flag (field_type, 14, "NT");
|
|
||||||
+ tdesc_add_flag (field_type, 16, "RF");
|
|
||||||
+ tdesc_add_flag (field_type, 17, "VM");
|
|
||||||
+ tdesc_add_flag (field_type, 18, "AC");
|
|
||||||
+ tdesc_add_flag (field_type, 19, "VIF");
|
|
||||||
+ tdesc_add_flag (field_type, 20, "VIP");
|
|
||||||
+ tdesc_add_flag (field_type, 21, "ID");
|
|
||||||
+
|
|
||||||
tdesc_create_reg (feature, "eax", 0, 1, NULL, 32, "int32");
|
|
||||||
tdesc_create_reg (feature, "ecx", 1, 1, NULL, 32, "int32");
|
|
||||||
tdesc_create_reg (feature, "edx", 2, 1, NULL, 32, "int32");
|
|
||||||
@@ -83,6 +102,22 @@ initialize_tdesc_i386 (void)
|
|
||||||
field_type = tdesc_named_type (feature, "uint128");
|
|
||||||
tdesc_add_field (type, "uint128", field_type);
|
|
||||||
|
|
||||||
+ field_type = tdesc_create_flags (feature, "i386_mxcsr", 4);
|
|
||||||
+ tdesc_add_flag (field_type, 0, "IE");
|
|
||||||
+ tdesc_add_flag (field_type, 1, "DE");
|
|
||||||
+ tdesc_add_flag (field_type, 2, "ZE");
|
|
||||||
+ tdesc_add_flag (field_type, 3, "OE");
|
|
||||||
+ tdesc_add_flag (field_type, 4, "UE");
|
|
||||||
+ tdesc_add_flag (field_type, 5, "PE");
|
|
||||||
+ tdesc_add_flag (field_type, 6, "DAZ");
|
|
||||||
+ tdesc_add_flag (field_type, 7, "IM");
|
|
||||||
+ tdesc_add_flag (field_type, 8, "DM");
|
|
||||||
+ tdesc_add_flag (field_type, 9, "ZM");
|
|
||||||
+ tdesc_add_flag (field_type, 10, "OM");
|
|
||||||
+ tdesc_add_flag (field_type, 11, "UM");
|
|
||||||
+ tdesc_add_flag (field_type, 12, "PM");
|
|
||||||
+ tdesc_add_flag (field_type, 15, "FZ");
|
|
||||||
+
|
|
||||||
tdesc_create_reg (feature, "xmm0", 32, 1, NULL, 128, "vec128");
|
|
||||||
tdesc_create_reg (feature, "xmm1", 33, 1, NULL, 128, "vec128");
|
|
||||||
tdesc_create_reg (feature, "xmm2", 34, 1, NULL, 128, "vec128");
|
|
||||||
--- gdb-7.1-p1/gdb/target-descriptions.c 2010-04-03 21:04:13.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/target-descriptions.c 2010-04-03 21:06:12.000000000 +0200
|
|
||||||
@@ -126,8 +126,6 @@ typedef struct tdesc_type
|
|
||||||
TDESC_TYPE_IEEE_DOUBLE,
|
|
||||||
TDESC_TYPE_ARM_FPA_EXT,
|
|
||||||
TDESC_TYPE_I387_EXT,
|
|
||||||
- TDESC_TYPE_I386_EFLAGS,
|
|
||||||
- TDESC_TYPE_I386_MXCSR,
|
|
||||||
|
|
||||||
/* Types defined by a target feature. */
|
|
||||||
TDESC_TYPE_VECTOR,
|
|
||||||
@@ -483,9 +481,7 @@ static struct tdesc_type tdesc_predefine
|
|
||||||
{ "ieee_single", TDESC_TYPE_IEEE_SINGLE },
|
|
||||||
{ "ieee_double", TDESC_TYPE_IEEE_DOUBLE },
|
|
||||||
{ "arm_fpa_ext", TDESC_TYPE_ARM_FPA_EXT },
|
|
||||||
- { "i387_ext", TDESC_TYPE_I387_EXT },
|
|
||||||
- { "i386_eflags", TDESC_TYPE_I386_EFLAGS },
|
|
||||||
- { "i386_mxcsr", TDESC_TYPE_I386_MXCSR }
|
|
||||||
+ { "i387_ext", TDESC_TYPE_I387_EXT }
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Return the type associated with ID in the context of FEATURE, or
|
|
||||||
@@ -607,57 +603,6 @@ tdesc_gdb_type (struct gdbarch *gdbarch,
|
|
||||||
return arch_float_type (gdbarch, -1, "builtin_type_i387_ext",
|
|
||||||
floatformats_i387_ext);
|
|
||||||
|
|
||||||
- case TDESC_TYPE_I386_EFLAGS:
|
|
||||||
- {
|
|
||||||
- struct type *type;
|
|
||||||
-
|
|
||||||
- type = arch_flags_type (gdbarch, "builtin_type_i386_eflags", 4);
|
|
||||||
- append_flags_type_flag (type, 0, "CF");
|
|
||||||
- append_flags_type_flag (type, 1, NULL);
|
|
||||||
- append_flags_type_flag (type, 2, "PF");
|
|
||||||
- append_flags_type_flag (type, 4, "AF");
|
|
||||||
- append_flags_type_flag (type, 6, "ZF");
|
|
||||||
- append_flags_type_flag (type, 7, "SF");
|
|
||||||
- append_flags_type_flag (type, 8, "TF");
|
|
||||||
- append_flags_type_flag (type, 9, "IF");
|
|
||||||
- append_flags_type_flag (type, 10, "DF");
|
|
||||||
- append_flags_type_flag (type, 11, "OF");
|
|
||||||
- append_flags_type_flag (type, 14, "NT");
|
|
||||||
- append_flags_type_flag (type, 16, "RF");
|
|
||||||
- append_flags_type_flag (type, 17, "VM");
|
|
||||||
- append_flags_type_flag (type, 18, "AC");
|
|
||||||
- append_flags_type_flag (type, 19, "VIF");
|
|
||||||
- append_flags_type_flag (type, 20, "VIP");
|
|
||||||
- append_flags_type_flag (type, 21, "ID");
|
|
||||||
-
|
|
||||||
- return type;
|
|
||||||
- }
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- case TDESC_TYPE_I386_MXCSR:
|
|
||||||
- {
|
|
||||||
- struct type *type;
|
|
||||||
-
|
|
||||||
- type = arch_flags_type (gdbarch, "builtin_type_i386_mxcsr", 4);
|
|
||||||
- append_flags_type_flag (type, 0, "IE");
|
|
||||||
- append_flags_type_flag (type, 1, "DE");
|
|
||||||
- append_flags_type_flag (type, 2, "ZE");
|
|
||||||
- append_flags_type_flag (type, 3, "OE");
|
|
||||||
- append_flags_type_flag (type, 4, "UE");
|
|
||||||
- append_flags_type_flag (type, 5, "PE");
|
|
||||||
- append_flags_type_flag (type, 6, "DAZ");
|
|
||||||
- append_flags_type_flag (type, 7, "IM");
|
|
||||||
- append_flags_type_flag (type, 8, "DM");
|
|
||||||
- append_flags_type_flag (type, 9, "ZM");
|
|
||||||
- append_flags_type_flag (type, 10, "OM");
|
|
||||||
- append_flags_type_flag (type, 11, "UM");
|
|
||||||
- append_flags_type_flag (type, 12, "PM");
|
|
||||||
- append_flags_type_flag (type, 15, "FZ");
|
|
||||||
-
|
|
||||||
- return type;
|
|
||||||
- }
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
/* Types defined by a target feature. */
|
|
||||||
case TDESC_TYPE_VECTOR:
|
|
||||||
{
|
|
||||||
@@ -769,7 +714,8 @@ tdesc_gdb_type (struct gdbarch *gdbarch,
|
|
||||||
/* Note that contrary to the function name, this call will
|
|
||||||
just set the properties of an already-allocated
|
|
||||||
field. */
|
|
||||||
- append_flags_type_flag (type, f->start, f->name);
|
|
||||||
+ append_flags_type_flag (type, f->start,
|
|
||||||
+ *f->name ? f->name : NULL);
|
|
||||||
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
@@ -1602,6 +1548,7 @@ maint_print_c_tdesc_cmd (char *args, int
|
|
||||||
struct tdesc_reg *reg;
|
|
||||||
struct tdesc_type *type;
|
|
||||||
struct tdesc_type_field *f;
|
|
||||||
+ struct tdesc_type_flag *flag;
|
|
||||||
int ix, ix2, ix3;
|
|
||||||
|
|
||||||
/* Use the global target-supplied description, not the current
|
|
||||||
@@ -1715,6 +1662,18 @@ maint_print_c_tdesc_cmd (char *args, int
|
|
||||||
f->name);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
+ case TDESC_TYPE_FLAGS:
|
|
||||||
+ printf_unfiltered
|
|
||||||
+ (" field_type = tdesc_create_flags (feature, \"%s\", %d);\n",
|
|
||||||
+ type->name, (int) type->u.f.size);
|
|
||||||
+ for (ix3 = 0;
|
|
||||||
+ VEC_iterate (tdesc_type_flag, type->u.f.flags, ix3,
|
|
||||||
+ flag);
|
|
||||||
+ ix3++)
|
|
||||||
+ printf_unfiltered
|
|
||||||
+ (" tdesc_add_flag (field_type, %d, \"%s\");\n",
|
|
||||||
+ flag->start, flag->name);
|
|
||||||
+ break;
|
|
||||||
default:
|
|
||||||
error (_("C output is not supported type \"%s\"."), type->name);
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,30 +0,0 @@
|
|||||||
[ Backported. ]
|
|
||||||
|
|
||||||
commit 6448aace637843e8e7c021d7f8c5d5d5fdd71974
|
|
||||||
Author: H.J. Lu <hjl.tools@gmail.com>
|
|
||||||
Date: Wed Mar 3 20:19:48 2010 +0000
|
|
||||||
|
|
||||||
Mention improvement for X86 general purpose registers.
|
|
||||||
|
|
||||||
2010-03-03 H.J. Lu <hongjiu.lu@intel.com>
|
|
||||||
Eli Zaretskii <eliz@gnu.org>
|
|
||||||
|
|
||||||
* NEWS: Add X86 general purpose registers section.
|
|
||||||
|
|
||||||
--- gdb-7.1-p3/gdb/NEWS 2010-03-18 22:01:55.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/NEWS 2010-04-03 21:07:46.000000000 +0200
|
|
||||||
@@ -438,6 +438,14 @@ GDB will now correctly handle all of:
|
|
||||||
now support hardware watchpoints, and will use them automatically
|
|
||||||
as appropriate.
|
|
||||||
|
|
||||||
+* X86 general purpose registers
|
|
||||||
+
|
|
||||||
+ GDB now supports reading/writing byte, word and double-word x86
|
|
||||||
+ general purpose registers directly. This means you can use, say,
|
|
||||||
+ $ah or $ax to refer, respectively, to the byte register AH and
|
|
||||||
+ 16-bit word register AX that are actually portions of the 32-bit
|
|
||||||
+ register EAX or 64-bit register RAX.
|
|
||||||
+
|
|
||||||
* Python scripting
|
|
||||||
|
|
||||||
GDB now has support for scripting using Python. Whether this is
|
|
@ -1,35 +0,0 @@
|
|||||||
[ Backported. ]
|
|
||||||
|
|
||||||
commit 49f8d1c24c639d891f58a3b9feda425833b702fb
|
|
||||||
Author: H.J. Lu <hjl.tools@gmail.com>
|
|
||||||
Date: Fri Mar 12 15:12:34 2010 +0000
|
|
||||||
|
|
||||||
Restore sp for x86.
|
|
||||||
|
|
||||||
2010-03-12 H.J. Lu <hongjiu.lu@intel.com>
|
|
||||||
|
|
||||||
* amd64-tdep.c (amd64_word_names): Replace "sp" with "".
|
|
||||||
* i386-tdep.c (i386_word_names): Likewise.
|
|
||||||
|
|
||||||
--- gdb-7.1-p4/gdb/amd64-tdep.c 2010-04-03 21:06:52.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/amd64-tdep.c 2010-04-03 21:08:21.000000000 +0200
|
|
||||||
@@ -222,7 +222,7 @@ static const char *amd64_byte_names[] =
|
|
||||||
|
|
||||||
static const char *amd64_word_names[] =
|
|
||||||
{
|
|
||||||
- "ax", "bx", "cx", "dx", "si", "di", "bp", "sp",
|
|
||||||
+ "ax", "bx", "cx", "dx", "si", "di", "bp", "",
|
|
||||||
"r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w"
|
|
||||||
};
|
|
||||||
|
|
||||||
--- gdb-7.1-p4/gdb/i386-tdep.c 2010-04-03 21:06:52.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/i386-tdep.c 2010-04-03 21:08:21.000000000 +0200
|
|
||||||
@@ -94,7 +94,7 @@ static const char *i386_byte_names[] =
|
|
||||||
static const char *i386_word_names[] =
|
|
||||||
{
|
|
||||||
"ax", "cx", "dx", "bx",
|
|
||||||
- "sp", "bp", "si", "di"
|
|
||||||
+ "", "bp", "si", "di"
|
|
||||||
};
|
|
||||||
|
|
||||||
/* MMX register? */
|
|
@ -1,183 +0,0 @@
|
|||||||
[ Backported. ]
|
|
||||||
|
|
||||||
commit d5ea7042210f5ad319ad19910bce13fd5717c6d6
|
|
||||||
Author: H.J. Lu <hjl.tools@gmail.com>
|
|
||||||
Date: Tue Mar 30 15:45:08 2010 +0000
|
|
||||||
|
|
||||||
Add xmlRegisters= to qSupported packet.
|
|
||||||
|
|
||||||
gdb/
|
|
||||||
|
|
||||||
2010-03-30 H.J. Lu <hongjiu.lu@intel.com>
|
|
||||||
|
|
||||||
* NEWS: Mention xmlRegisters= in qSupported packet.
|
|
||||||
|
|
||||||
* i386-tdep.c: Include "remote.h".
|
|
||||||
(_initialize_i386_tdep): Call register_remote_support_xml.
|
|
||||||
|
|
||||||
* remote.c (remote_support_xml): New.
|
|
||||||
(register_remote_support_xml): Likewise.
|
|
||||||
(remote_query_supported_append): Likewise.
|
|
||||||
(remote_query_supported): Support remote_support_xml.
|
|
||||||
|
|
||||||
* remote.h (register_remote_support_xml): New.
|
|
||||||
|
|
||||||
gdb/doc/
|
|
||||||
|
|
||||||
2010-03-30 H.J. Lu <hongjiu.lu@intel.com>
|
|
||||||
|
|
||||||
* gdb.texinfo (General Query Packets): Add xmlRegisters.
|
|
||||||
|
|
||||||
--- gdb-7.1-p5/gdb/NEWS 2010-04-03 21:07:46.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/NEWS 2010-04-03 21:10:06.000000000 +0200
|
|
||||||
@@ -1,6 +1,11 @@
|
|
||||||
What has changed in GDB?
|
|
||||||
(Organized release by release)
|
|
||||||
|
|
||||||
+*** Changes since GDB 7.1
|
|
||||||
+
|
|
||||||
+* GDB now sends xmlRegisters= in qSupported packet to indicate that
|
|
||||||
+ it understands register description.
|
|
||||||
+
|
|
||||||
*** Changes in GDB 7.1
|
|
||||||
|
|
||||||
* C++ Improvements
|
|
||||||
--- gdb-7.1-p5/gdb/doc/gdb.texinfo 2010-04-03 21:04:13.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/doc/gdb.texinfo 2010-04-03 21:09:29.000000000 +0200
|
|
||||||
@@ -30292,6 +30292,12 @@ extensions to the remote protocol. @val
|
|
||||||
extensions unless the stub also reports that it supports them by
|
|
||||||
including @samp{multiprocess+} in its @samp{qSupported} reply.
|
|
||||||
@xref{multiprocess extensions}, for details.
|
|
||||||
+
|
|
||||||
+@item xmlRegisters
|
|
||||||
+This feature indicates that @value{GDBN} supports the XML target
|
|
||||||
+description. If the stub sees @samp{xmlRegisters=} with target
|
|
||||||
+specific strings separated by a comma, it will report register
|
|
||||||
+description.
|
|
||||||
@end table
|
|
||||||
|
|
||||||
Stubs should ignore any unknown values for
|
|
||||||
--- gdb-7.1-p5/gdb/i386-tdep.c 2010-04-03 21:08:21.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/i386-tdep.c 2010-04-03 21:09:29.000000000 +0200
|
|
||||||
@@ -44,6 +44,7 @@
|
|
||||||
#include "value.h"
|
|
||||||
#include "dis-asm.h"
|
|
||||||
#include "disasm.h"
|
|
||||||
+#include "remote.h"
|
|
||||||
|
|
||||||
#include "gdb_assert.h"
|
|
||||||
#include "gdb_string.h"
|
|
||||||
@@ -6000,4 +6001,7 @@ is \"default\"."),
|
|
||||||
|
|
||||||
/* Initialize the standard target descriptions. */
|
|
||||||
initialize_tdesc_i386 ();
|
|
||||||
+
|
|
||||||
+ /* Tell remote stub that we support XML target description. */
|
|
||||||
+ register_remote_support_xml ("i386");
|
|
||||||
}
|
|
||||||
--- gdb-7.1-p5/gdb/remote.c 2010-04-03 20:24:51.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/remote.c 2010-04-03 21:09:29.000000000 +0200
|
|
||||||
@@ -3467,6 +3467,53 @@ static struct protocol_feature remote_pr
|
|
||||||
PACKET_bs },
|
|
||||||
};
|
|
||||||
|
|
||||||
+static char *remote_support_xml;
|
|
||||||
+
|
|
||||||
+/* Register string appended to "xmlRegisters=" in qSupported query. */
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+register_remote_support_xml (const char *xml ATTRIBUTE_UNUSED)
|
|
||||||
+{
|
|
||||||
+#if defined(HAVE_LIBEXPAT)
|
|
||||||
+ if (remote_support_xml == NULL)
|
|
||||||
+ remote_support_xml = concat ("xmlRegisters=", xml, NULL);
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ char *copy = xstrdup (remote_support_xml + 13);
|
|
||||||
+ char *p = strtok (copy, ",");
|
|
||||||
+
|
|
||||||
+ do
|
|
||||||
+ {
|
|
||||||
+ if (strcmp (p, xml) == 0)
|
|
||||||
+ {
|
|
||||||
+ /* already there */
|
|
||||||
+ xfree (copy);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ while ((p = strtok (NULL, ",")) != NULL);
|
|
||||||
+ xfree (copy);
|
|
||||||
+
|
|
||||||
+ p = concat (remote_support_xml, ",", xml, NULL);
|
|
||||||
+ xfree (remote_support_xml);
|
|
||||||
+ remote_support_xml = p;
|
|
||||||
+ }
|
|
||||||
+#endif
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static char *
|
|
||||||
+remote_query_supported_append (char *msg, const char *append)
|
|
||||||
+{
|
|
||||||
+ if (msg)
|
|
||||||
+ {
|
|
||||||
+ char *p = concat (msg, ";", append, NULL);
|
|
||||||
+ xfree (msg);
|
|
||||||
+ return p;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ return xstrdup (append);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
remote_query_supported (void)
|
|
||||||
{
|
|
||||||
@@ -3485,24 +3532,27 @@ remote_query_supported (void)
|
|
||||||
rs->buf[0] = 0;
|
|
||||||
if (remote_protocol_packets[PACKET_qSupported].support != PACKET_DISABLE)
|
|
||||||
{
|
|
||||||
+ char *q = NULL;
|
|
||||||
const char *qsupported = gdbarch_qsupported (target_gdbarch);
|
|
||||||
+
|
|
||||||
+ if (rs->extended)
|
|
||||||
+ q = remote_query_supported_append (q, "multiprocess+");
|
|
||||||
+
|
|
||||||
if (qsupported)
|
|
||||||
+ q = remote_query_supported_append (q, qsupported);
|
|
||||||
+
|
|
||||||
+ if (remote_support_xml)
|
|
||||||
+ q = remote_query_supported_append (q, remote_support_xml);
|
|
||||||
+
|
|
||||||
+ if (q)
|
|
||||||
{
|
|
||||||
- char *q;
|
|
||||||
- if (rs->extended)
|
|
||||||
- q = concat ("qSupported:multiprocess+;", qsupported, NULL);
|
|
||||||
- else
|
|
||||||
- q = concat ("qSupported:", qsupported, NULL);
|
|
||||||
- putpkt (q);
|
|
||||||
+ char *p = concat ("qSupported:", q, NULL);
|
|
||||||
xfree (q);
|
|
||||||
+ putpkt (p);
|
|
||||||
+ xfree (p);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- {
|
|
||||||
- if (rs->extended)
|
|
||||||
- putpkt ("qSupported:multiprocess+");
|
|
||||||
- else
|
|
||||||
- putpkt ("qSupported");
|
|
||||||
- }
|
|
||||||
+ putpkt ("qSupported");
|
|
||||||
|
|
||||||
getpkt (&rs->buf, &rs->buf_size, 0);
|
|
||||||
|
|
||||||
--- gdb-7.1-p5/gdb/remote.h 2010-01-01 08:31:41.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/remote.h 2010-04-03 21:09:29.000000000 +0200
|
|
||||||
@@ -66,6 +66,7 @@ extern void (*deprecated_target_wait_loo
|
|
||||||
|
|
||||||
void register_remote_g_packet_guess (struct gdbarch *gdbarch, int bytes,
|
|
||||||
const struct target_desc *tdesc);
|
|
||||||
+void register_remote_support_xml (const char *);
|
|
||||||
|
|
||||||
void remote_file_put (const char *local_file, const char *remote_file,
|
|
||||||
int from_tty);
|
|
@ -1,32 +0,0 @@
|
|||||||
[ Backported. ]
|
|
||||||
|
|
||||||
commit 684341392f3ca6703dc28dac548d3051811bff47
|
|
||||||
Author: H.J. Lu <hjl.tools@gmail.com>
|
|
||||||
Date: Tue Mar 30 18:37:03 2010 +0000
|
|
||||||
|
|
||||||
Add org.gnu.gdb.i386.avx.
|
|
||||||
|
|
||||||
2010-03-30 H.J. Lu <hongjiu.lu@intel.com>
|
|
||||||
|
|
||||||
* gdb.texinfo (i386 Features): Add org.gnu.gdb.i386.avx.
|
|
||||||
|
|
||||||
--- gdb-7.1-p6/gdb/doc/gdb.texinfo 2010-04-03 21:09:29.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/doc/gdb.texinfo 2010-04-03 21:10:57.000000000 +0200
|
|
||||||
@@ -33380,6 +33380,17 @@ describe registers:
|
|
||||||
@samp{mxcsr}
|
|
||||||
@end itemize
|
|
||||||
|
|
||||||
+The @samp{org.gnu.gdb.i386.avx} feature is optional. It should
|
|
||||||
+describe the upper 128 bits of @sc{ymm} registers:
|
|
||||||
+
|
|
||||||
+@itemize @minus
|
|
||||||
+@item
|
|
||||||
+@samp{ymm0h} through @samp{ymm7h} for i386
|
|
||||||
+@item
|
|
||||||
+@samp{ymm0h} through @samp{ymm15h} for amd64
|
|
||||||
+@item
|
|
||||||
+@end itemize
|
|
||||||
+
|
|
||||||
The @samp{org.gnu.gdb.i386.linux} feature is optional. It should
|
|
||||||
describe a single register, @samp{orig_eax}.
|
|
||||||
|
|
@ -1,183 +0,0 @@
|
|||||||
[ Backported. ]
|
|
||||||
|
|
||||||
commit 5362e5e1dc4cfac24fbd58773aaa7a82c615b662
|
|
||||||
Author: H.J. Lu <hjl.tools@gmail.com>
|
|
||||||
Date: Thu Apr 1 20:02:07 2010 +0000
|
|
||||||
|
|
||||||
Support "ah", "bh", "ch", "dh" on amd64.
|
|
||||||
|
|
||||||
gdb/
|
|
||||||
|
|
||||||
2010-04-01 H.J. Lu <hongjiu.lu@intel.com>
|
|
||||||
|
|
||||||
* amd64-tdep.c (amd64_byte_names): Add "ah", "bh", "ch", "dh".
|
|
||||||
(AMD64_NUM_LOWER_BYTE_REGS): New.
|
|
||||||
(amd64_pseudo_register_read): Handle "ah", "bh", "ch", "dh".
|
|
||||||
(amd64_pseudo_register_write): Likewise.
|
|
||||||
(amd64_init_abi): Set num_byte_regs to 20.
|
|
||||||
|
|
||||||
gdb/testsuite/
|
|
||||||
|
|
||||||
2010-04-01 H.J. Lu <hongjiu.lu@intel.com>
|
|
||||||
|
|
||||||
* gdb.arch/amd64-byte.exp: Check "ah", "bh", "ch", "dh".
|
|
||||||
|
|
||||||
--- gdb-7.1-p7/gdb/amd64-tdep.c 2010-04-03 21:08:21.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/amd64-tdep.c 2010-04-03 21:11:41.000000000 +0200
|
|
||||||
@@ -215,9 +215,13 @@ amd64_arch_reg_to_regnum (int reg)
|
|
||||||
static const char *amd64_byte_names[] =
|
|
||||||
{
|
|
||||||
"al", "bl", "cl", "dl", "sil", "dil", "bpl", "spl",
|
|
||||||
- "r8l", "r9l", "r10l", "r11l", "r12l", "r13l", "r14l", "r15l"
|
|
||||||
+ "r8l", "r9l", "r10l", "r11l", "r12l", "r13l", "r14l", "r15l",
|
|
||||||
+ "ah", "bh", "ch", "dh"
|
|
||||||
};
|
|
||||||
|
|
||||||
+/* Number of lower byte registers. */
|
|
||||||
+#define AMD64_NUM_LOWER_BYTE_REGS 16
|
|
||||||
+
|
|
||||||
/* Register names for word pseudo-registers. */
|
|
||||||
|
|
||||||
static const char *amd64_word_names[] =
|
|
||||||
@@ -263,8 +267,18 @@ amd64_pseudo_register_read (struct gdbar
|
|
||||||
int gpnum = regnum - tdep->al_regnum;
|
|
||||||
|
|
||||||
/* Extract (always little endian). */
|
|
||||||
- regcache_raw_read (regcache, gpnum, raw_buf);
|
|
||||||
- memcpy (buf, raw_buf, 1);
|
|
||||||
+ if (gpnum >= AMD64_NUM_LOWER_BYTE_REGS)
|
|
||||||
+ {
|
|
||||||
+ /* Special handling for AH, BH, CH, DH. */
|
|
||||||
+ regcache_raw_read (regcache,
|
|
||||||
+ gpnum - AMD64_NUM_LOWER_BYTE_REGS, raw_buf);
|
|
||||||
+ memcpy (buf, raw_buf + 1, 1);
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ regcache_raw_read (regcache, gpnum, raw_buf);
|
|
||||||
+ memcpy (buf, raw_buf, 1);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
else if (i386_dword_regnum_p (gdbarch, regnum))
|
|
||||||
{
|
|
||||||
@@ -289,12 +303,26 @@ amd64_pseudo_register_write (struct gdba
|
|
||||||
{
|
|
||||||
int gpnum = regnum - tdep->al_regnum;
|
|
||||||
|
|
||||||
- /* Read ... */
|
|
||||||
- regcache_raw_read (regcache, gpnum, raw_buf);
|
|
||||||
- /* ... Modify ... (always little endian). */
|
|
||||||
- memcpy (raw_buf, buf, 1);
|
|
||||||
- /* ... Write. */
|
|
||||||
- regcache_raw_write (regcache, gpnum, raw_buf);
|
|
||||||
+ if (gpnum >= AMD64_NUM_LOWER_BYTE_REGS)
|
|
||||||
+ {
|
|
||||||
+ /* Read ... AH, BH, CH, DH. */
|
|
||||||
+ regcache_raw_read (regcache,
|
|
||||||
+ gpnum - AMD64_NUM_LOWER_BYTE_REGS, raw_buf);
|
|
||||||
+ /* ... Modify ... (always little endian). */
|
|
||||||
+ memcpy (raw_buf + 1, buf, 1);
|
|
||||||
+ /* ... Write. */
|
|
||||||
+ regcache_raw_write (regcache,
|
|
||||||
+ gpnum - AMD64_NUM_LOWER_BYTE_REGS, raw_buf);
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ /* Read ... */
|
|
||||||
+ regcache_raw_read (regcache, gpnum, raw_buf);
|
|
||||||
+ /* ... Modify ... (always little endian). */
|
|
||||||
+ memcpy (raw_buf, buf, 1);
|
|
||||||
+ /* ... Write. */
|
|
||||||
+ regcache_raw_write (regcache, gpnum, raw_buf);
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
else if (i386_dword_regnum_p (gdbarch, regnum))
|
|
||||||
{
|
|
||||||
@@ -2233,7 +2261,7 @@ amd64_init_abi (struct gdbarch_info info
|
|
||||||
tdep->num_core_regs = AMD64_NUM_GREGS + I387_NUM_REGS;
|
|
||||||
tdep->register_names = amd64_register_names;
|
|
||||||
|
|
||||||
- tdep->num_byte_regs = 16;
|
|
||||||
+ tdep->num_byte_regs = 20;
|
|
||||||
tdep->num_word_regs = 16;
|
|
||||||
tdep->num_dword_regs = 16;
|
|
||||||
/* Avoid wiring in the MMX registers for now. */
|
|
||||||
--- gdb-7.1-p7/gdb/testsuite/gdb.arch/amd64-byte.exp 2010-04-03 21:06:52.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.arch/amd64-byte.exp 2010-04-03 21:11:41.000000000 +0200
|
|
||||||
@@ -52,7 +52,6 @@ if ![runto_main] then {
|
|
||||||
gdb_suppress_tests
|
|
||||||
}
|
|
||||||
|
|
||||||
-set nr_regs 14
|
|
||||||
set byte_regs(1) al
|
|
||||||
set byte_regs(2) bl
|
|
||||||
set byte_regs(3) cl
|
|
||||||
@@ -67,6 +66,10 @@ set byte_regs(11) r12l
|
|
||||||
set byte_regs(12) r13l
|
|
||||||
set byte_regs(13) r14l
|
|
||||||
set byte_regs(14) r15l
|
|
||||||
+set byte_regs(15) ah
|
|
||||||
+set byte_regs(16) bh
|
|
||||||
+set byte_regs(17) ch
|
|
||||||
+set byte_regs(18) dh
|
|
||||||
|
|
||||||
gdb_test "break [gdb_get_line_number "first breakpoint here"]" \
|
|
||||||
"Breakpoint .* at .*${srcfile}.*" \
|
|
||||||
@@ -79,12 +82,19 @@ for { set r 1 } { $r <= 6 } { incr r }
|
|
||||||
"check contents of %$byte_regs($r)"
|
|
||||||
}
|
|
||||||
|
|
||||||
+for { set r 1 } { $r <= 4 } { incr r } {
|
|
||||||
+ set h [expr $r + 14]
|
|
||||||
+ gdb_test "print/x \$$byte_regs($h)" \
|
|
||||||
+ ".. = 0x[format %x $r]2" \
|
|
||||||
+ "check contents of %$byte_regs($h)"
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
gdb_test "break [gdb_get_line_number "second breakpoint here"]" \
|
|
||||||
"Breakpoint .* at .*${srcfile}.*" \
|
|
||||||
"set second breakpoint in main"
|
|
||||||
gdb_continue_to_breakpoint "continue to second breakpoint in main"
|
|
||||||
|
|
||||||
-for { set r 7 } { $r <= $nr_regs } { incr r } {
|
|
||||||
+for { set r 7 } { $r <= 14 } { incr r } {
|
|
||||||
gdb_test "print/x \$$byte_regs($r)" \
|
|
||||||
".. = 0x[format %x $r]1" \
|
|
||||||
"check contents of %$byte_regs($r)"
|
|
||||||
@@ -94,6 +104,11 @@ for { set r 1 } { $r <= 6 } { incr r }
|
|
||||||
gdb_test "set var \$$byte_regs($r) = $r" "" "set %$byte_regs($r)"
|
|
||||||
}
|
|
||||||
|
|
||||||
+for { set r 1 } { $r <= 4 } { incr r } {
|
|
||||||
+ set h [expr $r + 14]
|
|
||||||
+ gdb_test "set var \$$byte_regs($h) = $h" "" "set %$byte_regs($h)"
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
gdb_test "break [gdb_get_line_number "third breakpoint here"]" \
|
|
||||||
"Breakpoint .* at .*${srcfile}.*" \
|
|
||||||
"set third breakpoint in main"
|
|
||||||
@@ -105,7 +120,14 @@ for { set r 1 } { $r <= 6 } { incr r }
|
|
||||||
"check contents of %$byte_regs($r)"
|
|
||||||
}
|
|
||||||
|
|
||||||
-for { set r 7 } { $r <= $nr_regs } { incr r } {
|
|
||||||
+for { set r 1 } { $r <= 4 } { incr r } {
|
|
||||||
+ set h [expr $r + 14]
|
|
||||||
+ gdb_test "print \$$byte_regs($h)" \
|
|
||||||
+ ".. = $h" \
|
|
||||||
+ "check contents of %$byte_regs($h)"
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+for { set r 7 } { $r <= 14 } { incr r } {
|
|
||||||
gdb_test "set var \$$byte_regs($r) = $r" "" "set %$byte_regs($r)"
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -114,7 +136,7 @@ gdb_test "break [gdb_get_line_number "fo
|
|
||||||
"set forth breakpoint in main"
|
|
||||||
gdb_continue_to_breakpoint "continue to forth breakpoint in main"
|
|
||||||
|
|
||||||
-for { set r 7 } { $r <= $nr_regs } { incr r } {
|
|
||||||
+for { set r 7 } { $r <= 14 } { incr r } {
|
|
||||||
gdb_test "print \$$byte_regs($r)" \
|
|
||||||
".. = $r" \
|
|
||||||
"check contents of %$byte_regs($r)"
|
|
@ -1,16 +0,0 @@
|
|||||||
http://sourceware.org/ml/gdb-patches/2010-04/msg00056.html
|
|
||||||
|
|
||||||
linux-ppc-low.c:599: error: incompatible types when initializing type ‘enum regset_type’ using type ‘void (*)(struct regcache *, void *)’
|
|
||||||
linux-ppc-low.c:599: warning: initialization from incompatible pointer type
|
|
||||||
|
|
||||||
--- a/gdb/gdbserver/linux-ppc-low.c
|
|
||||||
+++ b/gdb/gdbserver/linux-ppc-low.c
|
|
||||||
@@ -594,7 +594,7 @@ struct regset_info target_regsets[] = {
|
|
||||||
PPC_PTRACE_GETREGS. */
|
|
||||||
{ PTRACE_GETVSXREGS, PTRACE_SETVSXREGS, 0, SIZEOF_VSXREGS, EXTENDED_REGS,
|
|
||||||
ppc_fill_vsxregset, ppc_store_vsxregset },
|
|
||||||
- { PTRACE_GETVRREGS, PTRACE_SETVRREGS, SIZEOF_VRREGS, EXTENDED_REGS,
|
|
||||||
+ { PTRACE_GETVRREGS, PTRACE_SETVRREGS, 0, SIZEOF_VRREGS, EXTENDED_REGS,
|
|
||||||
ppc_fill_vrregset, ppc_store_vrregset },
|
|
||||||
{ PTRACE_GETEVRREGS, PTRACE_SETEVRREGS, 0, 32 * 4 + 8 + 4, EXTENDED_REGS,
|
|
||||||
ppc_fill_evrregset, ppc_store_evrregset },
|
|
File diff suppressed because it is too large
Load Diff
@ -1,59 +0,0 @@
|
|||||||
06e357f534abcf8912e4fd597daae8f1387d631c
|
|
||||||
|
|
||||||
Fix compatibility with: FYI: fix BINOP_SUBSCRIPT with pieced arrays
|
|
||||||
http://sourceware.org/ml/gdb-patches/2010-05/msg00281.html
|
|
||||||
|
|
||||||
2010-05-30 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* valarith.c (binop_user_defined_p): Return 0 on ARG1 or ARG2 being
|
|
||||||
TYPE_DYNAMIC.
|
|
||||||
* value.c (coerce_ref): Use object_address_get_data resolution for
|
|
||||||
TYPE_DYNAMIC ARG.
|
|
||||||
|
|
||||||
[ Backported. ]
|
|
||||||
|
|
||||||
Index: gdb-7.1/gdb/valarith.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/valarith.c 2010-05-30 18:54:28.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/valarith.c 2010-05-30 18:54:43.000000000 +0200
|
|
||||||
@@ -309,6 +309,10 @@ int
|
|
||||||
binop_user_defined_p (enum exp_opcode op,
|
|
||||||
struct value *arg1, struct value *arg2)
|
|
||||||
{
|
|
||||||
+ /* FIXME: We should support user defined ops for dynamic types. */
|
|
||||||
+ if (TYPE_DYNAMIC (value_type (arg1)) || TYPE_DYNAMIC (value_type (arg2)))
|
|
||||||
+ return 0;
|
|
||||||
+
|
|
||||||
return binop_types_user_defined_p (op, value_type (arg1), value_type (arg2));
|
|
||||||
}
|
|
||||||
|
|
||||||
Index: gdb-7.1/gdb/value.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/value.c 2010-05-30 18:54:36.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/value.c 2010-05-30 18:55:52.000000000 +0200
|
|
||||||
@@ -2400,7 +2400,24 @@ value_from_decfloat (struct type *type,
|
|
||||||
struct value *
|
|
||||||
coerce_ref (struct value *arg)
|
|
||||||
{
|
|
||||||
- struct type *value_type_arg_tmp = check_typedef (value_type (arg));
|
|
||||||
+ struct type *value_type_arg_tmp;
|
|
||||||
+
|
|
||||||
+ if (TYPE_DYNAMIC (value_type (arg)))
|
|
||||||
+ {
|
|
||||||
+ struct cleanup *cleanups = make_cleanup (null_cleanup, NULL);
|
|
||||||
+ CORE_ADDR address;
|
|
||||||
+
|
|
||||||
+ value_type_arg_tmp = value_type (arg);
|
|
||||||
+ address = value_raw_address (arg);
|
|
||||||
+ if (! object_address_get_data (value_type_arg_tmp, &address))
|
|
||||||
+ error (_("Attempt to coerce non-valid value."));
|
|
||||||
+ CHECK_TYPEDEF (value_type_arg_tmp);
|
|
||||||
+ arg = value_at_lazy (value_type_arg_tmp, address);
|
|
||||||
+ do_cleanups (cleanups);
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ value_type_arg_tmp = check_typedef (value_type (arg));
|
|
||||||
+
|
|
||||||
if (TYPE_CODE (value_type_arg_tmp) == TYPE_CODE_REF)
|
|
||||||
arg = value_at_lazy (TYPE_TARGET_TYPE (value_type_arg_tmp),
|
|
||||||
unpack_pointer (value_type (arg),
|
|
@ -1,80 +0,0 @@
|
|||||||
commit 96c23bfd2863bcca7388653a7bc4c9f8a64a03be
|
|
||||||
Author: Ulrich Weigand <uweigand@de.ibm.com>
|
|
||||||
Date: Fri Feb 26 12:48:17 2010 +0000
|
|
||||||
|
|
||||||
* dwarf2loc.c (struct piece_closure): Remove ARCH member,
|
|
||||||
add ADDR_SIZE member.
|
|
||||||
(allocate_piece_closure): Update.
|
|
||||||
(copy_pieced_value_closure): Likewise.
|
|
||||||
(dwarf2_evaluate_loc_desc): Likewise.
|
|
||||||
(read_pieced_value): Use DWARF address size instead of
|
|
||||||
GDB's gdbarch_addr_bit as size of values on the DWARF stack.
|
|
||||||
|
|
||||||
diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
|
|
||||||
index 1c4d057..20ede3e 100644
|
|
||||||
--- a/gdb/dwarf2loc.c
|
|
||||||
+++ b/gdb/dwarf2loc.c
|
|
||||||
@@ -232,8 +232,8 @@ struct piece_closure
|
|
||||||
/* The number of pieces used to describe this variable. */
|
|
||||||
int n_pieces;
|
|
||||||
|
|
||||||
- /* The architecture, used only for DWARF_VALUE_STACK. */
|
|
||||||
- struct gdbarch *arch;
|
|
||||||
+ /* The target address size, used only for DWARF_VALUE_STACK. */
|
|
||||||
+ int addr_size;
|
|
||||||
|
|
||||||
/* The pieces themselves. */
|
|
||||||
struct dwarf_expr_piece *pieces;
|
|
||||||
@@ -244,12 +244,12 @@ struct piece_closure
|
|
||||||
|
|
||||||
static struct piece_closure *
|
|
||||||
allocate_piece_closure (int n_pieces, struct dwarf_expr_piece *pieces,
|
|
||||||
- struct gdbarch *arch)
|
|
||||||
+ int addr_size)
|
|
||||||
{
|
|
||||||
struct piece_closure *c = XZALLOC (struct piece_closure);
|
|
||||||
|
|
||||||
c->n_pieces = n_pieces;
|
|
||||||
- c->arch = arch;
|
|
||||||
+ c->addr_size = addr_size;
|
|
||||||
c->pieces = XCALLOC (n_pieces, struct dwarf_expr_piece);
|
|
||||||
|
|
||||||
memcpy (c->pieces, pieces, n_pieces * sizeof (struct dwarf_expr_piece));
|
|
||||||
@@ -298,13 +298,12 @@ read_pieced_value (struct value *v)
|
|
||||||
|
|
||||||
case DWARF_VALUE_STACK:
|
|
||||||
{
|
|
||||||
- size_t n;
|
|
||||||
- int addr_size = gdbarch_addr_bit (c->arch) / 8;
|
|
||||||
- n = p->size;
|
|
||||||
- if (n > addr_size)
|
|
||||||
- n = addr_size;
|
|
||||||
+ struct gdbarch *gdbarch = get_type_arch (value_type (v));
|
|
||||||
+ size_t n = p->size;
|
|
||||||
+ if (n > c->addr_size)
|
|
||||||
+ n = c->addr_size;
|
|
||||||
store_unsigned_integer (contents + offset, n,
|
|
||||||
- gdbarch_byte_order (c->arch),
|
|
||||||
+ gdbarch_byte_order (gdbarch),
|
|
||||||
p->v.expr.value);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
@@ -377,7 +376,7 @@ copy_pieced_value_closure (struct value *v)
|
|
||||||
{
|
|
||||||
struct piece_closure *c = (struct piece_closure *) value_computed_closure (v);
|
|
||||||
|
|
||||||
- return allocate_piece_closure (c->n_pieces, c->pieces, c->arch);
|
|
||||||
+ return allocate_piece_closure (c->n_pieces, c->pieces, c->addr_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -439,7 +438,8 @@ dwarf2_evaluate_loc_desc (struct symbol *var, struct frame_info *frame,
|
|
||||||
struct piece_closure *c;
|
|
||||||
struct frame_id frame_id = get_frame_id (frame);
|
|
||||||
|
|
||||||
- c = allocate_piece_closure (ctx->num_pieces, ctx->pieces, ctx->gdbarch);
|
|
||||||
+ c = allocate_piece_closure (ctx->num_pieces, ctx->pieces,
|
|
||||||
+ ctx->addr_size);
|
|
||||||
retval = allocate_computed_value (type, &pieced_value_funcs, c);
|
|
||||||
VALUE_FRAME_ID (retval) = frame_id;
|
|
||||||
}
|
|
@ -1,68 +0,0 @@
|
|||||||
commit 60d15ff6d78921d080aee681e60372abe6627570
|
|
||||||
Author: mgretton <mgretton>
|
|
||||||
Date: Tue May 4 09:54:17 2010 +0000
|
|
||||||
|
|
||||||
* gdb/dwarf2loc.c (read_pieced_value, write_pieced_value,
|
|
||||||
dwarf2_evaluate_loc_desc): Handle not being able to access DWARF
|
|
||||||
registers gracefully.
|
|
||||||
|
|
||||||
Index: gdb-7.1/gdb/dwarf2loc.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/dwarf2loc.c 2010-05-25 21:35:10.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/dwarf2loc.c 2010-05-25 21:37:32.000000000 +0200
|
|
||||||
@@ -458,8 +458,16 @@ read_pieced_value (struct value *v)
|
|
||||||
/* Big-endian, and we want less than full size. */
|
|
||||||
reg_offset = register_size (arch, gdb_regnum) - p->size;
|
|
||||||
|
|
||||||
- get_frame_register_bytes (frame, gdb_regnum, reg_offset, p->size,
|
|
||||||
- contents + offset);
|
|
||||||
+ if (gdb_regnum != -1)
|
|
||||||
+ {
|
|
||||||
+ get_frame_register_bytes (frame, gdb_regnum, reg_offset,
|
|
||||||
+ p->size, contents + offset);
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ error (_("Unable to access DWARF register number %s"),
|
|
||||||
+ paddress (arch, p->v.expr.value));
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
@@ -531,8 +539,16 @@ write_pieced_value (struct value *to, st
|
|
||||||
/* Big-endian, and we want less than full size. */
|
|
||||||
reg_offset = register_size (arch, gdb_regnum) - p->size;
|
|
||||||
|
|
||||||
- put_frame_register_bytes (frame, gdb_regnum, reg_offset, p->size,
|
|
||||||
- contents + offset);
|
|
||||||
+ if (gdb_regnum != -1)
|
|
||||||
+ {
|
|
||||||
+ put_frame_register_bytes (frame, gdb_regnum, reg_offset,
|
|
||||||
+ p->size, contents + offset);
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ error (_("Unable to write to DWARF register number %s"),
|
|
||||||
+ paddress (arch, p->v.expr.value));
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case DWARF_VALUE_MEMORY:
|
|
||||||
@@ -611,7 +627,16 @@ dwarf2_evaluate_loc_desc (struct type *t
|
|
||||||
struct gdbarch *arch = get_frame_arch (frame);
|
|
||||||
CORE_ADDR dwarf_regnum = dwarf_expr_fetch (ctx, 0);
|
|
||||||
int gdb_regnum = gdbarch_dwarf2_reg_to_regnum (arch, dwarf_regnum);
|
|
||||||
- retval = value_from_register (type, gdb_regnum, frame);
|
|
||||||
+ if (gdb_regnum != -1)
|
|
||||||
+ {
|
|
||||||
+ retval = value_from_register (type,
|
|
||||||
+ gdb_regnum, frame);
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ error (_("Unable to access DWARF register number %s"),
|
|
||||||
+ paddress (arch, dwarf_regnum));
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
@ -1,99 +0,0 @@
|
|||||||
commit dacd66a53b559be9c26d2c523f168f1ef0261f4d
|
|
||||||
Author: Michael Snyder <msnyder@specifix.com>
|
|
||||||
Date: Fri May 14 17:53:11 2010 +0000
|
|
||||||
|
|
||||||
2010-05-14 Michael Snyder <msnyder@vmware.com>
|
|
||||||
|
|
||||||
* dbxread.c: White space.
|
|
||||||
* dcache.c: White space.
|
|
||||||
* disasm.c: White space.
|
|
||||||
* doublest.c: White space.
|
|
||||||
* dsrec.c: White space.
|
|
||||||
* dummy-frame.c: White space.
|
|
||||||
* dwarf2expr.c: White space.
|
|
||||||
* dwarf2-frame.c: White space.
|
|
||||||
* dwarf2loc.c: White space.
|
|
||||||
* dwarf2read.c: White space.
|
|
||||||
|
|
||||||
--- gdb-7.1/gdb/dwarf2loc.c.orig 2010-05-25 23:06:46.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/dwarf2loc.c 2010-05-25 23:06:46.000000000 +0200
|
|
||||||
@@ -236,6 +236,7 @@ static CORE_ADDR
|
|
||||||
dwarf_expr_frame_cfa (void *baton)
|
|
||||||
{
|
|
||||||
struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
|
|
||||||
+
|
|
||||||
return dwarf2_frame_cfa (debaton->frame);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -444,6 +445,7 @@ read_pieced_value (struct value *v)
|
|
||||||
for (i = 0; i < c->n_pieces; i++)
|
|
||||||
{
|
|
||||||
struct dwarf_expr_piece *p = &c->pieces[i];
|
|
||||||
+
|
|
||||||
switch (p->location)
|
|
||||||
{
|
|
||||||
case DWARF_VALUE_REGISTER:
|
|
||||||
@@ -482,6 +484,7 @@ read_pieced_value (struct value *v)
|
|
||||||
{
|
|
||||||
struct gdbarch *gdbarch = get_type_arch (value_type (v));
|
|
||||||
size_t n = p->size;
|
|
||||||
+
|
|
||||||
if (n > c->addr_size)
|
|
||||||
n = c->addr_size;
|
|
||||||
store_unsigned_integer (contents + offset, n,
|
|
||||||
@@ -493,6 +496,7 @@ read_pieced_value (struct value *v)
|
|
||||||
case DWARF_VALUE_LITERAL:
|
|
||||||
{
|
|
||||||
size_t n = p->size;
|
|
||||||
+
|
|
||||||
if (n > p->v.literal.length)
|
|
||||||
n = p->v.literal.length;
|
|
||||||
memcpy (contents + offset, p->v.literal.data, n);
|
|
||||||
@@ -525,6 +529,7 @@ write_pieced_value (struct value *to, st
|
|
||||||
for (i = 0; i < c->n_pieces; i++)
|
|
||||||
{
|
|
||||||
struct dwarf_expr_piece *p = &c->pieces[i];
|
|
||||||
+
|
|
||||||
switch (p->location)
|
|
||||||
{
|
|
||||||
case DWARF_VALUE_REGISTER:
|
|
||||||
@@ -712,6 +717,7 @@ static CORE_ADDR
|
|
||||||
needs_frame_read_reg (void *baton, int regnum)
|
|
||||||
{
|
|
||||||
struct needs_frame_baton *nf_baton = baton;
|
|
||||||
+
|
|
||||||
nf_baton->needs_frame = 1;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
@@ -742,6 +748,7 @@ static CORE_ADDR
|
|
||||||
needs_frame_frame_cfa (void *baton)
|
|
||||||
{
|
|
||||||
struct needs_frame_baton *nf_baton = baton;
|
|
||||||
+
|
|
||||||
nf_baton->needs_frame = 1;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
@@ -751,6 +758,7 @@ static CORE_ADDR
|
|
||||||
needs_frame_tls_address (void *baton, CORE_ADDR offset)
|
|
||||||
{
|
|
||||||
struct needs_frame_baton *nf_baton = baton;
|
|
||||||
+
|
|
||||||
nf_baton->needs_frame = 1;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
@@ -907,6 +915,7 @@ locexpr_read_variable (struct symbol *sy
|
|
||||||
{
|
|
||||||
struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
|
|
||||||
struct value *val;
|
|
||||||
+
|
|
||||||
val = dwarf2_evaluate_loc_desc (SYMBOL_TYPE (symbol), frame, dlbaton->data,
|
|
||||||
dlbaton->size, dlbaton->per_cu);
|
|
||||||
|
|
||||||
@@ -918,6 +927,7 @@ static int
|
|
||||||
locexpr_read_needs_frame (struct symbol *symbol)
|
|
||||||
{
|
|
||||||
struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
|
|
||||||
+
|
|
||||||
return dwarf2_loc_desc_needs_frame (dlbaton->data, dlbaton->size,
|
|
||||||
dlbaton->per_cu);
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,53 +0,0 @@
|
|||||||
http://sourceware.org/ml/gdb-cvs/2010-05/msg00188.html
|
|
||||||
http://sourceware.org/ml/gdb-cvs/2010-05/msg00189.html
|
|
||||||
|
|
||||||
### src/gdb/ChangeLog 2010/05/21 20:45:18 1.11830
|
|
||||||
### src/gdb/ChangeLog 2010/05/21 20:56:48 1.11831
|
|
||||||
## -1,3 +1,8 @@
|
|
||||||
+2010-05-21 Tom Tromey <tromey@redhat.com>
|
|
||||||
+
|
|
||||||
+ * eval.c (evaluate_subexp_standard) <BINOP_SUBSCRIPT>: Call
|
|
||||||
+ evaluate_subexp, not evaluate_subexp_with_coercion.
|
|
||||||
+
|
|
||||||
### src/gdb/testsuite/ChangeLog 2010/05/21 20:39:50 1.2273
|
|
||||||
### src/gdb/testsuite/ChangeLog 2010/05/21 20:56:49 1.2274
|
|
||||||
## -1,5 +1,10 @@
|
|
||||||
2010-05-21 Tom Tromey <tromey@redhat.com>
|
|
||||||
|
|
||||||
+ * gdb.dwarf2/pieces.exp (pieces_test_f2): New proc.
|
|
||||||
+ Call it.
|
|
||||||
+
|
|
||||||
--- src/gdb/eval.c 2010/05/14 18:35:11 1.134
|
|
||||||
+++ src/gdb/eval.c 2010/05/21 20:56:49 1.135
|
|
||||||
@@ -2059,8 +2059,8 @@
|
|
||||||
error (_("':' operator used in invalid context"));
|
|
||||||
|
|
||||||
case BINOP_SUBSCRIPT:
|
|
||||||
- arg1 = evaluate_subexp_with_coercion (exp, pos, noside);
|
|
||||||
- arg2 = evaluate_subexp_with_coercion (exp, pos, noside);
|
|
||||||
+ arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
|
|
||||||
+ arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
|
|
||||||
if (noside == EVAL_SKIP)
|
|
||||||
goto nosideret;
|
|
||||||
if (binop_user_defined_p (op, arg1, arg2))
|
|
||||||
--- src/gdb/testsuite/gdb.dwarf2/pieces.exp 2010/05/21 20:39:50 1.1
|
|
||||||
+++ src/gdb/testsuite/gdb.dwarf2/pieces.exp 2010/05/21 21:00:27 1.2
|
|
||||||
@@ -54,4 +54,18 @@
|
|
||||||
gdb_test "print a.j" " = 14" "print a.j in pieces:f1"
|
|
||||||
}
|
|
||||||
|
|
||||||
+# Function f2 tests for a bug when indexing into an array created
|
|
||||||
+# using DW_OP_piece.
|
|
||||||
+proc pieces_test_f2 {} {
|
|
||||||
+ global csrcfile
|
|
||||||
+ set line [gdb_get_line_number "f2 breakpoint" $csrcfile]
|
|
||||||
+ gdb_test "break pieces.c:$line" "Breakpoint 3.*" \
|
|
||||||
+ "set f2 breakpoint for pieces"
|
|
||||||
+ gdb_continue_to_breakpoint "continue to f2 breakpoint for pieces"
|
|
||||||
+ gdb_test "print a" " = .4, 14." "print a in pieces:f2"
|
|
||||||
+ gdb_test "print a\[0\]" " = 4" "print a\[0\] in pieces:f2"
|
|
||||||
+ gdb_test "print a\[1\]" " = 14" "print a\[1\] in pieces:f2"
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
pieces_test_f1
|
|
||||||
+pieces_test_f2
|
|
File diff suppressed because it is too large
Load Diff
@ -1,820 +0,0 @@
|
|||||||
http://sourceware.org/ml/gdb-cvs/2010-05/msg00191.html
|
|
||||||
|
|
||||||
### src/gdb/ChangeLog 2010/05/21 21:01:46 1.11832
|
|
||||||
### src/gdb/ChangeLog 2010/05/21 21:13:10 1.11833
|
|
||||||
## -1,5 +1,20 @@
|
|
||||||
2010-05-21 Tom Tromey <tromey@redhat.com>
|
|
||||||
|
|
||||||
+ * dwarf2loc.c (extract_bits_primitive): New function.
|
|
||||||
+ (extract_bits): Likewise.
|
|
||||||
+ (insert_bits): Likewise.
|
|
||||||
+ (copy_bitwise): Likewise.
|
|
||||||
+ (read_pieced_value): Do all operations in bits.
|
|
||||||
+ (write_pieced_value): Likewise.
|
|
||||||
+ * dwarf2expr.h (struct dwarf_expr_piece) <offset>: New field.
|
|
||||||
+ * dwarf2expr.c (add_piece): New arguments bit_piece, offset.
|
|
||||||
+ Always use xrealloc to resize piece array.
|
|
||||||
+ (execute_stack_op) <DW_OP_reg0>: Handle DW_OP_bit_piece.
|
|
||||||
+ <DW_OP_piece>: Update.
|
|
||||||
+ <DW_OP_bit_piece>: New case.
|
|
||||||
+
|
|
||||||
### src/gdb/testsuite/ChangeLog 2010/05/21 21:01:46 1.2275
|
|
||||||
### src/gdb/testsuite/ChangeLog 2010/05/21 21:13:13 1.2276
|
|
||||||
## -1,5 +1,12 @@
|
|
||||||
2010-05-21 Tom Tromey <tromey@redhat.com>
|
|
||||||
|
|
||||||
+ * gdb.dwarf2/pieces.exp (pieces_test_f3): New proc.
|
|
||||||
+ Call it.
|
|
||||||
+ * gdb.dwarf2/pieces.S: Update.
|
|
||||||
+ * gdb.dwarf2/pieces.c (struct B): Remove initial field.
|
|
||||||
+
|
|
||||||
--- src/gdb/dwarf2expr.c 2010/05/21 21:01:46 1.43
|
|
||||||
+++ src/gdb/dwarf2expr.c 2010/05/21 21:13:10 1.44
|
|
||||||
@@ -153,23 +153,21 @@
|
|
||||||
|
|
||||||
/* Add a new piece to CTX's piece list. */
|
|
||||||
static void
|
|
||||||
-add_piece (struct dwarf_expr_context *ctx, ULONGEST size)
|
|
||||||
+add_piece (struct dwarf_expr_context *ctx, ULONGEST size, ULONGEST offset)
|
|
||||||
{
|
|
||||||
struct dwarf_expr_piece *p;
|
|
||||||
|
|
||||||
ctx->num_pieces++;
|
|
||||||
|
|
||||||
- if (ctx->pieces)
|
|
||||||
- ctx->pieces = xrealloc (ctx->pieces,
|
|
||||||
- (ctx->num_pieces
|
|
||||||
- * sizeof (struct dwarf_expr_piece)));
|
|
||||||
- else
|
|
||||||
- ctx->pieces = xmalloc (ctx->num_pieces
|
|
||||||
- * sizeof (struct dwarf_expr_piece));
|
|
||||||
+ ctx->pieces = xrealloc (ctx->pieces,
|
|
||||||
+ (ctx->num_pieces
|
|
||||||
+ * sizeof (struct dwarf_expr_piece)));
|
|
||||||
|
|
||||||
p = &ctx->pieces[ctx->num_pieces - 1];
|
|
||||||
p->location = ctx->location;
|
|
||||||
p->size = size;
|
|
||||||
+ p->offset = offset;
|
|
||||||
+
|
|
||||||
if (p->location == DWARF_VALUE_LITERAL)
|
|
||||||
{
|
|
||||||
p->v.literal.data = ctx->data;
|
|
||||||
@@ -499,9 +497,11 @@
|
|
||||||
case DW_OP_reg31:
|
|
||||||
if (op_ptr != op_end
|
|
||||||
&& *op_ptr != DW_OP_piece
|
|
||||||
+ && *op_ptr != DW_OP_bit_piece
|
|
||||||
&& *op_ptr != DW_OP_GNU_uninit)
|
|
||||||
error (_("DWARF-2 expression error: DW_OP_reg operations must be "
|
|
||||||
- "used either alone or in conjuction with DW_OP_piece."));
|
|
||||||
+ "used either alone or in conjuction with DW_OP_piece "
|
|
||||||
+ "or DW_OP_bit_piece."));
|
|
||||||
|
|
||||||
result = op - DW_OP_reg0;
|
|
||||||
ctx->location = DWARF_VALUE_REGISTER;
|
|
||||||
@@ -872,7 +872,7 @@
|
|
||||||
|
|
||||||
/* Record the piece. */
|
|
||||||
op_ptr = read_uleb128 (op_ptr, op_end, &size);
|
|
||||||
- add_piece (ctx, size);
|
|
||||||
+ add_piece (ctx, 8 * size, 0);
|
|
||||||
|
|
||||||
/* Pop off the address/regnum, and reset the location
|
|
||||||
type. */
|
|
||||||
@@ -883,6 +883,24 @@
|
|
||||||
}
|
|
||||||
goto no_push;
|
|
||||||
|
|
||||||
+ case DW_OP_bit_piece:
|
|
||||||
+ {
|
|
||||||
+ ULONGEST size, offset;
|
|
||||||
+
|
|
||||||
+ /* Record the piece. */
|
|
||||||
+ op_ptr = read_uleb128 (op_ptr, op_end, &size);
|
|
||||||
+ op_ptr = read_uleb128 (op_ptr, op_end, &offset);
|
|
||||||
+ add_piece (ctx, size, offset);
|
|
||||||
+
|
|
||||||
+ /* Pop off the address/regnum, and reset the location
|
|
||||||
+ type. */
|
|
||||||
+ if (ctx->location != DWARF_VALUE_LITERAL
|
|
||||||
+ && ctx->location != DWARF_VALUE_OPTIMIZED_OUT)
|
|
||||||
+ dwarf_expr_pop (ctx);
|
|
||||||
+ ctx->location = DWARF_VALUE_MEMORY;
|
|
||||||
+ }
|
|
||||||
+ goto no_push;
|
|
||||||
+
|
|
||||||
case DW_OP_GNU_uninit:
|
|
||||||
if (op_ptr != op_end)
|
|
||||||
error (_("DWARF-2 expression error: DW_OP_GNU_uninit must always "
|
|
||||||
--- src/gdb/dwarf2expr.h 2010/05/21 21:01:46 1.21
|
|
||||||
+++ src/gdb/dwarf2expr.h 2010/05/21 21:13:11 1.22
|
|
||||||
@@ -155,7 +155,7 @@
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
-/* A piece of an object, as recorded by DW_OP_piece. */
|
|
||||||
+/* A piece of an object, as recorded by DW_OP_piece or DW_OP_bit_piece. */
|
|
||||||
struct dwarf_expr_piece
|
|
||||||
{
|
|
||||||
enum dwarf_value_location location;
|
|
||||||
@@ -181,8 +181,10 @@
|
|
||||||
} literal;
|
|
||||||
} v;
|
|
||||||
|
|
||||||
- /* The length of the piece, in bytes. */
|
|
||||||
+ /* The length of the piece, in bits. */
|
|
||||||
ULONGEST size;
|
|
||||||
+ /* The piece offset, in bits. */
|
|
||||||
+ ULONGEST offset;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct dwarf_expr_context *new_dwarf_expr_context (void);
|
|
||||||
--- src/gdb/dwarf2loc.c 2010/05/21 21:01:46 1.80
|
|
||||||
+++ src/gdb/dwarf2loc.c 2010/05/21 21:13:11 1.81
|
|
||||||
@@ -259,52 +259,245 @@
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* The lowest-level function to extract bits from a byte buffer.
|
|
||||||
+ SOURCE is the buffer. It is updated if we read to the end of a
|
|
||||||
+ byte.
|
|
||||||
+ SOURCE_OFFSET_BITS is the offset of the first bit to read. It is
|
|
||||||
+ updated to reflect the number of bits actually read.
|
|
||||||
+ NBITS is the number of bits we want to read. It is updated to
|
|
||||||
+ reflect the number of bits actually read. This function may read
|
|
||||||
+ fewer bits.
|
|
||||||
+ BITS_BIG_ENDIAN is taken directly from gdbarch.
|
|
||||||
+ This function returns the extracted bits. */
|
|
||||||
+
|
|
||||||
+static unsigned int
|
|
||||||
+extract_bits_primitive (const gdb_byte **source,
|
|
||||||
+ unsigned int *source_offset_bits,
|
|
||||||
+ int *nbits, int bits_big_endian)
|
|
||||||
+{
|
|
||||||
+ unsigned int avail, mask, datum;
|
|
||||||
+
|
|
||||||
+ gdb_assert (*source_offset_bits < 8);
|
|
||||||
+
|
|
||||||
+ avail = 8 - *source_offset_bits;
|
|
||||||
+ if (avail > *nbits)
|
|
||||||
+ avail = *nbits;
|
|
||||||
+
|
|
||||||
+ mask = (1 << avail) - 1;
|
|
||||||
+ datum = **source;
|
|
||||||
+ if (bits_big_endian)
|
|
||||||
+ datum >>= 8 - (*source_offset_bits + *nbits);
|
|
||||||
+ else
|
|
||||||
+ datum >>= *source_offset_bits;
|
|
||||||
+ datum &= mask;
|
|
||||||
+
|
|
||||||
+ *nbits -= avail;
|
|
||||||
+ *source_offset_bits += avail;
|
|
||||||
+ if (*source_offset_bits >= 8)
|
|
||||||
+ {
|
|
||||||
+ *source_offset_bits -= 8;
|
|
||||||
+ ++*source;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return datum;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* Extract some bits from a source buffer and move forward in the
|
|
||||||
+ buffer.
|
|
||||||
+
|
|
||||||
+ SOURCE is the source buffer. It is updated as bytes are read.
|
|
||||||
+ SOURCE_OFFSET_BITS is the offset into SOURCE. It is updated as
|
|
||||||
+ bits are read.
|
|
||||||
+ NBITS is the number of bits to read.
|
|
||||||
+ BITS_BIG_ENDIAN is taken directly from gdbarch.
|
|
||||||
+
|
|
||||||
+ This function returns the bits that were read. */
|
|
||||||
+
|
|
||||||
+static unsigned int
|
|
||||||
+extract_bits (const gdb_byte **source, unsigned int *source_offset_bits,
|
|
||||||
+ int nbits, int bits_big_endian)
|
|
||||||
+{
|
|
||||||
+ unsigned int datum;
|
|
||||||
+
|
|
||||||
+ gdb_assert (nbits > 0 && nbits <= 8);
|
|
||||||
+
|
|
||||||
+ datum = extract_bits_primitive (source, source_offset_bits, &nbits,
|
|
||||||
+ bits_big_endian);
|
|
||||||
+ if (nbits > 0)
|
|
||||||
+ {
|
|
||||||
+ unsigned int more;
|
|
||||||
+
|
|
||||||
+ more = extract_bits_primitive (source, source_offset_bits, &nbits,
|
|
||||||
+ bits_big_endian);
|
|
||||||
+ if (bits_big_endian)
|
|
||||||
+ datum <<= nbits;
|
|
||||||
+ else
|
|
||||||
+ more <<= nbits;
|
|
||||||
+ datum |= more;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return datum;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* Write some bits into a buffer and move forward in the buffer.
|
|
||||||
+
|
|
||||||
+ DATUM is the bits to write. The low-order bits of DATUM are used.
|
|
||||||
+ DEST is the destination buffer. It is updated as bytes are
|
|
||||||
+ written.
|
|
||||||
+ DEST_OFFSET_BITS is the bit offset in DEST at which writing is
|
|
||||||
+ done.
|
|
||||||
+ NBITS is the number of valid bits in DATUM.
|
|
||||||
+ BITS_BIG_ENDIAN is taken directly from gdbarch. */
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+insert_bits (unsigned int datum,
|
|
||||||
+ gdb_byte *dest, unsigned int dest_offset_bits,
|
|
||||||
+ int nbits, int bits_big_endian)
|
|
||||||
+{
|
|
||||||
+ unsigned int mask;
|
|
||||||
+
|
|
||||||
+ gdb_assert (dest_offset_bits >= 0 && dest_offset_bits + nbits <= 8);
|
|
||||||
+
|
|
||||||
+ mask = (1 << nbits) - 1;
|
|
||||||
+ if (bits_big_endian)
|
|
||||||
+ {
|
|
||||||
+ datum <<= 8 - (dest_offset_bits + nbits);
|
|
||||||
+ mask <<= 8 - (dest_offset_bits + nbits);
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ datum <<= dest_offset_bits;
|
|
||||||
+ mask <<= dest_offset_bits;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ gdb_assert ((datum & ~mask) == 0);
|
|
||||||
+
|
|
||||||
+ *dest = (*dest & ~mask) | datum;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* Copy bits from a source to a destination.
|
|
||||||
+
|
|
||||||
+ DEST is where the bits should be written.
|
|
||||||
+ DEST_OFFSET_BITS is the bit offset into DEST.
|
|
||||||
+ SOURCE is the source of bits.
|
|
||||||
+ SOURCE_OFFSET_BITS is the bit offset into SOURCE.
|
|
||||||
+ BIT_COUNT is the number of bits to copy.
|
|
||||||
+ BITS_BIG_ENDIAN is taken directly from gdbarch. */
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+copy_bitwise (gdb_byte *dest, unsigned int dest_offset_bits,
|
|
||||||
+ const gdb_byte *source, unsigned int source_offset_bits,
|
|
||||||
+ unsigned int bit_count,
|
|
||||||
+ int bits_big_endian)
|
|
||||||
+{
|
|
||||||
+ unsigned int dest_avail;
|
|
||||||
+ int datum;
|
|
||||||
+
|
|
||||||
+ /* Reduce everything to byte-size pieces. */
|
|
||||||
+ dest += dest_offset_bits / 8;
|
|
||||||
+ dest_offset_bits %= 8;
|
|
||||||
+ source += source_offset_bits / 8;
|
|
||||||
+ source_offset_bits %= 8;
|
|
||||||
+
|
|
||||||
+ dest_avail = 8 - dest_offset_bits % 8;
|
|
||||||
+
|
|
||||||
+ /* See if we can fill the first destination byte. */
|
|
||||||
+ if (dest_avail < bit_count)
|
|
||||||
+ {
|
|
||||||
+ datum = extract_bits (&source, &source_offset_bits, dest_avail,
|
|
||||||
+ bits_big_endian);
|
|
||||||
+ insert_bits (datum, dest, dest_offset_bits, dest_avail, bits_big_endian);
|
|
||||||
+ ++dest;
|
|
||||||
+ dest_offset_bits = 0;
|
|
||||||
+ bit_count -= dest_avail;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Now, either DEST_OFFSET_BITS is byte-aligned, or we have fewer
|
|
||||||
+ than 8 bits remaining. */
|
|
||||||
+ gdb_assert (dest_offset_bits % 8 == 0 || bit_count < 8);
|
|
||||||
+ for (; bit_count >= 8; bit_count -= 8)
|
|
||||||
+ {
|
|
||||||
+ datum = extract_bits (&source, &source_offset_bits, 8, bits_big_endian);
|
|
||||||
+ *dest++ = (gdb_byte) datum;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ /* Finally, we may have a few leftover bits. */
|
|
||||||
+ gdb_assert (bit_count <= 8 - dest_offset_bits % 8);
|
|
||||||
+ if (bit_count > 0)
|
|
||||||
+ {
|
|
||||||
+ datum = extract_bits (&source, &source_offset_bits, bit_count,
|
|
||||||
+ bits_big_endian);
|
|
||||||
+ insert_bits (datum, dest, dest_offset_bits, bit_count, bits_big_endian);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
read_pieced_value (struct value *v)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
long offset = 0;
|
|
||||||
- ULONGEST bytes_to_skip;
|
|
||||||
+ ULONGEST bits_to_skip;
|
|
||||||
gdb_byte *contents;
|
|
||||||
struct piece_closure *c = (struct piece_closure *) value_computed_closure (v);
|
|
||||||
struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (v));
|
|
||||||
size_t type_len;
|
|
||||||
+ size_t buffer_size = 0;
|
|
||||||
+ char *buffer = NULL;
|
|
||||||
+ struct cleanup *cleanup;
|
|
||||||
+ int bits_big_endian
|
|
||||||
+ = gdbarch_bits_big_endian (get_type_arch (value_type (v)));
|
|
||||||
|
|
||||||
if (value_type (v) != value_enclosing_type (v))
|
|
||||||
internal_error (__FILE__, __LINE__,
|
|
||||||
_("Should not be able to create a lazy value with "
|
|
||||||
"an enclosing type"));
|
|
||||||
|
|
||||||
+ cleanup = make_cleanup (free_current_contents, &buffer);
|
|
||||||
+
|
|
||||||
contents = value_contents_raw (v);
|
|
||||||
- bytes_to_skip = value_offset (v);
|
|
||||||
- type_len = TYPE_LENGTH (value_type (v));
|
|
||||||
+ bits_to_skip = 8 * value_offset (v);
|
|
||||||
+ type_len = 8 * TYPE_LENGTH (value_type (v));
|
|
||||||
+
|
|
||||||
for (i = 0; i < c->n_pieces && offset < type_len; i++)
|
|
||||||
{
|
|
||||||
struct dwarf_expr_piece *p = &c->pieces[i];
|
|
||||||
- size_t this_size;
|
|
||||||
- long dest_offset, source_offset;
|
|
||||||
-
|
|
||||||
- if (bytes_to_skip > 0 && bytes_to_skip >= p->size)
|
|
||||||
+ size_t this_size, this_size_bits;
|
|
||||||
+ long dest_offset_bits, source_offset_bits, source_offset;
|
|
||||||
+ gdb_byte *intermediate_buffer;
|
|
||||||
+
|
|
||||||
+ /* Compute size, source, and destination offsets for copying, in
|
|
||||||
+ bits. */
|
|
||||||
+ this_size_bits = p->size;
|
|
||||||
+ if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
|
|
||||||
{
|
|
||||||
- bytes_to_skip -= p->size;
|
|
||||||
+ bits_to_skip -= this_size_bits;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
- this_size = p->size;
|
|
||||||
- if (this_size > type_len - offset)
|
|
||||||
- this_size = type_len - offset;
|
|
||||||
- if (bytes_to_skip > 0)
|
|
||||||
- {
|
|
||||||
- dest_offset = 0;
|
|
||||||
- source_offset = bytes_to_skip;
|
|
||||||
- this_size -= bytes_to_skip;
|
|
||||||
- bytes_to_skip = 0;
|
|
||||||
+ if (this_size_bits > type_len - offset)
|
|
||||||
+ this_size_bits = type_len - offset;
|
|
||||||
+ if (bits_to_skip > 0)
|
|
||||||
+ {
|
|
||||||
+ dest_offset_bits = 0;
|
|
||||||
+ source_offset_bits = bits_to_skip;
|
|
||||||
+ this_size_bits -= bits_to_skip;
|
|
||||||
+ bits_to_skip = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
- dest_offset = offset;
|
|
||||||
- source_offset = 0;
|
|
||||||
+ dest_offset_bits = offset;
|
|
||||||
+ source_offset_bits = 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
|
|
||||||
+ source_offset = source_offset_bits / 8;
|
|
||||||
+ if (buffer_size < this_size)
|
|
||||||
+ {
|
|
||||||
+ buffer_size = this_size;
|
|
||||||
+ buffer = xrealloc (buffer, buffer_size);
|
|
||||||
}
|
|
||||||
+ intermediate_buffer = buffer;
|
|
||||||
|
|
||||||
+ /* Copy from the source to DEST_BUFFER. */
|
|
||||||
switch (p->location)
|
|
||||||
{
|
|
||||||
case DWARF_VALUE_REGISTER:
|
|
||||||
@@ -316,13 +509,18 @@
|
|
||||||
|
|
||||||
if (gdbarch_byte_order (arch) == BFD_ENDIAN_BIG
|
|
||||||
&& this_size < register_size (arch, gdb_regnum))
|
|
||||||
- /* Big-endian, and we want less than full size. */
|
|
||||||
- reg_offset = register_size (arch, gdb_regnum) - this_size;
|
|
||||||
+ {
|
|
||||||
+ /* Big-endian, and we want less than full size. */
|
|
||||||
+ reg_offset = register_size (arch, gdb_regnum) - this_size;
|
|
||||||
+ /* We want the lower-order THIS_SIZE_BITS of the bytes
|
|
||||||
+ we extract from the register. */
|
|
||||||
+ source_offset_bits += 8 * this_size - this_size_bits;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (gdb_regnum != -1)
|
|
||||||
{
|
|
||||||
get_frame_register_bytes (frame, gdb_regnum, reg_offset,
|
|
||||||
- this_size, contents + dest_offset);
|
|
||||||
+ this_size, buffer);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
@@ -334,11 +532,9 @@
|
|
||||||
|
|
||||||
case DWARF_VALUE_MEMORY:
|
|
||||||
if (p->v.expr.in_stack_memory)
|
|
||||||
- read_stack (p->v.expr.value + source_offset,
|
|
||||||
- contents + dest_offset, this_size);
|
|
||||||
+ read_stack (p->v.expr.value + source_offset, buffer, this_size);
|
|
||||||
else
|
|
||||||
- read_memory (p->v.expr.value + source_offset,
|
|
||||||
- contents + dest_offset, this_size);
|
|
||||||
+ read_memory (p->v.expr.value + source_offset, buffer, this_size);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DWARF_VALUE_STACK:
|
|
||||||
@@ -355,7 +551,7 @@
|
|
||||||
/* Nothing. */
|
|
||||||
}
|
|
||||||
else if (source_offset == 0)
|
|
||||||
- store_unsigned_integer (contents + dest_offset, n,
|
|
||||||
+ store_unsigned_integer (buffer, n,
|
|
||||||
gdbarch_byte_order (gdbarch),
|
|
||||||
p->v.expr.value);
|
|
||||||
else
|
|
||||||
@@ -365,7 +561,7 @@
|
|
||||||
store_unsigned_integer (bytes, n + source_offset,
|
|
||||||
gdbarch_byte_order (gdbarch),
|
|
||||||
p->v.expr.value);
|
|
||||||
- memcpy (contents + dest_offset, bytes + source_offset, n);
|
|
||||||
+ memcpy (buffer, bytes + source_offset, n);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
@@ -379,8 +575,7 @@
|
|
||||||
? p->v.literal.length - source_offset
|
|
||||||
: 0);
|
|
||||||
if (n != 0)
|
|
||||||
- memcpy (contents + dest_offset,
|
|
||||||
- p->v.literal.data + source_offset, n);
|
|
||||||
+ intermediate_buffer = p->v.literal.data + source_offset;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
@@ -388,17 +583,25 @@
|
|
||||||
/* We just leave the bits empty for now. This is not ideal
|
|
||||||
but gdb currently does not have a nice way to represent
|
|
||||||
optimized-out pieces. */
|
|
||||||
- warning (_("bytes %ld-%ld in computed object were optimized out; "
|
|
||||||
+ warning (_("bits %ld-%ld in computed object were optimized out; "
|
|
||||||
"replacing with zeroes"),
|
|
||||||
offset,
|
|
||||||
- offset + (long) this_size);
|
|
||||||
+ offset + (long) this_size_bits);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
internal_error (__FILE__, __LINE__, _("invalid location type"));
|
|
||||||
}
|
|
||||||
- offset += this_size;
|
|
||||||
+
|
|
||||||
+ if (p->location != DWARF_VALUE_OPTIMIZED_OUT)
|
|
||||||
+ copy_bitwise (contents, dest_offset_bits,
|
|
||||||
+ intermediate_buffer, source_offset_bits % 8,
|
|
||||||
+ this_size_bits, bits_big_endian);
|
|
||||||
+
|
|
||||||
+ offset += this_size_bits;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ do_cleanups (cleanup);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -406,11 +609,16 @@
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
long offset = 0;
|
|
||||||
- ULONGEST bytes_to_skip;
|
|
||||||
+ ULONGEST bits_to_skip;
|
|
||||||
const gdb_byte *contents;
|
|
||||||
struct piece_closure *c = (struct piece_closure *) value_computed_closure (to);
|
|
||||||
struct frame_info *frame = frame_find_by_id (VALUE_FRAME_ID (to));
|
|
||||||
size_t type_len;
|
|
||||||
+ size_t buffer_size = 0;
|
|
||||||
+ char *buffer = NULL;
|
|
||||||
+ struct cleanup *cleanup;
|
|
||||||
+ int bits_big_endian
|
|
||||||
+ = gdbarch_bits_big_endian (get_type_arch (value_type (to)));
|
|
||||||
|
|
||||||
if (frame == NULL)
|
|
||||||
{
|
|
||||||
@@ -418,34 +626,57 @@
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ cleanup = make_cleanup (free_current_contents, &buffer);
|
|
||||||
+
|
|
||||||
contents = value_contents (from);
|
|
||||||
- bytes_to_skip = value_offset (to);
|
|
||||||
- type_len = TYPE_LENGTH (value_type (to));
|
|
||||||
+ bits_to_skip = 8 * value_offset (to);
|
|
||||||
+ type_len = 8 * TYPE_LENGTH (value_type (to));
|
|
||||||
for (i = 0; i < c->n_pieces && offset < type_len; i++)
|
|
||||||
{
|
|
||||||
struct dwarf_expr_piece *p = &c->pieces[i];
|
|
||||||
- size_t this_size;
|
|
||||||
- long dest_offset, source_offset;
|
|
||||||
+ size_t this_size_bits, this_size;
|
|
||||||
+ long dest_offset_bits, source_offset_bits, dest_offset, source_offset;
|
|
||||||
+ int need_bitwise;
|
|
||||||
+ const gdb_byte *source_buffer;
|
|
||||||
|
|
||||||
- if (bytes_to_skip > 0 && bytes_to_skip >= p->size)
|
|
||||||
+ this_size_bits = p->size;
|
|
||||||
+ if (bits_to_skip > 0 && bits_to_skip >= this_size_bits)
|
|
||||||
{
|
|
||||||
- bytes_to_skip -= p->size;
|
|
||||||
+ bits_to_skip -= this_size_bits;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
- this_size = p->size;
|
|
||||||
- if (this_size > type_len - offset)
|
|
||||||
- this_size = type_len - offset;
|
|
||||||
- if (bytes_to_skip > 0)
|
|
||||||
- {
|
|
||||||
- dest_offset = bytes_to_skip;
|
|
||||||
- source_offset = 0;
|
|
||||||
- this_size -= bytes_to_skip;
|
|
||||||
- bytes_to_skip = 0;
|
|
||||||
+ if (this_size_bits > type_len - offset)
|
|
||||||
+ this_size_bits = type_len - offset;
|
|
||||||
+ if (bits_to_skip > 0)
|
|
||||||
+ {
|
|
||||||
+ dest_offset_bits = bits_to_skip;
|
|
||||||
+ source_offset_bits = 0;
|
|
||||||
+ this_size_bits -= bits_to_skip;
|
|
||||||
+ bits_to_skip = 0;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ dest_offset_bits = 0;
|
|
||||||
+ source_offset_bits = offset;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8;
|
|
||||||
+ source_offset = source_offset_bits / 8;
|
|
||||||
+ dest_offset = dest_offset_bits / 8;
|
|
||||||
+ if (dest_offset_bits % 8 == 0 && source_offset_bits % 8 == 0)
|
|
||||||
+ {
|
|
||||||
+ source_buffer = contents + source_offset;
|
|
||||||
+ need_bitwise = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
- dest_offset = 0;
|
|
||||||
- source_offset = offset;
|
|
||||||
+ if (buffer_size < this_size)
|
|
||||||
+ {
|
|
||||||
+ buffer_size = this_size;
|
|
||||||
+ buffer = xrealloc (buffer, buffer_size);
|
|
||||||
+ }
|
|
||||||
+ source_buffer = buffer;
|
|
||||||
+ need_bitwise = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (p->location)
|
|
||||||
@@ -463,8 +694,18 @@
|
|
||||||
|
|
||||||
if (gdb_regnum != -1)
|
|
||||||
{
|
|
||||||
+ if (need_bitwise)
|
|
||||||
+ {
|
|
||||||
+ get_frame_register_bytes (frame, gdb_regnum, reg_offset,
|
|
||||||
+ this_size, buffer);
|
|
||||||
+ copy_bitwise (buffer, dest_offset_bits,
|
|
||||||
+ contents, source_offset_bits,
|
|
||||||
+ this_size_bits,
|
|
||||||
+ bits_big_endian);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
put_frame_register_bytes (frame, gdb_regnum, reg_offset,
|
|
||||||
- this_size, contents + source_offset);
|
|
||||||
+ this_size, source_buffer);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
@@ -474,15 +715,31 @@
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case DWARF_VALUE_MEMORY:
|
|
||||||
+ if (need_bitwise)
|
|
||||||
+ {
|
|
||||||
+ /* Only the first and last bytes can possibly have any
|
|
||||||
+ bits reused. */
|
|
||||||
+ read_memory (p->v.expr.value + dest_offset, buffer, 1);
|
|
||||||
+ read_memory (p->v.expr.value + dest_offset + this_size - 1,
|
|
||||||
+ buffer + this_size - 1, 1);
|
|
||||||
+ copy_bitwise (buffer, dest_offset_bits,
|
|
||||||
+ contents, source_offset_bits,
|
|
||||||
+ this_size_bits,
|
|
||||||
+ bits_big_endian);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
write_memory (p->v.expr.value + dest_offset,
|
|
||||||
- contents + source_offset, this_size);
|
|
||||||
+ source_buffer, this_size);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
set_value_optimized_out (to, 1);
|
|
||||||
- return;
|
|
||||||
+ goto done;
|
|
||||||
}
|
|
||||||
- offset += this_size;
|
|
||||||
+ offset += this_size_bits;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ done:
|
|
||||||
+ do_cleanups (cleanup);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *
|
|
||||||
--- src/gdb/testsuite/gdb.dwarf2/pieces.S 2010/05/21 21:01:46 1.2
|
|
||||||
+++ src/gdb/testsuite/gdb.dwarf2/pieces.S 2010/05/21 21:13:13 1.3
|
|
||||||
@@ -989,23 +989,18 @@
|
|
||||||
.LLST6:
|
|
||||||
.long .LVL13-.Ltext0 # Location list begin address (*.LLST6)
|
|
||||||
.long .LVL14-.Ltext0 # Location list end address (*.LLST6)
|
|
||||||
- .value 0xa # Location expression size
|
|
||||||
- .byte 0x9d # DW_OP_bit_piece
|
|
||||||
- .uleb128 0x4
|
|
||||||
- .uleb128 0
|
|
||||||
+ .value 0x8 # Location expression size
|
|
||||||
.byte 0x34 # DW_OP_lit4
|
|
||||||
.byte 0x9f # DW_OP_stack_value
|
|
||||||
.byte 0x9d # DW_OP_bit_piece
|
|
||||||
.uleb128 0xc
|
|
||||||
.uleb128 0
|
|
||||||
- .byte 0x93 # DW_OP_piece
|
|
||||||
- .uleb128 0x2
|
|
||||||
- .long .LVL14-.Ltext0 # Location list begin address (*.LLST6)
|
|
||||||
- .long .LVL15-.Ltext0 # Location list end address (*.LLST6)
|
|
||||||
- .value 0x15 # Location expression size
|
|
||||||
.byte 0x9d # DW_OP_bit_piece
|
|
||||||
- .uleb128 0x4
|
|
||||||
+ .uleb128 0x14
|
|
||||||
.uleb128 0
|
|
||||||
+ .long .LVL14-.Ltext0 # Location list begin address (*.LLST6)
|
|
||||||
+ .long .LVL15-.Ltext0 # Location list end address (*.LLST6)
|
|
||||||
+ .value 0x11 # Location expression size
|
|
||||||
.byte 0x34 # DW_OP_lit4
|
|
||||||
.byte 0x9f # DW_OP_stack_value
|
|
||||||
.byte 0x9d # DW_OP_bit_piece
|
|
||||||
@@ -1021,15 +1016,11 @@
|
|
||||||
.byte 0x9d # DW_OP_bit_piece
|
|
||||||
.uleb128 0xc
|
|
||||||
.uleb128 0
|
|
||||||
- .byte 0x9d # DW_OP_bit_piece
|
|
||||||
- .uleb128 0x4
|
|
||||||
- .uleb128 0
|
|
||||||
+ .byte 0x93 # DW_OP_piece
|
|
||||||
+ .uleb128 0x1
|
|
||||||
.long .LVL15-.Ltext0 # Location list begin address (*.LLST6)
|
|
||||||
.long .LVL16-1-.Ltext0 # Location list end address (*.LLST6)
|
|
||||||
- .value 0x14 # Location expression size
|
|
||||||
- .byte 0x9d # DW_OP_bit_piece
|
|
||||||
- .uleb128 0x4
|
|
||||||
- .uleb128 0
|
|
||||||
+ .value 0x10 # Location expression size
|
|
||||||
.byte 0x52 # DW_OP_reg2
|
|
||||||
.byte 0x9d # DW_OP_bit_piece
|
|
||||||
.uleb128 0xc
|
|
||||||
@@ -1044,15 +1035,11 @@
|
|
||||||
.byte 0x9d # DW_OP_bit_piece
|
|
||||||
.uleb128 0xc
|
|
||||||
.uleb128 0
|
|
||||||
- .byte 0x9d # DW_OP_bit_piece
|
|
||||||
- .uleb128 0x4
|
|
||||||
- .uleb128 0
|
|
||||||
+ .byte 0x93 # DW_OP_piece
|
|
||||||
+ .uleb128 0x1
|
|
||||||
.long .LVL16-1-.Ltext0 # Location list begin address (*.LLST6)
|
|
||||||
.long .LVL17-.Ltext0 # Location list end address (*.LLST6)
|
|
||||||
- .value 0x14 # Location expression size
|
|
||||||
- .byte 0x9d # DW_OP_bit_piece
|
|
||||||
- .uleb128 0x4
|
|
||||||
- .uleb128 0
|
|
||||||
+ .value 0x10 # Location expression size
|
|
||||||
.byte 0x56 # DW_OP_reg6
|
|
||||||
.byte 0x9d # DW_OP_bit_piece
|
|
||||||
.uleb128 0xc
|
|
||||||
@@ -1067,14 +1054,14 @@
|
|
||||||
.byte 0x9d # DW_OP_bit_piece
|
|
||||||
.uleb128 0xc
|
|
||||||
.uleb128 0
|
|
||||||
- .byte 0x9d # DW_OP_bit_piece
|
|
||||||
- .uleb128 0x4
|
|
||||||
- .uleb128 0
|
|
||||||
+ .byte 0x93 # DW_OP_piece
|
|
||||||
+ .uleb128 0x1
|
|
||||||
.long .LVL17-.Ltext0 # Location list begin address (*.LLST6)
|
|
||||||
.long .LFE3-.Ltext0 # Location list end address (*.LLST6)
|
|
||||||
.value 0xf # Location expression size
|
|
||||||
- .byte 0x93 # DW_OP_piece
|
|
||||||
- .uleb128 0x2
|
|
||||||
+ .byte 0x9d # DW_OP_bit_piece
|
|
||||||
+ .uleb128 0xc
|
|
||||||
+ .uleb128 0
|
|
||||||
.byte 0x91 # DW_OP_fbreg
|
|
||||||
.sleb128 0
|
|
||||||
.byte 0x94 # DW_OP_deref_size
|
|
||||||
@@ -1085,9 +1072,8 @@
|
|
||||||
.byte 0x9d # DW_OP_bit_piece
|
|
||||||
.uleb128 0xc
|
|
||||||
.uleb128 0
|
|
||||||
- .byte 0x9d # DW_OP_bit_piece
|
|
||||||
- .uleb128 0x4
|
|
||||||
- .uleb128 0
|
|
||||||
+ .byte 0x93 # DW_OP_piece
|
|
||||||
+ .uleb128 0x1
|
|
||||||
.long 0 # Location list terminator begin (*.LLST6)
|
|
||||||
.long 0 # Location list terminator end (*.LLST6)
|
|
||||||
.LLST7:
|
|
||||||
@@ -1356,7 +1342,7 @@
|
|
||||||
.long 0x48 # DW_AT_type
|
|
||||||
.byte 0x4 # DW_AT_byte_size
|
|
||||||
.byte 0xc # DW_AT_bit_size
|
|
||||||
- .byte 0x10 # DW_AT_bit_offset
|
|
||||||
+ .byte 0x14 # DW_AT_bit_offset
|
|
||||||
.byte 0x2 # DW_AT_data_member_location
|
|
||||||
.byte 0x23 # DW_OP_plus_uconst
|
|
||||||
.uleb128 0
|
|
||||||
@@ -1367,7 +1353,7 @@
|
|
||||||
.long 0x48 # DW_AT_type
|
|
||||||
.byte 0x4 # DW_AT_byte_size
|
|
||||||
.byte 0xc # DW_AT_bit_size
|
|
||||||
- .byte 0x4 # DW_AT_bit_offset
|
|
||||||
+ .byte 0x8 # DW_AT_bit_offset
|
|
||||||
.byte 0x2 # DW_AT_data_member_location
|
|
||||||
.byte 0x23 # DW_OP_plus_uconst
|
|
||||||
.uleb128 0
|
|
||||||
--- src/gdb/testsuite/gdb.dwarf2/pieces.c 2010/05/21 21:01:46 1.2
|
|
||||||
+++ src/gdb/testsuite/gdb.dwarf2/pieces.c 2010/05/21 21:13:13 1.3
|
|
||||||
@@ -21,7 +21,7 @@
|
|
||||||
However, it is used to extract breakpoint line numbers. */
|
|
||||||
|
|
||||||
struct A { int i; int j; };
|
|
||||||
-struct B { int : 4; int i : 12; int j : 12; int : 4; };
|
|
||||||
+struct B { int i : 12; int j : 12; int : 4; };
|
|
||||||
struct C { int i; int j; int q; };
|
|
||||||
|
|
||||||
__attribute__((noinline)) void
|
|
||||||
@@ -89,7 +89,7 @@
|
|
||||||
f6 (int k)
|
|
||||||
{
|
|
||||||
int z = 23;
|
|
||||||
- struct C a = { k, k, z};
|
|
||||||
+ struct C a = { k, k, z };
|
|
||||||
asm ("" : "+r" (a.i));
|
|
||||||
a.j++;
|
|
||||||
bar (a.i);
|
|
||||||
--- src/gdb/testsuite/gdb.dwarf2/pieces.exp 2010/05/21 21:01:46 1.3
|
|
||||||
+++ src/gdb/testsuite/gdb.dwarf2/pieces.exp 2010/05/21 21:13:13 1.4
|
|
||||||
@@ -67,15 +67,30 @@
|
|
||||||
gdb_test "print a\[1\]" " = 14" "print a\[1\] in pieces:f2"
|
|
||||||
}
|
|
||||||
|
|
||||||
+# Function f3 tests DW_OP_bit_piece.
|
|
||||||
+proc pieces_test_f3 {} {
|
|
||||||
+ global csrcfile
|
|
||||||
+ set line [gdb_get_line_number "f3 breakpoint" $csrcfile]
|
|
||||||
+ gdb_test "break pieces.c:$line" "Breakpoint 4.*" \
|
|
||||||
+ "set f3 breakpoint for pieces"
|
|
||||||
+ gdb_continue_to_breakpoint "continue to f3 breakpoint for pieces"
|
|
||||||
+ gdb_test "print a.i" " = 4" "print a.i in pieces:f3"
|
|
||||||
+ gdb_test "print a.j" " = 14" "print a.j in pieces:f3"
|
|
||||||
+ # Right now gdb says "value optimized out" here, but that is wrong.
|
|
||||||
+ setup_kfail "no bug yet" *-*-*
|
|
||||||
+ gdb_test "print a.i = 7" " = 7" "set a.i in pieces:f3"
|
|
||||||
+ gdb_test "print a.i" " = 7" "print new a.i in pieces:f3"
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
# Function f6 tests for an empty DW_OP_piece.
|
|
||||||
proc pieces_test_f6 {} {
|
|
||||||
global csrcfile
|
|
||||||
set line [gdb_get_line_number "f6 breakpoint" $csrcfile]
|
|
||||||
- gdb_test "break pieces.c:$line" "Breakpoint 4.*" \
|
|
||||||
+ gdb_test "break pieces.c:$line" "Breakpoint 5.*" \
|
|
||||||
"set f6 breakpoint for pieces"
|
|
||||||
gdb_continue_to_breakpoint "continue to f6 breakpoint for pieces"
|
|
||||||
gdb_test "print a" \
|
|
||||||
- "warning: bytes .* in computed object were.* = {i = 7, j = 8, q = 0}" \
|
|
||||||
+ "warning: bits .* in computed object were.* = {i = 7, j = 8, q = 0}" \
|
|
||||||
"print a with optimized out piece"
|
|
||||||
# Note: no warning for this case.
|
|
||||||
gdb_test_multiple "print a.i" \
|
|
||||||
@@ -91,4 +106,5 @@
|
|
||||||
|
|
||||||
pieces_test_f1
|
|
||||||
pieces_test_f2
|
|
||||||
+pieces_test_f3
|
|
||||||
pieces_test_f6
|
|
@ -1,79 +0,0 @@
|
|||||||
https://bugzilla.redhat.com/show_bug.cgi?id=586566
|
|
||||||
http://sourceware.org/ml/gdb-patches/2010-03/msg00746.html
|
|
||||||
http://sourceware.org/ml/gdb-patches/2010-05/msg00551.html
|
|
||||||
http://sourceware.org/ml/gdb-cvs/2010-03/msg00194.html
|
|
||||||
|
|
||||||
### src/gdb/ChangeLog 2010/03/19 22:00:16 1.11508
|
|
||||||
### src/gdb/ChangeLog 2010/03/20 05:17:10 1.11509
|
|
||||||
## -1,3 +1,9 @@
|
|
||||||
+2010-03-20 Daniel Jacobowitz <dan@codesourcery.com>
|
|
||||||
+
|
|
||||||
+ * tui/tui-disasm.c (tui_get_begin_asm_address): Default to
|
|
||||||
+ get_current_arch.
|
|
||||||
+ * tui/tui-layout.c (extract_display_start_addr): Likewise.
|
|
||||||
+
|
|
||||||
2010-03-19 Stan Shebs <stan@codesourcery.com>
|
|
||||||
|
|
||||||
* ax-gdb.c (gen_fetch): Handle bool.
|
|
||||||
--- src/gdb/tui/tui-disasm.c 2010/01/01 07:32:07 1.33
|
|
||||||
+++ src/gdb/tui/tui-disasm.c 2010/03/20 05:17:10 1.34
|
|
||||||
@@ -21,6 +21,7 @@
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
#include "defs.h"
|
|
||||||
+#include "arch-utils.h"
|
|
||||||
#include "symtab.h"
|
|
||||||
#include "breakpoint.h"
|
|
||||||
#include "frame.h"
|
|
||||||
@@ -330,7 +331,7 @@
|
|
||||||
{
|
|
||||||
struct tui_gen_win_info *locator;
|
|
||||||
struct tui_locator_element *element;
|
|
||||||
- struct gdbarch *gdbarch = NULL;
|
|
||||||
+ struct gdbarch *gdbarch = get_current_arch ();
|
|
||||||
CORE_ADDR addr;
|
|
||||||
|
|
||||||
locator = tui_locator_win_info_ptr ();
|
|
||||||
--- src/gdb/tui/tui-layout.c 2010/01/01 07:32:07 1.36
|
|
||||||
+++ src/gdb/tui/tui-layout.c 2010/03/20 05:17:10 1.37
|
|
||||||
@@ -21,6 +21,7 @@
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
#include "defs.h"
|
|
||||||
+#include "arch-utils.h"
|
|
||||||
#include "command.h"
|
|
||||||
#include "symtab.h"
|
|
||||||
#include "frame.h"
|
|
||||||
@@ -522,7 +523,7 @@
|
|
||||||
extract_display_start_addr (struct gdbarch **gdbarch_p, CORE_ADDR *addr_p)
|
|
||||||
{
|
|
||||||
enum tui_layout_type cur_layout = tui_current_layout ();
|
|
||||||
- struct gdbarch *gdbarch = NULL;
|
|
||||||
+ struct gdbarch *gdbarch = get_current_arch ();
|
|
||||||
CORE_ADDR addr;
|
|
||||||
CORE_ADDR pc;
|
|
||||||
struct symtab_and_line cursal = get_current_source_symtab_and_line ();
|
|
||||||
--- /dev/null 2010-05-24 04:43:32.632794021 +0200
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.base/tui-layout.exp 2010-05-24 20:13:30.000000000 +0200
|
|
||||||
@@ -0,0 +1,21 @@
|
|
||||||
+# Copyright 2010 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
|
||||||
+# it under the terms of the GNU General Public License as published by
|
|
||||||
+# the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+# (at your option) any later version.
|
|
||||||
+#
|
|
||||||
+# This program is distributed in the hope that it will be useful,
|
|
||||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+# GNU General Public License for more details.
|
|
||||||
+#
|
|
||||||
+# You should have received a copy of the GNU General Public License
|
|
||||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+set testfile tui-layout
|
|
||||||
+if { [prepare_for_testing ${testfile}.exp ${testfile} start.c] } {
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+gdb_test "layout asm"
|
|
@ -1,66 +0,0 @@
|
|||||||
[patch] Fix ADL anonymous type crash
|
|
||||||
http://sourceware.org/ml/gdb-patches/2010-06/msg00004.html
|
|
||||||
http://sourceware.org/ml/gdb-cvs/2010-06/msg00012.html
|
|
||||||
|
|
||||||
[ Backported the testcase. ]
|
|
||||||
|
|
||||||
### src/gdb/ChangeLog 2010/06/02 06:24:00 1.11862
|
|
||||||
### src/gdb/ChangeLog 2010/06/02 15:31:29 1.11863
|
|
||||||
## -1,3 +1,8 @@
|
|
||||||
+2010-06-02 Sami Wagiaalla <swagiaal@redhat.com>
|
|
||||||
+
|
|
||||||
+ * cp-support.c (make_symbol_overload_list_adl_namespace): Handle
|
|
||||||
+ anonymous type case.
|
|
||||||
+
|
|
||||||
2010-06-02 Pierre Muller <muller@ics.u-strasbg.fr>
|
|
||||||
|
|
||||||
* dwarf2read.c (read_subrange_type): Handle missing base type
|
|
||||||
### src/gdb/testsuite/ChangeLog 2010/06/01 21:29:21 1.2298
|
|
||||||
### src/gdb/testsuite/ChangeLog 2010/06/02 15:31:30 1.2299
|
|
||||||
## -1,3 +1,8 @@
|
|
||||||
+2010-06-02 Sami Wagiaalla <swagiaal@redhat.com>
|
|
||||||
+
|
|
||||||
+ * gdb.cp/namespace-koenig.exp: Added new test case.
|
|
||||||
+ * gdb.cp/namespace-koenig.cc: Ditto.
|
|
||||||
+
|
|
||||||
2010-06-01 Michael Snyder <msnyder@vmware.com>
|
|
||||||
|
|
||||||
* gdb.base/arithmet.exp: Use gdb_test_no_output.
|
|
||||||
--- src/gdb/cp-support.c 2010/05/13 23:53:32 1.40
|
|
||||||
+++ src/gdb/cp-support.c 2010/06/02 15:31:30 1.41
|
|
||||||
@@ -752,6 +752,9 @@
|
|
||||||
|
|
||||||
type_name = TYPE_NAME (type);
|
|
||||||
|
|
||||||
+ if (type_name == NULL)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
prefix_len = cp_entire_prefix_len (type_name);
|
|
||||||
|
|
||||||
if (prefix_len != 0)
|
|
||||||
--- gdb-7.1/gdb/testsuite/gdb.cp/namespace-koenig.cc.orig 2010-06-09 08:20:14.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.cp/namespace-koenig.cc 2010-06-09 11:09:29.000000000 +0200
|
|
||||||
@@ -165,6 +165,13 @@ namespace M {
|
|
||||||
|
|
||||||
}
|
|
||||||
//------------
|
|
||||||
+static union {
|
|
||||||
+ int a;
|
|
||||||
+ char b;
|
|
||||||
+}p_union;
|
|
||||||
+
|
|
||||||
+//------------
|
|
||||||
+
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
--- gdb-7.1/gdb/testsuite/gdb.cp/namespace-koenig.exp.orig 2010-06-09 08:20:14.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.cp/namespace-koenig.exp 2010-06-09 11:09:48.000000000 +0200
|
|
||||||
@@ -110,3 +111,7 @@ gdb_test "p o + 5.0f" "= 22"
|
|
||||||
gdb_test "p o + 5" "= 23"
|
|
||||||
|
|
||||||
gdb_test "p o++" "= 24"
|
|
||||||
+
|
|
||||||
+#test that lookup is not thwarted by anonymous types
|
|
||||||
+gdb_test "p foo (p_union)" \
|
|
||||||
+ "Cannot resolve function foo to any overloaded instance"
|
|
@ -1,329 +0,0 @@
|
|||||||
commit be1f57c90bdf86477b9bc69cc982171d6ad5df56
|
|
||||||
Author: Tom Tromey <tromey@redhat.com>
|
|
||||||
Date: Tue Apr 20 17:33:13 2010 +0000
|
|
||||||
|
|
||||||
* dwarf2-frame.c (decode_frame_entry_1): Handle CIE version 4.
|
|
||||||
(struct dwarf2_cie) <segment_size>: New field.
|
|
||||||
* dwarf2read.c (partial_read_comp_unit_head): Accept DWARF 4.
|
|
||||||
(skip_one_die): Handle DW_FORM_flag_present, DW_FORM_sec_offset,
|
|
||||||
DW_FORM_exprloc.
|
|
||||||
(read_attribute_value): Handle DW_FORM_flag_present,
|
|
||||||
DW_FORM_sec_offset, DW_FORM_exprloc.
|
|
||||||
(dump_die_shallow): Likewise.
|
|
||||||
(attr_form_is_section_offset): Handle DW_FORM_sec_offset.
|
|
||||||
(dwarf2_const_value): Handle DW_FORM_exprloc.
|
|
||||||
(attr_form_is_block): Likewise.
|
|
||||||
(struct line_header) <maximum_ops_per_instruction>: New field.
|
|
||||||
(dwarf_decode_line_header): Set new field.
|
|
||||||
(dwarf_decode_lines): Handle new field.
|
|
||||||
|
|
||||||
### a/gdb/ChangeLog
|
|
||||||
### b/gdb/ChangeLog
|
|
||||||
## -1,3 +1,20 @@
|
|
||||||
+2010-04-20 Tom Tromey <tromey@redhat.com>
|
|
||||||
+
|
|
||||||
+ * dwarf2-frame.c (decode_frame_entry_1): Handle CIE version 4.
|
|
||||||
+ (struct dwarf2_cie) <segment_size>: New field.
|
|
||||||
+ * dwarf2read.c (partial_read_comp_unit_head): Accept DWARF 4.
|
|
||||||
+ (skip_one_die): Handle DW_FORM_flag_present, DW_FORM_sec_offset,
|
|
||||||
+ DW_FORM_exprloc.
|
|
||||||
+ (read_attribute_value): Handle DW_FORM_flag_present,
|
|
||||||
+ DW_FORM_sec_offset, DW_FORM_exprloc.
|
|
||||||
+ (dump_die_shallow): Likewise.
|
|
||||||
+ (attr_form_is_section_offset): Handle DW_FORM_sec_offset.
|
|
||||||
+ (dwarf2_const_value): Handle DW_FORM_exprloc.
|
|
||||||
+ (attr_form_is_block): Likewise.
|
|
||||||
+ (struct line_header) <maximum_ops_per_instruction>: New field.
|
|
||||||
+ (dwarf_decode_line_header): Set new field.
|
|
||||||
+ (dwarf_decode_lines): Handle new field.
|
|
||||||
+
|
|
||||||
2010-04-20 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* f-exp.y: Add new production to recognize the `logical*8' type.
|
|
||||||
--- a/gdb/dwarf2-frame.c
|
|
||||||
+++ b/gdb/dwarf2-frame.c
|
|
||||||
@@ -85,6 +85,9 @@ struct dwarf2_cie
|
|
||||||
|
|
||||||
/* The version recorded in the CIE. */
|
|
||||||
unsigned char version;
|
|
||||||
+
|
|
||||||
+ /* The segment size. */
|
|
||||||
+ unsigned char segment_size;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct dwarf2_cie_table
|
|
||||||
@@ -1714,7 +1717,7 @@ decode_frame_entry_1 (struct comp_unit *unit, gdb_byte *start, int eh_frame_p,
|
|
||||||
|
|
||||||
/* Check version number. */
|
|
||||||
cie_version = read_1_byte (unit->abfd, buf);
|
|
||||||
- if (cie_version != 1 && cie_version != 3)
|
|
||||||
+ if (cie_version != 1 && cie_version != 3 && cie_version != 4)
|
|
||||||
return NULL;
|
|
||||||
cie->version = cie_version;
|
|
||||||
buf += 1;
|
|
||||||
@@ -1738,6 +1741,20 @@ decode_frame_entry_1 (struct comp_unit *unit, gdb_byte *start, int eh_frame_p,
|
|
||||||
augmentation += 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (cie->version >= 4)
|
|
||||||
+ {
|
|
||||||
+ /* FIXME: check that this is the same as from the CU header. */
|
|
||||||
+ cie->addr_size = read_1_byte (unit->abfd, buf);
|
|
||||||
+ ++buf;
|
|
||||||
+ cie->segment_size = read_1_byte (unit->abfd, buf);
|
|
||||||
+ ++buf;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ cie->addr_size = gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT;
|
|
||||||
+ cie->segment_size = 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
cie->code_alignment_factor =
|
|
||||||
read_unsigned_leb128 (unit->abfd, buf, &bytes_read);
|
|
||||||
buf += bytes_read;
|
|
||||||
--- a/gdb/dwarf2read.c
|
|
||||||
+++ b/gdb/dwarf2read.c
|
|
||||||
@@ -396,6 +396,7 @@ struct line_header
|
|
||||||
unsigned short version;
|
|
||||||
unsigned int header_length;
|
|
||||||
unsigned char minimum_instruction_length;
|
|
||||||
+ unsigned char maximum_ops_per_instruction;
|
|
||||||
unsigned char default_is_stmt;
|
|
||||||
int line_base;
|
|
||||||
unsigned char line_range;
|
|
||||||
@@ -1488,10 +1489,10 @@ partial_read_comp_unit_head (struct comp_unit_head *header, gdb_byte *info_ptr,
|
|
||||||
|
|
||||||
info_ptr = read_comp_unit_head (header, info_ptr, abfd);
|
|
||||||
|
|
||||||
- if (header->version != 2 && header->version != 3)
|
|
||||||
+ if (header->version != 2 && header->version != 3 && header->version != 4)
|
|
||||||
error (_("Dwarf Error: wrong version in compilation unit header "
|
|
||||||
- "(is %d, should be %d) [in module %s]"), header->version,
|
|
||||||
- 2, bfd_get_filename (abfd));
|
|
||||||
+ "(is %d, should be 2, 3, or 4) [in module %s]"), header->version,
|
|
||||||
+ bfd_get_filename (abfd));
|
|
||||||
|
|
||||||
if (header->abbrev_offset >= dwarf2_per_objfile->abbrev.size)
|
|
||||||
error (_("Dwarf Error: bad offset (0x%lx) in compilation unit header "
|
|
||||||
@@ -2776,6 +2777,8 @@ skip_one_die (gdb_byte *buffer, gdb_byte *info_ptr,
|
|
||||||
case DW_FORM_flag:
|
|
||||||
info_ptr += 1;
|
|
||||||
break;
|
|
||||||
+ case DW_FORM_flag_present:
|
|
||||||
+ break;
|
|
||||||
case DW_FORM_data2:
|
|
||||||
case DW_FORM_ref2:
|
|
||||||
info_ptr += 2;
|
|
||||||
@@ -2793,9 +2796,11 @@ skip_one_die (gdb_byte *buffer, gdb_byte *info_ptr,
|
|
||||||
read_string (abfd, info_ptr, &bytes_read);
|
|
||||||
info_ptr += bytes_read;
|
|
||||||
break;
|
|
||||||
+ case DW_FORM_sec_offset:
|
|
||||||
case DW_FORM_strp:
|
|
||||||
info_ptr += cu->header.offset_size;
|
|
||||||
break;
|
|
||||||
+ case DW_FORM_exprloc:
|
|
||||||
case DW_FORM_block:
|
|
||||||
info_ptr += read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
|
|
||||||
info_ptr += bytes_read;
|
|
||||||
@@ -7129,6 +7134,10 @@ read_attribute_value (struct attribute *attr, unsigned form,
|
|
||||||
DW_UNSND (attr) = read_8_bytes (abfd, info_ptr);
|
|
||||||
info_ptr += 8;
|
|
||||||
break;
|
|
||||||
+ case DW_FORM_sec_offset:
|
|
||||||
+ DW_UNSND (attr) = read_offset (abfd, info_ptr, &cu->header, &bytes_read);
|
|
||||||
+ info_ptr += bytes_read;
|
|
||||||
+ break;
|
|
||||||
case DW_FORM_string:
|
|
||||||
DW_STRING (attr) = read_string (abfd, info_ptr, &bytes_read);
|
|
||||||
DW_STRING_IS_CANONICAL (attr) = 0;
|
|
||||||
@@ -7140,6 +7149,7 @@ read_attribute_value (struct attribute *attr, unsigned form,
|
|
||||||
DW_STRING_IS_CANONICAL (attr) = 0;
|
|
||||||
info_ptr += bytes_read;
|
|
||||||
break;
|
|
||||||
+ case DW_FORM_exprloc:
|
|
||||||
case DW_FORM_block:
|
|
||||||
blk = dwarf_alloc_block (cu);
|
|
||||||
blk->size = read_unsigned_leb128 (abfd, info_ptr, &bytes_read);
|
|
||||||
@@ -7164,6 +7174,9 @@ read_attribute_value (struct attribute *attr, unsigned form,
|
|
||||||
DW_UNSND (attr) = read_1_byte (abfd, info_ptr);
|
|
||||||
info_ptr += 1;
|
|
||||||
break;
|
|
||||||
+ case DW_FORM_flag_present:
|
|
||||||
+ DW_UNSND (attr) = 1;
|
|
||||||
+ break;
|
|
||||||
case DW_FORM_sdata:
|
|
||||||
DW_SND (attr) = read_signed_leb128 (abfd, info_ptr, &bytes_read);
|
|
||||||
info_ptr += bytes_read;
|
|
||||||
@@ -7680,7 +7693,7 @@ dwarf2_attr_no_follow (struct die_info *die, unsigned int name,
|
|
||||||
|
|
||||||
/* Return non-zero iff the attribute NAME is defined for the given DIE,
|
|
||||||
and holds a non-zero value. This function should only be used for
|
|
||||||
- DW_FORM_flag attributes. */
|
|
||||||
+ DW_FORM_flag or DW_FORM_flag_present attributes. */
|
|
||||||
|
|
||||||
static int
|
|
||||||
dwarf2_flag_true_p (struct die_info *die, unsigned name, struct dwarf2_cu *cu)
|
|
||||||
@@ -7862,6 +7875,21 @@ dwarf_decode_line_header (unsigned int offset, bfd *abfd,
|
|
||||||
line_ptr += offset_size;
|
|
||||||
lh->minimum_instruction_length = read_1_byte (abfd, line_ptr);
|
|
||||||
line_ptr += 1;
|
|
||||||
+ if (lh->version >= 4)
|
|
||||||
+ {
|
|
||||||
+ lh->maximum_ops_per_instruction = read_1_byte (abfd, line_ptr);
|
|
||||||
+ line_ptr += 1;
|
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ lh->maximum_ops_per_instruction = 1;
|
|
||||||
+
|
|
||||||
+ if (lh->maximum_ops_per_instruction == 0)
|
|
||||||
+ {
|
|
||||||
+ lh->maximum_ops_per_instruction = 1;
|
|
||||||
+ complaint (&symfile_complaints,
|
|
||||||
+ _("invalid maximum_ops_per_instruction in `.debug_line' section"));
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
lh->default_is_stmt = read_1_byte (abfd, line_ptr);
|
|
||||||
line_ptr += 1;
|
|
||||||
lh->line_base = read_1_signed_byte (abfd, line_ptr);
|
|
||||||
@@ -8010,6 +8038,7 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
|
|
||||||
int basic_block = 0;
|
|
||||||
int end_sequence = 0;
|
|
||||||
CORE_ADDR addr;
|
|
||||||
+ unsigned char op_index = 0;
|
|
||||||
|
|
||||||
if (!decode_for_pst_p && lh->num_file_names >= file)
|
|
||||||
{
|
|
||||||
@@ -8041,12 +8070,17 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
|
|
||||||
{
|
|
||||||
/* Special operand. */
|
|
||||||
adj_opcode = op_code - lh->opcode_base;
|
|
||||||
- address += (adj_opcode / lh->line_range)
|
|
||||||
- * lh->minimum_instruction_length;
|
|
||||||
+ address += (((op_index + (adj_opcode / lh->line_range))
|
|
||||||
+ / lh->maximum_ops_per_instruction)
|
|
||||||
+ * lh->minimum_instruction_length);
|
|
||||||
+ op_index = ((op_index + (adj_opcode / lh->line_range))
|
|
||||||
+ % lh->maximum_ops_per_instruction);
|
|
||||||
line += lh->line_base + (adj_opcode % lh->line_range);
|
|
||||||
if (lh->num_file_names < file || file == 0)
|
|
||||||
dwarf2_debug_line_missing_file_complaint ();
|
|
||||||
- else
|
|
||||||
+ /* For now we ignore lines not starting on an
|
|
||||||
+ instruction boundary. */
|
|
||||||
+ else if (op_index == 0)
|
|
||||||
{
|
|
||||||
lh->file_names[file - 1].included_p = 1;
|
|
||||||
if (!decode_for_pst_p && is_stmt)
|
|
||||||
@@ -8081,6 +8115,7 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
|
|
||||||
break;
|
|
||||||
case DW_LNE_set_address:
|
|
||||||
address = read_address (abfd, line_ptr, cu, &bytes_read);
|
|
||||||
+ op_index = 0;
|
|
||||||
line_ptr += bytes_read;
|
|
||||||
address += baseaddr;
|
|
||||||
break;
|
|
||||||
@@ -8146,9 +8181,17 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
|
|
||||||
basic_block = 0;
|
|
||||||
break;
|
|
||||||
case DW_LNS_advance_pc:
|
|
||||||
- address += lh->minimum_instruction_length
|
|
||||||
- * read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
|
|
||||||
- line_ptr += bytes_read;
|
|
||||||
+ {
|
|
||||||
+ CORE_ADDR adjust
|
|
||||||
+ = read_unsigned_leb128 (abfd, line_ptr, &bytes_read);
|
|
||||||
+
|
|
||||||
+ address += (((op_index + adjust)
|
|
||||||
+ / lh->maximum_ops_per_instruction)
|
|
||||||
+ * lh->minimum_instruction_length);
|
|
||||||
+ op_index = ((op_index + adjust)
|
|
||||||
+ % lh->maximum_ops_per_instruction);
|
|
||||||
+ line_ptr += bytes_read;
|
|
||||||
+ }
|
|
||||||
break;
|
|
||||||
case DW_LNS_advance_line:
|
|
||||||
line += read_signed_leb128 (abfd, line_ptr, &bytes_read);
|
|
||||||
@@ -8195,11 +8238,19 @@ dwarf_decode_lines (struct line_header *lh, char *comp_dir, bfd *abfd,
|
|
||||||
instruction length since special opcode 255 would have
|
|
||||||
scaled the the increment. */
|
|
||||||
case DW_LNS_const_add_pc:
|
|
||||||
- address += (lh->minimum_instruction_length
|
|
||||||
- * ((255 - lh->opcode_base) / lh->line_range));
|
|
||||||
+ {
|
|
||||||
+ CORE_ADDR adjust = (255 - lh->opcode_base) / lh->line_range;
|
|
||||||
+
|
|
||||||
+ address += (((op_index + adjust)
|
|
||||||
+ / lh->maximum_ops_per_instruction)
|
|
||||||
+ * lh->minimum_instruction_length);
|
|
||||||
+ op_index = ((op_index + adjust)
|
|
||||||
+ % lh->maximum_ops_per_instruction);
|
|
||||||
+ }
|
|
||||||
break;
|
|
||||||
case DW_LNS_fixed_advance_pc:
|
|
||||||
address += read_2_bytes (abfd, line_ptr);
|
|
||||||
+ op_index = 0;
|
|
||||||
line_ptr += 2;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
@@ -8761,6 +8812,7 @@ dwarf2_const_value (struct attribute *attr, struct symbol *sym,
|
|
||||||
case DW_FORM_block2:
|
|
||||||
case DW_FORM_block4:
|
|
||||||
case DW_FORM_block:
|
|
||||||
+ case DW_FORM_exprloc:
|
|
||||||
blk = DW_BLOCK (attr);
|
|
||||||
if (TYPE_LENGTH (SYMBOL_TYPE (sym)) != blk->size)
|
|
||||||
dwarf2_const_value_length_mismatch_complaint (SYMBOL_PRINT_NAME (sym),
|
|
||||||
@@ -10308,6 +10360,10 @@ dump_die_shallow (struct ui_file *f, int indent, struct die_info *die)
|
|
||||||
case DW_FORM_block1:
|
|
||||||
fprintf_unfiltered (f, "block: size %d", DW_BLOCK (&die->attrs[i])->size);
|
|
||||||
break;
|
|
||||||
+ case DW_FORM_exprloc:
|
|
||||||
+ fprintf_unfiltered (f, "expression: size %u",
|
|
||||||
+ DW_BLOCK (&die->attrs[i])->size);
|
|
||||||
+ break;
|
|
||||||
case DW_FORM_ref1:
|
|
||||||
case DW_FORM_ref2:
|
|
||||||
case DW_FORM_ref4:
|
|
||||||
@@ -10323,6 +10379,10 @@ dump_die_shallow (struct ui_file *f, int indent, struct die_info *die)
|
|
||||||
fprintf_unfiltered (f, "constant: %s",
|
|
||||||
pulongest (DW_UNSND (&die->attrs[i])));
|
|
||||||
break;
|
|
||||||
+ case DW_FORM_sec_offset:
|
|
||||||
+ fprintf_unfiltered (f, "section offset: %s",
|
|
||||||
+ pulongest (DW_UNSND (&die->attrs[i])));
|
|
||||||
+ break;
|
|
||||||
case DW_FORM_sig8:
|
|
||||||
if (DW_SIGNATURED_TYPE (&die->attrs[i]) != NULL)
|
|
||||||
fprintf_unfiltered (f, "signatured type, offset: 0x%x",
|
|
||||||
@@ -10343,6 +10403,9 @@ dump_die_shallow (struct ui_file *f, int indent, struct die_info *die)
|
|
||||||
else
|
|
||||||
fprintf_unfiltered (f, "flag: FALSE");
|
|
||||||
break;
|
|
||||||
+ case DW_FORM_flag_present:
|
|
||||||
+ fprintf_unfiltered (f, "flag: TRUE");
|
|
||||||
+ break;
|
|
||||||
case DW_FORM_indirect:
|
|
||||||
/* the reader will have reduced the indirect form to
|
|
||||||
the "base form" so this form should not occur */
|
|
||||||
@@ -11520,7 +11583,8 @@ attr_form_is_block (struct attribute *attr)
|
|
||||||
attr->form == DW_FORM_block1
|
|
||||||
|| attr->form == DW_FORM_block2
|
|
||||||
|| attr->form == DW_FORM_block4
|
|
||||||
- || attr->form == DW_FORM_block);
|
|
||||||
+ || attr->form == DW_FORM_block
|
|
||||||
+ || attr->form == DW_FORM_exprloc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return non-zero if ATTR's value is a section offset --- classes
|
|
||||||
@@ -11535,7 +11599,8 @@ static int
|
|
||||||
attr_form_is_section_offset (struct attribute *attr)
|
|
||||||
{
|
|
||||||
return (attr->form == DW_FORM_data4
|
|
||||||
- || attr->form == DW_FORM_data8);
|
|
||||||
+ || attr->form == DW_FORM_data8
|
|
||||||
+ || attr->form == DW_FORM_sec_offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
@ -1,56 +0,0 @@
|
|||||||
commit 669907bd6d54ae8e85b1278f0f16f8641ce6802d
|
|
||||||
Author: Tom Tromey <tromey@redhat.com>
|
|
||||||
Date: Tue Apr 20 21:19:07 2010 +0000
|
|
||||||
|
|
||||||
* dwarf2read.c (dwarf2_compute_name): Handle DW_AT_linkage_name.
|
|
||||||
(read_partial_die): Likewise.
|
|
||||||
(dwarf_attr_name): Likewise.
|
|
||||||
|
|
||||||
### a/gdb/ChangeLog
|
|
||||||
### b/gdb/ChangeLog
|
|
||||||
## -1,3 +1,9 @@
|
|
||||||
+2010-04-20 Tom Tromey <tromey@redhat.com>
|
|
||||||
+
|
|
||||||
+ * dwarf2read.c (dwarf2_compute_name): Handle DW_AT_linkage_name.
|
|
||||||
+ (read_partial_die): Likewise.
|
|
||||||
+ (dwarf_attr_name): Likewise.
|
|
||||||
+
|
|
||||||
2010-04-20 Chris Moller <cmoller@redhat.com>
|
|
||||||
|
|
||||||
PR 10867
|
|
||||||
--- gdb-7.1/gdb/dwarf2read.c.orig 2010-06-09 14:38:01.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/dwarf2read.c 2010-06-09 14:49:53.000000000 +0200
|
|
||||||
@@ -7675,7 +7675,11 @@ read_partial_die (struct partial_die_inf
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
+ case DW_AT_linkage_name:
|
|
||||||
case DW_AT_MIPS_linkage_name:
|
|
||||||
+ /* Note that both forms of linkage name might appear. We
|
|
||||||
+ assume they will be the same, and we only store the last
|
|
||||||
+ one we see. */
|
|
||||||
if (cu->language == language_ada)
|
|
||||||
part_die->name = DW_STRING (&attr);
|
|
||||||
break;
|
|
||||||
@@ -10167,7 +10171,11 @@ dwarf2_name (struct die_info *die, struc
|
|
||||||
struct attribute *attr = NULL;
|
|
||||||
|
|
||||||
if (cu->language == language_ada)
|
|
||||||
- attr = dwarf2_attr (die, DW_AT_MIPS_linkage_name, cu);
|
|
||||||
+ {
|
|
||||||
+ attr = dwarf2_attr (die, DW_AT_linkage_name, cu);
|
|
||||||
+ if (attr == NULL)
|
|
||||||
+ attr = dwarf2_attr (die, DW_AT_MIPS_linkage_name, cu);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (!attr)
|
|
||||||
attr = dwarf2_attr (die, DW_AT_name, cu);
|
|
||||||
@@ -10555,6 +10563,8 @@ dwarf_attr_name (unsigned attr)
|
|
||||||
/* DWARF 4 values. */
|
|
||||||
case DW_AT_signature:
|
|
||||||
return "DW_AT_signature";
|
|
||||||
+ case DW_AT_linkage_name:
|
|
||||||
+ return "DW_AT_linkage_name";
|
|
||||||
/* SGI/MIPS extensions. */
|
|
||||||
#ifdef MIPS /* collides with DW_AT_HP_block_index */
|
|
||||||
case DW_AT_MIPS_fde:
|
|
@ -1,274 +0,0 @@
|
|||||||
commit f49f91e9c3eaba847f75f5c46e77e261a76d9a9b
|
|
||||||
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
Date: Mon Jun 28 20:35:51 2010 +0000
|
|
||||||
|
|
||||||
gdb/
|
|
||||||
* cp-namespace.c (cp_lookup_nested_type): New variable
|
|
||||||
concatenated_name. Turn the current return condition into a reverse
|
|
||||||
one. Call also lookup_static_symbol_aux on the constructed qualified
|
|
||||||
name.
|
|
||||||
* symtab.c (lookup_symbol_aux): Move variable objfile and searching in
|
|
||||||
other files into a called ...
|
|
||||||
(lookup_static_symbol_aux): ... new function here.
|
|
||||||
* symtab.h (lookup_static_symbol_aux): New prototype.
|
|
||||||
* valops.c (value_maybe_namespace_elt): Call also
|
|
||||||
lookup_static_symbol_aux if we failed otherwise.
|
|
||||||
|
|
||||||
gdb/testsuite/
|
|
||||||
* gdb.cp/namespace.exp (whatis C::cOtherFileType)
|
|
||||||
(whatis ::C::cOtherFileType, whatis C::cOtherFileVar)
|
|
||||||
(whatis ::C::cOtherFileVar, print C::cOtherFileVar)
|
|
||||||
(print ::C::cOtherFileVar)
|
|
||||||
(whatis C::OtherFileClass::cOtherFileClassType)
|
|
||||||
(whatis ::C::OtherFileClass::cOtherFileClassType)
|
|
||||||
(print C::OtherFileClass::cOtherFileClassVar)
|
|
||||||
(print ::cOtherFileClassVar)
|
|
||||||
(print ::C::OtherFileClass::cOtherFileClassVar): New tests.
|
|
||||||
(ptype OtherFileClass, ptype ::C::OtherFileClass): Permit arbitrary
|
|
||||||
trailing content.
|
|
||||||
* gdb.cp/namespace1.cc (C::OtherFileClass::cOtherFileClassType)
|
|
||||||
(C::OtherFileClass::cOtherFileClassVar)
|
|
||||||
(C::OtherFileClass::cOtherFileClassVar_use, C::cOtherFileType)
|
|
||||||
(C::cOtherFileVar, C::cOtherFileVar_use): New.
|
|
||||||
|
|
||||||
### a/gdb/ChangeLog
|
|
||||||
### b/gdb/ChangeLog
|
|
||||||
## -1,5 +1,18 @@
|
|
||||||
2010-06-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
+ * cp-namespace.c (cp_lookup_nested_type): New variable
|
|
||||||
+ concatenated_name. Turn the current return condition into a reverse
|
|
||||||
+ one. Call also lookup_static_symbol_aux on the constructed qualified
|
|
||||||
+ name.
|
|
||||||
+ * symtab.c (lookup_symbol_aux): Move variable objfile and searching in
|
|
||||||
+ other files into a called ...
|
|
||||||
+ (lookup_static_symbol_aux): ... new function here.
|
|
||||||
+ * symtab.h (lookup_static_symbol_aux): New prototype.
|
|
||||||
+ * valops.c (value_maybe_namespace_elt): Call also
|
|
||||||
+ lookup_static_symbol_aux if we failed otherwise.
|
|
||||||
+
|
|
||||||
+2010-06-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
+
|
|
||||||
Fix PR c++/11703 and PR gdb/1448.
|
|
||||||
* c-exp.y (yylex) <last_was_coloncolon && first_was_coloncolon>: Add
|
|
||||||
FIRST_ITER check.
|
|
||||||
Index: gdb-7.1/gdb/cp-namespace.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/cp-namespace.c 2010-06-29 17:54:17.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/cp-namespace.c 2010-06-29 17:59:32.000000000 +0200
|
|
||||||
@@ -585,10 +585,24 @@ cp_lookup_nested_type (struct type *pare
|
|
||||||
nested_name,
|
|
||||||
block,
|
|
||||||
VAR_DOMAIN);
|
|
||||||
- if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF)
|
|
||||||
- return NULL;
|
|
||||||
- else
|
|
||||||
+ char *concatenated_name;
|
|
||||||
+
|
|
||||||
+ if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
|
|
||||||
+ return SYMBOL_TYPE (sym);
|
|
||||||
+
|
|
||||||
+ /* Now search all static file-level symbols. Not strictly correct,
|
|
||||||
+ but more useful than an error. We do not try to guess any imported
|
|
||||||
+ namespace as even the fully specified namespace seach is is already
|
|
||||||
+ not C++ compliant and more assumptions could make it too magic. */
|
|
||||||
+
|
|
||||||
+ concatenated_name = alloca (strlen (parent_name) + 2
|
|
||||||
+ + strlen (nested_name) + 1);
|
|
||||||
+ sprintf (concatenated_name, "%s::%s", parent_name, nested_name);
|
|
||||||
+ sym = lookup_static_symbol_aux (concatenated_name, VAR_DOMAIN);
|
|
||||||
+ if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
|
|
||||||
return SYMBOL_TYPE (sym);
|
|
||||||
+
|
|
||||||
+ return NULL;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
internal_error (__FILE__, __LINE__,
|
|
||||||
Index: gdb-7.1/gdb/symtab.h
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/symtab.h 2010-06-29 17:54:16.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/symtab.h 2010-06-29 18:00:37.000000000 +0200
|
|
||||||
@@ -1036,6 +1036,12 @@ extern struct partial_symbol *lookup_par
|
|
||||||
const char *, int,
|
|
||||||
domain_enum);
|
|
||||||
|
|
||||||
+/* Lookup a symbol only in the file static scope of all the objfiles. */
|
|
||||||
+
|
|
||||||
+struct symbol *lookup_static_symbol_aux (const char *name,
|
|
||||||
+ const domain_enum domain);
|
|
||||||
+
|
|
||||||
+
|
|
||||||
/* lookup a symbol by name, within a specified block */
|
|
||||||
|
|
||||||
extern struct symbol *lookup_block_symbol (const struct block *, const char *,
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.cp/namespace.exp
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/testsuite/gdb.cp/namespace.exp 2010-06-29 17:54:11.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.cp/namespace.exp 2010-06-29 18:17:17.000000000 +0200
|
|
||||||
@@ -217,6 +217,70 @@ gdb_expect {
|
|
||||||
gdb_test "break BBB::Class::xyzq" \
|
|
||||||
"Breakpoint.*at $hex: file.*namespace.cc, line 68\\."
|
|
||||||
|
|
||||||
+# Tests accessing static elements in namespace of other file.
|
|
||||||
+
|
|
||||||
+gdb_test "whatis C::cOtherFileType" "type = short"
|
|
||||||
+gdb_test "whatis ::C::cOtherFileType" "type = short"
|
|
||||||
+gdb_test "whatis C::cOtherFileVar" "type = const C::cOtherFileType"
|
|
||||||
+gdb_test "whatis ::C::cOtherFileVar" "type = const C::cOtherFileType"
|
|
||||||
+gdb_test "print C::cOtherFileVar" "\\$\[0-9\].* = 319"
|
|
||||||
+gdb_test "print ::C::cOtherFileVar" "\\$\[0-9\].* = 319"
|
|
||||||
+
|
|
||||||
+if {[test_compiler_info {gcc-[0-3]-*}]
|
|
||||||
+ || [test_compiler_info {gcc-4-[0-4]-*}]} {
|
|
||||||
+ # The type in class is missing in older GCCs.
|
|
||||||
+ setup_xfail *-*-*
|
|
||||||
+}
|
|
||||||
+gdb_test "whatis C::OtherFileClass::cOtherFileClassType" "type = short"
|
|
||||||
+if {[test_compiler_info {gcc-[0-3]-*}]
|
|
||||||
+ || [test_compiler_info {gcc-4-[0-4]-*}]} {
|
|
||||||
+ # The type in class is missing in older GCCs.
|
|
||||||
+ setup_xfail *-*-*
|
|
||||||
+}
|
|
||||||
+gdb_test "whatis ::C::OtherFileClass::cOtherFileClassType" "type = short"
|
|
||||||
+
|
|
||||||
+set test "print C::OtherFileClass::cOtherFileClassVar"
|
|
||||||
+gdb_test_multiple $test $test {
|
|
||||||
+ -re "\\$\[0-9\].* = 318\r\n$gdb_prompt $" {
|
|
||||||
+ pass $test
|
|
||||||
+ }
|
|
||||||
+ -re "static field cOtherFileClassVar has been optimized out\r\n$gdb_prompt $" {
|
|
||||||
+ setup_kfail "c++/11702" "*-*-*"
|
|
||||||
+ fail $test
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+# FSF GCC <=4.4 creates unqualified DIE "cOtherFileClassVar" ignoring the
|
|
||||||
+# namespace the same way older GDB did.
|
|
||||||
+set test "print ::cOtherFileClassVar"
|
|
||||||
+set test2 "print ::C::OtherFileClass::cOtherFileClassVar"
|
|
||||||
+gdb_test_multiple $test $test {
|
|
||||||
+ -re "No symbol \"cOtherFileClassVar\" in current context\\.\r\n$gdb_prompt $" {
|
|
||||||
+ pass $test
|
|
||||||
+
|
|
||||||
+ gdb_test_multiple $test2 $test2 {
|
|
||||||
+ -re "\\$\[0-9\].* = 318\r\n$gdb_prompt $" {
|
|
||||||
+ pass $test2
|
|
||||||
+ }
|
|
||||||
+ -re "static field cOtherFileClassVar has been optimized out\r\n$gdb_prompt $" {
|
|
||||||
+ setup_kfail "c++/11702" "*-*-*"
|
|
||||||
+ fail $test2
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ }
|
|
||||||
+ -re "\\$\[0-9\].* = 318\r\n$gdb_prompt $" {
|
|
||||||
+ if {[test_compiler_info {gcc-[0-3]-*}]
|
|
||||||
+ || [test_compiler_info {gcc-4-[0-4]-*}]} {
|
|
||||||
+ # Do not permit to XFAIL on recent GCCs.
|
|
||||||
+ setup_xfail *-*-*
|
|
||||||
+ }
|
|
||||||
+ fail $test
|
|
||||||
+
|
|
||||||
+ unresolved $test2
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
# Test to see if the appropriate namespaces are in scope when trying
|
|
||||||
# to print out stuff from within a function defined within a
|
|
||||||
# namespace.
|
|
||||||
@@ -260,7 +324,7 @@ gdb_test "ptype C::NestedClass" "No symb
|
|
||||||
# Tests involving multiple files
|
|
||||||
|
|
||||||
gdb_test "print cOtherFile" "\\$\[0-9\].* = 316"
|
|
||||||
-gdb_test "ptype OtherFileClass" "type = (class C::OtherFileClass \{\r\n public:|struct C::OtherFileClass \{)\r\n int z;\r\n\}"
|
|
||||||
+gdb_test "ptype OtherFileClass" "type = (class C::OtherFileClass \{\r\n public:|struct C::OtherFileClass \{)\r\n int z;\r\n.*\}"
|
|
||||||
cp_test_ptype_class \
|
|
||||||
"ptype ::C::OtherFileClass" "" "class" "C::OtherFileClass" \
|
|
||||||
{
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.cp/namespace1.cc
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/testsuite/gdb.cp/namespace1.cc 2010-01-01 08:32:01.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.cp/namespace1.cc 2010-06-29 17:56:42.000000000 +0200
|
|
||||||
@@ -21,7 +21,15 @@ namespace C
|
|
||||||
class OtherFileClass {
|
|
||||||
public:
|
|
||||||
int z;
|
|
||||||
+
|
|
||||||
+ typedef short cOtherFileClassType;
|
|
||||||
+ static const cOtherFileClassType cOtherFileClassVar = 318;
|
|
||||||
+ cOtherFileClassType cOtherFileClassVar_use ();
|
|
||||||
};
|
|
||||||
+ OtherFileClass::cOtherFileClassType OtherFileClass::cOtherFileClassVar_use ()
|
|
||||||
+ {
|
|
||||||
+ return cOtherFileClassVar;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
int cXOtherFile = 29;
|
|
||||||
@@ -35,6 +43,13 @@ namespace C
|
|
||||||
static OtherFileClass *c = new OtherFileClass();
|
|
||||||
c->z = cOtherFile + cXOtherFile;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ typedef short cOtherFileType;
|
|
||||||
+ static const cOtherFileType cOtherFileVar = 319;
|
|
||||||
+ cOtherFileType cOtherFileVar_use ()
|
|
||||||
+ {
|
|
||||||
+ return cOtherFileVar;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
Index: gdb-7.1/gdb/valops.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/valops.c 2010-06-29 17:54:16.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/valops.c 2010-06-29 18:15:00.000000000 +0200
|
|
||||||
@@ -3253,9 +3253,17 @@ value_maybe_namespace_elt (const struct
|
|
||||||
struct symbol *sym;
|
|
||||||
struct value *result;
|
|
||||||
|
|
||||||
- sym = cp_lookup_symbol_namespace(namespace_name, name,
|
|
||||||
- get_selected_block (0),
|
|
||||||
- VAR_DOMAIN);
|
|
||||||
+ sym = cp_lookup_symbol_namespace (namespace_name, name,
|
|
||||||
+ get_selected_block (0), VAR_DOMAIN);
|
|
||||||
+
|
|
||||||
+ if (sym == NULL)
|
|
||||||
+ {
|
|
||||||
+ char *concatenated_name = alloca (strlen (namespace_name) + 2
|
|
||||||
+ + strlen (name) + 1);
|
|
||||||
+
|
|
||||||
+ sprintf (concatenated_name, "%s::%s", namespace_name, name);
|
|
||||||
+ sym = lookup_static_symbol_aux (concatenated_name, VAR_DOMAIN);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (sym == NULL)
|
|
||||||
return NULL;
|
|
||||||
--- a/gdb/symtab.c
|
|
||||||
+++ b/gdb/symtab.c
|
|
||||||
@@ -1122,10 +1121,21 @@ lookup_symbol_aux (const char *name, const struct block *block,
|
|
||||||
return sym;
|
|
||||||
|
|
||||||
/* Now search all static file-level symbols. Not strictly correct,
|
|
||||||
- but more useful than an error. Do the symtabs first, then check
|
|
||||||
- the psymtabs. If a psymtab indicates the existence of the
|
|
||||||
- desired name as a file-level static, then do psymtab-to-symtab
|
|
||||||
- conversion on the fly and return the found symbol. */
|
|
||||||
+ but more useful than an error. */
|
|
||||||
+
|
|
||||||
+ return lookup_static_symbol_aux (name, domain);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* Search all static file-level symbols for NAME from DOMAIN. Do the symtabs
|
|
||||||
+ first, then check the psymtabs. If a psymtab indicates the existence of the
|
|
||||||
+ desired name as a file-level static, then do psymtab-to-symtab conversion on
|
|
||||||
+ the fly and return the found symbol. */
|
|
||||||
+
|
|
||||||
+struct symbol *
|
|
||||||
+lookup_static_symbol_aux (const char *name, const domain_enum domain)
|
|
||||||
+{
|
|
||||||
+ struct objfile *objfile;
|
|
||||||
+ struct symbol *sym;
|
|
||||||
|
|
||||||
sym = lookup_symbol_aux_symtabs (STATIC_BLOCK, name, domain);
|
|
||||||
if (sym != NULL)
|
|
@ -1,308 +0,0 @@
|
|||||||
commit 758a1f7149cb7469c7e6bb30cb572715ee90a6e8
|
|
||||||
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
Date: Mon Jun 28 20:39:27 2010 +0000
|
|
||||||
|
|
||||||
gdb/
|
|
||||||
* c-typeprint.c (c_type_print_base): For no fields check include also
|
|
||||||
TYPE_TYPEDEF_FIELD_COUNT. Print new typedefs section.
|
|
||||||
* dwarf2read.c (struct typedef_field_list)
|
|
||||||
(struct field_info) <typedef_field_list, typedef_field_list_count>: New.
|
|
||||||
(dwarf2_add_typedef): New.
|
|
||||||
(read_structure_type): Call dwarf2_add_typedef for DW_TAG_typedef.
|
|
||||||
Copy also FI.TYPEDEF_FIELD_LIST.
|
|
||||||
* gdbtypes.h (struct typedef_field)
|
|
||||||
(struct cplus_struct_type) <typedef_field, typedef_field_count>
|
|
||||||
(TYPE_TYPEDEF_FIELD_ARRAY, TYPE_TYPEDEF_FIELD, TYPE_TYPEDEF_FIELD_NAME)
|
|
||||||
(TYPE_TYPEDEF_FIELD_TYPE, TYPE_TYPEDEF_FIELD_COUNT): New.
|
|
||||||
|
|
||||||
gdb/testsuite/
|
|
||||||
* gdb.cp/namespace.exp (ptype OtherFileClass typedefs)
|
|
||||||
(ptype ::C::OtherFileClass typedefs): New.
|
|
||||||
* gdb.cp/namespace1.cc (C::OtherFileClass::cOtherFileClassType2)
|
|
||||||
(C::OtherFileClass::cOtherFileClassVar2): New.
|
|
||||||
(C::OtherFileClass::cOtherFileClassVar_use): Use also
|
|
||||||
cOtherFileClassVar2.
|
|
||||||
(C::cOtherFileType2, C::cOtherFileVar2): New.
|
|
||||||
(C::cOtherFileVar_use): use also cOtherFileVar2.
|
|
||||||
* gdb.cp/userdef.exp (ptype &*c): Permit arbitrary trailing text.
|
|
||||||
|
|
||||||
### a/gdb/ChangeLog
|
|
||||||
### b/gdb/ChangeLog
|
|
||||||
## -1,5 +1,19 @@
|
|
||||||
2010-06-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
+ * c-typeprint.c (c_type_print_base): For no fields check include also
|
|
||||||
+ TYPE_TYPEDEF_FIELD_COUNT. Print new typedefs section.
|
|
||||||
+ * dwarf2read.c (struct typedef_field_list)
|
|
||||||
+ (struct field_info) <typedef_field_list, typedef_field_list_count>: New.
|
|
||||||
+ (dwarf2_add_typedef): New.
|
|
||||||
+ (read_structure_type): Call dwarf2_add_typedef for DW_TAG_typedef.
|
|
||||||
+ Copy also FI.TYPEDEF_FIELD_LIST.
|
|
||||||
+ * gdbtypes.h (struct typedef_field)
|
|
||||||
+ (struct cplus_struct_type) <typedef_field, typedef_field_count>
|
|
||||||
+ (TYPE_TYPEDEF_FIELD_ARRAY, TYPE_TYPEDEF_FIELD, TYPE_TYPEDEF_FIELD_NAME)
|
|
||||||
+ (TYPE_TYPEDEF_FIELD_TYPE, TYPE_TYPEDEF_FIELD_COUNT): New.
|
|
||||||
+
|
|
||||||
+2010-06-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
+
|
|
||||||
* cp-namespace.c (cp_lookup_nested_type): New variable
|
|
||||||
concatenated_name. Turn the current return condition into a reverse
|
|
||||||
one. Call also lookup_static_symbol_aux on the constructed qualified
|
|
||||||
Index: gdb-7.1/gdb/c-typeprint.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/c-typeprint.c 2010-06-29 17:54:09.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/c-typeprint.c 2010-06-29 18:17:48.000000000 +0200
|
|
||||||
@@ -774,7 +774,8 @@ c_type_print_base (struct type *type, st
|
|
||||||
cp_type_print_derivation_info (stream, type);
|
|
||||||
|
|
||||||
fprintf_filtered (stream, "{\n");
|
|
||||||
- if ((TYPE_NFIELDS (type) == 0) && (TYPE_NFN_FIELDS (type) == 0))
|
|
||||||
+ if (TYPE_NFIELDS (type) == 0 && TYPE_NFN_FIELDS (type) == 0
|
|
||||||
+ && TYPE_TYPEDEF_FIELD_COUNT (type) == 0)
|
|
||||||
{
|
|
||||||
if (TYPE_STUB (type))
|
|
||||||
fprintfi_filtered (level + 4, stream, _("<incomplete type>\n"));
|
|
||||||
@@ -1060,6 +1061,29 @@ c_type_print_base (struct type *type, st
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* Print typedefs defined in this class. */
|
|
||||||
+
|
|
||||||
+ if (TYPE_TYPEDEF_FIELD_COUNT (type) != 0)
|
|
||||||
+ {
|
|
||||||
+ if (TYPE_NFIELDS (type) != 0 || TYPE_NFN_FIELDS (type) != 0)
|
|
||||||
+ fprintf_filtered (stream, "\n");
|
|
||||||
+
|
|
||||||
+ for (i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); i++)
|
|
||||||
+ {
|
|
||||||
+ struct type *target = TYPE_TYPEDEF_FIELD_TYPE (type, i);
|
|
||||||
+
|
|
||||||
+ /* Dereference the typedef declaration itself. */
|
|
||||||
+ gdb_assert (TYPE_CODE (target) == TYPE_CODE_TYPEDEF);
|
|
||||||
+ target = TYPE_TARGET_TYPE (target);
|
|
||||||
+
|
|
||||||
+ print_spaces_filtered (level + 4, stream);
|
|
||||||
+ fprintf_filtered (stream, "typedef ");
|
|
||||||
+ c_print_type (target, (char *) TYPE_TYPEDEF_FIELD_NAME (type, i),
|
|
||||||
+ stream, show - 1, level + 4);
|
|
||||||
+ fprintf_filtered (stream, ";\n");
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
fprintfi_filtered (level, stream, "}");
|
|
||||||
|
|
||||||
if (TYPE_LOCALTYPE_PTR (type) && show >= 0)
|
|
||||||
Index: gdb-7.1/gdb/dwarf2read.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/dwarf2read.c 2010-06-29 17:54:28.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/dwarf2read.c 2010-06-29 18:17:48.000000000 +0200
|
|
||||||
@@ -722,6 +722,16 @@ struct field_info
|
|
||||||
|
|
||||||
/* Number of entries in the fnfieldlists array. */
|
|
||||||
int nfnfields;
|
|
||||||
+
|
|
||||||
+ /* typedefs defined inside this class. TYPEDEF_FIELD_LIST contains head of
|
|
||||||
+ a NULL terminated list of TYPEDEF_FIELD_LIST_COUNT elements. */
|
|
||||||
+ struct typedef_field_list
|
|
||||||
+ {
|
|
||||||
+ struct typedef_field field;
|
|
||||||
+ struct typedef_field_list *next;
|
|
||||||
+ }
|
|
||||||
+ *typedef_field_list;
|
|
||||||
+ unsigned typedef_field_list_count;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* One item on the queue of compilation units to read in full symbols
|
|
||||||
@@ -5075,6 +5085,39 @@ dwarf2_add_field (struct field_info *fip
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Add a typedef defined in the scope of the FIP's class. */
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+dwarf2_add_typedef (struct field_info *fip, struct die_info *die,
|
|
||||||
+ struct dwarf2_cu *cu)
|
|
||||||
+{
|
|
||||||
+ struct objfile *objfile = cu->objfile;
|
|
||||||
+ struct gdbarch *gdbarch = get_objfile_arch (objfile);
|
|
||||||
+ struct typedef_field_list *new_field;
|
|
||||||
+ struct attribute *attr;
|
|
||||||
+ struct typedef_field *fp;
|
|
||||||
+ char *fieldname = "";
|
|
||||||
+
|
|
||||||
+ /* Allocate a new field list entry and link it in. */
|
|
||||||
+ new_field = xzalloc (sizeof (*new_field));
|
|
||||||
+ make_cleanup (xfree, new_field);
|
|
||||||
+
|
|
||||||
+ gdb_assert (die->tag == DW_TAG_typedef);
|
|
||||||
+
|
|
||||||
+ fp = &new_field->field;
|
|
||||||
+
|
|
||||||
+ /* Get name of field. */
|
|
||||||
+ fp->name = dwarf2_name (die, cu);
|
|
||||||
+ if (fp->name == NULL)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
+ fp->type = read_type_die (die, cu);
|
|
||||||
+
|
|
||||||
+ new_field->next = fip->typedef_field_list;
|
|
||||||
+ fip->typedef_field_list = new_field;
|
|
||||||
+ fip->typedef_field_list_count++;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* Create the vector of fields, and attach it to the type. */
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -5600,6 +5643,8 @@ read_structure_type (struct die_info *di
|
|
||||||
/* C++ base class field. */
|
|
||||||
dwarf2_add_field (&fi, child_die, cu);
|
|
||||||
}
|
|
||||||
+ else if (child_die->tag == DW_TAG_typedef)
|
|
||||||
+ dwarf2_add_typedef (&fi, child_die, cu);
|
|
||||||
child_die = sibling_die (child_die);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -5673,6 +5718,28 @@ read_structure_type (struct die_info *di
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ /* Copy fi.typedef_field_list linked list elements content into the
|
|
||||||
+ allocated array TYPE_TYPEDEF_FIELD_ARRAY (type). */
|
|
||||||
+ if (fi.typedef_field_list)
|
|
||||||
+ {
|
|
||||||
+ int i = fi.typedef_field_list_count;
|
|
||||||
+
|
|
||||||
+ TYPE_TYPEDEF_FIELD_ARRAY (type)
|
|
||||||
+ = TYPE_ALLOC (type, sizeof (TYPE_TYPEDEF_FIELD (type, 0)) * i);
|
|
||||||
+ TYPE_TYPEDEF_FIELD_COUNT (type) = i;
|
|
||||||
+
|
|
||||||
+ /* Reverse the list order to keep the debug info elements order. */
|
|
||||||
+ while (--i >= 0)
|
|
||||||
+ {
|
|
||||||
+ struct typedef_field *dest, *src;
|
|
||||||
+
|
|
||||||
+ dest = &TYPE_TYPEDEF_FIELD (type, i);
|
|
||||||
+ src = &fi.typedef_field_list->field;
|
|
||||||
+ fi.typedef_field_list = fi.typedef_field_list->next;
|
|
||||||
+ *dest = *src;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
quirk_gcc_member_function_pointer (type, cu->objfile);
|
|
||||||
Index: gdb-7.1/gdb/gdbtypes.h
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/gdbtypes.h 2010-06-29 17:54:17.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/gdbtypes.h 2010-06-29 18:18:29.000000000 +0200
|
|
||||||
@@ -948,6 +948,19 @@ struct cplus_struct_type
|
|
||||||
member functions or virtual base classes. Minus one if not
|
|
||||||
dynamic. Zero if not yet computed. */
|
|
||||||
int is_dynamic : 2;
|
|
||||||
+
|
|
||||||
+ /* typedefs defined inside this class. TYPEDEF_FIELD points to an array of
|
|
||||||
+ TYPEDEF_FIELD_COUNT elements. */
|
|
||||||
+ struct typedef_field
|
|
||||||
+ {
|
|
||||||
+ /* Unqualified name to be prefixed by owning class qualified name. */
|
|
||||||
+ const char *name;
|
|
||||||
+
|
|
||||||
+ /* Type this typedef named NAME represents. */
|
|
||||||
+ struct type *type;
|
|
||||||
+ }
|
|
||||||
+ *typedef_field;
|
|
||||||
+ unsigned typedef_field_count;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Struct used for ranking a function for overload resolution */
|
|
||||||
@@ -1182,6 +1195,17 @@ extern void allocate_gnat_aux_type (stru
|
|
||||||
#define TYPE_LOCALTYPE_FILE(thistype) (TYPE_CPLUS_SPECIFIC(thistype)->localtype_ptr->file)
|
|
||||||
#define TYPE_LOCALTYPE_LINE(thistype) (TYPE_CPLUS_SPECIFIC(thistype)->localtype_ptr->line)
|
|
||||||
|
|
||||||
+#define TYPE_TYPEDEF_FIELD_ARRAY(thistype) \
|
|
||||||
+ TYPE_CPLUS_SPECIFIC (thistype)->typedef_field
|
|
||||||
+#define TYPE_TYPEDEF_FIELD(thistype, n) \
|
|
||||||
+ TYPE_CPLUS_SPECIFIC (thistype)->typedef_field[n]
|
|
||||||
+#define TYPE_TYPEDEF_FIELD_NAME(thistype, n) \
|
|
||||||
+ TYPE_TYPEDEF_FIELD (thistype, n).name
|
|
||||||
+#define TYPE_TYPEDEF_FIELD_TYPE(thistype, n) \
|
|
||||||
+ TYPE_TYPEDEF_FIELD (thistype, n).type
|
|
||||||
+#define TYPE_TYPEDEF_FIELD_COUNT(thistype) \
|
|
||||||
+ TYPE_CPLUS_SPECIFIC (thistype)->typedef_field_count
|
|
||||||
+
|
|
||||||
#define TYPE_IS_OPAQUE(thistype) (((TYPE_CODE (thistype) == TYPE_CODE_STRUCT) || \
|
|
||||||
(TYPE_CODE (thistype) == TYPE_CODE_UNION)) && \
|
|
||||||
(TYPE_NFIELDS (thistype) == 0) && \
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.cp/namespace.exp
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/testsuite/gdb.cp/namespace.exp 2010-06-29 18:17:17.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.cp/namespace.exp 2010-06-29 18:18:58.000000000 +0200
|
|
||||||
@@ -332,6 +332,21 @@ cp_test_ptype_class \
|
|
||||||
}
|
|
||||||
gdb_test "ptype C::OtherFileClass" "No symbol \"OtherFileClass\" in namespace \"C::C\"."
|
|
||||||
|
|
||||||
+# Test class typedefs printing.
|
|
||||||
+set expect "type = class C::OtherFileClass \{\r\n.*\r\n *typedef short cOtherFileClassType;\r\n *typedef long cOtherFileClassType2;\r\n\}"
|
|
||||||
+if {[test_compiler_info {gcc-[0-3]-*}]
|
|
||||||
+ || [test_compiler_info {gcc-4-[0-4]-*}]} {
|
|
||||||
+ # The type in class is missing in older GCCs.
|
|
||||||
+ setup_xfail *-*-*
|
|
||||||
+}
|
|
||||||
+gdb_test "ptype OtherFileClass" $expect "ptype OtherFileClass typedefs"
|
|
||||||
+if {[test_compiler_info {gcc-[0-3]-*}]
|
|
||||||
+ || [test_compiler_info {gcc-4-[0-4]-*}]} {
|
|
||||||
+ # The type in class is missing in older GCCs.
|
|
||||||
+ setup_xfail *-*-*
|
|
||||||
+}
|
|
||||||
+gdb_test "ptype ::C::OtherFileClass" $expect "ptype ::C::OtherFileClass typedefs"
|
|
||||||
+
|
|
||||||
# Some anonymous namespace tests.
|
|
||||||
|
|
||||||
gdb_test "print cX" "\\$\[0-9\].* = 6"
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.cp/namespace1.cc
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/testsuite/gdb.cp/namespace1.cc 2010-06-29 17:56:42.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.cp/namespace1.cc 2010-06-29 18:17:48.000000000 +0200
|
|
||||||
@@ -23,12 +23,14 @@ namespace C
|
|
||||||
int z;
|
|
||||||
|
|
||||||
typedef short cOtherFileClassType;
|
|
||||||
+ typedef long cOtherFileClassType2;
|
|
||||||
static const cOtherFileClassType cOtherFileClassVar = 318;
|
|
||||||
+ static const cOtherFileClassType2 cOtherFileClassVar2 = 320;
|
|
||||||
cOtherFileClassType cOtherFileClassVar_use ();
|
|
||||||
};
|
|
||||||
OtherFileClass::cOtherFileClassType OtherFileClass::cOtherFileClassVar_use ()
|
|
||||||
{
|
|
||||||
- return cOtherFileClassVar;
|
|
||||||
+ return cOtherFileClassVar + cOtherFileClassVar2;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
@@ -45,10 +47,12 @@ namespace C
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef short cOtherFileType;
|
|
||||||
+ typedef long cOtherFileType2;
|
|
||||||
static const cOtherFileType cOtherFileVar = 319;
|
|
||||||
+ static const cOtherFileType2 cOtherFileVar2 = 321;
|
|
||||||
cOtherFileType cOtherFileVar_use ()
|
|
||||||
{
|
|
||||||
- return cOtherFileVar;
|
|
||||||
+ return cOtherFileVar + cOtherFileVar2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.cp/userdef.exp
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/testsuite/gdb.cp/userdef.exp 2010-06-29 17:54:11.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.cp/userdef.exp 2010-06-29 18:17:48.000000000 +0200
|
|
||||||
@@ -154,7 +154,7 @@ gdb_test "break A2::'operator +'" ".*Bre
|
|
||||||
gdb_test "print c" "\\\$\[0-9\]* = {m = {z = .*}}"
|
|
||||||
gdb_test "print *c" "\\\$\[0-9\]* = \\(Member &\\) @$hex: {z = .*}"
|
|
||||||
gdb_test "print &*c" "\\\$\[0-9\]* = \\(Member \\*\\) $hex"
|
|
||||||
-gdb_test "ptype &*c" "type = (struct|class) Member {(\[\r\n \]+public:)?\[\r\n \]+int z;\[\r\n\]+} &\\*"
|
|
||||||
+gdb_test "ptype &*c" "type = (struct|class) Member {(\[\r\n \]+public:)?\[\r\n \]+int z;\[\r\n\].*} &\\*"
|
|
||||||
|
|
||||||
gdb_test "print operator== (mem1, mem2)" " = false"
|
|
||||||
gdb_test "print operator== (mem1, mem1)" " = true"
|
|
@ -1,38 +0,0 @@
|
|||||||
commit 477c1359b217cdc052a7c9f83cae9c894396894c
|
|
||||||
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
Date: Mon Jun 28 22:03:31 2010 +0000
|
|
||||||
|
|
||||||
gdb/
|
|
||||||
* dwarf2read.c (read_structure_type) <fi.typedef_field_list>: Call
|
|
||||||
ALLOCATE_CPLUS_STRUCT_TYPE.
|
|
||||||
|
|
||||||
### a/gdb/ChangeLog
|
|
||||||
### b/gdb/ChangeLog
|
|
||||||
## -1,3 +1,8 @@
|
|
||||||
+2010-06-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
+
|
|
||||||
+ * dwarf2read.c (read_structure_type) <fi.typedef_field_list>: Call
|
|
||||||
+ ALLOCATE_CPLUS_STRUCT_TYPE.
|
|
||||||
+
|
|
||||||
2010-06-28 Phil Muldoon <pmuldoon@redhat.com>
|
|
||||||
Tom Tromey <tromey@redhat.com>
|
|
||||||
Thiago Jung Bauermann <bauerman@br.ibm.com>
|
|
||||||
## -27,8 +32,6 @@
|
|
||||||
* python/py-inferior.c: New File.
|
|
||||||
* python/py-infthread.c: New File.
|
|
||||||
|
|
||||||
-
|
|
||||||
-
|
|
||||||
2010-06-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* c-typeprint.c (c_type_print_base): For no fields check include also
|
|
||||||
--- a/gdb/dwarf2read.c
|
|
||||||
+++ b/gdb/dwarf2read.c
|
|
||||||
@@ -5327,6 +5327,7 @@ read_structure_type (struct die_info *die, struct dwarf2_cu *cu)
|
|
||||||
{
|
|
||||||
int i = fi.typedef_field_list_count;
|
|
||||||
|
|
||||||
+ ALLOCATE_CPLUS_STRUCT_TYPE (type);
|
|
||||||
TYPE_TYPEDEF_FIELD_ARRAY (type)
|
|
||||||
= TYPE_ALLOC (type, sizeof (TYPE_TYPEDEF_FIELD (type, 0)) * i);
|
|
||||||
TYPE_TYPEDEF_FIELD_COUNT (type) = i;
|
|
@ -1,26 +0,0 @@
|
|||||||
http://sourceware.org/ml/gdb-cvs/2010-06/msg00161.html
|
|
||||||
|
|
||||||
### src/gdb/ChangeLog 2010/06/24 15:17:24 1.11921
|
|
||||||
### src/gdb/ChangeLog 2010/06/24 18:24:02 1.11922
|
|
||||||
## -1,4 +1,10 @@
|
|
||||||
2010-06-24 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
+ Tom Tromey <tromey@redhat.com>
|
|
||||||
+
|
|
||||||
+ Fix GDB startup on readonly filesystem.
|
|
||||||
+ * charset.c (find_charset_names): Use PEX_USE_PIPES for pex_init.
|
|
||||||
+
|
|
||||||
+2010-06-24 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
Pedro Alves <pedro@codesourcery.com>
|
|
||||||
|
|
||||||
Fix PR 9436.
|
|
||||||
--- src/gdb/charset.c 2010/05/13 23:53:32 1.33
|
|
||||||
+++ src/gdb/charset.c 2010/06/24 18:24:03 1.34
|
|
||||||
@@ -794,7 +794,7 @@
|
|
||||||
set_in_environ (iconv_env, "LANGUAGE", "C");
|
|
||||||
set_in_environ (iconv_env, "LC_ALL", "C");
|
|
||||||
|
|
||||||
- child = pex_init (0, "iconv", NULL);
|
|
||||||
+ child = pex_init (PEX_USE_PIPES, "iconv", NULL);
|
|
||||||
|
|
||||||
args[0] = "iconv";
|
|
||||||
args[1] = "-l";
|
|
@ -1,214 +0,0 @@
|
|||||||
commit 78c144e8c3ae7bb36d632f6bfaaaad9c97199ce6
|
|
||||||
Author: cmoller <cmoller>
|
|
||||||
Date: Tue Apr 20 20:22:09 2010 +0000
|
|
||||||
|
|
||||||
PR 10867
|
|
||||||
* cp-valprint.c (global): Adding new static array recursion
|
|
||||||
detection obstack.
|
|
||||||
(cp_print_value_fields, cp_print_static_field): Added new static
|
|
||||||
array recursion detection code.
|
|
||||||
* gdb.cp/Makefile.in (EXECUTABLES): Added pr10687
|
|
||||||
* gdb.cp/pr10687.cc: New file.
|
|
||||||
* gdb.cp/pr10687.exp: New file
|
|
||||||
|
|
||||||
### a/gdb/ChangeLog
|
|
||||||
### b/gdb/ChangeLog
|
|
||||||
## -1,3 +1,12 @@
|
|
||||||
+2010-04-20 Chris Moller <cmoller@redhat.com>
|
|
||||||
+
|
|
||||||
+ PR 10867
|
|
||||||
+
|
|
||||||
+ * cp-valprint.c (global): Adding new static array recursion
|
|
||||||
+ detection obstack.
|
|
||||||
+ (cp_print_value_fields, cp_print_static_field): Added new static
|
|
||||||
+ array recursion detection code.
|
|
||||||
+
|
|
||||||
2010-04-20 Mark Kettenis <kettenis@gnu.org>
|
|
||||||
|
|
||||||
* i386-linux-tdep.c (i386_linux_regset_sections): Size of the
|
|
||||||
Index: gdb-7.1/gdb/cp-valprint.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/cp-valprint.c 2010-02-08 19:04:16.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/cp-valprint.c 2010-06-28 20:21:53.000000000 +0200
|
|
||||||
@@ -71,6 +71,7 @@ show_static_field_print (struct ui_file
|
|
||||||
|
|
||||||
static struct obstack dont_print_vb_obstack;
|
|
||||||
static struct obstack dont_print_statmem_obstack;
|
|
||||||
+static struct obstack dont_print_stat_array_obstack;
|
|
||||||
|
|
||||||
extern void _initialize_cp_valprint (void);
|
|
||||||
|
|
||||||
@@ -155,12 +156,17 @@ cp_print_value_fields (struct type *type
|
|
||||||
{
|
|
||||||
int i, len, n_baseclasses;
|
|
||||||
int fields_seen = 0;
|
|
||||||
+ static int last_set_recurse = -1;
|
|
||||||
|
|
||||||
CHECK_TYPEDEF (type);
|
|
||||||
|
|
||||||
- if (recurse == 0
|
|
||||||
- && obstack_object_size (&dont_print_statmem_obstack) > 0)
|
|
||||||
- obstack_free (&dont_print_statmem_obstack, NULL);
|
|
||||||
+ if (recurse == 0)
|
|
||||||
+ {
|
|
||||||
+ if (obstack_object_size (&dont_print_statmem_obstack) > 0)
|
|
||||||
+ obstack_free (&dont_print_statmem_obstack, NULL);
|
|
||||||
+ if (obstack_object_size (&dont_print_stat_array_obstack) > 0)
|
|
||||||
+ obstack_free (&dont_print_stat_array_obstack, NULL);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
fprintf_filtered (stream, "{");
|
|
||||||
len = TYPE_NFIELDS (type);
|
|
||||||
@@ -181,12 +187,20 @@ cp_print_value_fields (struct type *type
|
|
||||||
else
|
|
||||||
{
|
|
||||||
void *statmem_obstack_top = NULL;
|
|
||||||
+ void *stat_array_obstack_top = NULL;
|
|
||||||
|
|
||||||
if (dont_print_statmem == 0)
|
|
||||||
{
|
|
||||||
/* Set the current printed-statics stack top. */
|
|
||||||
statmem_obstack_top
|
|
||||||
= obstack_next_free (&dont_print_statmem_obstack);
|
|
||||||
+
|
|
||||||
+ if (last_set_recurse != recurse)
|
|
||||||
+ {
|
|
||||||
+ stat_array_obstack_top
|
|
||||||
+ = obstack_next_free (&dont_print_stat_array_obstack);
|
|
||||||
+ last_set_recurse = recurse;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = n_baseclasses; i < len; i++)
|
|
||||||
@@ -307,9 +321,16 @@ cp_print_value_fields (struct type *type
|
|
||||||
|
|
||||||
if (dont_print_statmem == 0)
|
|
||||||
{
|
|
||||||
- /* In effect, a pop of the printed-statics stack. */
|
|
||||||
if (obstack_object_size (&dont_print_statmem_obstack) > 0)
|
|
||||||
obstack_free (&dont_print_statmem_obstack, statmem_obstack_top);
|
|
||||||
+
|
|
||||||
+ if (last_set_recurse != recurse)
|
|
||||||
+ {
|
|
||||||
+ if (obstack_object_size (&dont_print_stat_array_obstack) > 0)
|
|
||||||
+ obstack_free (&dont_print_stat_array_obstack,
|
|
||||||
+ stat_array_obstack_top);
|
|
||||||
+ last_set_recurse = -1;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
if (options->pretty)
|
|
||||||
@@ -508,6 +529,7 @@ cp_print_static_field (struct type *type
|
|
||||||
const struct value_print_options *options)
|
|
||||||
{
|
|
||||||
struct value_print_options opts;
|
|
||||||
+
|
|
||||||
if (TYPE_CODE (type) == TYPE_CODE_STRUCT)
|
|
||||||
{
|
|
||||||
CORE_ADDR *first_dont_print;
|
|
||||||
@@ -542,6 +564,32 @@ cp_print_static_field (struct type *type
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
|
|
||||||
+ {
|
|
||||||
+ struct type **first_dont_print;
|
|
||||||
+ int i;
|
|
||||||
+ struct type *target_type = TYPE_TARGET_TYPE (type);
|
|
||||||
+
|
|
||||||
+ first_dont_print
|
|
||||||
+ = (struct type **) obstack_base (&dont_print_stat_array_obstack);
|
|
||||||
+ i = obstack_object_size (&dont_print_stat_array_obstack)
|
|
||||||
+ / sizeof (CORE_ADDR);
|
|
||||||
+
|
|
||||||
+ while (--i >= 0)
|
|
||||||
+ {
|
|
||||||
+ if (target_type == first_dont_print[i])
|
|
||||||
+ {
|
|
||||||
+ fputs_filtered ("<same as static member of an already"
|
|
||||||
+ " seen type>",
|
|
||||||
+ stream);
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ obstack_grow (&dont_print_stat_array_obstack, (char *) &target_type,
|
|
||||||
+ sizeof (struct type *));
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
opts = *options;
|
|
||||||
opts.deref_ref = 0;
|
|
||||||
val_print (type, value_contents_all (val),
|
|
||||||
@@ -672,6 +720,7 @@ Show printing of object's derived type b
|
|
||||||
show_objectprint,
|
|
||||||
&setprintlist, &showprintlist);
|
|
||||||
|
|
||||||
+ obstack_begin (&dont_print_stat_array_obstack, 32 * sizeof (CORE_ADDR));
|
|
||||||
obstack_begin (&dont_print_statmem_obstack, 32 * sizeof (CORE_ADDR));
|
|
||||||
obstack_begin (&dont_print_vb_obstack, 32 * sizeof (struct type *));
|
|
||||||
}
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.cp/pr10687.cc
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.cp/pr10687.cc 2010-06-28 20:21:53.000000000 +0200
|
|
||||||
@@ -0,0 +1,24 @@
|
|
||||||
+class vec2
|
|
||||||
+{
|
|
||||||
+ public:
|
|
||||||
+ vec2() { _v[0] = _v[1] = 0; }
|
|
||||||
+ vec2(int x, int y) { _v[0] = x; _v[1] = y; }
|
|
||||||
+ static vec2 axis[2];
|
|
||||||
+ static vec2 axis6[6];
|
|
||||||
+ private:
|
|
||||||
+ int _v[2];
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+vec2 vec2::axis[2] = { vec2(1,0), vec2(0,1) };
|
|
||||||
+vec2 vec2::axis6[6] = {
|
|
||||||
+ vec2(1,0), vec2(0,1),
|
|
||||||
+ vec2(2,0), vec2(0,2),
|
|
||||||
+ vec2(3,0), vec2(0,3)
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+int main(int argc, char*argv[])
|
|
||||||
+{
|
|
||||||
+ vec2 a;
|
|
||||||
+
|
|
||||||
+ return 0; // marker
|
|
||||||
+}
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.cp/pr10687.exp
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.cp/pr10687.exp 2010-06-28 20:21:53.000000000 +0200
|
|
||||||
@@ -0,0 +1,31 @@
|
|
||||||
+#Copyright 2010 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
|
||||||
+# it under the terms of the GNU General Public License as published by
|
|
||||||
+# the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+# (at your option) any later version.
|
|
||||||
+#
|
|
||||||
+# This program is distributed in the hope that it will be useful,
|
|
||||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+# GNU General Public License for more details.
|
|
||||||
+#
|
|
||||||
+# You should have received a copy of the GNU General Public License
|
|
||||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+set testfile pr10687
|
|
||||||
+set srcfile ${testfile}.cc
|
|
||||||
+if [prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}] {
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+if ![runto_main] then {
|
|
||||||
+ fail "Can't run to main"
|
|
||||||
+ return
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+gdb_breakpoint [gdb_get_line_number "marker"]
|
|
||||||
+gdb_continue_to_breakpoint "marker"
|
|
||||||
+
|
|
||||||
+gdb_test "p a" "{static axis = {{static axis = <same as static member of an already.*"
|
|
||||||
+
|
|
@ -1,163 +0,0 @@
|
|||||||
commit d54f5671e190a5c0ca8fd1ff070372bf20eb42a8
|
|
||||||
Author: cmoller <cmoller>
|
|
||||||
Date: Wed Apr 21 17:33:51 2010 +0000
|
|
||||||
|
|
||||||
PR 9167
|
|
||||||
* cp-valprint.c (cp_print_value_fields): Replaced obstack_base()
|
|
||||||
method of popping recursion-detection stack with a method based on
|
|
||||||
obstack_object_size().
|
|
||||||
* gdb.cp/Makefile.in (EXECUTABLES): Added pr9167.
|
|
||||||
* gdb.cp/pr9167.cc: New file.
|
|
||||||
* gdb.cp/pr9167.exp: New file.
|
|
||||||
|
|
||||||
### a/gdb/ChangeLog
|
|
||||||
### b/gdb/ChangeLog
|
|
||||||
## -1,3 +1,10 @@
|
|
||||||
+2010-04-21 Chris Moller <cmoller@redhat.com>
|
|
||||||
+
|
|
||||||
+ PR 9167
|
|
||||||
+ * cp-valprint.c (cp_print_value_fields): Replaced obstack_base()
|
|
||||||
+ method of popping recursion-detection stack with a method based on
|
|
||||||
+ obstack_object_size().
|
|
||||||
+
|
|
||||||
2010-04-21 Pierre Muller <muller@ics.u-strasbg.fr>
|
|
||||||
|
|
||||||
PR pascal/11492.
|
|
||||||
## -3184,7 +3191,7 @@
|
|
||||||
addr_bit. Adjust LOAD_ADDR sign for cross-arch inferiors.
|
|
||||||
|
|
||||||
2010-02-17 Tristan Gingold <gingold@adacore.com>
|
|
||||||
- Petr HluzÃn <petr.hluzin@gmail.com>
|
|
||||||
+ Petr Hluzín <petr.hluzin@gmail.com>
|
|
||||||
|
|
||||||
* avr-tdep.c (avr_scan_prologue): Convert an if statement to a
|
|
||||||
gdb_assert. Fix info->size for SIG prologue.
|
|
||||||
Index: gdb-7.1/gdb/cp-valprint.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/cp-valprint.c 2010-06-28 20:21:53.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/cp-valprint.c 2010-06-28 20:22:16.000000000 +0200
|
|
||||||
@@ -186,14 +186,13 @@ cp_print_value_fields (struct type *type
|
|
||||||
fprintf_filtered (stream, "<No data fields>");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
- void *statmem_obstack_top = NULL;
|
|
||||||
+ int obstack_initial_size = 0;
|
|
||||||
void *stat_array_obstack_top = NULL;
|
|
||||||
|
|
||||||
if (dont_print_statmem == 0)
|
|
||||||
{
|
|
||||||
- /* Set the current printed-statics stack top. */
|
|
||||||
- statmem_obstack_top
|
|
||||||
- = obstack_next_free (&dont_print_statmem_obstack);
|
|
||||||
+ obstack_initial_size =
|
|
||||||
+ obstack_object_size (&dont_print_statmem_obstack);
|
|
||||||
|
|
||||||
if (last_set_recurse != recurse)
|
|
||||||
{
|
|
||||||
@@ -321,8 +320,19 @@ cp_print_value_fields (struct type *type
|
|
||||||
|
|
||||||
if (dont_print_statmem == 0)
|
|
||||||
{
|
|
||||||
- if (obstack_object_size (&dont_print_statmem_obstack) > 0)
|
|
||||||
- obstack_free (&dont_print_statmem_obstack, statmem_obstack_top);
|
|
||||||
+ int obstack_final_size =
|
|
||||||
+ obstack_object_size (&dont_print_statmem_obstack);
|
|
||||||
+
|
|
||||||
+ if (obstack_final_size > obstack_initial_size) {
|
|
||||||
+ /* In effect, a pop of the printed-statics stack. */
|
|
||||||
+
|
|
||||||
+ void *free_to_ptr =
|
|
||||||
+ obstack_next_free (&dont_print_statmem_obstack) -
|
|
||||||
+ (obstack_final_size - obstack_initial_size);
|
|
||||||
+
|
|
||||||
+ obstack_free (&dont_print_statmem_obstack,
|
|
||||||
+ free_to_ptr);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (last_set_recurse != recurse)
|
|
||||||
{
|
|
||||||
@@ -555,7 +565,6 @@ cp_print_static_field (struct type *type
|
|
||||||
addr = value_address (val);
|
|
||||||
obstack_grow (&dont_print_statmem_obstack, (char *) &addr,
|
|
||||||
sizeof (CORE_ADDR));
|
|
||||||
-
|
|
||||||
CHECK_TYPEDEF (type);
|
|
||||||
cp_print_value_fields (type, value_enclosing_type (val),
|
|
||||||
value_contents_all (val),
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.cp/pr9167.cc
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.cp/pr9167.cc 2010-06-28 20:22:16.000000000 +0200
|
|
||||||
@@ -0,0 +1,36 @@
|
|
||||||
+#include <iostream>
|
|
||||||
+
|
|
||||||
+template<typename DATA>
|
|
||||||
+struct ATB
|
|
||||||
+{
|
|
||||||
+ int data;
|
|
||||||
+ ATB() : data(0) {}
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+template<typename DATA,
|
|
||||||
+ typename DerivedType >
|
|
||||||
+class A : public ATB<DATA>
|
|
||||||
+{
|
|
||||||
+public:
|
|
||||||
+ static DerivedType const DEFAULT_INSTANCE;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+template<typename DATA, typename DerivedType>
|
|
||||||
+const DerivedType A<DATA, DerivedType>::DEFAULT_INSTANCE;
|
|
||||||
+
|
|
||||||
+class B : public A<int, B>
|
|
||||||
+{
|
|
||||||
+
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+int main()
|
|
||||||
+{
|
|
||||||
+ B b;
|
|
||||||
+ // If this if-block is removed then GDB shall
|
|
||||||
+ // not infinitely recurse when trying to print b.
|
|
||||||
+
|
|
||||||
+ return 0; // marker
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.cp/pr9167.exp
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.cp/pr9167.exp 2010-06-28 20:22:16.000000000 +0200
|
|
||||||
@@ -0,0 +1,31 @@
|
|
||||||
+#Copyright 2010 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
|
||||||
+# it under the terms of the GNU General Public License as published by
|
|
||||||
+# the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+# (at your option) any later version.
|
|
||||||
+#
|
|
||||||
+# This program is distributed in the hope that it will be useful,
|
|
||||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+# GNU General Public License for more details.
|
|
||||||
+#
|
|
||||||
+# You should have received a copy of the GNU General Public License
|
|
||||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+set testfile pr9167
|
|
||||||
+set srcfile ${testfile}.cc
|
|
||||||
+if [prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}] {
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+if ![runto_main] then {
|
|
||||||
+ fail "Can't run to main"
|
|
||||||
+ return
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+gdb_breakpoint [gdb_get_line_number "marker"]
|
|
||||||
+gdb_continue_to_breakpoint "marker"
|
|
||||||
+
|
|
||||||
+gdb_test "p b" "{<A<int, B>> = {<ATB<int>> = {data = 0}, static DEFAULT_INSTANCE = <optimized out>}, <No data fields>}"
|
|
||||||
+
|
|
@ -1,85 +0,0 @@
|
|||||||
commit 407cb192dcac2602aebaa7e262419adb580ecca6
|
|
||||||
Author: cmoller <cmoller>
|
|
||||||
Date: Thu Apr 22 20:12:06 2010 +0000
|
|
||||||
|
|
||||||
* cp-valprint.c (cp_print_value_fields): Replaced obstack_base()
|
|
||||||
method of popping recursion-detection stack with a method based on
|
|
||||||
obstack_object_size(). (Similar to the PR9167 patch below, but for
|
|
||||||
the static array obstack rather than the static member obstack.)
|
|
||||||
|
|
||||||
### a/gdb/ChangeLog
|
|
||||||
### b/gdb/ChangeLog
|
|
||||||
## -1,3 +1,10 @@
|
|
||||||
+2010-04-22 Chris Moller <cmoller@redhat.com>
|
|
||||||
+
|
|
||||||
+ * cp-valprint.c (cp_print_value_fields): Replaced obstack_base()
|
|
||||||
+ method of popping recursion-detection stack with a method based on
|
|
||||||
+ obstack_object_size(). (Similar to the PR9167 patch below, but for
|
|
||||||
+ the static array obstack rather than the static member obstack.)
|
|
||||||
+
|
|
||||||
2010-04-22 H.J. Lu <hongjiu.lu@intel.com>
|
|
||||||
|
|
||||||
* amd64-linux-nat.c (amd64_linux_gregset64_reg_offset): Removed.
|
|
||||||
--- a/gdb/cp-valprint.c
|
|
||||||
+++ b/gdb/cp-valprint.c
|
|
||||||
@@ -186,18 +186,18 @@ cp_print_value_fields (struct type *type, struct type *real_type,
|
|
||||||
fprintf_filtered (stream, "<No data fields>");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
- int obstack_initial_size = 0;
|
|
||||||
- void *stat_array_obstack_top = NULL;
|
|
||||||
+ int statmem_obstack_initial_size = 0;
|
|
||||||
+ int stat_array_obstack_initial_size = 0;
|
|
||||||
|
|
||||||
if (dont_print_statmem == 0)
|
|
||||||
{
|
|
||||||
- obstack_initial_size =
|
|
||||||
+ statmem_obstack_initial_size =
|
|
||||||
obstack_object_size (&dont_print_statmem_obstack);
|
|
||||||
|
|
||||||
if (last_set_recurse != recurse)
|
|
||||||
{
|
|
||||||
- stat_array_obstack_top
|
|
||||||
- = obstack_next_free (&dont_print_stat_array_obstack);
|
|
||||||
+ stat_array_obstack_initial_size =
|
|
||||||
+ obstack_object_size (&dont_print_stat_array_obstack);
|
|
||||||
last_set_recurse = recurse;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -323,12 +323,12 @@ cp_print_value_fields (struct type *type, struct type *real_type,
|
|
||||||
int obstack_final_size =
|
|
||||||
obstack_object_size (&dont_print_statmem_obstack);
|
|
||||||
|
|
||||||
- if (obstack_final_size > obstack_initial_size) {
|
|
||||||
+ if (obstack_final_size > statmem_obstack_initial_size) {
|
|
||||||
/* In effect, a pop of the printed-statics stack. */
|
|
||||||
|
|
||||||
void *free_to_ptr =
|
|
||||||
obstack_next_free (&dont_print_statmem_obstack) -
|
|
||||||
- (obstack_final_size - obstack_initial_size);
|
|
||||||
+ (obstack_final_size - statmem_obstack_initial_size);
|
|
||||||
|
|
||||||
obstack_free (&dont_print_statmem_obstack,
|
|
||||||
free_to_ptr);
|
|
||||||
@@ -336,9 +336,18 @@ cp_print_value_fields (struct type *type, struct type *real_type,
|
|
||||||
|
|
||||||
if (last_set_recurse != recurse)
|
|
||||||
{
|
|
||||||
- if (obstack_object_size (&dont_print_stat_array_obstack) > 0)
|
|
||||||
- obstack_free (&dont_print_stat_array_obstack,
|
|
||||||
- stat_array_obstack_top);
|
|
||||||
+ int obstack_final_size =
|
|
||||||
+ obstack_object_size (&dont_print_stat_array_obstack);
|
|
||||||
+
|
|
||||||
+ if (obstack_final_size > stat_array_obstack_initial_size)
|
|
||||||
+ {
|
|
||||||
+ void *free_to_ptr =
|
|
||||||
+ obstack_next_free (&dont_print_stat_array_obstack) -
|
|
||||||
+ (obstack_final_size - stat_array_obstack_initial_size);
|
|
||||||
+
|
|
||||||
+ obstack_free (&dont_print_stat_array_obstack,
|
|
||||||
+ free_to_ptr);
|
|
||||||
+ }
|
|
||||||
last_set_recurse = -1;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,42 +0,0 @@
|
|||||||
commit 744735550d4a4fd6d4be40776069d799dca5ee39
|
|
||||||
Author: Ulrich Weigand <uweigand@de.ibm.com>
|
|
||||||
Date: Mon Jun 14 16:09:55 2010 +0000
|
|
||||||
|
|
||||||
* cp-valprint.c (cp_print_static_field): Members of
|
|
||||||
dont_print_stat_array_obstack are of type "struct type *".
|
|
||||||
(_initialize_cp_valprint): Likewise.
|
|
||||||
|
|
||||||
### a/gdb/ChangeLog
|
|
||||||
### b/gdb/ChangeLog
|
|
||||||
## -1,5 +1,11 @@
|
|
||||||
2010-06-14 Ulrich Weigand <uweigand@de.ibm.com>
|
|
||||||
|
|
||||||
+ * cp-valprint.c (cp_print_static_field): Members of
|
|
||||||
+ dont_print_stat_array_obstack are of type "struct type *".
|
|
||||||
+ (_initialize_cp_valprint): Likewise.
|
|
||||||
+
|
|
||||||
+2010-06-14 Ulrich Weigand <uweigand@de.ibm.com>
|
|
||||||
+
|
|
||||||
* frame.c (frame_register_unwind): Do not access contents
|
|
||||||
of "optimized out" unwound register value.
|
|
||||||
|
|
||||||
--- a/gdb/cp-valprint.c
|
|
||||||
+++ b/gdb/cp-valprint.c
|
|
||||||
@@ -615,7 +615,7 @@ cp_print_static_field (struct type *type,
|
|
||||||
first_dont_print
|
|
||||||
= (struct type **) obstack_base (&dont_print_stat_array_obstack);
|
|
||||||
i = obstack_object_size (&dont_print_stat_array_obstack)
|
|
||||||
- / sizeof (CORE_ADDR);
|
|
||||||
+ / sizeof (struct type *);
|
|
||||||
|
|
||||||
while (--i >= 0)
|
|
||||||
{
|
|
||||||
@@ -764,7 +764,7 @@ Show printing of object's derived type based on vtable info."), NULL,
|
|
||||||
show_objectprint,
|
|
||||||
&setprintlist, &showprintlist);
|
|
||||||
|
|
||||||
- obstack_begin (&dont_print_stat_array_obstack, 32 * sizeof (CORE_ADDR));
|
|
||||||
+ obstack_begin (&dont_print_stat_array_obstack, 32 * sizeof (struct type *));
|
|
||||||
obstack_begin (&dont_print_statmem_obstack, 32 * sizeof (CORE_ADDR));
|
|
||||||
obstack_begin (&dont_print_vb_obstack, 32 * sizeof (struct type *));
|
|
||||||
}
|
|
@ -1,202 +0,0 @@
|
|||||||
commit 47c8c764a9be6d023eca450336e6d9de16970fc0
|
|
||||||
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
Date: Mon Jun 28 16:59:43 2010 +0000
|
|
||||||
|
|
||||||
gdb/
|
|
||||||
* cp-valprint.c (cp_print_value_fields) <recurse == 0>: Call
|
|
||||||
obstack_begin after each obstack_free.
|
|
||||||
|
|
||||||
gdb/testsuite/
|
|
||||||
* gdb.cp/static-print-quit.exp, gdb.cp/static-print-quit.cc: New.
|
|
||||||
|
|
||||||
### a/gdb/ChangeLog
|
|
||||||
### b/gdb/ChangeLog
|
|
||||||
## -1,3 +1,8 @@
|
|
||||||
+2010-06-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
+
|
|
||||||
+ * cp-valprint.c (cp_print_value_fields) <recurse == 0>: Call
|
|
||||||
+ obstack_begin after each obstack_free.
|
|
||||||
+
|
|
||||||
2010-06-27 Doug Evans <dje@google.com>
|
|
||||||
|
|
||||||
* value.c (value_static_field): Use `switch' instead of `if'.
|
|
||||||
## -12,27 +17,27 @@
|
|
||||||
|
|
||||||
2010-06-25 Paul Hilfinger <hilfinger@adacore.com>
|
|
||||||
|
|
||||||
- * defs.h (make_command_stats_cleanup): Declare.
|
|
||||||
- (set_display_time): Declare.
|
|
||||||
- (set_display_space): Declare.
|
|
||||||
- * event-top.c (command_handler): Use make_command_stats_cleanup.
|
|
||||||
- * main.c (display_time, display_space): Move definitions to utils.c.
|
|
||||||
- (captured_main): Use make_command_stats_cleanup to get start-up
|
|
||||||
- statistics.
|
|
||||||
- Use set_display_time and set_display_space for processing OPT_STATISTICS
|
|
||||||
- case.
|
|
||||||
- * maint.c (maintenance_time_display): Use set_display_time.
|
|
||||||
- (maintenance_space_display): Use set_display_space.
|
|
||||||
- * top.c (execute_command): Remove obsolete 'maint time' code.
|
|
||||||
- (command_loop): Use make_command_stats_cleanup.
|
|
||||||
- * utils.c (struct cmd_stats): Structure for storing initial time
|
|
||||||
- and space usage.
|
|
||||||
- (display_time, display_space): Move definitions here from utils.c.
|
|
||||||
- (set_display_time): New function.
|
|
||||||
- (set_display_space): New function.
|
|
||||||
- (make_command_stats_cleanup): New function.
|
|
||||||
- (report_command_stats): New auxiliary function for
|
|
||||||
- make_command_stats_cleanup.
|
|
||||||
+ * defs.h (make_command_stats_cleanup): Declare.
|
|
||||||
+ (set_display_time): Declare.
|
|
||||||
+ (set_display_space): Declare.
|
|
||||||
+ * event-top.c (command_handler): Use make_command_stats_cleanup.
|
|
||||||
+ * main.c (display_time, display_space): Move definitions to utils.c.
|
|
||||||
+ (captured_main): Use make_command_stats_cleanup to get start-up
|
|
||||||
+ statistics.
|
|
||||||
+ Use set_display_time and set_display_space for processing OPT_STATISTICS
|
|
||||||
+ case.
|
|
||||||
+ * maint.c (maintenance_time_display): Use set_display_time.
|
|
||||||
+ (maintenance_space_display): Use set_display_space.
|
|
||||||
+ * top.c (execute_command): Remove obsolete 'maint time' code.
|
|
||||||
+ (command_loop): Use make_command_stats_cleanup.
|
|
||||||
+ * utils.c (struct cmd_stats): Structure for storing initial time
|
|
||||||
+ and space usage.
|
|
||||||
+ (display_time, display_space): Move definitions here from utils.c.
|
|
||||||
+ (set_display_time): New function.
|
|
||||||
+ (set_display_space): New function.
|
|
||||||
+ (make_command_stats_cleanup): New function.
|
|
||||||
+ (report_command_stats): New auxiliary function for
|
|
||||||
+ make_command_stats_cleanup.
|
|
||||||
|
|
||||||
2010-06-25 Ulrich Weigand <uweigand@de.ibm.com>
|
|
||||||
|
|
||||||
## -6103,7 +6108,7 @@
|
|
||||||
|
|
||||||
PR gdb/9067
|
|
||||||
* cp-valprint.c (cp_print_value_fields) Fix use of obstacks.
|
|
||||||
- cp_print_static_field) Fix use of obstacks.
|
|
||||||
+ (cp_print_static_field) Fix use of obstacks.
|
|
||||||
|
|
||||||
2010-02-08 Pedro Alves <pedro@codesourcery.com>
|
|
||||||
|
|
||||||
--- a/gdb/cp-valprint.c
|
|
||||||
+++ b/gdb/cp-valprint.c
|
|
||||||
@@ -164,10 +164,19 @@ cp_print_value_fields (struct type *type, struct type *real_type,
|
|
||||||
|
|
||||||
if (recurse == 0)
|
|
||||||
{
|
|
||||||
+ /* Any object can be left on obstacks only during an unexpected error. */
|
|
||||||
+
|
|
||||||
if (obstack_object_size (&dont_print_statmem_obstack) > 0)
|
|
||||||
- obstack_free (&dont_print_statmem_obstack, NULL);
|
|
||||||
+ {
|
|
||||||
+ obstack_free (&dont_print_statmem_obstack, NULL);
|
|
||||||
+ obstack_begin (&dont_print_statmem_obstack, 32 * sizeof (CORE_ADDR));
|
|
||||||
+ }
|
|
||||||
if (obstack_object_size (&dont_print_stat_array_obstack) > 0)
|
|
||||||
- obstack_free (&dont_print_stat_array_obstack, NULL);
|
|
||||||
+ {
|
|
||||||
+ obstack_free (&dont_print_stat_array_obstack, NULL);
|
|
||||||
+ obstack_begin (&dont_print_stat_array_obstack,
|
|
||||||
+ 32 * sizeof (struct type *));
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
fprintf_filtered (stream, "{");
|
|
||||||
### a/gdb/testsuite/ChangeLog
|
|
||||||
### b/gdb/testsuite/ChangeLog
|
|
||||||
## -1,3 +1,7 @@
|
|
||||||
+2010-06-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
+
|
|
||||||
+ * gdb.cp/static-print-quit.exp, gdb.cp/static-print-quit.cc: New.
|
|
||||||
+
|
|
||||||
2010-06-28 Doug Evans <dje@google.com>
|
|
||||||
|
|
||||||
* gdb.base/break-interp.exp (reach): Relax expected output a bit.
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gdb/testsuite/gdb.cp/static-print-quit.cc
|
|
||||||
@@ -0,0 +1,32 @@
|
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
|
||||||
+
|
|
||||||
+ Copyright 2010 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
+
|
|
||||||
+class D
|
|
||||||
+ {
|
|
||||||
+ public:
|
|
||||||
+ int loooooooooooooooooooooooooooooooooooooooooooooong;
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+class C
|
|
||||||
+ {
|
|
||||||
+ public:
|
|
||||||
+ int loooooooooooooooooooooooooooooooooooooooooooooong;
|
|
||||||
+ static D field;
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
+D C::field;
|
|
||||||
+C c;
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gdb/testsuite/gdb.cp/static-print-quit.exp
|
|
||||||
@@ -0,0 +1,50 @@
|
|
||||||
+# Copyright 2010 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
|
||||||
+# it under the terms of the GNU General Public License as published by
|
|
||||||
+# the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+# (at your option) any later version.
|
|
||||||
+#
|
|
||||||
+# This program is distributed in the hope that it will be useful,
|
|
||||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+# GNU General Public License for more details.
|
|
||||||
+#
|
|
||||||
+# You should have received a copy of the GNU General Public License
|
|
||||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+if { [skip_cplus_tests] } { continue }
|
|
||||||
+
|
|
||||||
+set testfile static-print-quit
|
|
||||||
+set srcfile ${testfile}.cc
|
|
||||||
+set executable $testfile.o
|
|
||||||
+set objfile ${objdir}/${subdir}/${executable}
|
|
||||||
+
|
|
||||||
+if { [gdb_compile $srcdir/$subdir/$srcfile $objfile object {debug c++}] != ""} {
|
|
||||||
+ untested ${testfile}.exp
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+clean_restart $executable
|
|
||||||
+
|
|
||||||
+gdb_test "set width 80"
|
|
||||||
+gdb_test "set height 2"
|
|
||||||
+
|
|
||||||
+set test "print c"
|
|
||||||
+gdb_test_multiple $test $test {
|
|
||||||
+ -re " = \{loooooooooooooooooooooooooooooooooooooooooooooong = 0, static field = \{\r\n---Type <return> to continue, or q <return> to quit---$" {
|
|
||||||
+ pass $test
|
|
||||||
+ }
|
|
||||||
+ -re " to quit---$" {
|
|
||||||
+ fail $test
|
|
||||||
+ return -1
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+gdb_test "q" ".*"
|
|
||||||
+
|
|
||||||
+# Now the obstack is uninitialized. Excercise it.
|
|
||||||
+
|
|
||||||
+gdb_test "set pagination off"
|
|
||||||
+gdb_test "print c" ".*" "first print"
|
|
||||||
+gdb_test "print c" ".*" "second print"
|
|
@ -1,106 +0,0 @@
|
|||||||
commit bb604f9e70de515b13e2a935d8ad9d2fb0290849
|
|
||||||
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
Date: Mon Jun 28 20:12:52 2010 +0000
|
|
||||||
|
|
||||||
gdb/
|
|
||||||
Fix modification of cplus_struct_default.
|
|
||||||
* dwarf2read.c (dwarf2_add_member_fn) <no DW_AT_vtable_elem_location>:
|
|
||||||
Call ALLOCATE_CPLUS_STRUCT_TYPE.
|
|
||||||
<removed>
|
|
||||||
* gdbtypes.c (cplus_struct_default): New empty initializer, comment it.
|
|
||||||
</removed>
|
|
||||||
|
|
||||||
gdb/testsuite/
|
|
||||||
* gdb.cp/virtbase.cc (class RTTI_base, class RTTI_data)
|
|
||||||
(main) <rtti_data>: New.
|
|
||||||
* gdb.cp/virtbase.exp (print rtti_data): New.
|
|
||||||
|
|
||||||
### a/gdb/ChangeLog
|
|
||||||
### b/gdb/ChangeLog
|
|
||||||
## -1,3 +1,10 @@
|
|
||||||
+2010-06-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
+
|
|
||||||
+ Fix modification of cplus_struct_default.
|
|
||||||
+ * dwarf2read.c (dwarf2_add_member_fn) <no DW_AT_vtable_elem_location>:
|
|
||||||
+ Call ALLOCATE_CPLUS_STRUCT_TYPE.
|
|
||||||
+ * gdbtypes.c (cplus_struct_default): New empty initializer, comment it.
|
|
||||||
+
|
|
||||||
### a/gdb/testsuite/ChangeLog
|
|
||||||
### b/gdb/testsuite/ChangeLog
|
|
||||||
## -1,4 +1,10 @@
|
|
||||||
+2010-06-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
+
|
|
||||||
+ * gdb.cp/virtbase.cc (class RTTI_base, class RTTI_data)
|
|
||||||
+ (main) <rtti_data>: New.
|
|
||||||
+ * gdb.cp/virtbase.exp (print rtti_data): New.
|
|
||||||
+
|
|
||||||
###--- a/gdb/gdbtypes.c
|
|
||||||
###+++ b/gdb/gdbtypes.c
|
|
||||||
###@@ -1733,7 +1733,8 @@ check_stub_method_group (struct type *type, int method_id)
|
|
||||||
### }
|
|
||||||
### }
|
|
||||||
###
|
|
||||||
###-const struct cplus_struct_type cplus_struct_default;
|
|
||||||
###+/* Ensure it is in .rodata (if available) by workarounding GCC PR 44690. */
|
|
||||||
###+const struct cplus_struct_type cplus_struct_default = { };
|
|
||||||
###
|
|
||||||
### void
|
|
||||||
### allocate_cplus_struct_type (struct type *type)
|
|
||||||
Index: gdb-7.1/gdb/dwarf2read.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/dwarf2read.c 2010-06-29 18:26:47.000000000 +0200
|
|
||||||
+++ gdb-7.1/gdb/dwarf2read.c 2010-06-29 18:39:43.000000000 +0200
|
|
||||||
@@ -5404,6 +5404,7 @@ dwarf2_add_member_fn (struct field_info
|
|
||||||
complaint (&symfile_complaints,
|
|
||||||
_("Member function \"%s\" (offset %d) is virtual but the vtable offset is not specified"),
|
|
||||||
fieldname, die->offset);
|
|
||||||
+ ALLOCATE_CPLUS_STRUCT_TYPE (type);
|
|
||||||
TYPE_CPLUS_DYNAMIC (type) = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.cp/virtbase.cc
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/testsuite/gdb.cp/virtbase.cc 2010-02-03 00:40:28.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.cp/virtbase.cc 2010-06-29 18:39:43.000000000 +0200
|
|
||||||
@@ -74,8 +74,19 @@ public:
|
|
||||||
virtual void b() {}
|
|
||||||
};
|
|
||||||
|
|
||||||
+class RTTI_base
|
|
||||||
+{
|
|
||||||
+public:
|
|
||||||
+ virtual ~RTTI_base() {}
|
|
||||||
+};
|
|
||||||
|
|
||||||
-
|
|
||||||
+class RTTI_data
|
|
||||||
+{
|
|
||||||
+public:
|
|
||||||
+ RTTI_base base;
|
|
||||||
+ int data;
|
|
||||||
+ RTTI_data() : data(1) {}
|
|
||||||
+};
|
|
||||||
|
|
||||||
int main() {
|
|
||||||
ph::Derived tst;
|
|
||||||
@@ -84,6 +95,7 @@ int main() {
|
|
||||||
|
|
||||||
E *e = new E;
|
|
||||||
RHB *b = new RHC();
|
|
||||||
+ RTTI_data rtti_data;
|
|
||||||
|
|
||||||
return 0; // breakpoint 3
|
|
||||||
}
|
|
||||||
Index: gdb-7.1/gdb/testsuite/gdb.cp/virtbase.exp
|
|
||||||
===================================================================
|
|
||||||
--- gdb-7.1.orig/gdb/testsuite/gdb.cp/virtbase.exp 2010-02-04 22:04:30.000000000 +0100
|
|
||||||
+++ gdb-7.1/gdb/testsuite/gdb.cp/virtbase.exp 2010-06-29 18:39:56.000000000 +0200
|
|
||||||
@@ -60,3 +60,8 @@ gdb_test "print *(D *) e" " = {<C> = {v
|
|
||||||
# https://bugzilla.redhat.com/show_bug.cgi?id=560741
|
|
||||||
gdb_test "set print object on" ""
|
|
||||||
gdb_test "print/x b->mA" " = 0xaaaaaaaa"
|
|
||||||
+
|
|
||||||
+# A regression test reported to Red Hat bugzilla, see:
|
|
||||||
+# https://bugzilla.redhat.com/show_bug.cgi?id=606660
|
|
||||||
+# `set print object on' is expected.
|
|
||||||
+gdb_test "print rtti_data" " = .*, data = 1\}"
|
|
@ -1,33 +0,0 @@
|
|||||||
FYI: fix buglet in gdbpy_get_display_hint
|
|
||||||
http://sourceware.org/ml/gdb-patches/2010-07/msg00190.html
|
|
||||||
http://sourceware.org/ml/gdb-cvs/2010-07/msg00061.html
|
|
||||||
|
|
||||||
### src/gdb/ChangeLog 2010/07/09 02:39:57 1.11979
|
|
||||||
### src/gdb/ChangeLog 2010/07/09 20:29:56 1.11980
|
|
||||||
## -1,3 +1,8 @@
|
|
||||||
+2010-07-09 Tom Tromey <tromey@redhat.com>
|
|
||||||
+
|
|
||||||
+ * python/py-prettyprint.c (gdbpy_get_display_hint): Don't use
|
|
||||||
+ 'hint' if it is NULL.
|
|
||||||
+
|
|
||||||
2010-07-09 Hui Zhu <teawater@gmail.com>
|
|
||||||
|
|
||||||
* source.c (print_source_lines_base): Add check for noprint.
|
|
||||||
--- src/gdb/python/py-prettyprint.c 2010/06/11 15:36:09 1.12
|
|
||||||
+++ src/gdb/python/py-prettyprint.c 2010/07/09 20:29:56 1.13
|
|
||||||
@@ -229,10 +229,12 @@
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
hint = PyObject_CallMethodObjArgs (printer, gdbpy_display_hint_cst, NULL);
|
|
||||||
- if (gdbpy_is_string (hint))
|
|
||||||
- result = python_string_to_host_string (hint);
|
|
||||||
if (hint)
|
|
||||||
- Py_DECREF (hint);
|
|
||||||
+ {
|
|
||||||
+ if (gdbpy_is_string (hint))
|
|
||||||
+ result = python_string_to_host_string (hint);
|
|
||||||
+ Py_DECREF (hint);
|
|
||||||
+ }
|
|
||||||
else
|
|
||||||
gdbpy_print_stack ();
|
|
||||||
|
|
@ -1,239 +0,0 @@
|
|||||||
http://sourceware.org/ml/archer/2010-q3/msg00028.html
|
|
||||||
Subject: [delayed-symfile] [commit] Fix a regression on CFI without DIE [Re:
|
|
||||||
|
|
||||||
On Wed, 25 Feb 2009 00:14:29 +0100, Jan Kratochvil wrote:
|
|
||||||
> commit 6a37c2b9962258ecf9299cc34a650e64a06acaa5
|
|
||||||
>
|
|
||||||
> There was a regression on gdb.base/savedregs.exp.
|
|
||||||
>
|
|
||||||
> quick_addrmap/require_partial_symbols should be used even for the unwind debug
|
|
||||||
> info checking as its load has been also delayed by this branch.
|
|
||||||
[...]
|
|
||||||
> --- a/gdb/dwarf2-frame.c
|
|
||||||
> +++ b/gdb/dwarf2-frame.c
|
|
||||||
[...]
|
|
||||||
> @@ -1499,6 +1500,14 @@ dwarf2_frame_find_fde (CORE_ADDR *pc)
|
|
||||||
> struct dwarf2_fde *fde;
|
|
||||||
> CORE_ADDR offset;
|
|
||||||
>
|
|
||||||
> + if (objfile->quick_addrmap)
|
|
||||||
> + {
|
|
||||||
> + if (!addrmap_find (objfile->quick_addrmap, *pc))
|
|
||||||
> + continue;
|
|
||||||
> + }
|
|
||||||
> + /* FIXME: Read-in only .debug_frame/.eh_frame without .debug_info? */
|
|
||||||
> + require_partial_symbols (objfile);
|
|
||||||
> +
|
|
||||||
|
|
||||||
but this has caused a different regression (as discussed in the confcall).
|
|
||||||
|
|
||||||
QUICK_ADDRMAP is built only from .debug_aranges. But we can have existing
|
|
||||||
built .debug_aranges for CUs in OBJFILE but still some CUs do not need to have
|
|
||||||
DWARF at all while they can feature CFIs (.eh_frame or .debug_frame).
|
|
||||||
It has been described by Daniel Jacobowitz at:
|
|
||||||
Re: [2/4] RFC: check psymtabs_addrmap before reading FDEs
|
|
||||||
http://sourceware.org/ml/gdb-patches/2010-07/msg00012.html
|
|
||||||
|
|
||||||
Sorry for this regression by me (in that fix of a different regression).
|
|
||||||
|
|
||||||
Fixed it the "slow way" as this branch is now obsoleted by .gdb-index.
|
|
||||||
|
|
||||||
No regressions on {x86_64,x86_64-m32,i686}-fedora13-linux-gnu.
|
|
||||||
|
|
||||||
Checked-in.
|
|
||||||
|
|
||||||
|
|
||||||
Thanks,
|
|
||||||
Jan
|
|
||||||
|
|
||||||
|
|
||||||
eb8df8566acc1ed963e3e9b77c13b9c2c3db03fb
|
|
||||||
|
|
||||||
Test CFI is parsed even for range (function) not described by any DIE.
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=614028
|
|
||||||
|
|
||||||
gdb/
|
|
||||||
* dwarf2-frame.c (dwarf2_frame_find_fde): Remove the
|
|
||||||
OBJFILE->QUICK_ADDRMAP check. New comment why.
|
|
||||||
|
|
||||||
gdb/testsuite/
|
|
||||||
* gdb.base/cfi-without-die.exp, gdb.base/cfi-without-die-main.c,
|
|
||||||
gdb.base/cfi-without-die-caller.c: New files.
|
|
||||||
---
|
|
||||||
gdb/dwarf2-frame.c | 8 +--
|
|
||||||
gdb/testsuite/gdb.base/cfi-without-die-caller.c | 28 ++++++++++
|
|
||||||
gdb/testsuite/gdb.base/cfi-without-die-main.c | 32 +++++++++++
|
|
||||||
gdb/testsuite/gdb.base/cfi-without-die.exp | 67 +++++++++++++++++++++++
|
|
||||||
4 files changed, 130 insertions(+), 5 deletions(-)
|
|
||||||
create mode 100644 gdb/testsuite/gdb.base/cfi-without-die-caller.c
|
|
||||||
create mode 100644 gdb/testsuite/gdb.base/cfi-without-die-main.c
|
|
||||||
create mode 100644 gdb/testsuite/gdb.base/cfi-without-die.exp
|
|
||||||
|
|
||||||
diff --git a/gdb/dwarf2-frame.c b/gdb/dwarf2-frame.c
|
|
||||||
index 5915249..1dc2754 100644
|
|
||||||
--- a/gdb/dwarf2-frame.c
|
|
||||||
+++ b/gdb/dwarf2-frame.c
|
|
||||||
@@ -1583,11 +1583,9 @@ dwarf2_frame_find_fde (CORE_ADDR *pc)
|
|
||||||
CORE_ADDR offset;
|
|
||||||
CORE_ADDR seek_pc;
|
|
||||||
|
|
||||||
- if (objfile->quick_addrmap)
|
|
||||||
- {
|
|
||||||
- if (!addrmap_find (objfile->quick_addrmap, *pc))
|
|
||||||
- continue;
|
|
||||||
- }
|
|
||||||
+ /* OBJFILE->QUICK_ADDRMAP contains offsets only for DIEs. It does not
|
|
||||||
+ contain ranges of CFIs. */
|
|
||||||
+
|
|
||||||
/* FIXME: Read-in only .debug_frame/.eh_frame without .debug_info? */
|
|
||||||
require_partial_symbols (objfile);
|
|
||||||
|
|
||||||
diff --git a/gdb/testsuite/gdb.base/cfi-without-die-caller.c b/gdb/testsuite/gdb.base/cfi-without-die-caller.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..afdfd53
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gdb/testsuite/gdb.base/cfi-without-die-caller.c
|
|
||||||
@@ -0,0 +1,28 @@
|
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
|
||||||
+
|
|
||||||
+ Copyright 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
+
|
|
||||||
+typedef int (*callback_t) (void);
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+caller (callback_t callback)
|
|
||||||
+{
|
|
||||||
+ /* Ensure some frame content to push away the return address. */
|
|
||||||
+ volatile const long one = 1;
|
|
||||||
+
|
|
||||||
+ /* Modify the return value to prevent any tail-call optimization. */
|
|
||||||
+ return (*callback) () - one;
|
|
||||||
+}
|
|
||||||
diff --git a/gdb/testsuite/gdb.base/cfi-without-die-main.c b/gdb/testsuite/gdb.base/cfi-without-die-main.c
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..8451c4b
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gdb/testsuite/gdb.base/cfi-without-die-main.c
|
|
||||||
@@ -0,0 +1,32 @@
|
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
|
||||||
+
|
|
||||||
+ Copyright 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
+
|
|
||||||
+typedef int (*callback_t) (void);
|
|
||||||
+
|
|
||||||
+extern int caller (callback_t callback);
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+callback (void)
|
|
||||||
+{
|
|
||||||
+ return 1;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main (void)
|
|
||||||
+{
|
|
||||||
+ return caller (callback);
|
|
||||||
+}
|
|
||||||
diff --git a/gdb/testsuite/gdb.base/cfi-without-die.exp b/gdb/testsuite/gdb.base/cfi-without-die.exp
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..db6d248
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/gdb/testsuite/gdb.base/cfi-without-die.exp
|
|
||||||
@@ -0,0 +1,67 @@
|
|
||||||
+# Copyright 2010 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
|
||||||
+# it under the terms of the GNU General Public License as published by
|
|
||||||
+# the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+# (at your option) any later version.
|
|
||||||
+#
|
|
||||||
+# This program is distributed in the hope that it will be useful,
|
|
||||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+# GNU General Public License for more details.
|
|
||||||
+#
|
|
||||||
+# You should have received a copy of the GNU General Public License
|
|
||||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+# Test CFI is parsed even for range (function) not described by any DIE.
|
|
||||||
+
|
|
||||||
+set testfile cfi-without-die
|
|
||||||
+set srcmainfile ${testfile}-main.c
|
|
||||||
+set srccallerfile ${testfile}-caller.c
|
|
||||||
+set executable ${testfile}
|
|
||||||
+set objmainfile ${objdir}/${subdir}/${testfile}-main.o
|
|
||||||
+set objcallerfile ${objdir}/${subdir}/${testfile}-caller.o
|
|
||||||
+set binfile ${objdir}/${subdir}/${executable}
|
|
||||||
+
|
|
||||||
+if { [gdb_compile "${srcdir}/${subdir}/${srccallerfile}" ${objcallerfile} \
|
|
||||||
+ object [list {additional_flags=-fomit-frame-pointer -fno-unwind-tables -fno-asynchronous-unwind-tables}]] != ""
|
|
||||||
+ || [gdb_compile "${srcdir}/${subdir}/${srcmainfile}" ${objmainfile} object {debug}] != ""
|
|
||||||
+ || [gdb_compile "${objmainfile} ${objcallerfile}" ${binfile} executable {}] != "" } {
|
|
||||||
+ untested ${testfile}.exp
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+clean_restart $executable
|
|
||||||
+
|
|
||||||
+if ![runto callback] then {
|
|
||||||
+ fail "verify unwinding: Can't run to callback"
|
|
||||||
+ return 0
|
|
||||||
+}
|
|
||||||
+set test "verify unwinding breaks without CFI"
|
|
||||||
+gdb_test_multiple "bt" $test {
|
|
||||||
+ -re " in main .*\r\n$gdb_prompt $" {
|
|
||||||
+ fail $test
|
|
||||||
+ }
|
|
||||||
+ -re "\r\n$gdb_prompt $" {
|
|
||||||
+ pass $test
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+if { [gdb_compile "${srcdir}/${subdir}/${srccallerfile}" ${objcallerfile} \
|
|
||||||
+ object [list {additional_flags=-fomit-frame-pointer -funwind-tables -fasynchronous-unwind-tables}]] != ""
|
|
||||||
+ || [gdb_compile "${srcdir}/${subdir}/${srcmainfile}" ${objmainfile} object {debug}] != ""
|
|
||||||
+ || [gdb_compile "${objmainfile} ${objcallerfile}" ${binfile} executable {}] != "" } {
|
|
||||||
+ untested ${testfile}.exp
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+clean_restart $executable
|
|
||||||
+
|
|
||||||
+if ![runto callback] then {
|
|
||||||
+ fail "test CFI without DIEs: Can't run to callback"
|
|
||||||
+ return 0
|
|
||||||
+}
|
|
||||||
+# #0 callback () at ...
|
|
||||||
+# #1 0x00000000004004e9 in caller ()
|
|
||||||
+# #2 0x00000000004004cd in main () at ...
|
|
||||||
+gdb_test "bt" "#0 +callback \[^\r\n\]+\r\n#1 \[^\r\n\]+ in caller \[^\r\n\]+\r\n#2 \[^\r\n\]+ in main \[^\r\n\]+" "verify unwindin works for CFI without DIEs"
|
|
||||||
--
|
|
||||||
1.7.1.1
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user