- Upgrade to the upstream gdb-6.8.50 snapshot.
This commit is contained in:
parent
39347a6c8a
commit
407ebe9063
@ -1 +1 @@
|
|||||||
gdb-6.8.tar.bz2
|
gdb-6.8.50.20081209.tar.bz2
|
||||||
|
@ -1,158 +0,0 @@
|
|||||||
for gdb-6.3/gdb/ChangeLog
|
|
||||||
from Alexandre Oliva <aoliva@redhat.com>
|
|
||||||
|
|
||||||
* i386-linux-nat.c (i386_debug_register_for_thread): New struct.
|
|
||||||
(i386_linux_set_dr_for_thread): Rename from...
|
|
||||||
(i386_linux_set_debug_regs_for_thread): ... this, and
|
|
||||||
add new function to catch exceptions in the old one.
|
|
||||||
|
|
||||||
2008-02-24 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
Port to GDB-6.8pre.
|
|
||||||
|
|
||||||
This patch was originally made to workaround a deficiency of ia32el (==ia32
|
|
||||||
emulator on ia64) which EIOs on ptrace(2) of the debug registers.
|
|
||||||
|
|
||||||
Currently I can no longer run gdb.i386 on RHEL-5.1.ia64 as it fails on
|
|
||||||
$ rpm -qv kernel
|
|
||||||
kernel-2.6.18-53.el5.ia64
|
|
||||||
$ file /emul/ia32-linux/usr/bin/gdb ./print-threads
|
|
||||||
/emul/ia32-linux/usr/bin/gdb: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
|
|
||||||
./print-threads: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
|
|
||||||
$ /emul/ia32-linux/usr/bin/gdb ./print-threads
|
|
||||||
(gdb) r
|
|
||||||
Starting program: /root/jkratoch/redhat/print-threads
|
|
||||||
Warning:
|
|
||||||
Cannot insert breakpoint -2.
|
|
||||||
Error accessing memory address 0x555766fb: Input/output error.
|
|
||||||
(gdb) maint info breakpoints
|
|
||||||
Num Type Disp Enb Address What
|
|
||||||
-1 longjmp resume keep n 0x00000000
|
|
||||||
-2 shlib events keep y 0x555766fb
|
|
||||||
|
|
||||||
ia32-on-ia64 run problem info:
|
|
||||||
|
|
||||||
the inconsistency is in function linux_nat_wait - there is a variable called
|
|
||||||
block_mask, which is assumed to represent the current signal mask. in the
|
|
||||||
following execution path this assumption does not hold:
|
|
||||||
|
|
||||||
1) block-mask is filled with SIGCHLD and the signal is masked in
|
|
||||||
lin_lwp_attach_lwp, which is called at the beginning of the procedure
|
|
||||||
that handles a new thread in the debuggee.
|
|
||||||
2) further down this procedure gdb tries to set the debug regs of the debuggee.
|
|
||||||
when trying to set debug regs - gdb fails and calls throw_exception. this
|
|
||||||
function finishes with siglongjmp, which clears the sigmask (seq. 1).
|
|
||||||
3) further down, linux_nat_wait is called to wait on the new child. in
|
|
||||||
linux_nat_wait there is a sequence :
|
|
||||||
|
|
||||||
if ( ! (block_mask & SIGCHLD) )
|
|
||||||
mask- SIGCHLD
|
|
||||||
while () {
|
|
||||||
wait-no-hang( )
|
|
||||||
if no child found then
|
|
||||||
sigsuspend (SIGCHLD)
|
|
||||||
|
|
||||||
4) the signal that notifies the debugger about the child is received after the
|
|
||||||
wait and before the sigsuspend. originally, this was not supposed to happen
|
|
||||||
because SIGCHLD is supposed to be blocked, but because what happens in step
|
|
||||||
2, the signal mask is cleared and the signal is received at this point,
|
|
||||||
which results with a hang
|
|
||||||
|
|
||||||
sequence 1:
|
|
||||||
|
|
||||||
catch_errors (symbol_add_stubs)
|
|
||||||
symbol_file_add_with_addrs_or_offsets
|
|
||||||
deprecated_target_new_objfile_hook
|
|
||||||
tui_new_objfile_hook
|
|
||||||
attach_thread
|
|
||||||
observer_notify_linux_new_thread
|
|
||||||
generic_observer_notify
|
|
||||||
observer_linux_new_thread_notification_stub
|
|
||||||
i386_linux_new_thread
|
|
||||||
i386_linux_set_debug_regs_for_thread
|
|
||||||
i386_linux_dr_set_addr
|
|
||||||
i386_linux_dr_set
|
|
||||||
perror_with_name
|
|
||||||
.
|
|
||||||
.
|
|
||||||
.
|
|
||||||
throw_exception
|
|
||||||
siglongjmp
|
|
||||||
|
|
||||||
RHEL Bug 175270
|
|
||||||
|
|
||||||
Index: gdb-6.8cvs20080219/gdb/i386-linux-nat.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/i386-linux-nat.c 2008-01-10 19:19:02.000000000 +0100
|
|
||||||
+++ gdb-6.8cvs20080219/gdb/i386-linux-nat.c 2008-02-24 09:23:09.000000000 +0100
|
|
||||||
@@ -24,6 +24,7 @@
|
|
||||||
#include "regcache.h"
|
|
||||||
#include "target.h"
|
|
||||||
#include "linux-nat.h"
|
|
||||||
+#include "exceptions.h"
|
|
||||||
|
|
||||||
#include "gdb_assert.h"
|
|
||||||
#include "gdb_string.h"
|
|
||||||
@@ -611,20 +612,40 @@ i386_linux_dr_get (ptid_t ptid, int regn
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void
|
|
||||||
-i386_linux_dr_set (ptid_t ptid, int regnum, unsigned long value)
|
|
||||||
-{
|
|
||||||
- int tid;
|
|
||||||
+struct i386_linux_dr_set
|
|
||||||
+ {
|
|
||||||
+ int tid;
|
|
||||||
+ int regnum;
|
|
||||||
+ unsigned long value;
|
|
||||||
+ };
|
|
||||||
|
|
||||||
- tid = TIDGET (ptid);
|
|
||||||
- if (tid == 0)
|
|
||||||
- tid = PIDGET (ptid);
|
|
||||||
+static int
|
|
||||||
+i386_linux_dr_set_core (void *data_pointer)
|
|
||||||
+{
|
|
||||||
+ struct i386_linux_dr_set *data = data_pointer;
|
|
||||||
|
|
||||||
errno = 0;
|
|
||||||
- ptrace (PTRACE_POKEUSER, tid,
|
|
||||||
- offsetof (struct user, u_debugreg[regnum]), value);
|
|
||||||
+ ptrace (PTRACE_POKEUSER, data->tid,
|
|
||||||
+ offsetof (struct user, u_debugreg[data->regnum]), data->value);
|
|
||||||
if (errno != 0)
|
|
||||||
perror_with_name (_("Couldn't write debug register"));
|
|
||||||
+ return 1;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int
|
|
||||||
+i386_linux_dr_set (ptid_t ptid, int regnum, unsigned long value)
|
|
||||||
+{
|
|
||||||
+ struct i386_linux_dr_set data;
|
|
||||||
+ int tid;
|
|
||||||
+
|
|
||||||
+ data.tid = TIDGET (ptid);
|
|
||||||
+ if (data.tid == 0)
|
|
||||||
+ data.tid = PIDGET (ptid);
|
|
||||||
+
|
|
||||||
+ data.regnum = regnum;
|
|
||||||
+ data.value = value;
|
|
||||||
+
|
|
||||||
+ return catch_errors (i386_linux_dr_set_core, &data, "", RETURN_MASK_ALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Index: gdb-6.8cvs20080219/gdb/Makefile.in
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/Makefile.in 2008-02-24 09:13:35.000000000 +0100
|
|
||||||
+++ gdb-6.8cvs20080219/gdb/Makefile.in 2008-02-24 09:14:26.000000000 +0100
|
|
||||||
@@ -2252,7 +2252,7 @@ i386gnu-tdep.o: i386gnu-tdep.c $(defs_h)
|
|
||||||
i386-linux-nat.o: i386-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \
|
|
||||||
$(regcache_h) $(linux_nat_h) $(gdb_assert_h) $(gdb_string_h) \
|
|
||||||
$(gregset_h) $(i387_tdep_h) $(i386_tdep_h) $(i386_linux_tdep_h) \
|
|
||||||
- $(gdb_proc_service_h) $(target_h)
|
|
||||||
+ $(gdb_proc_service_h) $(target_h) $(exceptions_h)
|
|
||||||
i386-linux-tdep.o: i386-linux-tdep.c $(defs_h) $(gdbcore_h) $(frame_h) \
|
|
||||||
$(value_h) $(regcache_h) $(inferior_h) $(osabi_h) $(reggroups_h) \
|
|
||||||
$(dwarf2_frame_h) $(gdb_string_h) $(i386_tdep_h) \
|
|
@ -1,24 +0,0 @@
|
|||||||
2005-02-01 Jeff Johnston <jjohnstn@redhat.com>
|
|
||||||
|
|
||||||
* dwarf2read.c (die_type): Tolerate a type reference to location
|
|
||||||
<0> and treat as unknown type.
|
|
||||||
|
|
||||||
2008-02-24 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
Port to GDB-6.8pre.
|
|
||||||
|
|
||||||
Index: gdb-6.8cvs20080219/gdb/dwarf2read.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/dwarf2read.c 2008-02-22 08:10:39.000000000 +0100
|
|
||||||
+++ gdb-6.8cvs20080219/gdb/dwarf2read.c 2008-02-22 08:17:56.000000000 +0100
|
|
||||||
@@ -7634,6 +7634,10 @@ die_type (struct die_info *die, struct d
|
|
||||||
/* A missing DW_AT_type represents a void type. */
|
|
||||||
return builtin_type (current_gdbarch)->builtin_void;
|
|
||||||
}
|
|
||||||
+ else if (DW_ADDR (type_attr) == 0)
|
|
||||||
+ /* If we have an invalid reference to 0, ignore it and treat
|
|
||||||
+ the type as unknown. */
|
|
||||||
+ return builtin_type_error;
|
|
||||||
else
|
|
||||||
type_die = follow_die_ref (die, type_attr, cu);
|
|
||||||
|
|
@ -3,14 +3,11 @@
|
|||||||
* frame.c (get_prev_frame): Stop backtrace when a zero PC and
|
* frame.c (get_prev_frame): Stop backtrace when a zero PC and
|
||||||
successive normal frames.
|
successive normal frames.
|
||||||
|
|
||||||
Index: ./gdb/frame.c
|
Index: gdb-6.8.50.20081128/gdb/frame.c
|
||||||
===================================================================
|
===================================================================
|
||||||
RCS file: /cvs/src/src/gdb/frame.c,v
|
--- gdb-6.8.50.20081128.orig/gdb/frame.c 2008-12-04 01:34:37.000000000 +0100
|
||||||
retrieving revision 1.191
|
+++ gdb-6.8.50.20081128/gdb/frame.c 2008-12-04 01:35:47.000000000 +0100
|
||||||
diff -p -u -r1.191 frame.c
|
@@ -1566,6 +1566,18 @@ get_prev_frame (struct frame_info *this_
|
||||||
--- ./gdb/frame.c 1 Sep 2004 14:13:33 -0000 1.191
|
|
||||||
+++ ./gdb/frame.c 28 Sep 2004 02:45:58 -0000
|
|
||||||
@@ -1235,6 +1235,18 @@ get_prev_frame (struct frame_info *this_
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -22,7 +19,7 @@ diff -p -u -r1.191 frame.c
|
|||||||
+ && 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)
|
||||||
+ {
|
+ {
|
||||||
+ frame_debug_got_null_frame (gdb_stdlog, this_frame, "zero PC");
|
+ frame_debug_got_null_frame (this_frame, "zero PC");
|
||||||
+ return NULL;
|
+ return NULL;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
|
@ -3,17 +3,17 @@
|
|||||||
* linux-nat.c (linux_nat_xfer_memory): Don't use
|
* linux-nat.c (linux_nat_xfer_memory): Don't use
|
||||||
linux_proc_xfer_memory for ia64.
|
linux_proc_xfer_memory for ia64.
|
||||||
|
|
||||||
Index: gdb-6.5/gdb/linux-nat.c
|
Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.5.orig/gdb/linux-nat.c 2006-07-07 00:57:56.000000000 -0300
|
--- gdb-6.8.50.20081209.orig/gdb/linux-nat.c 2008-12-10 01:22:23.000000000 +0100
|
||||||
+++ gdb-6.5/gdb/linux-nat.c 2006-07-07 02:24:51.000000000 -0300
|
+++ gdb-6.8.50.20081209/gdb/linux-nat.c 2008-12-10 01:25:26.000000000 +0100
|
||||||
@@ -3152,10 +3152,15 @@ linux_xfer_partial (struct target_ops *o
|
@@ -4123,10 +4123,15 @@ linux_xfer_partial (struct target_ops *o
|
||||||
return procfs_xfer_auxv (ops, object, annex, readbuf, writebuf,
|
return linux_nat_xfer_osdata (ops, object, annex, readbuf, writebuf,
|
||||||
offset, len);
|
offset, len);
|
||||||
|
|
||||||
+#ifndef NATIVE_XFER_UNWIND_TABLE
|
+#ifndef NATIVE_XFER_UNWIND_TABLE
|
||||||
+ /* FIXME: For ia64, we cannot currently use linux_proc_xfer_memory
|
+ /* FIXME: For ia64, we cannot currently use linux_proc_xfer_memory
|
||||||
+ for accessing thread storage. Revert when Bugzilla 147436
|
+ for accessing thread storage. Revert when Bugzilla 147436
|
||||||
+ is fixed. */
|
+ is fixed. */
|
||||||
xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
|
xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
|
||||||
offset, len);
|
offset, len);
|
||||||
|
@ -4,11 +4,11 @@
|
|||||||
to install and uninstall.
|
to install and uninstall.
|
||||||
* gstack.sh, gstack.1: New files.
|
* gstack.sh, gstack.1: New files.
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/Makefile.in
|
Index: gdb-6.8.50.20081128/gdb/Makefile.in
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/Makefile.in 2008-03-17 13:15:08.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/Makefile.in 2008-12-01 16:11:48.000000000 +0100
|
||||||
+++ gdb-6.8/gdb/Makefile.in 2008-07-14 10:25:47.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/Makefile.in 2008-12-01 16:14:11.000000000 +0100
|
||||||
@@ -1161,7 +1161,7 @@ gdb.z:gdb.1
|
@@ -902,7 +902,7 @@ gdb.z:gdb.1
|
||||||
# time it takes for make to check that all is up to date.
|
# time it takes for make to check that all is up to date.
|
||||||
# install-only is intended to address that need.
|
# install-only is intended to address that need.
|
||||||
install: all install-only
|
install: all install-only
|
||||||
@ -17,7 +17,7 @@ Index: gdb-6.8/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 \
|
||||||
@@ -1193,9 +1193,26 @@ install-tui:
|
@@ -934,9 +934,26 @@ install-tui:
|
||||||
$(DESTDIR)$(man1dir) ; \
|
$(DESTDIR)$(man1dir) ; \
|
||||||
$(INSTALL_DATA) $(srcdir)/gdb.1 \
|
$(INSTALL_DATA) $(srcdir)/gdb.1 \
|
||||||
$(DESTDIR)$(man1dir)/$$transformed_name.1
|
$(DESTDIR)$(man1dir)/$$transformed_name.1
|
||||||
@ -45,7 +45,7 @@ Index: gdb-6.8/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 \
|
||||||
@@ -1217,6 +1234,17 @@ uninstall-tui:
|
@@ -958,6 +975,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,11 +62,11 @@ Index: gdb-6.8/gdb/Makefile.in
|
|||||||
+ $(DESTDIR)$(man1dir)/$$transformed_name.1
|
+ $(DESTDIR)$(man1dir)/$$transformed_name.1
|
||||||
|
|
||||||
# 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 $(safe_ctype_h) $(libiberty_h) \
|
test-cp-name-parser.o: cp-name-parser.c
|
||||||
Index: gdb-6.8/gdb/gstack.sh
|
Index: gdb-6.8.50.20081128/gdb/gstack.sh
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.8/gdb/gstack.sh 2008-07-14 10:25:47.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/gstack.sh 2008-12-01 16:13:16.000000000 +0100
|
||||||
@@ -0,0 +1,45 @@
|
@@ -0,0 +1,45 @@
|
||||||
+#!/bin/sh
|
+#!/bin/sh
|
||||||
+
|
+
|
||||||
|
@ -1,33 +0,0 @@
|
|||||||
Index: gdb-6.3/gdb/linux-nat.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.3.orig/gdb/linux-nat.c 2006-06-15 07:27:02.000000000 -0300
|
|
||||||
+++ gdb-6.3/gdb/linux-nat.c 2006-06-15 07:27:06.000000000 -0300
|
|
||||||
@@ -157,12 +157,28 @@ static int
|
|
||||||
my_waitpid (int pid, int *status, int flags)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
+ int old_status = status ? *status : 0;
|
|
||||||
+
|
|
||||||
do
|
|
||||||
{
|
|
||||||
ret = waitpid (pid, status, flags);
|
|
||||||
}
|
|
||||||
while (ret == -1 && errno == EINTR);
|
|
||||||
|
|
||||||
+ if (ret == 0 && status != 0)
|
|
||||||
+ {
|
|
||||||
+ /* waitpid() running within ia32el (on multi-threaded processes
|
|
||||||
+ only?) modifies status even when it returns zero, and this
|
|
||||||
+ breaks the assumption in linux_nat_wait(), and perhaps
|
|
||||||
+ elsewhere, that it remains unchanged in this case. We
|
|
||||||
+ restore the old value before returning zero, such that the
|
|
||||||
+ assumption holds. */
|
|
||||||
+ if (*status != 0 && *status != old_status)
|
|
||||||
+ warning ("waitpid: non-zero status %x for zero return value",
|
|
||||||
+ *status);
|
|
||||||
+ *status = old_status;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
Index: gdb-6.6/gdb/gcore.c
|
Index: gdb-6.8.50.20081128/gdb/gcore.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.6.orig/gdb/gcore.c
|
--- gdb-6.8.50.20081128.orig/gdb/gcore.c 2008-09-11 16:27:34.000000000 +0200
|
||||||
+++ gdb-6.6/gdb/gcore.c
|
+++ gdb-6.8.50.20081128/gdb/gcore.c 2008-12-01 16:39:04.000000000 +0100
|
||||||
@@ -475,8 +475,14 @@ gcore_copy_callback (bfd *obfd, asection
|
@@ -475,8 +475,14 @@ gcore_copy_callback (bfd *obfd, asection
|
||||||
if (size > total_size)
|
if (size > total_size)
|
||||||
size = total_size;
|
size = total_size;
|
||||||
@ -17,4 +17,4 @@ Index: gdb-6.6/gdb/gcore.c
|
|||||||
+ || bfd_section_vma (obfd, osec) != 0))
|
+ || bfd_section_vma (obfd, osec) != 0))
|
||||||
{
|
{
|
||||||
warning (_("Memory read failed for corefile section, %s bytes at 0x%s."),
|
warning (_("Memory read failed for corefile section, %s bytes at 0x%s."),
|
||||||
paddr_d (size), paddr (bfd_section_vma (obfd, osec)));
|
plongest (size), paddr (bfd_section_vma (obfd, osec)));
|
||||||
|
@ -7,11 +7,11 @@
|
|||||||
(ia64_rse_skip_regs): Ditto.
|
(ia64_rse_skip_regs): Ditto.
|
||||||
(ia64_linux_check_stack_region): New function.
|
(ia64_linux_check_stack_region): New function.
|
||||||
|
|
||||||
Index: gdb-6.5/gdb/linux-nat.c
|
Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.5.orig/gdb/linux-nat.c 2006-07-07 02:29:12.000000000 -0300
|
--- gdb-6.8.50.20081209.orig/gdb/linux-nat.c 2008-12-10 01:25:43.000000000 +0100
|
||||||
+++ gdb-6.5/gdb/linux-nat.c 2006-07-07 03:03:55.000000000 -0300
|
+++ gdb-6.8.50.20081209/gdb/linux-nat.c 2008-12-10 01:27:09.000000000 +0100
|
||||||
@@ -2473,7 +2473,9 @@ linux_nat_xfer_partial (struct target_op
|
@@ -3246,7 +3246,9 @@ linux_nat_xfer_partial (struct target_op
|
||||||
do_cleanups (old_chain);
|
do_cleanups (old_chain);
|
||||||
return xfer;
|
return xfer;
|
||||||
}
|
}
|
||||||
@ -22,13 +22,13 @@ Index: gdb-6.5/gdb/linux-nat.c
|
|||||||
static int
|
static int
|
||||||
linux_nat_thread_alive (ptid_t ptid)
|
linux_nat_thread_alive (ptid_t ptid)
|
||||||
{
|
{
|
||||||
@@ -3214,15 +3216,34 @@ linux_xfer_partial (struct target_ops *o
|
@@ -4148,15 +4150,34 @@ linux_xfer_partial (struct target_ops *o
|
||||||
return procfs_xfer_auxv (ops, object, annex, readbuf, writebuf,
|
return linux_nat_xfer_osdata (ops, object, annex, readbuf, writebuf,
|
||||||
offset, len);
|
offset, len);
|
||||||
|
|
||||||
-#ifndef NATIVE_XFER_UNWIND_TABLE
|
-#ifndef NATIVE_XFER_UNWIND_TABLE
|
||||||
- /* FIXME: For ia64, we cannot currently use linux_proc_xfer_memory
|
- /* FIXME: For ia64, we cannot currently use linux_proc_xfer_memory
|
||||||
- for accessing thread storage. Revert when Bugzilla 147436
|
- for accessing thread storage. Revert when Bugzilla 147436
|
||||||
- is fixed. */
|
- is fixed. */
|
||||||
xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
|
xfer = linux_proc_xfer_partial (ops, object, annex, readbuf, writebuf,
|
||||||
offset, len);
|
offset, len);
|
||||||
@ -62,11 +62,11 @@ Index: gdb-6.5/gdb/linux-nat.c
|
|||||||
|
|
||||||
return super_xfer_partial (ops, object, annex, readbuf, writebuf,
|
return super_xfer_partial (ops, object, annex, readbuf, writebuf,
|
||||||
offset, len);
|
offset, len);
|
||||||
Index: gdb-6.5/gdb/ia64-linux-nat.c
|
Index: gdb-6.8.50.20081209/gdb/ia64-linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.5.orig/gdb/ia64-linux-nat.c 2006-03-24 20:08:16.000000000 -0300
|
--- gdb-6.8.50.20081209.orig/gdb/ia64-linux-nat.c 2008-08-15 10:08:27.000000000 +0200
|
||||||
+++ gdb-6.5/gdb/ia64-linux-nat.c 2006-07-07 02:52:25.000000000 -0300
|
+++ gdb-6.8.50.20081209/gdb/ia64-linux-nat.c 2008-12-10 01:25:53.000000000 +0100
|
||||||
@@ -687,6 +687,64 @@ ia64_linux_xfer_partial (struct target_o
|
@@ -807,6 +807,64 @@ ia64_linux_xfer_partial (struct target_o
|
||||||
|
|
||||||
void _initialize_ia64_linux_nat (void);
|
void _initialize_ia64_linux_nat (void);
|
||||||
|
|
||||||
|
@ -12,10 +12,10 @@ gdb/testsuite:
|
|||||||
* gdb.arch/ia64-sigill.c: New test.
|
* gdb.arch/ia64-sigill.c: New test.
|
||||||
* gdb.arch/ia64-sigill.exp: Ditto.
|
* gdb.arch/ia64-sigill.exp: Ditto.
|
||||||
|
|
||||||
Index: gdb-6.6/gdb/testsuite/gdb.arch/ia64-sigill.exp
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.arch/ia64-sigill.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.6/gdb/testsuite/gdb.arch/ia64-sigill.exp
|
+++ 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,59 @@
|
||||||
+# Copyright 2005 Free Software Foundation, Inc.
|
+# Copyright 2005 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
@ -76,10 +76,10 @@ Index: gdb-6.6/gdb/testsuite/gdb.arch/ia64-sigill.exp
|
|||||||
+gdb_test "handle SIGILL nostop noprint" "SIGILL.*No.*No.*Yes.*" "handle sigill"
|
+gdb_test "handle SIGILL nostop noprint" "SIGILL.*No.*No.*Yes.*" "handle sigill"
|
||||||
+gdb_test "run" "Starting program.*ia64-sigill.*\[New thread.*\].*hello world.*Program exited normally." "run to exit"
|
+gdb_test "run" "Starting program.*ia64-sigill.*\[New thread.*\].*hello world.*Program exited normally." "run to exit"
|
||||||
+
|
+
|
||||||
Index: gdb-6.6/gdb/testsuite/gdb.arch/ia64-sigill.c
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.arch/ia64-sigill.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.6/gdb/testsuite/gdb.arch/ia64-sigill.c
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.arch/ia64-sigill.c 2008-12-02 21:10:57.000000000 +0100
|
||||||
@@ -0,0 +1,8 @@
|
@@ -0,0 +1,8 @@
|
||||||
+#include <stdio.h>
|
+#include <stdio.h>
|
||||||
+
|
+
|
||||||
@ -89,11 +89,11 @@ Index: gdb-6.6/gdb/testsuite/gdb.arch/ia64-sigill.c
|
|||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
Index: gdb-6.6/gdb/linux-nat.c
|
Index: gdb-6.8.50.20081128/gdb/linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.6.orig/gdb/linux-nat.c
|
--- gdb-6.8.50.20081128.orig/gdb/linux-nat.c 2008-12-02 19:04:38.000000000 +0100
|
||||||
+++ gdb-6.6/gdb/linux-nat.c
|
+++ gdb-6.8.50.20081128/gdb/linux-nat.c 2008-12-02 21:11:11.000000000 +0100
|
||||||
@@ -2241,7 +2241,8 @@ retry:
|
@@ -2974,7 +2974,8 @@ retry:
|
||||||
threads can be a bit time-consuming so if we want decent
|
threads can be a bit time-consuming so if we want decent
|
||||||
performance with heavily multi-threaded programs, especially when
|
performance with heavily multi-threaded programs, especially when
|
||||||
they're using a high frequency timer, we'd better avoid it if we
|
they're using a high frequency timer, we'd better avoid it if we
|
||||||
@ -103,8 +103,8 @@ Index: gdb-6.6/gdb/linux-nat.c
|
|||||||
|
|
||||||
if (WIFSTOPPED (status))
|
if (WIFSTOPPED (status))
|
||||||
{
|
{
|
||||||
@@ -2252,7 +2253,9 @@ retry:
|
@@ -2992,7 +2993,9 @@ retry:
|
||||||
if (!lp->step
|
&& inf->stop_soon == NO_STOP_QUIETLY
|
||||||
&& signal_stop_state (signo) == 0
|
&& signal_stop_state (signo) == 0
|
||||||
&& signal_print_state (signo) == 0
|
&& signal_print_state (signo) == 0
|
||||||
- && signal_pass_state (signo) == 1)
|
- && signal_pass_state (signo) == 1)
|
||||||
|
@ -24,10 +24,10 @@
|
|||||||
|
|
||||||
Fix a compilation error on a typo.
|
Fix a compilation error on a typo.
|
||||||
|
|
||||||
Index: gdb-6.8cvs20080219/gdb/libunwind-frame.c
|
Index: gdb-6.8.50.20081128/gdb/libunwind-frame.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/libunwind-frame.c 2008-01-02 00:04:03.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/libunwind-frame.c 2008-05-06 20:37:46.000000000 +0200
|
||||||
+++ gdb-6.8cvs20080219/gdb/libunwind-frame.c 2008-02-24 20:25:56.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/libunwind-frame.c 2008-12-02 19:46:26.000000000 +0100
|
||||||
@@ -61,6 +61,7 @@ static unw_word_t (*unw_find_dyn_list_p)
|
@@ -61,6 +61,7 @@ static unw_word_t (*unw_find_dyn_list_p)
|
||||||
struct libunwind_frame_cache
|
struct libunwind_frame_cache
|
||||||
{
|
{
|
||||||
@ -44,10 +44,10 @@ Index: gdb-6.8cvs20080219/gdb/libunwind-frame.c
|
|||||||
unw_regnum_t uw_sp_regnum;
|
unw_regnum_t uw_sp_regnum;
|
||||||
struct libunwind_frame_cache *cache;
|
struct libunwind_frame_cache *cache;
|
||||||
struct libunwind_descr *descr;
|
struct libunwind_descr *descr;
|
||||||
@@ -171,14 +173,30 @@ libunwind_frame_cache (struct frame_info
|
@@ -174,14 +176,30 @@ libunwind_frame_cache (struct frame_info
|
||||||
: __LITTLE_ENDIAN);
|
: __LITTLE_ENDIAN);
|
||||||
|
|
||||||
unw_init_remote_p (&cache->cursor, as, next_frame);
|
unw_init_remote_p (&cache->cursor, as, this_frame);
|
||||||
+
|
+
|
||||||
+ /* For the base address, we have a small problem. The majority
|
+ /* For the base address, we have a small problem. The majority
|
||||||
+ of the time, we can get the stack pointer of the previous
|
+ of the time, we can get the stack pointer of the previous
|
||||||
@ -77,7 +77,7 @@ Index: gdb-6.8cvs20080219/gdb/libunwind-frame.c
|
|||||||
ret = unw_get_reg_p (&cache->cursor, uw_sp_regnum, &fp);
|
ret = unw_get_reg_p (&cache->cursor, uw_sp_regnum, &fp);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
{
|
{
|
||||||
@@ -186,6 +204,7 @@ libunwind_frame_cache (struct frame_info
|
@@ -189,6 +207,7 @@ libunwind_frame_cache (struct frame_info
|
||||||
error (_("Can't get libunwind sp register."));
|
error (_("Can't get libunwind sp register."));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,17 +85,17 @@ Index: gdb-6.8cvs20080219/gdb/libunwind-frame.c
|
|||||||
cache->base = (CORE_ADDR)fp;
|
cache->base = (CORE_ADDR)fp;
|
||||||
cache->as = as;
|
cache->as = as;
|
||||||
|
|
||||||
@@ -381,6 +400,31 @@ libunwind_search_unwind_table (void *as,
|
@@ -376,6 +395,31 @@ libunwind_search_unwind_table (void *as,
|
||||||
di, pi, need_unwind_info, args);
|
di, pi, need_unwind_info, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
+void
|
+void
|
||||||
+libunwind_sigtramp_frame_this_id (struct frame_info *next_frame,
|
+libunwind_sigtramp_frame_this_id (struct frame_info *this_frame,
|
||||||
+ void **this_cache,
|
+ void **this_cache,
|
||||||
+ struct frame_id *this_id)
|
+ struct frame_id *this_id)
|
||||||
+{
|
+{
|
||||||
+ struct libunwind_frame_cache *cache =
|
+ struct libunwind_frame_cache *cache =
|
||||||
+ libunwind_frame_cache (next_frame, this_cache);
|
+ libunwind_frame_cache (this_frame, this_cache);
|
||||||
+
|
+
|
||||||
+ /* Unlike a regular frame, we can't use the normal frame pointer
|
+ /* Unlike a regular frame, we can't use the normal frame pointer
|
||||||
+ mechanism because a sigaltstack may have been used. Instead,
|
+ mechanism because a sigaltstack may have been used. Instead,
|
||||||
@ -115,46 +115,37 @@ Index: gdb-6.8cvs20080219/gdb/libunwind-frame.c
|
|||||||
+};
|
+};
|
||||||
+
|
+
|
||||||
/* Verify if we are in a sigtramp frame and we can use libunwind to unwind. */
|
/* Verify if we are in a sigtramp frame and we can use libunwind to unwind. */
|
||||||
const struct frame_unwind *
|
int
|
||||||
libunwind_sigtramp_frame_sniffer (struct frame_info *next_frame)
|
libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self,
|
||||||
@@ -419,7 +463,7 @@ libunwind_sigtramp_frame_sniffer (struct
|
Index: gdb-6.8.50.20081128/gdb/libunwind-frame.h
|
||||||
ret = unw_is_signal_frame_p (&cursor);
|
|
||||||
unw_destroy_addr_space_p (as);
|
|
||||||
if (ret > 0)
|
|
||||||
- return &libunwind_frame_unwind;
|
|
||||||
+ return &libunwind_sigtramp_frame_unwind;
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
Index: gdb-6.8cvs20080219/gdb/libunwind-frame.h
|
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/libunwind-frame.h 2008-01-02 00:04:03.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/libunwind-frame.h 2008-05-06 20:37:46.000000000 +0200
|
||||||
+++ gdb-6.8cvs20080219/gdb/libunwind-frame.h 2008-02-24 20:23:47.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/libunwind-frame.h 2008-12-02 19:38:55.000000000 +0100
|
||||||
@@ -47,6 +47,9 @@ void libunwind_frame_set_descr (struct g
|
@@ -52,6 +52,9 @@ void libunwind_frame_set_descr (struct g
|
||||||
|
|
||||||
void libunwind_frame_this_id (struct frame_info *next_frame, void **this_cache,
|
void libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
|
||||||
struct frame_id *this_id);
|
struct frame_id *this_id);
|
||||||
+void libunwind_sigtramp_frame_this_id (struct frame_info *next_frame,
|
+void libunwind_sigtramp_frame_this_id (struct frame_info *this_frame,
|
||||||
+ void **this_cache,
|
+ void **this_cache,
|
||||||
+ struct frame_id *this_id);
|
+ struct frame_id *this_id);
|
||||||
void libunwind_frame_prev_register (struct frame_info *next_frame, void **this_cache,
|
struct value *libunwind_frame_prev_register (struct frame_info *this_frame,
|
||||||
int regnum, int *optimizedp,
|
void **this_cache, int regnum);
|
||||||
enum lval_type *lvalp, CORE_ADDR *addrp,
|
void libunwind_frame_dealloc_cache (struct frame_info *self, void *cache);
|
||||||
Index: gdb-6.8cvs20080219/gdb/ia64-tdep.c
|
Index: gdb-6.8.50.20081128/gdb/ia64-tdep.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/ia64-tdep.c 2008-02-24 20:23:40.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/ia64-tdep.c 2008-12-02 19:04:32.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/ia64-tdep.c 2008-02-24 20:23:47.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/ia64-tdep.c 2008-12-02 21:09:46.000000000 +0100
|
||||||
@@ -2942,7 +2942,7 @@ ia64_libunwind_sigtramp_frame_this_id (s
|
@@ -2964,7 +2964,7 @@ ia64_libunwind_sigtramp_frame_this_id (s
|
||||||
struct frame_id id;
|
struct frame_id id;
|
||||||
CORE_ADDR prev_ip;
|
CORE_ADDR prev_ip;
|
||||||
|
|
||||||
- libunwind_frame_this_id (next_frame, this_cache, &id);
|
- libunwind_frame_this_id (this_frame, this_cache, &id);
|
||||||
+ libunwind_sigtramp_frame_this_id (next_frame, this_cache, &id);
|
+ libunwind_sigtramp_frame_this_id (this_frame, this_cache, &id);
|
||||||
if (frame_id_eq (id, null_frame_id))
|
if (frame_id_eq (id, null_frame_id))
|
||||||
{
|
{
|
||||||
(*this_id) = null_frame_id;
|
(*this_id) = null_frame_id;
|
||||||
@@ -2954,8 +2954,14 @@ ia64_libunwind_sigtramp_frame_this_id (s
|
@@ -2976,8 +2976,14 @@ ia64_libunwind_sigtramp_frame_this_id (s
|
||||||
frame_unwind_register (next_frame, IA64_BSP_REGNUM, buf);
|
get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
|
||||||
bsp = extract_unsigned_integer (buf, 8);
|
bsp = extract_unsigned_integer (buf, 8);
|
||||||
|
|
||||||
- /* For a sigtramp frame, we don't make the check for previous ip being 0. */
|
- /* For a sigtramp frame, we don't make the check for previous ip being 0. */
|
||||||
|
@ -8,33 +8,34 @@
|
|||||||
* ia64-tdep.c (ia64_sigtramp_frame_prev_register): Fix an
|
* ia64-tdep.c (ia64_sigtramp_frame_prev_register): Fix an
|
||||||
ISO C compliance compilation error.
|
ISO C compliance compilation error.
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/ia64-tdep.c
|
2008-02-12 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
|
Port to gdb-6.8.50.20081128, follow the upstream change:
|
||||||
|
http://sourceware.org/cgi-bin/cvsweb.cgi/src/gdb/ia64-tdep.c.diff?cvsroot=src&r1=1.176&r2=1.177
|
||||||
|
|
||||||
|
Index: gdb-6.8.50.20081128/gdb/ia64-tdep.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/ia64-tdep.c 2008-07-14 10:24:32.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/ia64-tdep.c 2008-11-26 06:27:48.000000000 +0100
|
||||||
+++ gdb-6.8/gdb/ia64-tdep.c 2008-07-14 10:26:46.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/ia64-tdep.c 2008-12-02 19:04:32.000000000 +0100
|
||||||
@@ -2043,7 +2043,100 @@ ia64_sigtramp_frame_prev_register (struc
|
@@ -2107,6 +2107,94 @@ ia64_sigtramp_frame_prev_register (struc
|
||||||
pc &= ~0xf;
|
return frame_unwind_got_constant (this_frame, regnum, pc);
|
||||||
store_unsigned_integer (valuep, 8, pc);
|
|
||||||
}
|
}
|
||||||
- else if ((regnum >= IA64_GR32_REGNUM && regnum <= IA64_GR127_REGNUM) ||
|
|
||||||
|
+ /* Red Hat patch begin. */
|
||||||
+ else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
|
+ else if (IA64_NAT0_REGNUM <= regnum && regnum <= IA64_NAT31_REGNUM)
|
||||||
+ {
|
+ {
|
||||||
+ /* NAT pseudo registers 0-31: get them from UNAT.
|
+ /* NAT pseudo registers 0-31: get them from UNAT.
|
||||||
+ * "copied" from ia64_pseudo_register_read() */
|
+ * "copied" from ia64_pseudo_register_read() */
|
||||||
+ CORE_ADDR addr = 0;
|
|
||||||
+ ULONGEST unatN_val;
|
+ ULONGEST unatN_val;
|
||||||
+ ULONGEST unat;
|
+ ULONGEST unat;
|
||||||
+ read_memory (cache->saved_regs[IA64_UNAT_REGNUM], (char *) &unat,
|
+ read_memory (cache->saved_regs[IA64_UNAT_REGNUM], (char *) &unat,
|
||||||
+ register_size (current_gdbarch, IA64_UNAT_REGNUM));
|
+ register_size (current_gdbarch, IA64_UNAT_REGNUM));
|
||||||
+ unatN_val = (unat & (1LL << (regnum - IA64_NAT0_REGNUM))) != 0;
|
+ unatN_val = (unat & (1LL << (regnum - IA64_NAT0_REGNUM))) != 0;
|
||||||
+ store_unsigned_integer (valuep, register_size (current_gdbarch, regnum),
|
+ return frame_unwind_got_constant (this_frame, regnum, unatN_val);
|
||||||
+ unatN_val);
|
|
||||||
+ *lvalp = lval_memory;
|
|
||||||
+ *addrp = cache->saved_regs[IA64_UNAT_REGNUM];
|
|
||||||
+ }
|
+ }
|
||||||
+ else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
|
+ else if (IA64_NAT32_REGNUM <= regnum && regnum <= IA64_NAT127_REGNUM)
|
||||||
+ {
|
+ {
|
||||||
+ /* NAT pseudo registers 32-127.
|
+ /* NAT pseudo registers 32-127.
|
||||||
+ * "copied" from ia64_pseudo_register_read()
|
+ * "copied" from ia64_pseudo_register_read()
|
||||||
+ * FIXME: Not currently tested -- cannot get the frame to include
|
+ * FIXME: Not currently tested -- cannot get the frame to include
|
||||||
+ * NAT32-NAT127. */
|
+ * NAT32-NAT127. */
|
||||||
@ -43,18 +44,18 @@ Index: gdb-6.8/gdb/ia64-tdep.c
|
|||||||
+ ULONGEST natN_val = 0;
|
+ ULONGEST natN_val = 0;
|
||||||
+ CORE_ADDR gr_addr = 0, nat_addr = 0;
|
+ CORE_ADDR gr_addr = 0, nat_addr = 0;
|
||||||
+
|
+
|
||||||
+ read_memory (cache->saved_regs[IA64_BSP_REGNUM], (char *) &bsp,
|
+ read_memory (cache->saved_regs[IA64_BSP_REGNUM], (char *) &bsp,
|
||||||
+ register_size (current_gdbarch, IA64_BSP_REGNUM));
|
+ register_size (current_gdbarch, IA64_BSP_REGNUM));
|
||||||
+ read_memory (cache->saved_regs[IA64_CFM_REGNUM], (char *) &cfm,
|
+ read_memory (cache->saved_regs[IA64_CFM_REGNUM], (char *) &cfm,
|
||||||
+ register_size (current_gdbarch, IA64_CFM_REGNUM));
|
+ register_size (current_gdbarch, IA64_CFM_REGNUM));
|
||||||
+
|
+
|
||||||
+ /* The bsp points at the end of the register frame so we
|
+ /* The bsp points at the end of the register frame so we
|
||||||
+ subtract the size of frame from it to get start of register frame. */
|
+ subtract the size of frame from it to get start of register frame. */
|
||||||
+ bsp = rse_address_add (bsp, -(cfm & 0x7f));
|
+ bsp = rse_address_add (bsp, -(cfm & 0x7f));
|
||||||
+
|
+
|
||||||
+ if ((cfm & 0x7f) > regnum - V32_REGNUM)
|
+ if ((cfm & 0x7f) > regnum - V32_REGNUM)
|
||||||
+ gr_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
|
+ gr_addr = rse_address_add (bsp, (regnum - V32_REGNUM));
|
||||||
+
|
+
|
||||||
+ if (gr_addr != 0)
|
+ if (gr_addr != 0)
|
||||||
+ {
|
+ {
|
||||||
+ /* Compute address of nat collection bits */
|
+ /* Compute address of nat collection bits */
|
||||||
@ -65,30 +66,28 @@ Index: gdb-6.8/gdb/ia64-tdep.c
|
|||||||
+ the nat collection from rnat. Otherwise, we fetch the nat
|
+ the nat collection from rnat. Otherwise, we fetch the nat
|
||||||
+ collection from the computed address. FIXME: Do not know if
|
+ collection from the computed address. FIXME: Do not know if
|
||||||
+ RNAT can be not stored in the frame--being extra cautious. */
|
+ RNAT can be not stored in the frame--being extra cautious. */
|
||||||
+ if (nat_addr >= bsp)
|
+ if (nat_addr >= bsp)
|
||||||
+ {
|
+ {
|
||||||
+ nat_addr = cache->saved_regs[IA64_RNAT_REGNUM];
|
+ nat_addr = cache->saved_regs[IA64_RNAT_REGNUM];
|
||||||
+ if (nat_addr != 0)
|
+ if (nat_addr != 0)
|
||||||
+ read_memory (nat_addr, (char *) &nat_collection,
|
+ read_memory (nat_addr, (char *) &nat_collection,
|
||||||
+ register_size (current_gdbarch, IA64_RNAT_REGNUM));
|
+ register_size (current_gdbarch, IA64_RNAT_REGNUM));
|
||||||
+ }
|
+ }
|
||||||
+ else
|
+ else
|
||||||
+ nat_collection = read_memory_integer (nat_addr, 8);
|
+ nat_collection = read_memory_integer (nat_addr, 8);
|
||||||
+ if (nat_addr != 0)
|
+ if (nat_addr != 0)
|
||||||
+ {
|
+ {
|
||||||
+ nat_bit = (gr_addr >> 3) & 0x3f;
|
+ nat_bit = (gr_addr >> 3) & 0x3f;
|
||||||
+ natN_val = (nat_collection >> nat_bit) & 1;
|
+ natN_val = (nat_collection >> nat_bit) & 1;
|
||||||
+ *lvalp = lval_memory;
|
+ return frame_unwind_got_constant (this_frame, regnum, natN_val);
|
||||||
+ *addrp = nat_addr;
|
|
||||||
+ store_unsigned_integer (valuep,
|
|
||||||
+ register_size (current_gdbarch, regnum),
|
|
||||||
+ natN_val);
|
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
|
+ warning (_("ia64_sigtramp_frame_prev_register: unhandled register %d"),
|
||||||
|
+ regnum);
|
||||||
+ }
|
+ }
|
||||||
+ else if (regnum == VBOF_REGNUM)
|
+ else if (regnum == VBOF_REGNUM)
|
||||||
+ {
|
+ {
|
||||||
+ /* BOF pseudo register.
|
+ /* BOF pseudo register.
|
||||||
+ * "copied" from ia64_pseudo_register_read()
|
+ * "copied" from ia64_pseudo_register_read()
|
||||||
+ *
|
+ *
|
||||||
+ * A virtual register frame start is provided for user convenience.
|
+ * A virtual register frame start is provided for user convenience.
|
||||||
@ -97,44 +96,45 @@ Index: gdb-6.8/gdb/ia64-tdep.c
|
|||||||
+ ULONGEST cfm;
|
+ ULONGEST cfm;
|
||||||
+ ULONGEST bof;
|
+ ULONGEST bof;
|
||||||
+
|
+
|
||||||
+ read_memory (cache->saved_regs[IA64_BSP_REGNUM], (char *) &bsp,
|
+ read_memory (cache->saved_regs[IA64_BSP_REGNUM], (char *) &bsp,
|
||||||
+ register_size (current_gdbarch, IA64_BSP_REGNUM));
|
+ register_size (current_gdbarch, IA64_BSP_REGNUM));
|
||||||
+ read_memory (cache->saved_regs[IA64_CFM_REGNUM], (char *) &cfm,
|
+ read_memory (cache->saved_regs[IA64_CFM_REGNUM], (char *) &cfm,
|
||||||
+ register_size (current_gdbarch, IA64_CFM_REGNUM));
|
+ register_size (current_gdbarch, IA64_CFM_REGNUM));
|
||||||
+
|
+
|
||||||
+ /* The bsp points at the end of the register frame so we
|
+ /* The bsp points at the end of the register frame so we
|
||||||
+ subtract the size of frame from it to get beginning of frame. */
|
+ subtract the size of frame from it to get beginning of frame. */
|
||||||
+ bof = rse_address_add (bsp, -(cfm & 0x7f));
|
+ bof = rse_address_add (bsp, -(cfm & 0x7f));
|
||||||
+
|
+
|
||||||
+ store_unsigned_integer (valuep, register_size (current_gdbarch, regnum), bof);
|
+ return frame_unwind_got_constant (this_frame, regnum, bof);
|
||||||
+ *lvalp = lval_memory;
|
|
||||||
+ *addrp = 0; // NOTE: pseudo reg not a anywhere really...
|
|
||||||
+ }
|
+ }
|
||||||
+ else if ((regnum >= IA64_GR32_REGNUM && regnum <= IA64_GR127_REGNUM) ||
|
+ /* Red Hat patch end. */
|
||||||
(regnum >= V32_REGNUM && regnum <= V127_REGNUM))
|
+
|
||||||
|
else if ((regnum >= IA64_GR32_REGNUM && regnum <= IA64_GR127_REGNUM)
|
||||||
|
|| (regnum >= V32_REGNUM && regnum <= V127_REGNUM))
|
||||||
{
|
{
|
||||||
CORE_ADDR addr = 0;
|
@@ -2121,7 +2209,42 @@ ia64_sigtramp_frame_prev_register (struc
|
||||||
@@ -2057,6 +2150,39 @@ ia64_sigtramp_frame_prev_register (struc
|
return frame_unwind_got_constant (this_frame, regnum, 0);
|
||||||
read_memory (addr, valuep, register_size (gdbarch, regnum));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- else /* All other registers not listed above. */
|
||||||
|
+ /* Red Hat patch begin. */
|
||||||
+ else if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
|
+ else if (VP0_REGNUM <= regnum && regnum <= VP63_REGNUM)
|
||||||
+ {
|
+ {
|
||||||
+ /* VP 0-63.
|
+ /* VP 0-63.
|
||||||
+ * "copied" from ia64_pseudo_register_read()
|
+ * "copied" from ia64_pseudo_register_read()
|
||||||
+ *
|
+ *
|
||||||
+ * FIXME: Not currently tested--cannot get the frame to include PR. */
|
+ * FIXME: Not currently tested--cannot get the frame to include PR. */
|
||||||
+ CORE_ADDR pr_addr = 0;
|
+ CORE_ADDR pr_addr = 0;
|
||||||
+
|
+
|
||||||
+ pr_addr = cache->saved_regs[IA64_PR_REGNUM];
|
+ pr_addr = cache->saved_regs[IA64_PR_REGNUM];
|
||||||
+ if (pr_addr != 0)
|
+ if (pr_addr != 0)
|
||||||
+ {
|
+ {
|
||||||
+ ULONGEST pr;
|
+ ULONGEST pr;
|
||||||
+ ULONGEST cfm;
|
+ ULONGEST cfm;
|
||||||
+ ULONGEST prN_val;
|
+ ULONGEST prN_val;
|
||||||
+ read_memory (pr_addr, (char *) &pr,
|
+ read_memory (pr_addr, (char *) &pr,
|
||||||
+ register_size (current_gdbarch, IA64_PR_REGNUM));
|
+ register_size (current_gdbarch, IA64_PR_REGNUM));
|
||||||
+ read_memory (cache->saved_regs[IA64_CFM_REGNUM], (char *) &cfm,
|
+ read_memory (cache->saved_regs[IA64_CFM_REGNUM], (char *) &cfm,
|
||||||
+ register_size (current_gdbarch, IA64_CFM_REGNUM));
|
+ register_size (current_gdbarch, IA64_CFM_REGNUM));
|
||||||
+
|
+
|
||||||
+ /* Get the register rename base for this frame and adjust the
|
+ /* Get the register rename base for this frame and adjust the
|
||||||
@ -145,12 +145,14 @@ Index: gdb-6.8/gdb/ia64-tdep.c
|
|||||||
+ regnum = VP16_REGNUM + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
|
+ regnum = VP16_REGNUM + ((regnum - VP16_REGNUM) + rrb_pr) % 48;
|
||||||
+ }
|
+ }
|
||||||
+ prN_val = (pr & (1LL << (regnum - VP0_REGNUM))) != 0;
|
+ prN_val = (pr & (1LL << (regnum - VP0_REGNUM))) != 0;
|
||||||
+ store_unsigned_integer (valuep, register_size (current_gdbarch, regnum),
|
+ return frame_unwind_got_constant (this_frame, regnum, prN_val);
|
||||||
+ prN_val);
|
|
||||||
+ *lvalp = lval_memory;
|
|
||||||
+ *addrp = pr_addr;
|
|
||||||
+ }
|
+ }
|
||||||
|
+ warning (_("ia64_sigtramp_frame_prev_register: unhandled register %d"),
|
||||||
|
+ regnum);
|
||||||
+ }
|
+ }
|
||||||
else
|
+ /* Red Hat patch end. */
|
||||||
|
+
|
||||||
|
+ /* All other registers not listed above. */
|
||||||
{
|
{
|
||||||
/* All other registers not listed above. */
|
CORE_ADDR addr = cache->saved_regs[regnum];
|
||||||
|
|
||||||
|
@ -9,8 +9,10 @@
|
|||||||
|
|
||||||
* gdb.base/attach-32.exp: Fix forgotten $GDBFLAGS as set.
|
* gdb.base/attach-32.exp: Fix forgotten $GDBFLAGS as set.
|
||||||
|
|
||||||
--- gdb-6.3/gdb/testsuite/gdb.base/attach-32.c.fix3 2005-07-21 14:23:50.000000000 -0400
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.base/attach-32.c
|
||||||
+++ gdb-6.3/gdb/testsuite/gdb.base/attach-32.c 2005-07-21 14:05:56.000000000 -0400
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.base/attach-32.c 2008-12-07 10:06:03.000000000 +0100
|
||||||
@@ -0,0 +1,20 @@
|
@@ -0,0 +1,20 @@
|
||||||
+/* This program is intended to be started outside of gdb, and then
|
+/* This program is intended to be started outside of gdb, and then
|
||||||
+ attached to by gdb. Thus, it simply spins in a loop. The loop
|
+ attached to by gdb. Thus, it simply spins in a loop. The loop
|
||||||
@ -32,8 +34,10 @@
|
|||||||
+ }
|
+ }
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
--- gdb-6.3/gdb/testsuite/gdb.base/attach-32.exp.fix3 2005-07-21 14:23:45.000000000 -0400
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.base/attach-32.exp
|
||||||
+++ gdb-6.3/gdb/testsuite/gdb.base/attach-32.exp 2005-07-21 17:58:28.000000000 -0400
|
===================================================================
|
||||||
|
--- /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
|
||||||
@@ -0,0 +1,252 @@
|
@@ -0,0 +1,252 @@
|
||||||
+# Copyright 2005 Free Software Foundation, Inc.
|
+# Copyright 2005 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
@ -131,7 +135,7 @@
|
|||||||
+
|
+
|
||||||
+ send_gdb "tbreak 19\n"
|
+ send_gdb "tbreak 19\n"
|
||||||
+ gdb_expect {
|
+ gdb_expect {
|
||||||
+ -re "Breakpoint .*at.*$srcfile, line 19.*$gdb_prompt $" {
|
+ -re "reakpoint .*at.*$srcfile, line 19.*$gdb_prompt $" {
|
||||||
+ pass "after attach-32, set tbreak postloop"
|
+ pass "after attach-32, set tbreak postloop"
|
||||||
+ }
|
+ }
|
||||||
+ -re "$gdb_prompt $" {
|
+ -re "$gdb_prompt $" {
|
||||||
@ -287,8 +291,10 @@
|
|||||||
+do_call_attach_tests
|
+do_call_attach_tests
|
||||||
+
|
+
|
||||||
+return 0
|
+return 0
|
||||||
--- gdb-6.3/gdb/testsuite/gdb.base/attach-32b.c.fix3 2005-07-21 14:23:57.000000000 -0400
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.base/attach-32b.c
|
||||||
+++ gdb-6.3/gdb/testsuite/gdb.base/attach-32b.c 2005-07-21 14:06:02.000000000 -0400
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.base/attach-32b.c 2008-12-07 10:06:03.000000000 +0100
|
||||||
@@ -0,0 +1,24 @@
|
@@ -0,0 +1,24 @@
|
||||||
+/* This program is intended to be started outside of gdb, and then
|
+/* This program is intended to be started outside of gdb, and then
|
||||||
+ attached to by gdb. Thus, it simply spins in a loop. The loop
|
+ attached to by gdb. Thus, it simply spins in a loop. The loop
|
||||||
|
@ -3,22 +3,23 @@
|
|||||||
* valops.c (check_field_in): Use check_typedef for base classes
|
* valops.c (check_field_in): Use check_typedef for base classes
|
||||||
to avoid problems with opaque type references.
|
to avoid problems with opaque type references.
|
||||||
|
|
||||||
Index: gdb-6.5/gdb/valops.c
|
Index: gdb-6.8.50.20081128/gdb/valops.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.5.orig/gdb/valops.c 2005-12-17 20:34:03.000000000 -0200
|
--- gdb-6.8.50.20081128.orig/gdb/valops.c 2008-12-08 10:56:11.000000000 +0100
|
||||||
+++ gdb-6.5/gdb/valops.c 2006-07-07 02:35:09.000000000 -0300
|
+++ gdb-6.8.50.20081128/gdb/valops.c 2008-12-08 10:59:14.000000000 +0100
|
||||||
@@ -2257,8 +2257,13 @@ check_field_in (struct type *type, const
|
@@ -2484,8 +2484,14 @@ check_field (struct type *type, const ch
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
|
for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--)
|
||||||
- if (check_field_in (TYPE_BASECLASS (type, i), name))
|
- if (check_field (TYPE_BASECLASS (type, i), name))
|
||||||
- return 1;
|
- return 1;
|
||||||
+ {
|
+ {
|
||||||
+ /* Check the base classes. Make sure we have the real type for
|
+ /* Check the base classes. Make sure we have the real type for
|
||||||
+ each base class as opposed to an opaque declaration. */
|
+ each base class as opposed to an opaque declaration. */
|
||||||
+ struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
|
+ struct type *baseclass = check_typedef (TYPE_BASECLASS (type, i));
|
||||||
+ if (check_field_in (baseclass, name))
|
+
|
||||||
+ return 1;
|
+ if (check_field (baseclass, name))
|
||||||
|
+ return 1;
|
||||||
+ }
|
+ }
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -25,10 +25,10 @@
|
|||||||
|
|
||||||
Port to GDB-6.7.
|
Port to GDB-6.7.
|
||||||
|
|
||||||
Index: gdb-6.7/gdb/symfile-mem.c
|
Index: gdb-6.8.50.20081128/gdb/symfile-mem.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/symfile-mem.c 2007-10-13 05:29:58.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/symfile-mem.c 2008-01-01 23:53:13.000000000 +0100
|
||||||
+++ gdb-6.7/gdb/symfile-mem.c 2007-10-15 21:37:54.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/symfile-mem.c 2008-12-02 22:15:53.000000000 +0100
|
||||||
@@ -56,6 +56,14 @@
|
@@ -56,6 +56,14 @@
|
||||||
#include "elf/common.h"
|
#include "elf/common.h"
|
||||||
|
|
||||||
@ -53,11 +53,11 @@ Index: gdb-6.7/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-6.7/gdb/target.c
|
Index: gdb-6.8.50.20081128/gdb/target.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/target.c 2007-10-14 23:42:39.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/target.c 2008-11-09 12:27:18.000000000 +0100
|
||||||
+++ gdb-6.7/gdb/target.c 2007-10-15 21:37:54.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/target.c 2008-12-02 22:17:28.000000000 +0100
|
||||||
@@ -55,7 +55,7 @@ static int nosymbol (char *, CORE_ADDR *
|
@@ -57,7 +57,7 @@ static int nosymbol (char *, CORE_ADDR *
|
||||||
|
|
||||||
static void tcomplain (void) ATTR_NORETURN;
|
static void tcomplain (void) ATTR_NORETURN;
|
||||||
|
|
||||||
@ -66,16 +66,16 @@ Index: gdb-6.7/gdb/target.c
|
|||||||
|
|
||||||
static int return_zero (void);
|
static int return_zero (void);
|
||||||
|
|
||||||
@@ -275,7 +275,7 @@ target_load (char *arg, int from_tty)
|
@@ -299,7 +299,7 @@ void target_create_inferior (char *exec_
|
||||||
(*current_target.to_load) (arg, from_tty);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
-static int
|
-static int
|
||||||
+static LONGEST
|
+static LONGEST
|
||||||
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)
|
||||||
{
|
{
|
||||||
@@ -518,7 +518,7 @@ update_current_target (void)
|
@@ -530,7 +530,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-6.7/gdb/target.c
|
|||||||
nomemory);
|
nomemory);
|
||||||
de_fault (to_files_info,
|
de_fault (to_files_info,
|
||||||
(void (*) (struct target_ops *))
|
(void (*) (struct target_ops *))
|
||||||
@@ -1195,7 +1195,7 @@ target_xfer_partial (struct target_ops *
|
@@ -1250,7 +1250,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-6.7/gdb/target.c
|
|||||||
{
|
{
|
||||||
if (target_read (¤t_target, TARGET_OBJECT_MEMORY, NULL,
|
if (target_read (¤t_target, TARGET_OBJECT_MEMORY, NULL,
|
||||||
myaddr, memaddr, len) == len)
|
myaddr, memaddr, len) == len)
|
||||||
@@ -1205,7 +1205,7 @@ target_read_memory (CORE_ADDR memaddr, g
|
@@ -1260,7 +1260,7 @@ target_read_memory (CORE_ADDR memaddr, g
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -102,7 +102,7 @@ Index: gdb-6.7/gdb/target.c
|
|||||||
{
|
{
|
||||||
if (target_write (¤t_target, TARGET_OBJECT_MEMORY, NULL,
|
if (target_write (¤t_target, TARGET_OBJECT_MEMORY, NULL,
|
||||||
myaddr, memaddr, len) == len)
|
myaddr, memaddr, len) == len)
|
||||||
@@ -2228,8 +2228,8 @@ debug_to_prepare_to_store (struct regcac
|
@@ -2690,8 +2690,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");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ Index: gdb-6.7/gdb/target.c
|
|||||||
int write, struct mem_attrib *attrib,
|
int write, struct mem_attrib *attrib,
|
||||||
struct target_ops *target)
|
struct target_ops *target)
|
||||||
{
|
{
|
||||||
@@ -2239,9 +2239,9 @@ deprecated_debug_xfer_memory (CORE_ADDR
|
@@ -2701,9 +2701,9 @@ deprecated_debug_xfer_memory (CORE_ADDR
|
||||||
attrib, target);
|
attrib, target);
|
||||||
|
|
||||||
fprintf_unfiltered (gdb_stdlog,
|
fprintf_unfiltered (gdb_stdlog,
|
||||||
@ -125,11 +125,11 @@ Index: gdb-6.7/gdb/target.c
|
|||||||
|
|
||||||
if (retval > 0)
|
if (retval > 0)
|
||||||
{
|
{
|
||||||
Index: gdb-6.7/gdb/target.h
|
Index: gdb-6.8.50.20081128/gdb/target.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/target.h 2007-10-14 23:24:52.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/target.h 2008-11-09 12:27:18.000000000 +0100
|
||||||
+++ gdb-6.7/gdb/target.h 2007-10-15 21:39:20.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/target.h 2008-12-02 22:15:53.000000000 +0100
|
||||||
@@ -351,10 +351,10 @@ struct target_ops
|
@@ -358,10 +358,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. */
|
||||||
|
|
||||||
@ -144,7 +144,7 @@ Index: gdb-6.7/gdb/target.h
|
|||||||
|
|
||||||
void (*to_files_info) (struct target_ops *);
|
void (*to_files_info) (struct target_ops *);
|
||||||
int (*to_insert_breakpoint) (struct bp_target_info *);
|
int (*to_insert_breakpoint) (struct bp_target_info *);
|
||||||
@@ -615,13 +615,14 @@ extern DCACHE *target_dcache;
|
@@ -661,13 +661,14 @@ extern DCACHE *target_dcache;
|
||||||
|
|
||||||
extern int target_read_string (CORE_ADDR, char **, int, int *);
|
extern int target_read_string (CORE_ADDR, char **, int, int *);
|
||||||
|
|
||||||
@ -163,11 +163,11 @@ Index: gdb-6.7/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-6.7/gdb/dcache.c
|
Index: gdb-6.8.50.20081128/gdb/dcache.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/dcache.c 2007-08-23 20:08:28.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/dcache.c 2008-09-23 20:35:29.000000000 +0200
|
||||||
+++ gdb-6.7/gdb/dcache.c 2007-10-15 21:37:54.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/dcache.c 2008-12-02 22:15:53.000000000 +0100
|
||||||
@@ -517,9 +517,9 @@ dcache_free (DCACHE *dcache)
|
@@ -524,9 +524,9 @@ dcache_free (DCACHE *dcache)
|
||||||
|
|
||||||
This routine is indended to be called by remote_xfer_ functions. */
|
This routine is indended to be called by remote_xfer_ functions. */
|
||||||
|
|
||||||
@ -179,10 +179,10 @@ Index: gdb-6.7/gdb/dcache.c
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int (*xfunc) (DCACHE *dcache, CORE_ADDR addr, gdb_byte *ptr);
|
int (*xfunc) (DCACHE *dcache, CORE_ADDR addr, gdb_byte *ptr);
|
||||||
Index: gdb-6.7/gdb/dcache.h
|
Index: gdb-6.8.50.20081128/gdb/dcache.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/dcache.h 2007-08-23 20:08:28.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/dcache.h 2008-01-01 23:53:09.000000000 +0100
|
||||||
+++ gdb-6.7/gdb/dcache.h 2007-10-15 21:37:54.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/dcache.h 2008-12-02 22:15:53.000000000 +0100
|
||||||
@@ -35,7 +35,7 @@ void dcache_free (DCACHE *);
|
@@ -35,7 +35,7 @@ void dcache_free (DCACHE *);
|
||||||
|
|
||||||
/* Simple to call from <remote>_xfer_memory */
|
/* Simple to call from <remote>_xfer_memory */
|
||||||
@ -193,11 +193,11 @@ Index: gdb-6.7/gdb/dcache.h
|
|||||||
+ LONGEST len, int should_write);
|
+ LONGEST len, int should_write);
|
||||||
|
|
||||||
#endif /* DCACHE_H */
|
#endif /* DCACHE_H */
|
||||||
Index: gdb-6.7/gdb/exec.c
|
Index: gdb-6.8.50.20081128/gdb/exec.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/exec.c 2007-08-23 20:08:28.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/exec.c 2008-10-30 19:42:28.000000000 +0100
|
||||||
+++ gdb-6.7/gdb/exec.c 2007-10-15 21:37:54.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/exec.c 2008-12-02 22:15:53.000000000 +0100
|
||||||
@@ -453,8 +453,8 @@ map_vmap (bfd *abfd, bfd *arch)
|
@@ -459,8 +459,8 @@ map_vmap (bfd *abfd, bfd *arch)
|
||||||
The same routine is used to handle both core and exec files;
|
The same routine is used to handle both core and exec files;
|
||||||
we just tail-call it with more arguments to select between them. */
|
we just tail-call it with more arguments to select between them. */
|
||||||
|
|
||||||
@ -208,11 +208,11 @@ Index: gdb-6.7/gdb/exec.c
|
|||||||
struct mem_attrib *attrib, struct target_ops *target)
|
struct mem_attrib *attrib, struct target_ops *target)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
Index: gdb-6.7/gdb/linux-nat.c
|
Index: gdb-6.8.50.20081128/gdb/linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/linux-nat.c 2007-10-15 00:13:52.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/linux-nat.c 2008-12-02 21:11:11.000000000 +0100
|
||||||
+++ gdb-6.7/gdb/linux-nat.c 2007-10-15 21:37:54.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/linux-nat.c 2008-12-02 22:15:53.000000000 +0100
|
||||||
@@ -3248,7 +3248,7 @@ linux_xfer_partial (struct target_ops *o
|
@@ -4053,7 +4053,7 @@ linux_xfer_partial (struct target_ops *o
|
||||||
Revert when Bugzilla 147436 is fixed. */
|
Revert when Bugzilla 147436 is fixed. */
|
||||||
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. */
|
||||||
@ -221,10 +221,10 @@ Index: gdb-6.7/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-6.7/gdb/remote.c
|
Index: gdb-6.8.50.20081128/gdb/remote.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/remote.c 2007-10-14 23:42:39.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/remote.c 2008-11-24 17:53:44.000000000 +0100
|
||||||
+++ gdb-6.7/gdb/remote.c 2007-10-15 21:37:54.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/remote.c 2008-12-02 22:17:00.000000000 +0100
|
||||||
@@ -25,6 +25,7 @@
|
@@ -25,6 +25,7 @@
|
||||||
#include "gdb_string.h"
|
#include "gdb_string.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@ -233,7 +233,7 @@ Index: gdb-6.7/gdb/remote.c
|
|||||||
#include "inferior.h"
|
#include "inferior.h"
|
||||||
#include "bfd.h"
|
#include "bfd.h"
|
||||||
#include "symfile.h"
|
#include "symfile.h"
|
||||||
@@ -4484,19 +4485,27 @@ remote_read_bytes (CORE_ADDR memaddr, gd
|
@@ -5687,12 +5688,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. */
|
||||||
|
|
||||||
@ -247,15 +247,15 @@ Index: gdb-6.7/gdb/remote.c
|
|||||||
int res;
|
int res;
|
||||||
+ int len;
|
+ int len;
|
||||||
+
|
+
|
||||||
+
|
|
||||||
+ /* This routine is not set up to handle > INT_MAX bytes. */
|
+ /* This routine is not set up to handle > INT_MAX bytes. */
|
||||||
+ if (mem_len >= (LONGEST)INT_MAX)
|
+ if (mem_len >= (LONGEST)INT_MAX)
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+
|
+
|
||||||
+ len = (int)mem_len;
|
+ len = (int)mem_len;
|
||||||
|
|
||||||
if (should_write)
|
set_general_thread (inferior_ptid);
|
||||||
res = remote_write_bytes (mem_addr, buffer, mem_len);
|
|
||||||
|
@@ -5701,7 +5709,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);
|
||||||
|
|
||||||
@ -264,11 +264,11 @@ Index: gdb-6.7/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-6.7/gdb/remote-sim.c
|
Index: gdb-6.8.50.20081128/gdb/remote-sim.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/remote-sim.c 2007-08-23 20:08:36.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/remote-sim.c 2008-11-13 02:26:43.000000000 +0100
|
||||||
+++ gdb-6.7/gdb/remote-sim.c 2007-10-15 21:41:33.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/remote-sim.c 2008-12-02 22:15:53.000000000 +0100
|
||||||
@@ -747,11 +747,14 @@ gdbsim_prepare_to_store (struct regcache
|
@@ -763,11 +763,14 @@ gdbsim_prepare_to_store (struct regcache
|
||||||
|
|
||||||
Returns the number of bytes transferred. */
|
Returns the number of bytes transferred. */
|
||||||
|
|
||||||
@ -285,7 +285,7 @@ Index: gdb-6.7/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. */
|
||||||
@@ -767,22 +770,22 @@ gdbsim_xfer_inferior_memory (CORE_ADDR m
|
@@ -783,22 +786,22 @@ gdbsim_xfer_inferior_memory (CORE_ADDR m
|
||||||
printf_filtered ("gdbsim_xfer_inferior_memory: myaddr 0x");
|
printf_filtered ("gdbsim_xfer_inferior_memory: myaddr 0x");
|
||||||
gdb_print_host_address (myaddr, gdb_stdout);
|
gdb_print_host_address (myaddr, gdb_stdout);
|
||||||
printf_filtered (", memaddr 0x%s, len %d, write %d\n",
|
printf_filtered (", memaddr 0x%s, len %d, write %d\n",
|
||||||
|
@ -21,19 +21,19 @@
|
|||||||
|
|
||||||
[ Remove decode_variable* for GDB-6.8+ as no longer needed. ]
|
[ Remove decode_variable* for GDB-6.8+ as no longer needed. ]
|
||||||
|
|
||||||
Index: gdb-6.7/gdb/linespec.c
|
Index: gdb-6.8.50.20081128/gdb/linespec.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/linespec.c 2007-08-23 20:08:35.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/linespec.c 2008-09-05 13:37:17.000000000 +0200
|
||||||
+++ gdb-6.7/gdb/linespec.c 2007-10-13 05:26:33.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/linespec.c 2008-12-04 01:43:36.000000000 +0100
|
||||||
@@ -36,6 +36,7 @@
|
@@ -39,6 +39,7 @@
|
||||||
#include "linespec.h"
|
#include "interps.h"
|
||||||
#include "exceptions.h"
|
#include "mi/mi-cmds.h"
|
||||||
#include "language.h"
|
#include "target.h"
|
||||||
+#include "gdb_assert.h"
|
+#include "gdb_assert.h"
|
||||||
|
|
||||||
/* We share this one with symtab.c, but it is not exported widely. */
|
/* We share this one with symtab.c, but it is not exported widely. */
|
||||||
|
|
||||||
@@ -75,7 +76,8 @@ static struct symtabs_and_lines find_met
|
@@ -78,7 +79,8 @@ static struct symtabs_and_lines find_met
|
||||||
|
|
||||||
static int collect_methods (char *copy, struct type *t,
|
static int collect_methods (char *copy, struct type *t,
|
||||||
struct symbol *sym_class,
|
struct symbol *sym_class,
|
||||||
@ -43,7 +43,7 @@ Index: gdb-6.7/gdb/linespec.c
|
|||||||
|
|
||||||
static NORETURN void cplusplus_error (const char *name,
|
static NORETURN void cplusplus_error (const char *name,
|
||||||
const char *fmt, ...)
|
const char *fmt, ...)
|
||||||
@@ -84,11 +86,13 @@ static NORETURN void cplusplus_error (co
|
@@ -87,11 +89,13 @@ static NORETURN void cplusplus_error (co
|
||||||
static int total_number_of_methods (struct type *type);
|
static int total_number_of_methods (struct type *type);
|
||||||
|
|
||||||
static int find_methods (struct type *, char *,
|
static int find_methods (struct type *, char *,
|
||||||
@ -59,7 +59,7 @@ Index: gdb-6.7/gdb/linespec.c
|
|||||||
|
|
||||||
static int add_constructors (int method_counter, struct type *t,
|
static int add_constructors (int method_counter, struct type *t,
|
||||||
enum language language,
|
enum language language,
|
||||||
@@ -104,6 +108,9 @@ static int is_objc_method_format (const
|
@@ -107,6 +111,9 @@ static int is_objc_method_format (const
|
||||||
static struct symtabs_and_lines decode_line_2 (struct symbol *[],
|
static struct symtabs_and_lines decode_line_2 (struct symbol *[],
|
||||||
int, int, char ***);
|
int, int, char ***);
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ Index: gdb-6.7/gdb/linespec.c
|
|||||||
static struct symtab *symtab_from_filename (char **argptr,
|
static struct symtab *symtab_from_filename (char **argptr,
|
||||||
char *p, int is_quote_enclosed,
|
char *p, int is_quote_enclosed,
|
||||||
int *not_found_ptr);
|
int *not_found_ptr);
|
||||||
@@ -194,13 +201,18 @@ total_number_of_methods (struct type *ty
|
@@ -196,13 +203,18 @@ total_number_of_methods (struct type *ty
|
||||||
/* Recursive helper function for decode_line_1.
|
/* Recursive helper function for decode_line_1.
|
||||||
Look for methods named NAME in type T.
|
Look for methods named NAME in type T.
|
||||||
Return number of matches.
|
Return number of matches.
|
||||||
@ -90,7 +90,7 @@ Index: gdb-6.7/gdb/linespec.c
|
|||||||
{
|
{
|
||||||
int i1 = 0;
|
int i1 = 0;
|
||||||
int ibase;
|
int ibase;
|
||||||
@@ -243,7 +255,7 @@ find_methods (struct type *t, char *name
|
@@ -244,7 +256,7 @@ find_methods (struct type *t, char *name
|
||||||
if (strcmp_iw (name, method_name) == 0)
|
if (strcmp_iw (name, method_name) == 0)
|
||||||
/* Find all the overloaded methods with that name. */
|
/* Find all the overloaded methods with that name. */
|
||||||
i1 += add_matching_methods (method_counter, t, language,
|
i1 += add_matching_methods (method_counter, t, language,
|
||||||
@ -99,7 +99,7 @@ Index: gdb-6.7/gdb/linespec.c
|
|||||||
else if (strncmp (class_name, name, name_len) == 0
|
else if (strncmp (class_name, name, name_len) == 0
|
||||||
&& (class_name[name_len] == '\0'
|
&& (class_name[name_len] == '\0'
|
||||||
|| class_name[name_len] == '<'))
|
|| class_name[name_len] == '<'))
|
||||||
@@ -266,21 +278,100 @@ find_methods (struct type *t, char *name
|
@@ -267,21 +279,100 @@ find_methods (struct type *t, char *name
|
||||||
if (i1 == 0)
|
if (i1 == 0)
|
||||||
for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
|
for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
|
||||||
i1 += find_methods (TYPE_BASECLASS (t, ibase), name,
|
i1 += find_methods (TYPE_BASECLASS (t, ibase), name,
|
||||||
@ -202,7 +202,7 @@ Index: gdb-6.7/gdb/linespec.c
|
|||||||
|
|
||||||
for (field_counter = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
|
for (field_counter = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
|
||||||
field_counter >= 0;
|
field_counter >= 0;
|
||||||
@@ -305,6 +396,16 @@ add_matching_methods (int method_counter
|
@@ -306,6 +397,16 @@ add_matching_methods (int method_counter
|
||||||
else
|
else
|
||||||
phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
|
phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
|
||||||
|
|
||||||
@ -229,7 +229,7 @@ Index: gdb-6.7/gdb/linespec.c
|
|||||||
return i1;
|
return i1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -610,6 +714,146 @@ decode_line_2 (struct symbol *sym_arr[],
|
@@ -630,6 +734,146 @@ See set/show multiple-symbol."));
|
||||||
discard_cleanups (old_chain);
|
discard_cleanups (old_chain);
|
||||||
return return_values;
|
return return_values;
|
||||||
}
|
}
|
||||||
@ -329,7 +329,7 @@ Index: gdb-6.7/gdb/linespec.c
|
|||||||
+ {
|
+ {
|
||||||
+ if (canonical_arr[i] == NULL)
|
+ if (canonical_arr[i] == NULL)
|
||||||
+ {
|
+ {
|
||||||
+ symname = DEPRECATED_SYMBOL_NAME (msym_arr[i]);
|
+ symname = SYMBOL_LINKAGE_NAME (msym_arr[i]);
|
||||||
+ canonical_arr[i] = savestring (symname, strlen (symname));
|
+ canonical_arr[i] = savestring (symname, strlen (symname));
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
@ -352,7 +352,7 @@ Index: gdb-6.7/gdb/linespec.c
|
|||||||
+ {
|
+ {
|
||||||
+ if (canonical_arr)
|
+ if (canonical_arr)
|
||||||
+ {
|
+ {
|
||||||
+ symname = DEPRECATED_SYMBOL_NAME (msym_arr[num]);
|
+ symname = SYMBOL_LINKAGE_NAME (msym_arr[num]);
|
||||||
+ make_cleanup (xfree, symname);
|
+ make_cleanup (xfree, symname);
|
||||||
+ canonical_arr[i] = savestring (symname, strlen (symname));
|
+ canonical_arr[i] = savestring (symname, strlen (symname));
|
||||||
+ }
|
+ }
|
||||||
@ -376,7 +376,7 @@ Index: gdb-6.7/gdb/linespec.c
|
|||||||
|
|
||||||
/* The parser of linespec itself. */
|
/* The parser of linespec itself. */
|
||||||
|
|
||||||
@@ -1414,35 +1658,46 @@ find_method (int funfirstline, char ***c
|
@@ -1438,35 +1682,46 @@ find_method (int funfirstline, char ***c
|
||||||
struct symbol **sym_arr = alloca (total_number_of_methods (t)
|
struct symbol **sym_arr = alloca (total_number_of_methods (t)
|
||||||
* sizeof (struct symbol *));
|
* sizeof (struct symbol *));
|
||||||
|
|
||||||
@ -437,7 +437,7 @@ Index: gdb-6.7/gdb/linespec.c
|
|||||||
return decode_line_2 (sym_arr, i1, funfirstline, canonical);
|
return decode_line_2 (sym_arr, i1, funfirstline, canonical);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -1469,11 +1722,12 @@ find_method (int funfirstline, char ***c
|
@@ -1493,11 +1748,12 @@ find_method (int funfirstline, char ***c
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find all methods named COPY in the class whose type is T, and put
|
/* Find all methods named COPY in the class whose type is T, and put
|
||||||
@ -452,7 +452,7 @@ Index: gdb-6.7/gdb/linespec.c
|
|||||||
{
|
{
|
||||||
int i1 = 0; /* Counter for the symbol array. */
|
int i1 = 0; /* Counter for the symbol array. */
|
||||||
|
|
||||||
@@ -1495,7 +1749,7 @@ collect_methods (char *copy, struct type
|
@@ -1518,7 +1774,7 @@ collect_methods (char *copy, struct type
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -461,15 +461,3 @@ Index: gdb-6.7/gdb/linespec.c
|
|||||||
|
|
||||||
return i1;
|
return i1;
|
||||||
}
|
}
|
||||||
--- gdb-6.8/gdb/Makefile.in.orig 2008-08-27 12:59:59.000000000 +0200
|
|
||||||
+++ gdb-6.8/gdb/Makefile.in 2008-08-27 13:00:19.000000000 +0200
|
|
||||||
@@ -2341,7 +2341,8 @@ libunwind-frame.o: libunwind-frame.c $(d
|
|
||||||
linespec.o: linespec.c $(defs_h) $(symtab_h) $(frame_h) $(command_h) \
|
|
||||||
$(symfile_h) $(objfiles_h) $(source_h) $(demangle_h) $(value_h) \
|
|
||||||
$(completer_h) $(cp_abi_h) $(parser_defs_h) $(block_h) \
|
|
||||||
- $(objc_lang_h) $(linespec_h) $(exceptions_h) $(language_h)
|
|
||||||
+ $(objc_lang_h) $(linespec_h) $(exceptions_h) $(language_h) \
|
|
||||||
+ $(gdb_assert_h)
|
|
||||||
linux-fork.o: linux-fork.c $(defs_h) $(inferior_h) $(regcache_h) $(gdbcmd_h) \
|
|
||||||
$(infcall_h) $(gdb_assert_h) $(gdb_string_h) $(linux_fork_h) \
|
|
||||||
$(linux_nat_h) $(gdb_wait_h) $(gdb_dirent_h)
|
|
||||||
|
@ -26,28 +26,19 @@
|
|||||||
|
|
||||||
Fix scan_dyntag() for binaries provided by valgrind (BZ 460319).
|
Fix scan_dyntag() for binaries provided by valgrind (BZ 460319).
|
||||||
|
|
||||||
--- ./gdb/Makefile.in 2008-09-01 17:16:38.000000000 +0200
|
Index: gdb-6.8.50.20081209/gdb/amd64-tdep.c
|
||||||
+++ ./gdb/Makefile.in 2008-08-30 23:40:33.000000000 +0200
|
===================================================================
|
||||||
@@ -1928,7 +1928,7 @@ amd64-tdep.o: amd64-tdep.c $(defs_h) $(a
|
--- gdb-6.8.50.20081209.orig/gdb/amd64-tdep.c 2008-12-14 14:55:58.000000000 +0100
|
||||||
$(dummy_frame_h) $(frame_h) $(frame_base_h) $(frame_unwind_h) \
|
+++ gdb-6.8.50.20081209/gdb/amd64-tdep.c 2008-12-14 14:56:49.000000000 +0100
|
||||||
$(inferior_h) $(gdbcmd_h) $(gdbcore_h) $(objfiles_h) $(regcache_h) \
|
@@ -34,6 +34,7 @@
|
||||||
$(regset_h) $(symfile_h) $(gdb_assert_h) $(amd64_tdep_h) \
|
#include "regcache.h"
|
||||||
- $(i387_tdep_h)
|
#include "regset.h"
|
||||||
+ $(i387_tdep_h) $(exceptions_h)
|
|
||||||
annotate.o: annotate.c $(defs_h) $(annotate_h) $(value_h) $(target_h) \
|
|
||||||
$(gdbtypes_h) $(breakpoint_h)
|
|
||||||
arch-utils.o: arch-utils.c $(defs_h) $(arch_utils_h) $(buildsym_h) \
|
|
||||||
--- ./gdb/amd64-tdep.c 2008-09-01 17:16:38.000000000 +0200
|
|
||||||
+++ ./gdb/amd64-tdep.c 2008-08-30 23:40:33.000000000 +0200
|
|
||||||
@@ -36,6 +36,7 @@
|
|
||||||
#include "symfile.h"
|
#include "symfile.h"
|
||||||
#include "dwarf2-frame.h"
|
|
||||||
#include "gdb_assert.h"
|
|
||||||
+#include "exceptions.h"
|
+#include "exceptions.h"
|
||||||
|
|
||||||
#include "amd64-tdep.h"
|
#include "gdb_assert.h"
|
||||||
#include "i387-tdep.h"
|
|
||||||
@@ -731,16 +732,28 @@ amd64_alloc_frame_cache (void)
|
@@ -906,16 +907,28 @@ amd64_analyze_stack_align (CORE_ADDR pc,
|
||||||
Any function that doesn't start with this sequence will be assumed
|
Any function that doesn't start with this sequence will be assumed
|
||||||
to have no prologue and thus no valid frame pointer in %rbp. */
|
to have no prologue and thus no valid frame pointer in %rbp. */
|
||||||
|
|
||||||
@ -78,9 +69,9 @@
|
|||||||
+ return 1;
|
+ return 1;
|
||||||
+ }
|
+ }
|
||||||
|
|
||||||
op = read_memory_unsigned_integer (pc, 1);
|
pc = amd64_analyze_stack_align (pc, current_pc, cache);
|
||||||
|
|
||||||
@@ -753,18 +766,57 @@ amd64_analyze_prologue (CORE_ADDR pc, CO
|
@@ -930,18 +943,57 @@ amd64_analyze_prologue (CORE_ADDR pc, CO
|
||||||
|
|
||||||
/* If that's all, return now. */
|
/* If that's all, return now. */
|
||||||
if (current_pc <= pc + 1)
|
if (current_pc <= pc + 1)
|
||||||
@ -141,18 +132,29 @@
|
|||||||
return pc;
|
return pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
--- ./gdb/auxv.c 2008-01-16 17:27:37.000000000 +0100
|
Index: gdb-6.8.50.20081209/gdb/auxv.c
|
||||||
+++ ./gdb/auxv.c 2008-08-30 23:40:33.000000000 +0200
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081209.orig/gdb/auxv.c 2008-12-14 14:55:58.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/auxv.c 2008-12-14 14:57:58.000000000 +0100
|
||||||
@@ -80,7 +80,7 @@ procfs_xfer_auxv (struct target_ops *ops
|
@@ -80,7 +80,7 @@ procfs_xfer_auxv (struct target_ops *ops
|
||||||
Return 1 if an entry was read into *TYPEP and *VALP. */
|
Return 1 if an entry was read into *TYPEP and *VALP. */
|
||||||
int
|
int
|
||||||
target_auxv_parse (struct target_ops *ops, gdb_byte **readptr,
|
default_auxv_parse (struct target_ops *ops, gdb_byte **readptr,
|
||||||
- gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
|
- gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
|
||||||
+ gdb_byte *endptr, ULONGEST *typep, CORE_ADDR *valp)
|
+ gdb_byte *endptr, ULONGEST *typep, CORE_ADDR *valp)
|
||||||
{
|
{
|
||||||
const int sizeof_auxv_field = TYPE_LENGTH (builtin_type_void_data_ptr);
|
const int sizeof_auxv_field = gdbarch_ptr_bit (target_gdbarch)
|
||||||
gdb_byte *ptr = *readptr;
|
/ TARGET_CHAR_BIT;
|
||||||
@@ -105,9 +105,10 @@ target_auxv_parse (struct target_ops *op
|
@@ -107,7 +107,7 @@ default_auxv_parse (struct target_ops *o
|
||||||
|
Return 1 if an entry was read into *TYPEP and *VALP. */
|
||||||
|
int
|
||||||
|
target_auxv_parse (struct target_ops *ops, gdb_byte **readptr,
|
||||||
|
- gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp)
|
||||||
|
+ gdb_byte *endptr, ULONGEST *typep, CORE_ADDR *valp)
|
||||||
|
{
|
||||||
|
struct target_ops *t;
|
||||||
|
for (t = ops; t != NULL; t = t->beneath)
|
||||||
|
@@ -122,9 +122,10 @@ target_auxv_parse (struct target_ops *op
|
||||||
an error getting the information. On success, return 1 after
|
an error getting the information. On success, return 1 after
|
||||||
storing the entry's value field in *VALP. */
|
storing the entry's value field in *VALP. */
|
||||||
int
|
int
|
||||||
@ -165,7 +167,7 @@
|
|||||||
gdb_byte *data;
|
gdb_byte *data;
|
||||||
LONGEST n = target_read_alloc (ops, TARGET_OBJECT_AUXV, NULL, &data);
|
LONGEST n = target_read_alloc (ops, TARGET_OBJECT_AUXV, NULL, &data);
|
||||||
gdb_byte *ptr = data;
|
gdb_byte *ptr = data;
|
||||||
@@ -117,10 +118,10 @@ target_auxv_search (struct target_ops *o
|
@@ -134,10 +135,10 @@ target_auxv_search (struct target_ops *o
|
||||||
return n;
|
return n;
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
@ -178,7 +180,7 @@
|
|||||||
{
|
{
|
||||||
xfree (data);
|
xfree (data);
|
||||||
*valp = val;
|
*valp = val;
|
||||||
@@ -143,7 +144,8 @@ target_auxv_search (struct target_ops *o
|
@@ -160,7 +161,8 @@ target_auxv_search (struct target_ops *o
|
||||||
int
|
int
|
||||||
fprint_target_auxv (struct ui_file *file, struct target_ops *ops)
|
fprint_target_auxv (struct ui_file *file, struct target_ops *ops)
|
||||||
{
|
{
|
||||||
@ -188,14 +190,13 @@
|
|||||||
gdb_byte *data;
|
gdb_byte *data;
|
||||||
LONGEST len = target_read_alloc (ops, TARGET_OBJECT_AUXV, NULL,
|
LONGEST len = target_read_alloc (ops, TARGET_OBJECT_AUXV, NULL,
|
||||||
&data);
|
&data);
|
||||||
@@ -153,14 +155,14 @@ fprint_target_auxv (struct ui_file *file
|
@@ -170,13 +172,13 @@ fprint_target_auxv (struct ui_file *file
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
return len;
|
return len;
|
||||||
|
|
||||||
- while (target_auxv_parse (ops, &ptr, data + len, &type, &val) > 0)
|
- while (target_auxv_parse (ops, &ptr, data + len, &type, &val) > 0)
|
||||||
+ while (target_auxv_parse (ops, &ptr, data + len, &at_type, &val) > 0)
|
+ while (target_auxv_parse (ops, &ptr, data + len, &at_type, &val) > 0)
|
||||||
{
|
{
|
||||||
extern int addressprint;
|
|
||||||
const char *name = "???";
|
const char *name = "???";
|
||||||
const char *description = "";
|
const char *description = "";
|
||||||
enum { dec, hex, str } flavor = hex;
|
enum { dec, hex, str } flavor = hex;
|
||||||
@ -205,17 +206,28 @@
|
|||||||
{
|
{
|
||||||
#define TAG(tag, text, kind) \
|
#define TAG(tag, text, kind) \
|
||||||
case tag: name = #tag; description = text; flavor = kind; break
|
case tag: name = #tag; description = text; flavor = kind; break
|
||||||
@@ -213,7 +215,7 @@ fprint_target_auxv (struct ui_file *file
|
@@ -231,7 +233,7 @@ fprint_target_auxv (struct ui_file *file
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf_filtered (file, "%-4s %-20s %-30s ",
|
fprintf_filtered (file, "%-4s %-20s %-30s ",
|
||||||
- paddr_d (type), name, description);
|
- plongest (type), name, description);
|
||||||
+ paddr_d (at_type), name, description);
|
+ plongest (at_type), name, description);
|
||||||
switch (flavor)
|
switch (flavor)
|
||||||
{
|
{
|
||||||
case dec:
|
case dec:
|
||||||
--- ./gdb/auxv.h 2008-01-01 23:53:09.000000000 +0100
|
@@ -252,7 +254,7 @@ fprint_target_auxv (struct ui_file *file
|
||||||
+++ ./gdb/auxv.h 2008-08-30 23:40:33.000000000 +0200
|
break;
|
||||||
|
}
|
||||||
|
++ents;
|
||||||
|
- if (type == AT_NULL)
|
||||||
|
+ if (at_type == AT_NULL)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
Index: gdb-6.8.50.20081209/gdb/auxv.h
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081209.orig/gdb/auxv.h 2008-12-14 14:55:58.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/auxv.h 2008-12-14 14:56:49.000000000 +0100
|
||||||
@@ -35,14 +35,14 @@ struct target_ops; /* Forward declarati
|
@@ -35,14 +35,14 @@ struct target_ops; /* Forward declarati
|
||||||
Return 1 if an entry was read into *TYPEP and *VALP. */
|
Return 1 if an entry was read into *TYPEP and *VALP. */
|
||||||
extern int target_auxv_parse (struct target_ops *ops,
|
extern int target_auxv_parse (struct target_ops *ops,
|
||||||
@ -233,9 +245,11 @@
|
|||||||
|
|
||||||
/* Print the contents of the target's AUXV on the specified file. */
|
/* Print the contents of the target's AUXV on the specified file. */
|
||||||
extern int fprint_target_auxv (struct ui_file *file, struct target_ops *ops);
|
extern int fprint_target_auxv (struct ui_file *file, struct target_ops *ops);
|
||||||
--- ./gdb/breakpoint.c 2008-09-01 17:16:38.000000000 +0200
|
Index: gdb-6.8.50.20081209/gdb/breakpoint.c
|
||||||
+++ ./gdb/breakpoint.c 2008-08-30 23:40:33.000000000 +0200
|
===================================================================
|
||||||
@@ -3971,7 +3971,8 @@ describe_other_breakpoints (CORE_ADDR pc
|
--- gdb-6.8.50.20081209.orig/gdb/breakpoint.c 2008-12-14 14:55:58.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/breakpoint.c 2008-12-14 14:56:49.000000000 +0100
|
||||||
|
@@ -3861,7 +3861,8 @@ describe_other_breakpoints (CORE_ADDR pc
|
||||||
printf_filtered (" (thread %d)", b->thread);
|
printf_filtered (" (thread %d)", b->thread);
|
||||||
printf_filtered ("%s%s ",
|
printf_filtered ("%s%s ",
|
||||||
((b->enable_state == bp_disabled ||
|
((b->enable_state == bp_disabled ||
|
||||||
@ -245,8 +259,8 @@
|
|||||||
? " (disabled)"
|
? " (disabled)"
|
||||||
: b->enable_state == bp_permanent
|
: b->enable_state == bp_permanent
|
||||||
? " (permanent)"
|
? " (permanent)"
|
||||||
@@ -4623,6 +4624,62 @@ disable_breakpoints_in_unloaded_shlib (s
|
@@ -4692,6 +4693,61 @@ create_catchpoint (int tempflag, char *c
|
||||||
}
|
return b;
|
||||||
}
|
}
|
||||||
|
|
||||||
+void
|
+void
|
||||||
@ -303,14 +317,15 @@
|
|||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
+
|
|
||||||
+
|
+
|
||||||
static void
|
static void
|
||||||
create_fork_vfork_event_catchpoint (int tempflag, char *cond_string,
|
create_fork_vfork_event_catchpoint (int tempflag, char *cond_string,
|
||||||
enum bptype bp_kind)
|
struct breakpoint_ops *ops)
|
||||||
--- ./gdb/breakpoint.h 2008-09-01 17:16:38.000000000 +0200
|
Index: gdb-6.8.50.20081209/gdb/breakpoint.h
|
||||||
+++ ./gdb/breakpoint.h 2008-08-30 23:40:33.000000000 +0200
|
===================================================================
|
||||||
@@ -144,6 +144,7 @@ enum enable_state
|
--- gdb-6.8.50.20081209.orig/gdb/breakpoint.h 2008-12-14 14:55:58.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/breakpoint.h 2008-12-14 14:56:49.000000000 +0100
|
||||||
|
@@ -126,6 +126,7 @@ enum enable_state
|
||||||
automatically enabled and reset when the call
|
automatically enabled and reset when the call
|
||||||
"lands" (either completes, or stops at another
|
"lands" (either completes, or stops at another
|
||||||
eventpoint). */
|
eventpoint). */
|
||||||
@ -318,7 +333,7 @@
|
|||||||
bp_permanent /* There is a breakpoint instruction hard-wired into
|
bp_permanent /* There is a breakpoint instruction hard-wired into
|
||||||
the target's code. Don't try to write another
|
the target's code. Don't try to write another
|
||||||
breakpoint instruction on top of it, or restore
|
breakpoint instruction on top of it, or restore
|
||||||
@@ -828,6 +829,10 @@ extern void remove_thread_event_breakpoi
|
@@ -818,6 +819,10 @@ extern void remove_thread_event_breakpoi
|
||||||
|
|
||||||
extern void disable_breakpoints_in_shlibs (void);
|
extern void disable_breakpoints_in_shlibs (void);
|
||||||
|
|
||||||
@ -329,9 +344,11 @@
|
|||||||
/* This function returns TRUE if ep is a catchpoint. */
|
/* This function returns TRUE if ep is a catchpoint. */
|
||||||
extern int ep_is_catchpoint (struct breakpoint *);
|
extern int ep_is_catchpoint (struct breakpoint *);
|
||||||
|
|
||||||
--- ./gdb/dwarf2read.c 2008-09-01 17:16:38.000000000 +0200
|
Index: gdb-6.8.50.20081209/gdb/dwarf2read.c
|
||||||
+++ ./gdb/dwarf2read.c 2008-08-30 23:40:33.000000000 +0200
|
===================================================================
|
||||||
@@ -1222,7 +1222,7 @@ dwarf2_build_psymtabs (struct objfile *o
|
--- gdb-6.8.50.20081209.orig/gdb/dwarf2read.c 2008-12-14 14:55:58.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/dwarf2read.c 2008-12-14 14:56:49.000000000 +0100
|
||||||
|
@@ -1295,7 +1295,7 @@ dwarf2_build_psymtabs (struct objfile *o
|
||||||
else
|
else
|
||||||
dwarf2_per_objfile->loc_buffer = NULL;
|
dwarf2_per_objfile->loc_buffer = NULL;
|
||||||
|
|
||||||
@ -340,9 +357,11 @@
|
|||||||
|| (objfile->global_psymbols.size == 0
|
|| (objfile->global_psymbols.size == 0
|
||||||
&& objfile->static_psymbols.size == 0))
|
&& objfile->static_psymbols.size == 0))
|
||||||
{
|
{
|
||||||
--- ./gdb/elfread.c 2008-09-01 17:16:38.000000000 +0200
|
Index: gdb-6.8.50.20081209/gdb/elfread.c
|
||||||
+++ ./gdb/elfread.c 2008-08-30 23:40:33.000000000 +0200
|
===================================================================
|
||||||
@@ -673,7 +673,7 @@ elf_symfile_read (struct objfile *objfil
|
--- gdb-6.8.50.20081209.orig/gdb/elfread.c 2008-12-14 14:55:58.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/elfread.c 2008-12-14 14:56:49.000000000 +0100
|
||||||
|
@@ -680,7 +680,7 @@ elf_symfile_read (struct objfile *objfil
|
||||||
/* If we are reinitializing, or if we have never loaded syms yet,
|
/* If we are reinitializing, or if we have never loaded syms yet,
|
||||||
set table to empty. MAINLINE is cleared so that *_read_psymtab
|
set table to empty. MAINLINE is cleared so that *_read_psymtab
|
||||||
functions do not all also re-initialize the psymbol table. */
|
functions do not all also re-initialize the psymbol table. */
|
||||||
@ -351,9 +370,11 @@
|
|||||||
{
|
{
|
||||||
init_psymbol_list (objfile, 0);
|
init_psymbol_list (objfile, 0);
|
||||||
mainline = 0;
|
mainline = 0;
|
||||||
--- ./gdb/infrun.c 2008-09-01 17:16:38.000000000 +0200
|
Index: gdb-6.8.50.20081209/gdb/infrun.c
|
||||||
+++ ./gdb/infrun.c 2008-08-30 23:40:33.000000000 +0200
|
===================================================================
|
||||||
@@ -2314,6 +2314,11 @@ process_event_stop_test:
|
--- gdb-6.8.50.20081209.orig/gdb/infrun.c 2008-12-14 14:55:58.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/infrun.c 2008-12-14 14:56:49.000000000 +0100
|
||||||
|
@@ -3229,6 +3229,11 @@ infrun: BPSTAT_WHAT_SET_LONGJMP_RESUME (
|
||||||
#endif
|
#endif
|
||||||
target_terminal_inferior ();
|
target_terminal_inferior ();
|
||||||
|
|
||||||
@ -365,11 +386,13 @@
|
|||||||
/* If requested, stop when the dynamic linker notifies
|
/* If requested, stop when the dynamic linker notifies
|
||||||
gdb of events. This allows the user to get control
|
gdb of events. This allows the user to get control
|
||||||
and place breakpoints in initializer routines for
|
and place breakpoints in initializer routines for
|
||||||
--- ./gdb/objfiles.c 2008-01-01 23:53:12.000000000 +0100
|
Index: gdb-6.8.50.20081209/gdb/objfiles.c
|
||||||
+++ ./gdb/objfiles.c 2008-08-30 23:40:33.000000000 +0200
|
===================================================================
|
||||||
@@ -49,6 +49,9 @@
|
--- gdb-6.8.50.20081209.orig/gdb/objfiles.c 2008-12-14 14:55:58.000000000 +0100
|
||||||
#include "source.h"
|
+++ gdb-6.8.50.20081209/gdb/objfiles.c 2008-12-14 14:56:49.000000000 +0100
|
||||||
#include "addrmap.h"
|
@@ -51,6 +51,9 @@
|
||||||
|
#include "arch-utils.h"
|
||||||
|
#include "exec.h"
|
||||||
|
|
||||||
+#include "auxv.h"
|
+#include "auxv.h"
|
||||||
+#include "elf/common.h"
|
+#include "elf/common.h"
|
||||||
@ -377,7 +400,7 @@
|
|||||||
/* Prototypes for local functions */
|
/* Prototypes for local functions */
|
||||||
|
|
||||||
static void objfile_alloc_data (struct objfile *objfile);
|
static void objfile_alloc_data (struct objfile *objfile);
|
||||||
@@ -260,7 +263,19 @@ init_entry_point_info (struct objfile *o
|
@@ -271,7 +274,19 @@ init_entry_point_info (struct objfile *o
|
||||||
CORE_ADDR
|
CORE_ADDR
|
||||||
entry_point_address (void)
|
entry_point_address (void)
|
||||||
{
|
{
|
||||||
@ -398,18 +421,19 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Create the terminating entry of OBJFILE's minimal symbol table.
|
/* Create the terminating entry of OBJFILE's minimal symbol table.
|
||||||
--- ./gdb/solib-svr4.c 2008-09-01 17:16:38.000000000 +0200
|
Index: gdb-6.8.50.20081209/gdb/solib-svr4.c
|
||||||
+++ ./gdb/solib-svr4.c 2008-09-01 17:12:31.000000000 +0200
|
===================================================================
|
||||||
@@ -31,6 +31,8 @@
|
--- gdb-6.8.50.20081209.orig/gdb/solib-svr4.c 2008-12-14 14:55:58.000000000 +0100
|
||||||
#include "gdbcore.h"
|
+++ gdb-6.8.50.20081209/gdb/solib-svr4.c 2008-12-14 14:56:49.000000000 +0100
|
||||||
#include "target.h"
|
@@ -44,6 +44,7 @@
|
||||||
#include "inferior.h"
|
#include "exec.h"
|
||||||
+#include "auxv.h"
|
#include "auxv.h"
|
||||||
|
#include "exceptions.h"
|
||||||
+#include "command.h"
|
+#include "command.h"
|
||||||
|
|
||||||
#include "gdb_assert.h"
|
static struct link_map_offsets *svr4_fetch_link_map_offsets (void);
|
||||||
|
static int svr4_have_link_map_offsets (void);
|
||||||
@@ -246,7 +248,9 @@ static char *debug_loader_name;
|
@@ -286,7 +287,9 @@ static CORE_ADDR main_lm_addr;
|
||||||
|
|
||||||
/* Local function prototypes */
|
/* Local function prototypes */
|
||||||
|
|
||||||
@ -419,7 +443,7 @@
|
|||||||
|
|
||||||
static CORE_ADDR bfd_lookup_symbol (bfd *, char *);
|
static CORE_ADDR bfd_lookup_symbol (bfd *, char *);
|
||||||
|
|
||||||
@@ -349,10 +353,12 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
|
@@ -520,10 +523,12 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
|
||||||
int arch_size, step, sect_size;
|
int arch_size, step, sect_size;
|
||||||
long dyn_tag;
|
long dyn_tag;
|
||||||
CORE_ADDR dyn_ptr, dyn_addr;
|
CORE_ADDR dyn_ptr, dyn_addr;
|
||||||
@ -432,7 +456,7 @@
|
|||||||
|
|
||||||
if (abfd == NULL)
|
if (abfd == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -360,19 +366,81 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
|
@@ -531,19 +536,81 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
|
||||||
if (arch_size == -1)
|
if (arch_size == -1)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -516,7 +540,7 @@
|
|||||||
|
|
||||||
/* Iterate over BUF and scan for DYNTAG. If found, set PTR and return. */
|
/* Iterate over BUF and scan for DYNTAG. If found, set PTR and return. */
|
||||||
step = (arch_size == 32) ? sizeof (Elf32_External_Dyn)
|
step = (arch_size == 32) ? sizeof (Elf32_External_Dyn)
|
||||||
@@ -393,25 +461,103 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
|
@@ -564,26 +631,105 @@ scan_dyntag (int dyntag, bfd *abfd, CORE
|
||||||
dyn_tag = bfd_h_get_64 (abfd, (bfd_byte *) x_dynp_64->d_tag);
|
dyn_tag = bfd_h_get_64 (abfd, (bfd_byte *) x_dynp_64->d_tag);
|
||||||
dyn_ptr = bfd_h_get_64 (abfd, (bfd_byte *) x_dynp_64->d_un.d_ptr);
|
dyn_ptr = bfd_h_get_64 (abfd, (bfd_byte *) x_dynp_64->d_un.d_ptr);
|
||||||
}
|
}
|
||||||
@ -562,13 +586,14 @@
|
|||||||
- entry. */
|
- entry. */
|
||||||
- if (ptr)
|
- if (ptr)
|
||||||
- {
|
- {
|
||||||
|
- struct type *ptr_type;
|
||||||
- gdb_byte ptr_buf[8];
|
- gdb_byte ptr_buf[8];
|
||||||
- CORE_ADDR ptr_addr;
|
- CORE_ADDR ptr_addr;
|
||||||
-
|
-
|
||||||
|
- ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
|
||||||
- ptr_addr = dyn_addr + (buf - bufstart) + arch_size / 8;
|
- ptr_addr = dyn_addr + (buf - bufstart) + arch_size / 8;
|
||||||
- if (target_read_memory (ptr_addr, ptr_buf, arch_size / 8) == 0)
|
- if (target_read_memory (ptr_addr, ptr_buf, arch_size / 8) == 0)
|
||||||
- dyn_ptr = extract_typed_address (ptr_buf,
|
- dyn_ptr = extract_typed_address (ptr_buf, ptr_type);
|
||||||
- builtin_type_void_data_ptr);
|
|
||||||
- *ptr = dyn_ptr;
|
- *ptr = dyn_ptr;
|
||||||
- }
|
- }
|
||||||
- return 1;
|
- return 1;
|
||||||
@ -612,8 +637,10 @@
|
|||||||
+
|
+
|
||||||
+ if (got == 0)
|
+ if (got == 0)
|
||||||
+ {
|
+ {
|
||||||
+ dyn_ptr = extract_typed_address (ptr_buf,
|
+ struct type *ptr_type;
|
||||||
+ builtin_type_void_data_ptr);
|
+
|
||||||
|
+ ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
|
||||||
|
+ dyn_ptr = extract_typed_address (ptr_buf, ptr_type);
|
||||||
+ if (ptr != NULL)
|
+ if (ptr != NULL)
|
||||||
+ {
|
+ {
|
||||||
+ if (debug_solib)
|
+ if (debug_solib)
|
||||||
@ -638,18 +665,18 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -544,6 +690,10 @@ solib_svr4_r_map (void)
|
@@ -773,6 +919,10 @@ solib_svr4_r_map (void)
|
||||||
{
|
|
||||||
struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
|
struct link_map_offsets *lmo = svr4_fetch_link_map_offsets ();
|
||||||
|
struct type *ptr_type = builtin_type (target_gdbarch)->builtin_data_ptr;
|
||||||
|
|
||||||
+ if (debug_solib)
|
+ if (debug_solib)
|
||||||
+ fprintf_unfiltered (gdb_stdlog,
|
+ fprintf_unfiltered (gdb_stdlog,
|
||||||
+ "solib_svr4_r_map: read at 0x%s\n",
|
+ "solib_svr4_r_map: read at 0x%s\n",
|
||||||
+ paddr_nz (debug_base + lmo->r_map_offset));
|
+ paddr_nz (debug_base + lmo->r_map_offset));
|
||||||
return read_memory_typed_address (debug_base + lmo->r_map_offset,
|
return read_memory_typed_address (debug_base + lmo->r_map_offset, ptr_type);
|
||||||
builtin_type_void_data_ptr);
|
|
||||||
}
|
}
|
||||||
@@ -713,6 +863,11 @@ svr4_current_sos (void)
|
|
||||||
|
@@ -944,6 +1094,11 @@ svr4_current_sos (void)
|
||||||
struct so_list *head = 0;
|
struct so_list *head = 0;
|
||||||
struct so_list **link_ptr = &head;
|
struct so_list **link_ptr = &head;
|
||||||
CORE_ADDR ldsomap = 0;
|
CORE_ADDR ldsomap = 0;
|
||||||
@ -661,7 +688,7 @@
|
|||||||
|
|
||||||
/* Always locate the debug struct, in case it has moved. */
|
/* Always locate the debug struct, in case it has moved. */
|
||||||
debug_base = 0;
|
debug_base = 0;
|
||||||
@@ -721,10 +876,19 @@ svr4_current_sos (void)
|
@@ -952,10 +1107,19 @@ svr4_current_sos (void)
|
||||||
/* If we can't find the dynamic linker's base structure, this
|
/* If we can't find the dynamic linker's base structure, this
|
||||||
must not be a dynamically linked executable. Hmm. */
|
must not be a dynamically linked executable. Hmm. */
|
||||||
if (! debug_base)
|
if (! debug_base)
|
||||||
@ -682,7 +709,7 @@
|
|||||||
lm = solib_svr4_r_map ();
|
lm = solib_svr4_r_map ();
|
||||||
|
|
||||||
while (lm)
|
while (lm)
|
||||||
@@ -740,23 +904,103 @@ svr4_current_sos (void)
|
@@ -972,26 +1136,104 @@ svr4_current_sos (void)
|
||||||
new->lm_info->lm = xzalloc (lmo->link_map_size);
|
new->lm_info->lm = xzalloc (lmo->link_map_size);
|
||||||
make_cleanup (xfree, new->lm_info->lm);
|
make_cleanup (xfree, new->lm_info->lm);
|
||||||
|
|
||||||
@ -704,14 +731,17 @@
|
|||||||
does have a name, so we can no longer use a missing name to
|
does have a name, so we can no longer use a missing name to
|
||||||
decide when to ignore it. */
|
decide when to ignore it. */
|
||||||
- if (IGNORE_FIRST_LINK_MAP_ENTRY (new) && ldsomap == 0)
|
- if (IGNORE_FIRST_LINK_MAP_ENTRY (new) && ldsomap == 0)
|
||||||
- free_so (new);
|
|
||||||
+ if (exec_bfd != NULL && IGNORE_FIRST_LINK_MAP_ENTRY (new) && ldsomap == 0)
|
+ if (exec_bfd != NULL && IGNORE_FIRST_LINK_MAP_ENTRY (new) && ldsomap == 0)
|
||||||
+ {
|
{
|
||||||
|
- main_lm_addr = new->lm_info->lm_addr;
|
||||||
|
- free_so (new);
|
||||||
|
- }
|
||||||
+ /* It is the first link map entry, i.e. it is the main executable. */
|
+ /* It is the first link map entry, i.e. it is the main executable. */
|
||||||
+
|
+
|
||||||
+ if (bfd_get_start_address (exec_bfd) == entry_point_address ())
|
+ if (bfd_get_start_address (exec_bfd) == entry_point_address ())
|
||||||
+ {
|
+ {
|
||||||
+ /* Non-pie case, main executable has not been relocated. */
|
+ /* Non-pie case, main executable has not been relocated. */
|
||||||
|
+ main_lm_addr = new->lm_info->lm_addr;
|
||||||
+ free_so (new);
|
+ free_so (new);
|
||||||
+ }
|
+ }
|
||||||
+ else
|
+ else
|
||||||
@ -788,7 +818,7 @@
|
|||||||
target_read_string (LM_NAME (new), &buffer,
|
target_read_string (LM_NAME (new), &buffer,
|
||||||
SO_NAME_MAX_PATH_SIZE - 1, &errcode);
|
SO_NAME_MAX_PATH_SIZE - 1, &errcode);
|
||||||
if (errcode != 0)
|
if (errcode != 0)
|
||||||
@@ -764,47 +1008,60 @@ svr4_current_sos (void)
|
@@ -999,47 +1241,60 @@ svr4_current_sos (void)
|
||||||
safe_strerror (errcode));
|
safe_strerror (errcode));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -834,15 +864,15 @@
|
|||||||
+ }
|
+ }
|
||||||
+ else
|
+ else
|
||||||
+ debug_print_missing (new->so_name, build_id_filename);
|
+ debug_print_missing (new->so_name, build_id_filename);
|
||||||
|
+
|
||||||
|
+ xfree (build_id_filename);
|
||||||
|
+ xfree (build_id);
|
||||||
|
+ }
|
||||||
|
|
||||||
- /* Missing the build-id matching separate debug info file
|
- /* Missing the build-id matching separate debug info file
|
||||||
- would be handled while SO_NAME gets loaded. */
|
- would be handled while SO_NAME gets loaded. */
|
||||||
- name = build_id_to_filename (build_id, &build_id_filename, 0);
|
- name = build_id_to_filename (build_id, &build_id_filename, 0);
|
||||||
- if (name != NULL)
|
- if (name != NULL)
|
||||||
+ xfree (build_id_filename);
|
|
||||||
+ xfree (build_id);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (debug_solib)
|
+ if (debug_solib)
|
||||||
{
|
{
|
||||||
- strncpy (new->so_name, name, SO_NAME_MAX_PATH_SIZE - 1);
|
- strncpy (new->so_name, name, SO_NAME_MAX_PATH_SIZE - 1);
|
||||||
@ -882,7 +912,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* On Solaris, the dynamic linker is not in the normal list of
|
/* On Solaris, the dynamic linker is not in the normal list of
|
||||||
@@ -820,6 +1077,9 @@ svr4_current_sos (void)
|
@@ -1055,6 +1310,9 @@ svr4_current_sos (void)
|
||||||
if (head == NULL)
|
if (head == NULL)
|
||||||
return svr4_default_sos ();
|
return svr4_default_sos ();
|
||||||
|
|
||||||
@ -892,7 +922,7 @@
|
|||||||
return head;
|
return head;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -921,7 +1181,7 @@ for (resolve = 0; resolve <= 1; resolve+
|
@@ -1086,7 +1344,7 @@ svr4_fetch_objfile_link_map (struct objf
|
||||||
/* On some systems, the only way to recognize the link map entry for
|
/* On some systems, the only way to recognize the link map entry for
|
||||||
the main executable file is by looking at its name. Return
|
the main executable file is by looking at its name. Return
|
||||||
non-zero iff SONAME matches one of the known main executable names. */
|
non-zero iff SONAME matches one of the known main executable names. */
|
||||||
@ -901,7 +931,7 @@
|
|||||||
static int
|
static int
|
||||||
match_main (char *soname)
|
match_main (char *soname)
|
||||||
{
|
{
|
||||||
@@ -935,6 +1195,7 @@ match_main (char *soname)
|
@@ -1100,6 +1358,7 @@ match_main (char *soname)
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
@ -909,28 +939,25 @@
|
|||||||
|
|
||||||
/* Return 1 if PC lies in the dynamic symbol resolution code of the
|
/* Return 1 if PC lies in the dynamic symbol resolution code of the
|
||||||
SVR4 run time loader. */
|
SVR4 run time loader. */
|
||||||
@@ -1086,11 +1347,17 @@ enable_break (void)
|
@@ -1250,15 +1509,29 @@ enable_break (void)
|
||||||
/* Find the .interp section; if not found, warn the user and drop
|
/* Find the program interpreter; if not found, warn the user and drop
|
||||||
into the old breakpoint at symbol code. */
|
into the old breakpoint at symbol code. */
|
||||||
interp_sect = bfd_get_section_by_name (exec_bfd, ".interp");
|
interp_name = find_program_interpreter ();
|
||||||
+
|
+
|
||||||
+ if (debug_solib)
|
+ if (debug_solib)
|
||||||
+ fprintf_unfiltered (gdb_stdlog,
|
+ fprintf_unfiltered (gdb_stdlog,
|
||||||
+ "enable_break: search for .interp in %s\n",
|
+ "enable_break: search for .interp in %s\n",
|
||||||
+ exec_bfd->filename);
|
+ exec_bfd->filename);
|
||||||
if (interp_sect)
|
if (interp_name)
|
||||||
{
|
{
|
||||||
unsigned int interp_sect_size;
|
|
||||||
char *buf;
|
|
||||||
CORE_ADDR load_addr = 0;
|
CORE_ADDR load_addr = 0;
|
||||||
+ CORE_ADDR load_addr_mask = -1L;
|
+ CORE_ADDR load_addr_mask = -1L;
|
||||||
int load_addr_found = 0;
|
int load_addr_found = 0;
|
||||||
int loader_found_in_list = 0;
|
int loader_found_in_list = 0;
|
||||||
struct so_list *so;
|
struct so_list *so;
|
||||||
@@ -1098,6 +1365,14 @@ enable_break (void)
|
bfd *tmp_bfd = NULL;
|
||||||
struct target_ops *tmp_bfd_target;
|
struct target_ops *tmp_bfd_target;
|
||||||
int tmp_fd = -1;
|
volatile struct gdb_exception ex;
|
||||||
char *tmp_pathname = NULL;
|
|
||||||
+ int arch_size;
|
+ int arch_size;
|
||||||
+
|
+
|
||||||
+ /* For 32bit inferiors with 64bit GDB we may get LOAD_ADDR at 0xff......
|
+ /* For 32bit inferiors with 64bit GDB we may get LOAD_ADDR at 0xff......
|
||||||
@ -940,19 +967,19 @@
|
|||||||
+ if (arch_size > 0 && arch_size < sizeof (1UL) * 8)
|
+ if (arch_size > 0 && arch_size < sizeof (1UL) * 8)
|
||||||
+ load_addr_mask = (1UL << arch_size) - 1;
|
+ load_addr_mask = (1UL << arch_size) - 1;
|
||||||
|
|
||||||
/* Read the contents of the .interp section into a local buffer;
|
sym_addr = 0;
|
||||||
the contents specify the dynamic linker this program uses. */
|
|
||||||
@@ -1120,6 +1395,9 @@ enable_break (void)
|
|
||||||
if (tmp_fd >= 0)
|
|
||||||
tmp_bfd = bfd_fopen (tmp_pathname, gnutarget, FOPEN_RB, tmp_fd);
|
|
||||||
|
|
||||||
|
@@ -1275,6 +1548,9 @@ enable_break (void)
|
||||||
|
{
|
||||||
|
tmp_bfd = solib_bfd_open (interp_name);
|
||||||
|
}
|
||||||
+ if (debug_solib)
|
+ if (debug_solib)
|
||||||
+ fprintf_unfiltered (gdb_stdlog,
|
+ fprintf_unfiltered (gdb_stdlog,
|
||||||
+ "enable_break: opening %s\n", tmp_pathname);
|
+ "enable_break: opening %s\n", interp_name);
|
||||||
if (tmp_bfd == NULL)
|
if (tmp_bfd == NULL)
|
||||||
goto bkpt_at_symbol;
|
goto bkpt_at_symbol;
|
||||||
|
|
||||||
@@ -1181,16 +1459,16 @@ enable_break (void)
|
@@ -1328,16 +1604,16 @@ enable_break (void)
|
||||||
interp_sect = bfd_get_section_by_name (tmp_bfd, ".text");
|
interp_sect = bfd_get_section_by_name (tmp_bfd, ".text");
|
||||||
if (interp_sect)
|
if (interp_sect)
|
||||||
{
|
{
|
||||||
@ -973,29 +1000,29 @@
|
|||||||
interp_plt_sect_high =
|
interp_plt_sect_high =
|
||||||
interp_plt_sect_low + bfd_section_size (tmp_bfd, interp_sect);
|
interp_plt_sect_low + bfd_section_size (tmp_bfd, interp_sect);
|
||||||
}
|
}
|
||||||
@@ -1225,7 +1503,11 @@ enable_break (void)
|
@@ -1372,7 +1648,11 @@ enable_break (void)
|
||||||
|
|
||||||
if (sym_addr != 0)
|
if (sym_addr != 0)
|
||||||
{
|
{
|
||||||
- create_solib_event_breakpoint (load_addr + sym_addr);
|
- create_solib_event_breakpoint (load_addr + sym_addr);
|
||||||
+ create_solib_event_breakpoint ((load_addr + sym_addr)
|
+ create_solib_event_breakpoint ((load_addr + sym_addr)
|
||||||
+ & load_addr_mask);
|
+ & load_addr_mask);
|
||||||
+ if (debug_solib)
|
+ if (debug_solib)
|
||||||
+ fprintf_unfiltered (gdb_stdlog,
|
+ fprintf_unfiltered (gdb_stdlog,
|
||||||
+ "enable_break: solib bp set\n");
|
+ "enable_break: solib bp set\n");
|
||||||
|
xfree (interp_name);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@@ -1638,6 +1918,8 @@ svr4_solib_create_inferior_hook (void)
|
||||||
@@ -1486,6 +1768,8 @@ svr4_solib_create_inferior_hook (void)
|
while (tp->stop_signal != TARGET_SIGNAL_TRAP);
|
||||||
while (stop_signal != TARGET_SIGNAL_TRAP);
|
inf->stop_soon = NO_STOP_QUIETLY;
|
||||||
stop_soon = NO_STOP_QUIETLY;
|
|
||||||
#endif /* defined(_SCO_DS) */
|
#endif /* defined(_SCO_DS) */
|
||||||
+
|
+
|
||||||
+ disable_breakpoints_at_startup (1);
|
+ disable_breakpoints_at_startup (1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -1666,6 +1950,75 @@ svr4_lp64_fetch_link_map_offsets (void)
|
@@ -1819,6 +2101,75 @@ svr4_lp64_fetch_link_map_offsets (void)
|
||||||
|
|
||||||
return lmp;
|
return lmp;
|
||||||
}
|
}
|
||||||
@ -1071,7 +1098,7 @@
|
|||||||
|
|
||||||
|
|
||||||
struct target_so_ops svr4_so_ops;
|
struct target_so_ops svr4_so_ops;
|
||||||
@@ -1724,4 +2077,7 @@ _initialize_svr4_solib (void)
|
@@ -1858,4 +2209,7 @@ _initialize_svr4_solib (void)
|
||||||
svr4_so_ops.in_dynsym_resolve_code = svr4_in_dynsym_resolve_code;
|
svr4_so_ops.in_dynsym_resolve_code = svr4_in_dynsym_resolve_code;
|
||||||
svr4_so_ops.lookup_lib_global_symbol = elf_lookup_lib_symbol;
|
svr4_so_ops.lookup_lib_global_symbol = elf_lookup_lib_symbol;
|
||||||
svr4_so_ops.same = svr4_same;
|
svr4_so_ops.same = svr4_same;
|
||||||
@ -1079,9 +1106,11 @@
|
|||||||
+ add_info ("linkmap", info_linkmap_command,
|
+ add_info ("linkmap", info_linkmap_command,
|
||||||
+ "Display the inferior's linkmap.");
|
+ "Display the inferior's linkmap.");
|
||||||
}
|
}
|
||||||
--- ./gdb/solib.c 2008-01-07 16:19:58.000000000 +0100
|
Index: gdb-6.8.50.20081209/gdb/solib.c
|
||||||
+++ ./gdb/solib.c 2008-09-01 17:16:12.000000000 +0200
|
===================================================================
|
||||||
@@ -79,6 +79,8 @@ set_solib_ops (struct gdbarch *gdbarch,
|
--- gdb-6.8.50.20081209.orig/gdb/solib.c 2008-12-14 14:55:58.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/solib.c 2008-12-14 14:56:49.000000000 +0100
|
||||||
|
@@ -80,6 +80,8 @@ set_solib_ops (struct gdbarch *gdbarch,
|
||||||
|
|
||||||
/* external data declarations */
|
/* external data declarations */
|
||||||
|
|
||||||
@ -1090,7 +1119,7 @@
|
|||||||
/* FIXME: gdbarch needs to control this variable, or else every
|
/* FIXME: gdbarch needs to control this variable, or else every
|
||||||
configuration needs to call set_solib_ops. */
|
configuration needs to call set_solib_ops. */
|
||||||
struct target_so_ops *current_target_so_ops;
|
struct target_so_ops *current_target_so_ops;
|
||||||
@@ -102,6 +104,8 @@ The search path for loading non-absolute
|
@@ -103,6 +105,8 @@ The search path for loading non-absolute
|
||||||
value);
|
value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1099,7 +1128,7 @@
|
|||||||
/*
|
/*
|
||||||
|
|
||||||
GLOBAL FUNCTION
|
GLOBAL FUNCTION
|
||||||
@@ -391,7 +395,6 @@ free_so (struct so_list *so)
|
@@ -405,7 +409,6 @@ free_so (struct so_list *so)
|
||||||
xfree (so);
|
xfree (so);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1107,7 +1136,7 @@
|
|||||||
/* Return address of first so_list entry in master shared object list. */
|
/* Return address of first so_list entry in master shared object list. */
|
||||||
struct so_list *
|
struct so_list *
|
||||||
master_so_list (void)
|
master_so_list (void)
|
||||||
@@ -399,7 +402,6 @@ master_so_list (void)
|
@@ -413,7 +416,6 @@ master_so_list (void)
|
||||||
return so_list_head;
|
return so_list_head;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1115,7 +1144,7 @@
|
|||||||
/* A small stub to get us past the arg-passing pinhole of catch_errors. */
|
/* A small stub to get us past the arg-passing pinhole of catch_errors. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -411,15 +413,40 @@ symbol_add_stub (void *arg)
|
@@ -425,15 +427,40 @@ symbol_add_stub (void *arg)
|
||||||
/* Have we already loaded this shared object? */
|
/* Have we already loaded this shared object? */
|
||||||
ALL_OBJFILES (so->objfile)
|
ALL_OBJFILES (so->objfile)
|
||||||
{
|
{
|
||||||
@ -1159,7 +1188,7 @@
|
|||||||
free_section_addr_info (sap);
|
free_section_addr_info (sap);
|
||||||
|
|
||||||
return (1);
|
return (1);
|
||||||
@@ -545,6 +572,10 @@ update_solib_list (int from_tty, struct
|
@@ -565,6 +592,10 @@ update_solib_list (int from_tty, struct
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1170,7 +1199,7 @@
|
|||||||
if (! strcmp (gdb->so_original_name, i->so_original_name))
|
if (! strcmp (gdb->so_original_name, i->so_original_name))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -599,28 +630,7 @@ update_solib_list (int from_tty, struct
|
@@ -619,28 +650,7 @@ update_solib_list (int from_tty, struct
|
||||||
/* Fill in the rest of each of the `struct so_list' nodes. */
|
/* Fill in the rest of each of the `struct so_list' nodes. */
|
||||||
for (i = inferior; i; i = i->next)
|
for (i = inferior; i; i = i->next)
|
||||||
{
|
{
|
||||||
@ -1200,7 +1229,7 @@
|
|||||||
|
|
||||||
/* Notify any observer that the shared object has been
|
/* Notify any observer that the shared object has been
|
||||||
loaded now that we've added it to GDB's tables. */
|
loaded now that we've added it to GDB's tables. */
|
||||||
@@ -716,6 +726,41 @@ solib_add (char *pattern, int from_tty,
|
@@ -736,6 +746,41 @@ solib_add (char *pattern, int from_tty,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1242,7 +1271,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@@ -1035,4 +1080,12 @@ This takes precedence over the environme
|
@@ -1053,4 +1098,12 @@ This takes precedence over the environme
|
||||||
reload_shared_libraries,
|
reload_shared_libraries,
|
||||||
show_solib_search_path,
|
show_solib_search_path,
|
||||||
&setlist, &showlist);
|
&setlist, &showlist);
|
||||||
@ -1255,8 +1284,10 @@
|
|||||||
+ NULL, NULL,
|
+ NULL, NULL,
|
||||||
+ &setdebuglist, &showdebuglist);
|
+ &setdebuglist, &showdebuglist);
|
||||||
}
|
}
|
||||||
--- ./gdb/solist.h 2008-01-07 16:19:58.000000000 +0100
|
Index: gdb-6.8.50.20081209/gdb/solist.h
|
||||||
+++ ./gdb/solist.h 2008-08-30 23:40:33.000000000 +0200
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081209.orig/gdb/solist.h 2008-12-14 14:55:58.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/solist.h 2008-12-14 14:56:49.000000000 +0100
|
||||||
@@ -61,6 +61,8 @@ struct so_list
|
@@ -61,6 +61,8 @@ struct so_list
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
char symbols_loaded; /* flag: symbols read in yet? */
|
char symbols_loaded; /* flag: symbols read in yet? */
|
||||||
@ -1266,31 +1297,21 @@
|
|||||||
struct objfile *objfile; /* objfile for loaded lib */
|
struct objfile *objfile; /* objfile for loaded lib */
|
||||||
struct section_table *sections;
|
struct section_table *sections;
|
||||||
struct section_table *sections_end;
|
struct section_table *sections_end;
|
||||||
@@ -127,9 +129,15 @@ void free_so (struct so_list *so);
|
@@ -138,4 +140,10 @@ struct symbol *solib_global_lookup (cons
|
||||||
/* Return address of first so_list entry in master shared object list. */
|
const char *linkage_name,
|
||||||
struct so_list *master_so_list (void);
|
const domain_enum domain);
|
||||||
|
|
||||||
+/* Return address of first so_list entry in master shared object list. */
|
|
||||||
+struct so_list *master_so_list (void);
|
|
||||||
+
|
|
||||||
/* Find solib binary file and open it. */
|
|
||||||
extern int solib_open (char *in_pathname, char **found_pathname);
|
|
||||||
|
|
||||||
+/* Add the list of sections in so_list to the target to_sections. */
|
+/* Add the list of sections in so_list to the target to_sections. */
|
||||||
+extern void add_to_target_sections (int, struct target_ops *, struct so_list *);
|
+extern void add_to_target_sections (int, struct target_ops *, struct so_list *);
|
||||||
+
|
+
|
||||||
/* FIXME: gdbarch needs to control this variable */
|
|
||||||
extern struct target_so_ops *current_target_so_ops;
|
|
||||||
|
|
||||||
@@ -140,4 +148,6 @@ struct symbol *solib_global_lookup (cons
|
|
||||||
const domain_enum domain,
|
|
||||||
struct symtab **symtab);
|
|
||||||
|
|
||||||
+/* Controls the printing of debugging output. */
|
+/* Controls the printing of debugging output. */
|
||||||
+extern int debug_solib;
|
+extern int debug_solib;
|
||||||
|
+
|
||||||
#endif
|
#endif
|
||||||
--- ./gdb/symfile-mem.c 2008-09-01 17:16:38.000000000 +0200
|
Index: gdb-6.8.50.20081209/gdb/symfile-mem.c
|
||||||
+++ ./gdb/symfile-mem.c 2008-08-30 23:40:33.000000000 +0200
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081209.orig/gdb/symfile-mem.c 2008-12-14 14:55:58.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/symfile-mem.c 2008-12-14 14:56:49.000000000 +0100
|
||||||
@@ -116,7 +116,7 @@ symbol_file_add_from_memory (struct bfd
|
@@ -116,7 +116,7 @@ symbol_file_add_from_memory (struct bfd
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1300,8 +1321,10 @@
|
|||||||
|
|
||||||
/* This might change our ideas about frames already looked at. */
|
/* This might change our ideas about frames already looked at. */
|
||||||
reinit_frame_cache ();
|
reinit_frame_cache ();
|
||||||
--- ./gdb/symfile.c 2008-09-01 17:16:38.000000000 +0200
|
Index: gdb-6.8.50.20081209/gdb/symfile.c
|
||||||
+++ ./gdb/symfile.c 2008-08-30 23:41:48.000000000 +0200
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081209.orig/gdb/symfile.c 2008-12-14 14:55:58.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/symfile.c 2008-12-14 14:56:49.000000000 +0100
|
||||||
@@ -47,6 +47,7 @@
|
@@ -47,6 +47,7 @@
|
||||||
#include "readline/readline.h"
|
#include "readline/readline.h"
|
||||||
#include "gdb_assert.h"
|
#include "gdb_assert.h"
|
||||||
@ -1310,7 +1333,7 @@
|
|||||||
#include "observer.h"
|
#include "observer.h"
|
||||||
#include "exec.h"
|
#include "exec.h"
|
||||||
#include "parser-defs.h"
|
#include "parser-defs.h"
|
||||||
@@ -815,7 +816,7 @@ syms_from_objfile (struct objfile *objfi
|
@@ -787,7 +788,7 @@ syms_from_objfile (struct objfile *objfi
|
||||||
|
|
||||||
/* Now either addrs or offsets is non-zero. */
|
/* Now either addrs or offsets is non-zero. */
|
||||||
|
|
||||||
@ -1319,16 +1342,16 @@
|
|||||||
{
|
{
|
||||||
/* We will modify the main symbol table, make sure that all its users
|
/* We will modify the main symbol table, make sure that all its users
|
||||||
will be cleaned up if an error occurs during symbol reading. */
|
will be cleaned up if an error occurs during symbol reading. */
|
||||||
@@ -843,7 +844,7 @@ syms_from_objfile (struct objfile *objfi
|
@@ -815,7 +816,7 @@ syms_from_objfile (struct objfile *objfi
|
||||||
|
|
||||||
We no longer warn if the lowest section is not a text segment (as
|
We no longer warn if the lowest section is not a text segment (as
|
||||||
happens for the PA64 port. */
|
happens for the PA64 port. */
|
||||||
- if (!mainline && addrs && addrs->other[0].name)
|
- if (!mainline && addrs && addrs->other[0].name)
|
||||||
+ if (/*!mainline &&*/ addrs && addrs->other[0].name)
|
+ if (/*!mainline &&*/ addrs && addrs->other[0].name)
|
||||||
{
|
{
|
||||||
|
asection *lower_sect;
|
||||||
asection *sect;
|
asection *sect;
|
||||||
CORE_ADDR lower_offset = 0; /* Shut up the GCC warning. */
|
@@ -916,17 +917,21 @@ new_symfile_objfile (struct objfile *obj
|
||||||
@@ -1002,17 +1003,21 @@ new_symfile_objfile (struct objfile *obj
|
|
||||||
/* If this is the main symbol file we have to clean up all users of the
|
/* If this is the main symbol file we have to clean up all users of the
|
||||||
old main symbol file. Otherwise it is sufficient to fixup all the
|
old main symbol file. Otherwise it is sufficient to fixup all the
|
||||||
breakpoints that may have been redefined by this symbol file. */
|
breakpoints that may have been redefined by this symbol file. */
|
||||||
@ -1352,7 +1375,7 @@
|
|||||||
|
|
||||||
/* We're done reading the symbol file; finish off complaints. */
|
/* We're done reading the symbol file; finish off complaints. */
|
||||||
clear_complaints (&symfile_complaints, 0, verbo);
|
clear_complaints (&symfile_complaints, 0, verbo);
|
||||||
@@ -1055,7 +1060,7 @@ symbol_file_add_with_addrs_or_offsets (b
|
@@ -969,7 +974,7 @@ symbol_file_add_with_addrs_or_offsets (b
|
||||||
interactively wiping out any existing symbols. */
|
interactively wiping out any existing symbols. */
|
||||||
|
|
||||||
if ((have_full_symbols () || have_partial_symbols ())
|
if ((have_full_symbols () || have_partial_symbols ())
|
||||||
@ -1361,7 +1384,7 @@
|
|||||||
&& from_tty
|
&& from_tty
|
||||||
&& !query ("Load new symbol table from \"%s\"? ", name))
|
&& !query ("Load new symbol table from \"%s\"? ", name))
|
||||||
error (_("Not confirmed."));
|
error (_("Not confirmed."));
|
||||||
@@ -1242,6 +1247,10 @@ symbol_file_clear (int from_tty)
|
@@ -1160,6 +1165,10 @@ symbol_file_clear (int from_tty)
|
||||||
symfile_objfile->name)
|
symfile_objfile->name)
|
||||||
: !query (_("Discard symbol table? "))))
|
: !query (_("Discard symbol table? "))))
|
||||||
error (_("Not confirmed."));
|
error (_("Not confirmed."));
|
||||||
@ -1372,7 +1395,7 @@
|
|||||||
free_all_objfiles ();
|
free_all_objfiles ();
|
||||||
|
|
||||||
/* solib descriptors may have handles to objfiles. Since their
|
/* solib descriptors may have handles to objfiles. Since their
|
||||||
@@ -3335,6 +3344,8 @@ reread_symbols (void)
|
@@ -3259,6 +3268,8 @@ reread_symbols (void)
|
||||||
/* Discard cleanups as symbol reading was successful. */
|
/* Discard cleanups as symbol reading was successful. */
|
||||||
discard_cleanups (old_cleanups);
|
discard_cleanups (old_cleanups);
|
||||||
|
|
||||||
@ -1381,7 +1404,7 @@
|
|||||||
/* If the mtime has changed between the time we set new_modtime
|
/* If the mtime has changed between the time we set new_modtime
|
||||||
and now, we *want* this to be out of date, so don't call stat
|
and now, we *want* this to be out of date, so don't call stat
|
||||||
again now. */
|
again now. */
|
||||||
@@ -3703,6 +3714,7 @@ clear_symtab_users (void)
|
@@ -3628,6 +3639,7 @@ clear_symtab_users (void)
|
||||||
breakpoint_re_set ();
|
breakpoint_re_set ();
|
||||||
set_default_breakpoint (0, 0, 0, 0);
|
set_default_breakpoint (0, 0, 0, 0);
|
||||||
clear_pc_function_cache ();
|
clear_pc_function_cache ();
|
||||||
@ -1389,9 +1412,11 @@
|
|||||||
observer_notify_new_objfile (NULL);
|
observer_notify_new_objfile (NULL);
|
||||||
|
|
||||||
/* Clear globals which might have pointed into a removed objfile.
|
/* Clear globals which might have pointed into a removed objfile.
|
||||||
--- ./gdb/varobj.c 2008-09-01 17:16:38.000000000 +0200
|
Index: gdb-6.8.50.20081209/gdb/varobj.c
|
||||||
+++ ./gdb/varobj.c 2008-08-30 23:40:33.000000000 +0200
|
===================================================================
|
||||||
@@ -1075,6 +1075,62 @@ install_new_value (struct varobj *var, s
|
--- gdb-6.8.50.20081209.orig/gdb/varobj.c 2008-12-14 14:55:58.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/varobj.c 2008-12-14 14:56:49.000000000 +0100
|
||||||
|
@@ -1116,6 +1116,62 @@ install_new_value (struct varobj *var, s
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1454,12 +1479,27 @@
|
|||||||
/* Update the values for a variable and its children. This is a
|
/* Update the values for a variable and its children. This is a
|
||||||
two-pronged attack. First, re-parse the value for the root's
|
two-pronged attack. First, re-parse the value for the root's
|
||||||
expression to see if it's changed. Then go all the way
|
expression to see if it's changed. Then go all the way
|
||||||
--- ./gdb/varobj.h 2008-01-30 08:17:31.000000000 +0100
|
Index: gdb-6.8.50.20081209/gdb/varobj.h
|
||||||
+++ ./gdb/varobj.h 2008-08-30 23:40:33.000000000 +0200
|
===================================================================
|
||||||
@@ -122,4 +122,6 @@ extern void varobj_invalidate (void);
|
--- gdb-6.8.50.20081209.orig/gdb/varobj.h 2008-12-14 14:55:58.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/varobj.h 2008-12-14 14:56:49.000000000 +0100
|
||||||
|
@@ -141,4 +141,6 @@ extern int varobj_editable_p (struct var
|
||||||
|
|
||||||
extern int varobj_editable_p (struct varobj *var);
|
extern int varobj_floating_p (struct varobj *var);
|
||||||
|
|
||||||
+extern void varobj_refresh(void);
|
+extern void varobj_refresh(void);
|
||||||
+
|
+
|
||||||
#endif /* VAROBJ_H */
|
#endif /* VAROBJ_H */
|
||||||
|
Index: gdb-6.8.50.20081209/gdb/target.h
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081209.orig/gdb/target.h 2008-12-14 11:52:54.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/target.h 2008-12-14 14:57:21.000000000 +0100
|
||||||
|
@@ -524,7 +524,7 @@ struct target_ops
|
||||||
|
Return -1 if there is insufficient buffer for a whole entry.
|
||||||
|
Return 1 if an entry was read into *TYPEP and *VALP. */
|
||||||
|
int (*to_auxv_parse) (struct target_ops *ops, gdb_byte **readptr,
|
||||||
|
- gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp);
|
||||||
|
+ gdb_byte *endptr, ULONGEST *typep, CORE_ADDR *valp);
|
||||||
|
|
||||||
|
/* Search SEARCH_SPACE_LEN bytes beginning at START_ADDR for the
|
||||||
|
sequence of bytes in PATTERN with length PATTERN_LEN.
|
||||||
|
@ -3,9 +3,11 @@
|
|||||||
* printcmd.c (build_address_symbolic): Find a section for the
|
* printcmd.c (build_address_symbolic): Find a section for the
|
||||||
address.
|
address.
|
||||||
|
|
||||||
--- ./gdb/printcmd.c.1 2004-11-24 17:54:27.316295608 -0500
|
Index: gdb-6.8.50.20081128/gdb/printcmd.c
|
||||||
+++ ./gdb/printcmd.c 2004-11-24 17:59:20.069790312 -0500
|
===================================================================
|
||||||
@@ -615,6 +615,20 @@
|
--- gdb-6.8.50.20081128.orig/gdb/printcmd.c 2008-12-04 01:36:05.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/printcmd.c 2008-12-04 01:37:18.000000000 +0100
|
||||||
|
@@ -616,6 +616,14 @@ build_address_symbolic (CORE_ADDR addr,
|
||||||
addr = overlay_mapped_address (addr, section);
|
addr = overlay_mapped_address (addr, section);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -16,13 +18,7 @@
|
|||||||
+ the normal section code (which almost always succeeds). */
|
+ the normal section code (which almost always succeeds). */
|
||||||
+ section = find_pc_overlay (addr);
|
+ section = find_pc_overlay (addr);
|
||||||
+ if (section == NULL)
|
+ if (section == NULL)
|
||||||
+ {
|
+ section = find_pc_section (addr);
|
||||||
+ struct obj_section *obj_section = find_pc_section (addr);
|
|
||||||
+ if (obj_section == NULL)
|
|
||||||
+ section = NULL;
|
|
||||||
+ else
|
|
||||||
+ section = obj_section->the_bfd_section;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/* First try to find the address in the symbol table, then
|
/* First try to find the address in the symbol table, then
|
||||||
in the minsyms. Take the closest one. */
|
in the minsyms. Take the closest one. */
|
||||||
|
@ -11,11 +11,11 @@
|
|||||||
|
|
||||||
* gdb.texinfo (File Options): Document --readnever.
|
* gdb.texinfo (File Options): Document --readnever.
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/doc/gdb.texinfo
|
Index: gdb-6.8.50.20081128/gdb/doc/gdb.texinfo
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/doc/gdb.texinfo 2008-03-26 19:38:21.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/doc/gdb.texinfo 2008-11-27 10:23:01.000000000 +0100
|
||||||
+++ gdb-6.8/gdb/doc/gdb.texinfo 2008-07-14 10:27:01.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/doc/gdb.texinfo 2008-12-02 19:07:35.000000000 +0100
|
||||||
@@ -983,6 +983,12 @@ Read each symbol file's entire symbol ta
|
@@ -994,6 +994,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-6.8/gdb/doc/gdb.texinfo
|
|||||||
@end table
|
@end table
|
||||||
|
|
||||||
@node Mode Options
|
@node Mode Options
|
||||||
Index: gdb-6.8/gdb/main.c
|
Index: gdb-6.8.50.20081128/gdb/main.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/main.c 2008-07-14 10:26:39.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/main.c 2008-12-02 18:07:21.000000000 +0100
|
||||||
+++ gdb-6.8/gdb/main.c 2008-07-14 10:27:01.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/main.c 2008-12-02 19:07:35.000000000 +0100
|
||||||
@@ -296,6 +296,7 @@ captured_main (void *data)
|
@@ -295,6 +295,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-6.8/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},
|
||||||
@@ -947,6 +948,7 @@ Options:\n\n\
|
@@ -895,6 +896,7 @@ Options:\n\n\
|
||||||
fputs_unfiltered (_(" file.\n\
|
fputs_unfiltered (_(" file.\n\
|
||||||
--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-6.8/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-6.8/gdb/symfile.c
|
Index: gdb-6.8.50.20081128/gdb/symfile.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/symfile.c 2008-07-14 10:26:30.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/symfile.c 2008-12-01 16:34:36.000000000 +0100
|
||||||
+++ gdb-6.8/gdb/symfile.c 2008-07-14 10:27:01.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/symfile.c 2008-12-02 19:07:35.000000000 +0100
|
||||||
@@ -76,6 +76,7 @@ static void clear_symtab_users_cleanup (
|
@@ -77,6 +77,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,32 +60,32 @@ Index: gdb-6.8/gdb/symfile.c
|
|||||||
|
|
||||||
/* External variables and functions referenced. */
|
/* External variables and functions referenced. */
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/dwarf2read.c
|
Index: gdb-6.8.50.20081128/gdb/dwarf2read.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/dwarf2read.c 2008-07-14 10:26:09.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/dwarf2read.c 2008-11-15 19:49:50.000000000 +0100
|
||||||
+++ gdb-6.8/gdb/dwarf2read.c 2008-07-14 10:27:01.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/dwarf2read.c 2008-12-02 19:08:53.000000000 +0100
|
||||||
@@ -43,6 +43,7 @@
|
@@ -46,6 +46,7 @@
|
||||||
#include "dwarf2loc.h"
|
|
||||||
#include "cp-support.h"
|
|
||||||
#include "hashtab.h"
|
|
||||||
+#include "top.h"
|
|
||||||
#include "command.h"
|
#include "command.h"
|
||||||
#include "gdbcmd.h"
|
#include "gdbcmd.h"
|
||||||
|
#include "addrmap.h"
|
||||||
|
+#include "top.h"
|
||||||
|
|
||||||
@@ -1106,7 +1107,8 @@ dwarf2_has_info (struct objfile *objfile
|
#include <fcntl.h>
|
||||||
|
#include "gdb_string.h"
|
||||||
|
@@ -1122,7 +1123,8 @@ dwarf2_has_info (struct objfile *objfile
|
||||||
dwarf_loc_section = 0;
|
dwarf_loc_section = 0;
|
||||||
|
|
||||||
bfd_map_over_sections (objfile->obfd, dwarf2_locate_sections, NULL);
|
bfd_map_over_sections (objfile->obfd, dwarf2_locate_sections, NULL);
|
||||||
- return (dwarf_info_section != NULL && dwarf_abbrev_section != NULL);
|
- return (dwarf_info_section != NULL && dwarf_abbrev_section != NULL);
|
||||||
+ return (!readnever_symbol_files
|
+ return !readnever_symbol_files
|
||||||
+ && dwarf_info_section != NULL && dwarf_abbrev_section != NULL);
|
+ && dwarf_info_section != NULL && dwarf_abbrev_section != NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function is mapped across the sections and remembers the
|
/* When loading sections, we can either look for ".<name>", or for
|
||||||
Index: gdb-6.8/gdb/top.h
|
Index: gdb-6.8.50.20081128/gdb/top.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/top.h 2008-01-01 23:53:13.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/top.h 2008-01-01 23:53:13.000000000 +0100
|
||||||
+++ gdb-6.8/gdb/top.h 2008-07-14 10:27:01.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/top.h 2008-12-02 19:07:35.000000000 +0100
|
||||||
@@ -59,6 +59,7 @@ extern void set_prompt (char *);
|
@@ -59,6 +59,7 @@ extern void set_prompt (char *);
|
||||||
|
|
||||||
/* From random places. */
|
/* From random places. */
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
http://sourceware.org/ml/gdb-patches/2005-05/threads.html#00637
|
||||||
|
Proposed upstream but never committed upstream.
|
||||||
|
|
||||||
2005-06-09 Jeff Johnston <jjohnstn@redhat.com>
|
2005-06-09 Jeff Johnston <jjohnstn@redhat.com>
|
||||||
|
|
||||||
* gdb.base/gdbinit.exp: New testcase.
|
* gdb.base/gdbinit.exp: New testcase.
|
||||||
@ -16,11 +19,11 @@
|
|||||||
(source_command): Update documentation. Check permissions if
|
(source_command): Update documentation. Check permissions if
|
||||||
FROM_TTY is -1.
|
FROM_TTY is -1.
|
||||||
|
|
||||||
Index: gdb-6.6/gdb/cli/cli-cmds.c
|
Index: gdb-6.8.50.20081128/gdb/cli/cli-cmds.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.6.orig/gdb/cli/cli-cmds.c
|
--- gdb-6.8.50.20081128.orig/gdb/cli/cli-cmds.c 2008-12-07 10:12:24.000000000 +0100
|
||||||
+++ gdb-6.6/gdb/cli/cli-cmds.c
|
+++ gdb-6.8.50.20081128/gdb/cli/cli-cmds.c 2008-12-07 13:04:06.000000000 +0100
|
||||||
@@ -38,6 +38,7 @@
|
@@ -36,6 +36,7 @@
|
||||||
#include "objfiles.h"
|
#include "objfiles.h"
|
||||||
#include "source.h"
|
#include "source.h"
|
||||||
#include "disasm.h"
|
#include "disasm.h"
|
||||||
@ -28,7 +31,7 @@ Index: gdb-6.6/gdb/cli/cli-cmds.c
|
|||||||
|
|
||||||
#include "ui-out.h"
|
#include "ui-out.h"
|
||||||
|
|
||||||
@@ -461,12 +462,31 @@ source_script (char *file, int from_tty)
|
@@ -460,7 +461,7 @@ source_script (char *file, int from_tty)
|
||||||
|
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
{
|
{
|
||||||
@ -36,23 +39,29 @@ Index: gdb-6.6/gdb/cli/cli-cmds.c
|
|||||||
+ if (from_tty > 0)
|
+ if (from_tty > 0)
|
||||||
perror_with_name (file);
|
perror_with_name (file);
|
||||||
else
|
else
|
||||||
return;
|
{
|
||||||
|
@@ -469,9 +470,33 @@ source_script (char *file, int from_tty)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
+#ifdef HAVE_GETUID
|
+#ifdef HAVE_GETUID
|
||||||
+ if (from_tty == -1)
|
+ if (from_tty == -1)
|
||||||
+ {
|
+ {
|
||||||
+ struct stat statbuf;
|
+ struct stat statbuf;
|
||||||
|
+
|
||||||
+ if (fstat (fd, &statbuf) < 0)
|
+ if (fstat (fd, &statbuf) < 0)
|
||||||
+ {
|
+ {
|
||||||
+ perror_with_name (file);
|
|
||||||
+ close (fd);
|
+ close (fd);
|
||||||
+ return;
|
+ /* Do not do_cleanups (old_cleanups) as FILE is allocated there.
|
||||||
|
+ perror_with_name calls error which should call the cleanups. */
|
||||||
|
+ perror_with_name (file);
|
||||||
+ }
|
+ }
|
||||||
+ if (statbuf.st_uid != getuid () || (statbuf.st_mode & S_IWOTH))
|
+ if (statbuf.st_uid != getuid () || (statbuf.st_mode & S_IWOTH))
|
||||||
+ {
|
+ {
|
||||||
+ warning (_("not using untrusted file \"%s\""), file);
|
+ /* FILE gets freed by do_cleanups (old_cleanups). */
|
||||||
|
+ warning (_("not using untrusted file \"%s\""), file);
|
||||||
+ close (fd);
|
+ close (fd);
|
||||||
|
+ do_cleanups (old_cleanups);
|
||||||
+ return;
|
+ return;
|
||||||
+ }
|
+ }
|
||||||
+ }
|
+ }
|
||||||
@ -61,10 +70,14 @@ Index: gdb-6.6/gdb/cli/cli-cmds.c
|
|||||||
stream = fdopen (fd, FOPEN_RT);
|
stream = fdopen (fd, FOPEN_RT);
|
||||||
script_from_file (stream, file);
|
script_from_file (stream, file);
|
||||||
|
|
||||||
Index: gdb-6.6/gdb/testsuite/gdb.base/gdbinit.exp
|
+ /* FILE gets freed by do_cleanups (old_cleanups). */
|
||||||
|
do_cleanups (old_cleanups);
|
||||||
|
}
|
||||||
|
|
||||||
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.base/gdbinit.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.6/gdb/testsuite/gdb.base/gdbinit.exp
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.base/gdbinit.exp 2008-12-07 10:13:01.000000000 +0100
|
||||||
@@ -0,0 +1,98 @@
|
@@ -0,0 +1,98 @@
|
||||||
+# Copyright 2005
|
+# Copyright 2005
|
||||||
+# Free Software Foundation, Inc.
|
+# Free Software Foundation, Inc.
|
||||||
@ -81,7 +94,7 @@ Index: gdb-6.6/gdb/testsuite/gdb.base/gdbinit.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, 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:
|
+# Please email any bugs, comments, and/or additions to this file to:
|
||||||
+# bug-gdb@prep.ai.mit.edu
|
+# bug-gdb@prep.ai.mit.edu
|
||||||
@ -107,15 +120,15 @@ Index: gdb-6.6/gdb/testsuite/gdb.base/gdbinit.exp
|
|||||||
+global gdb_prompt
|
+global gdb_prompt
|
||||||
+global timeout
|
+global timeout
|
||||||
+global gdb_spawn_id;
|
+global gdb_spawn_id;
|
||||||
+
|
+
|
||||||
+gdb_stop_suppressing_tests;
|
+gdb_stop_suppressing_tests;
|
||||||
+
|
+
|
||||||
+verbose "Spawning $GDB -nw"
|
+verbose "Spawning $GDB -nw"
|
||||||
+
|
+
|
||||||
+if [info exists gdb_spawn_id] {
|
+if [info exists gdb_spawn_id] {
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+if ![is_remote host] {
|
+if ![is_remote host] {
|
||||||
+ if { [which $GDB] == 0 } then {
|
+ if { [which $GDB] == 0 } then {
|
||||||
+ perror "$GDB does not exist."
|
+ perror "$GDB does not exist."
|
||||||
@ -164,17 +177,17 @@ Index: gdb-6.6/gdb/testsuite/gdb.base/gdbinit.exp
|
|||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+remote_exec build "rm .gdbinit"
|
+remote_exec build "rm .gdbinit"
|
||||||
Index: gdb-6.6/gdb/testsuite/gdb.base/gdbinit.sample
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.base/gdbinit.sample
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.6/gdb/testsuite/gdb.base/gdbinit.sample
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.base/gdbinit.sample 2008-12-07 10:13:01.000000000 +0100
|
||||||
@@ -0,0 +1 @@
|
@@ -0,0 +1 @@
|
||||||
+echo "\nin gdbinit"
|
+echo "\nin gdbinit"
|
||||||
Index: gdb-6.6/gdb/main.c
|
Index: gdb-6.8.50.20081128/gdb/main.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.6.orig/gdb/main.c
|
--- gdb-6.8.50.20081128.orig/gdb/main.c 2008-12-07 10:12:24.000000000 +0100
|
||||||
+++ gdb-6.6/gdb/main.c
|
+++ gdb-6.8.50.20081128/gdb/main.c 2008-12-07 12:58:37.000000000 +0100
|
||||||
@@ -644,7 +644,7 @@ extern int gdbtk_test (char *);
|
@@ -690,7 +690,7 @@ Excess command line arguments ignored. (
|
||||||
|
|
||||||
if (!inhibit_gdbinit)
|
if (!inhibit_gdbinit)
|
||||||
{
|
{
|
||||||
@ -183,7 +196,7 @@ Index: gdb-6.6/gdb/main.c
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Do stats; no need to do them elsewhere since we'll only
|
/* Do stats; no need to do them elsewhere since we'll only
|
||||||
@@ -722,7 +722,7 @@ extern int gdbtk_test (char *);
|
@@ -778,7 +778,7 @@ Can't attach to process and specify a co
|
||||||
|| memcmp ((char *) &homebuf, (char *) &cwdbuf, sizeof (struct stat)))
|
|| memcmp ((char *) &homebuf, (char *) &cwdbuf, sizeof (struct stat)))
|
||||||
if (!inhibit_gdbinit)
|
if (!inhibit_gdbinit)
|
||||||
{
|
{
|
||||||
@ -192,16 +205,3 @@ Index: gdb-6.6/gdb/main.c
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < ncmd; i++)
|
for (i = 0; i < ncmd; i++)
|
||||||
Index: gdb-6.6/gdb/Makefile.in
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.6.orig/gdb/Makefile.in
|
|
||||||
+++ gdb-6.6/gdb/Makefile.in
|
|
||||||
@@ -2927,7 +2927,7 @@ cli-cmds.o: $(srcdir)/cli/cli-cmds.c $(d
|
|
||||||
$(expression_h) $(frame_h) $(value_h) $(language_h) $(filenames_h) \
|
|
||||||
$(objfiles_h) $(source_h) $(disasm_h) $(ui_out_h) $(top_h) \
|
|
||||||
$(cli_decode_h) $(cli_script_h) $(cli_setshow_h) $(cli_cmds_h) \
|
|
||||||
- $(tui_h)
|
|
||||||
+ $(tui_h) $(gdb_stat_h)
|
|
||||||
$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/cli/cli-cmds.c
|
|
||||||
cli-decode.o: $(srcdir)/cli/cli-decode.c $(defs_h) $(symtab_h) \
|
|
||||||
$(gdb_regex_h) $(gdb_string_h) $(completer_h) $(ui_out_h) \
|
|
||||||
|
@ -4,11 +4,11 @@
|
|||||||
print a warning.
|
print a warning.
|
||||||
(find_separate_debug_file): Pass in the objfile's name.
|
(find_separate_debug_file): Pass in the objfile's name.
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/symfile.c
|
Index: gdb-6.8.50.20081128/gdb/symfile.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/symfile.c 2008-01-29 23:47:20.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/symfile.c 2008-10-03 18:36:10.000000000 +0200
|
||||||
+++ gdb-6.8/gdb/symfile.c 2008-07-14 10:26:30.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/symfile.c 2008-12-01 16:34:36.000000000 +0100
|
||||||
@@ -1348,7 +1348,8 @@ get_debug_link_info (struct objfile *obj
|
@@ -1296,7 +1296,8 @@ get_debug_link_info (struct objfile *obj
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -17,23 +17,10 @@ Index: gdb-6.8/gdb/symfile.c
|
|||||||
+ const char *parent_name)
|
+ const char *parent_name)
|
||||||
{
|
{
|
||||||
unsigned long file_crc = 0;
|
unsigned long file_crc = 0;
|
||||||
int fd;
|
bfd *abfd;
|
||||||
@@ -1357,6 +1358,12 @@ separate_debug_file_exists (const char *
|
@@ -1316,7 +1317,15 @@ separate_debug_file_exists (const char *
|
||||||
|
|
||||||
fd = open (name, O_RDONLY | O_BINARY);
|
bfd_close (abfd);
|
||||||
if (fd < 0)
|
|
||||||
+ /* Fail silently, this preserves existing behavior. The
|
|
||||||
+ assumption here is that the file wasn't found because there's
|
|
||||||
+ no file to find (we shouldn't be printing warnings about
|
|
||||||
+ missing debug info files when the user hasn't installed them).
|
|
||||||
+ The alternative is to complain here - that better belongs in a
|
|
||||||
+ warning. */
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
while ((count = read (fd, buffer, sizeof (buffer))) > 0)
|
|
||||||
@@ -1364,7 +1371,16 @@ separate_debug_file_exists (const char *
|
|
||||||
|
|
||||||
close (fd);
|
|
||||||
|
|
||||||
- return crc == file_crc;
|
- return crc == file_crc;
|
||||||
+ if (crc != file_crc)
|
+ if (crc != file_crc)
|
||||||
@ -44,12 +31,11 @@ Index: gdb-6.8/gdb/symfile.c
|
|||||||
+ return 0;
|
+ return 0;
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ /* No worries! */
|
|
||||||
+ return 1;
|
+ return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
char *debug_file_directory = NULL;
|
char *debug_file_directory = NULL;
|
||||||
@@ -1416,6 +1432,8 @@ find_separate_debug_file (struct objfile
|
@@ -1368,6 +1377,8 @@ find_separate_debug_file (struct objfile
|
||||||
basename = get_debug_link_info (objfile, &crc32);
|
basename = get_debug_link_info (objfile, &crc32);
|
||||||
|
|
||||||
if (basename == NULL)
|
if (basename == NULL)
|
||||||
@ -58,7 +44,7 @@ Index: gdb-6.8/gdb/symfile.c
|
|||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
dir = xstrdup (objfile->name);
|
dir = xstrdup (objfile->name);
|
||||||
@@ -1443,7 +1461,7 @@ find_separate_debug_file (struct objfile
|
@@ -1395,7 +1406,7 @@ find_separate_debug_file (struct objfile
|
||||||
strcpy (debugfile, dir);
|
strcpy (debugfile, dir);
|
||||||
strcat (debugfile, basename);
|
strcat (debugfile, basename);
|
||||||
|
|
||||||
@ -67,7 +53,7 @@ Index: gdb-6.8/gdb/symfile.c
|
|||||||
{
|
{
|
||||||
xfree (basename);
|
xfree (basename);
|
||||||
xfree (dir);
|
xfree (dir);
|
||||||
@@ -1456,7 +1474,7 @@ find_separate_debug_file (struct objfile
|
@@ -1408,7 +1419,7 @@ find_separate_debug_file (struct objfile
|
||||||
strcat (debugfile, "/");
|
strcat (debugfile, "/");
|
||||||
strcat (debugfile, basename);
|
strcat (debugfile, basename);
|
||||||
|
|
||||||
@ -76,7 +62,7 @@ Index: gdb-6.8/gdb/symfile.c
|
|||||||
{
|
{
|
||||||
xfree (basename);
|
xfree (basename);
|
||||||
xfree (dir);
|
xfree (dir);
|
||||||
@@ -1469,7 +1487,7 @@ find_separate_debug_file (struct objfile
|
@@ -1421,7 +1432,7 @@ find_separate_debug_file (struct objfile
|
||||||
strcat (debugfile, dir);
|
strcat (debugfile, dir);
|
||||||
strcat (debugfile, basename);
|
strcat (debugfile, basename);
|
||||||
|
|
||||||
@ -85,7 +71,7 @@ Index: gdb-6.8/gdb/symfile.c
|
|||||||
{
|
{
|
||||||
xfree (basename);
|
xfree (basename);
|
||||||
xfree (dir);
|
xfree (dir);
|
||||||
@@ -1488,7 +1506,7 @@ find_separate_debug_file (struct objfile
|
@@ -1440,7 +1451,7 @@ find_separate_debug_file (struct objfile
|
||||||
strcat (debugfile, "/");
|
strcat (debugfile, "/");
|
||||||
strcat (debugfile, basename);
|
strcat (debugfile, basename);
|
||||||
|
|
||||||
|
@ -1,52 +0,0 @@
|
|||||||
2004-06-21 Andrew Cagney <cagney@gnu.org>
|
|
||||||
|
|
||||||
* i386-tdep.c (i386_gdbarch_init): Move the the dwarf2-frame
|
|
||||||
sniffer registration to after the signal trampoline frame sniffer.
|
|
||||||
* amd64-tdep.c (amd64_init_abi): Include "dwarf2-frame.h".
|
|
||||||
Register the dwarf2-frame sniffer, but after the signal trampoline
|
|
||||||
sniffer.
|
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/amd64-tdep.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.orig/gdb/amd64-tdep.c 2008-03-04 20:49:39.000000000 +0100
|
|
||||||
+++ gdb-6.8/gdb/amd64-tdep.c 2008-07-14 10:24:54.000000000 +0200
|
|
||||||
@@ -34,7 +34,7 @@
|
|
||||||
#include "regcache.h"
|
|
||||||
#include "regset.h"
|
|
||||||
#include "symfile.h"
|
|
||||||
-
|
|
||||||
+#include "dwarf2-frame.h"
|
|
||||||
#include "gdb_assert.h"
|
|
||||||
|
|
||||||
#include "amd64-tdep.h"
|
|
||||||
@@ -1167,6 +1167,8 @@ amd64_init_abi (struct gdbarch_info info
|
|
||||||
set_gdbarch_unwind_dummy_id (gdbarch, amd64_unwind_dummy_id);
|
|
||||||
|
|
||||||
frame_unwind_append_sniffer (gdbarch, amd64_sigtramp_frame_sniffer);
|
|
||||||
+ /* Hook in the DWARF CFI frame unwinder after sigtramp. */
|
|
||||||
+ frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
|
|
||||||
frame_unwind_append_sniffer (gdbarch, amd64_frame_sniffer);
|
|
||||||
frame_base_set_default (gdbarch, &amd64_frame_base);
|
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/i386-tdep.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.orig/gdb/i386-tdep.c 2008-03-04 20:49:39.000000000 +0100
|
|
||||||
+++ gdb-6.8/gdb/i386-tdep.c 2008-07-14 10:24:54.000000000 +0200
|
|
||||||
@@ -2480,15 +2480,14 @@ i386_gdbarch_init (struct gdbarch_info i
|
|
||||||
/* Helper for function argument information. */
|
|
||||||
set_gdbarch_fetch_pointer_argument (gdbarch, i386_fetch_pointer_argument);
|
|
||||||
|
|
||||||
- /* Hook in the DWARF CFI frame unwinder. */
|
|
||||||
- frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
|
|
||||||
-
|
|
||||||
frame_base_set_default (gdbarch, &i386_frame_base);
|
|
||||||
|
|
||||||
/* Hook in ABI-specific overrides, if they have been registered. */
|
|
||||||
gdbarch_init_osabi (info, gdbarch);
|
|
||||||
|
|
||||||
frame_unwind_append_sniffer (gdbarch, i386_sigtramp_frame_sniffer);
|
|
||||||
+ /* Hook in the DWARF CFI frame unwinder after sigtramp. */
|
|
||||||
+ frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
|
|
||||||
frame_unwind_append_sniffer (gdbarch, i386_frame_sniffer);
|
|
||||||
|
|
||||||
/* If we have a register mapping, enable the generic core file
|
|
@ -3,10 +3,10 @@
|
|||||||
* testsuite/gdb.threads/step-thread-exit.c: New testcase.
|
* testsuite/gdb.threads/step-thread-exit.c: New testcase.
|
||||||
* testsuite/gdb.threads/step-thread-exit.exp: Ditto.
|
* testsuite/gdb.threads/step-thread-exit.exp: Ditto.
|
||||||
|
|
||||||
Index: gdb-6.5/gdb/testsuite/gdb.threads/step-thread-exit.c
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/step-thread-exit.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /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/step-thread-exit.c 2006-07-12 03:18:47.000000000 -0300
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/step-thread-exit.c 2008-12-08 22:21:26.000000000 +0100
|
||||||
@@ -0,0 +1,50 @@
|
@@ -0,0 +1,50 @@
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
+/* This testcase is part of GDB, the GNU debugger.
|
||||||
+
|
+
|
||||||
@ -58,11 +58,11 @@ Index: gdb-6.5/gdb/testsuite/gdb.threads/step-thread-exit.c
|
|||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+
|
+
|
||||||
Index: gdb-6.5/gdb/testsuite/gdb.threads/step-thread-exit.exp
|
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.5/gdb/testsuite/gdb.threads/step-thread-exit.exp 2006-07-12 03:22:30.000000000 -0300
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/step-thread-exit.exp 2008-12-08 22:22:14.000000000 +0100
|
||||||
@@ -0,0 +1,123 @@
|
@@ -0,0 +1,130 @@
|
||||||
+# 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.
|
||||||
@ -113,6 +113,11 @@ Index: gdb-6.5/gdb/testsuite/gdb.threads/step-thread-exit.exp
|
|||||||
+ gdb_suppress_tests
|
+ gdb_suppress_tests
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
|
+# FIXME: Currently the main thread will escape/exit before our thread finishes
|
||||||
|
+# without this setting.
|
||||||
|
+gdb_test "set scheduler-locking step"
|
||||||
|
+gdb_test "show scheduler-locking" "Mode for locking scheduler during execution is \"step\"." "check scheduler-locking first"
|
||||||
|
+
|
||||||
+set sleep_line [expr [gdb_get_line_number "sleep"]]
|
+set sleep_line [expr [gdb_get_line_number "sleep"]]
|
||||||
+set end_line [expr [gdb_get_line_number "thread_function_end"]]
|
+set end_line [expr [gdb_get_line_number "thread_function_end"]]
|
||||||
+
|
+
|
||||||
@ -128,7 +133,7 @@ Index: gdb-6.5/gdb/testsuite/gdb.threads/step-thread-exit.exp
|
|||||||
+ send_gdb "next\n"
|
+ send_gdb "next\n"
|
||||||
+ exp_continue
|
+ exp_continue
|
||||||
+ }
|
+ }
|
||||||
+ -re "Stepped over thread exit.*Program received signal SIGSTOP.*$gdb_prompt $" {
|
+ -re "\[Thread .* exited\].*Program received signal SIGSTOP.*$gdb_prompt $" {
|
||||||
+ pass "$test"
|
+ pass "$test"
|
||||||
+ }
|
+ }
|
||||||
+ -re "start_thread.*$gdb_prompt $" {
|
+ -re "start_thread.*$gdb_prompt $" {
|
||||||
@ -150,6 +155,8 @@ Index: gdb-6.5/gdb/testsuite/gdb.threads/step-thread-exit.exp
|
|||||||
+gdb_test "bt" "main.*$sleep_line.*" "backtrace after step 1"
|
+gdb_test "bt" "main.*$sleep_line.*" "backtrace after step 1"
|
||||||
+
|
+
|
||||||
+runto_main
|
+runto_main
|
||||||
|
+gdb_test "show scheduler-locking" "Mode for locking scheduler during execution is \"step\"." "check scheduler-locking second"
|
||||||
|
+
|
||||||
+gdb_breakpoint "$sleep_line"
|
+gdb_breakpoint "$sleep_line"
|
||||||
+gdb_breakpoint "$end_line"
|
+gdb_breakpoint "$end_line"
|
||||||
+set test "continue to thread_function 2"
|
+set test "continue to thread_function 2"
|
||||||
@ -174,10 +181,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.threads/step-thread-exit.exp
|
|||||||
+ send_gdb "next\n"
|
+ send_gdb "next\n"
|
||||||
+ exp_continue
|
+ exp_continue
|
||||||
+ }
|
+ }
|
||||||
+ -re "Stepped over thread exit.*Break.*$sleep_line.*$gdb_prompt $" {
|
+ -re "\[Thread .* exited\].*Break.*$sleep_line.*$gdb_prompt $" {
|
||||||
+ pass "$test (breakpoint hit)"
|
+ pass "$test (breakpoint hit)"
|
||||||
+ }
|
+ }
|
||||||
+ -re "Stepped over thread exit.*$gdb_prompt $" {
|
+ -re "\[Thread .* exited\].*$gdb_prompt $" {
|
||||||
+ pass "$test (breakpoint not hit)"
|
+ pass "$test (breakpoint not hit)"
|
||||||
+ }
|
+ }
|
||||||
+ -re "start_thread.*$gdb_prompt $" {
|
+ -re "start_thread.*$gdb_prompt $" {
|
||||||
|
@ -4,9 +4,12 @@
|
|||||||
* gdb.base/move-dir.c: Ditto.
|
* gdb.base/move-dir.c: Ditto.
|
||||||
* gdb.base/move-dir.h: Ditto.
|
* gdb.base/move-dir.h: Ditto.
|
||||||
|
|
||||||
--- gdb-6.3/gdb/testsuite/gdb.base/move-dir.c.fix Tue Jan 25 19:13:14 2005
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.base/move-dir.c
|
||||||
+++ gdb-6.3/gdb/testsuite/gdb.base/move-dir.c Tue Jan 25 19:12:40 2005
|
===================================================================
|
||||||
@@ -0,0 +1,9 @@
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.base/move-dir.c 2008-12-07 23:57:41.000000000 +0100
|
||||||
|
@@ -0,0 +1,10 @@
|
||||||
|
+#include <stdio.h>
|
||||||
+#include <stdlib.h>
|
+#include <stdlib.h>
|
||||||
+#include "move-dir.h"
|
+#include "move-dir.h"
|
||||||
+
|
+
|
||||||
@ -16,8 +19,10 @@
|
|||||||
+ other();
|
+ other();
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
--- gdb-6.3/gdb/testsuite/gdb.base/move-dir.exp.fix Tue Jan 25 19:13:21 2005
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.base/move-dir.exp
|
||||||
+++ gdb-6.3/gdb/testsuite/gdb.base/move-dir.exp Tue Jan 25 19:12:40 2005
|
===================================================================
|
||||||
|
--- /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
|
||||||
@@ -0,0 +1,67 @@
|
@@ -0,0 +1,67 @@
|
||||||
+# Copyright 2005
|
+# Copyright 2005
|
||||||
+# Free Software Foundation, Inc.
|
+# Free Software Foundation, Inc.
|
||||||
@ -86,8 +91,10 @@
|
|||||||
+
|
+
|
||||||
+set timeout $oldtimeout
|
+set timeout $oldtimeout
|
||||||
+return 0
|
+return 0
|
||||||
--- gdb-6.3/gdb/testsuite/gdb.base/move-dir.h.fix Tue Jan 25 19:17:50 2005
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.base/move-dir.h
|
||||||
+++ gdb-6.3/gdb/testsuite/gdb.base/move-dir.h Tue Jan 25 19:19:20 2005
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.base/move-dir.h 2008-12-07 10:13:01.000000000 +0100
|
||||||
@@ -0,0 +1,7 @@
|
@@ -0,0 +1,7 @@
|
||||||
+#include <stdlib.h>
|
+#include <stdlib.h>
|
||||||
+
|
+
|
||||||
|
@ -1,35 +1,40 @@
|
|||||||
--- gdb-6.8/gdb/testsuite/configure.ac.orig 2007-10-25 22:30:26.000000000 +0200
|
Index: gdb-6.8.50.20081128/gdb/testsuite/configure.ac
|
||||||
+++ gdb-6.8/gdb/testsuite/configure.ac 2008-08-26 18:02:17.000000000 +0200
|
===================================================================
|
||||||
@@ -116,5 +116,5 @@ AC_OUTPUT([Makefile \
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/configure.ac 2008-12-09 17:02:39.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/configure.ac 2008-12-09 17:02:55.000000000 +0100
|
||||||
|
@@ -116,6 +116,6 @@ AC_OUTPUT([Makefile \
|
||||||
gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile \
|
gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile \
|
||||||
gdb.fortran/Makefile gdb.server/Makefile \
|
gdb.fortran/Makefile gdb.server/Makefile \
|
||||||
gdb.java/Makefile gdb.mi/Makefile gdb.modula2/Makefile \
|
gdb.java/Makefile gdb.mi/Makefile gdb.modula2/Makefile \
|
||||||
- gdb.objc/Makefile gdb.opt/Makefile gdb.pascal/Makefile \
|
- gdb.objc/Makefile gdb.opt/Makefile gdb.pascal/Makefile \
|
||||||
+ gdb.objc/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.pie/Makefile \
|
+ gdb.objc/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.pie/Makefile \
|
||||||
|
gdb.python/Makefile \
|
||||||
gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile])
|
gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile])
|
||||||
--- gdb-6.8/gdb/testsuite/configure.orig 2007-12-29 15:01:30.000000000 +0100
|
Index: gdb-6.8.50.20081128/gdb/testsuite/configure
|
||||||
+++ gdb-6.8/gdb/testsuite/configure 2008-08-26 18:02:02.000000000 +0200
|
===================================================================
|
||||||
@@ -3104,7 +3104,7 @@ done
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/configure 2008-12-09 17:02:39.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/configure 2008-12-09 17:02:55.000000000 +0100
|
||||||
|
@@ -3131,7 +3131,7 @@ done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
- ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.modula2/Makefile gdb.objc/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
|
- ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.modula2/Makefile gdb.objc/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.python/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
|
||||||
+ ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.modula2/Makefile gdb.objc/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.pie/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
|
+ ac_config_files="$ac_config_files Makefile gdb.ada/Makefile gdb.arch/Makefile gdb.asm/Makefile gdb.base/Makefile gdb.cp/Makefile gdb.disasm/Makefile gdb.dwarf2/Makefile gdb.fortran/Makefile gdb.server/Makefile gdb.java/Makefile gdb.mi/Makefile gdb.modula2/Makefile gdb.objc/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.pie/Makefile gdb.python/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
|
||||||
cat >confcache <<\_ACEOF
|
cat >confcache <<\_ACEOF
|
||||||
# This file is a shell script that caches the results of configure
|
# This file is a shell script that caches the results of configure
|
||||||
# tests run on this system so they can be shared between configure
|
# tests run on this system so they can be shared between configure
|
||||||
@@ -3671,6 +3671,7 @@ do
|
@@ -3698,6 +3698,7 @@ do
|
||||||
"gdb.objc/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.objc/Makefile" ;;
|
"gdb.objc/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.objc/Makefile" ;;
|
||||||
"gdb.opt/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.opt/Makefile" ;;
|
"gdb.opt/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.opt/Makefile" ;;
|
||||||
"gdb.pascal/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.pascal/Makefile" ;;
|
"gdb.pascal/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.pascal/Makefile" ;;
|
||||||
+ "gdb.pie/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.pie/Makefile" ;;
|
+ "gdb.pie/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.pie/Makefile" ;;
|
||||||
|
"gdb.python/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.python/Makefile" ;;
|
||||||
"gdb.threads/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.threads/Makefile" ;;
|
"gdb.threads/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.threads/Makefile" ;;
|
||||||
"gdb.trace/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.trace/Makefile" ;;
|
"gdb.trace/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.trace/Makefile" ;;
|
||||||
"gdb.xml/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.xml/Makefile" ;;
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/attach.c
|
||||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/attach.c
|
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /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.pie/attach.c 2006-07-07 01:13:23.000000000 -0300
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/attach.c 2008-12-09 17:02:55.000000000 +0100
|
||||||
@@ -0,0 +1,20 @@
|
@@ -0,0 +1,20 @@
|
||||||
+/* This program is intended to be started outside of gdb, and then
|
+/* This program is intended to be started outside of gdb, and then
|
||||||
+ attached to by gdb. Thus, it simply spins in a loop. The loop
|
+ attached to by gdb. Thus, it simply spins in a loop. The loop
|
||||||
@ -51,10 +56,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/attach.c
|
|||||||
+ }
|
+ }
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/attach2.c
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/attach2.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /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.pie/attach2.c 2006-07-07 01:13:23.000000000 -0300
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/attach2.c 2008-12-09 17:02:55.000000000 +0100
|
||||||
@@ -0,0 +1,24 @@
|
@@ -0,0 +1,24 @@
|
||||||
+/* This program is intended to be started outside of gdb, and then
|
+/* This program is intended to be started outside of gdb, and then
|
||||||
+ attached to by gdb. Thus, it simply spins in a loop. The loop
|
+ attached to by gdb. Thus, it simply spins in a loop. The loop
|
||||||
@ -80,10 +85,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/attach2.c
|
|||||||
+ }
|
+ }
|
||||||
+ return (0);
|
+ return (0);
|
||||||
+}
|
+}
|
||||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/break.c
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/break.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /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.pie/break.c 2006-07-07 01:13:23.000000000 -0300
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/break.c 2008-12-09 17:02:55.000000000 +0100
|
||||||
@@ -0,0 +1,146 @@
|
@@ -0,0 +1,146 @@
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
+/* This testcase is part of GDB, the GNU debugger.
|
||||||
+
|
+
|
||||||
@ -231,10 +236,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/break.c
|
|||||||
+ }
|
+ }
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/break1.c
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/break1.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /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.pie/break1.c 2006-07-07 01:13:23.000000000 -0300
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/break1.c 2008-12-09 17:02:55.000000000 +0100
|
||||||
@@ -0,0 +1,44 @@
|
@@ -0,0 +1,44 @@
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
+/* This testcase is part of GDB, the GNU debugger.
|
||||||
+
|
+
|
||||||
@ -280,10 +285,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/break1.c
|
|||||||
+void marker3 (a, b) char *a, *b; {} /* set breakpoint 18 here */
|
+void marker3 (a, b) char *a, *b; {} /* set breakpoint 18 here */
|
||||||
+void marker4 (d) long d; {} /* set breakpoint 13 here */
|
+void marker4 (d) long d; {} /* set breakpoint 13 here */
|
||||||
+#endif
|
+#endif
|
||||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/coremaker.c
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/coremaker.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /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.pie/coremaker.c 2006-07-07 01:13:23.000000000 -0300
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/coremaker.c 2008-12-09 17:02:55.000000000 +0100
|
||||||
@@ -0,0 +1,142 @@
|
@@ -0,0 +1,142 @@
|
||||||
+/* Copyright 1992, 1993, 1994, 1995, 1996, 1999
|
+/* Copyright 1992, 1993, 1994, 1995, 1996, 1999
|
||||||
+ Free Software Foundation, Inc.
|
+ Free Software Foundation, Inc.
|
||||||
@ -427,10 +432,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/coremaker.c
|
|||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/attach.exp
|
Index: gdb-6.8.50.20081128/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-6.5/gdb/testsuite/gdb.pie/attach.exp 2006-07-07 01:13:23.000000000 -0300
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/attach.exp 2008-12-09 17:02:55.000000000 +0100
|
||||||
@@ -0,0 +1,432 @@
|
@@ -0,0 +1,432 @@
|
||||||
+# Copyright 1997, 1999, 2002 Free Software Foundation, Inc.
|
+# Copyright 1997, 1999, 2002 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
@ -689,7 +694,7 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/attach.exp
|
|||||||
+ #
|
+ #
|
||||||
+ send_gdb "tbreak 19\n"
|
+ send_gdb "tbreak 19\n"
|
||||||
+ gdb_expect {
|
+ gdb_expect {
|
||||||
+ -re "Breakpoint .*at.*$srcfile, line 19.*$gdb_prompt $"\
|
+ -re "reakpoint .*at.*$srcfile, line 19.*$gdb_prompt $"\
|
||||||
+ {pass "after attach2, set tbreak postloop"}
|
+ {pass "after attach2, set tbreak postloop"}
|
||||||
+ -re "$gdb_prompt $" {fail "after attach2, set tbreak postloop"}
|
+ -re "$gdb_prompt $" {fail "after attach2, set tbreak postloop"}
|
||||||
+ timeout {fail "(timeout) after attach2, set tbreak postloop"}
|
+ timeout {fail "(timeout) after attach2, set tbreak postloop"}
|
||||||
@ -864,10 +869,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/attach.exp
|
|||||||
+do_call_attach_tests
|
+do_call_attach_tests
|
||||||
+
|
+
|
||||||
+return 0
|
+return 0
|
||||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/break.exp
|
Index: gdb-6.8.50.20081128/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-6.5/gdb/testsuite/gdb.pie/break.exp 2006-07-07 01:13:23.000000000 -0300
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/break.exp 2008-12-09 17:24:34.000000000 +0100
|
||||||
@@ -0,0 +1,973 @@
|
@@ -0,0 +1,973 @@
|
||||||
+# 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
|
||||||
@ -1144,13 +1149,13 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/break.exp
|
|||||||
+# test temporary breakpoint at function
|
+# test temporary breakpoint at function
|
||||||
+#
|
+#
|
||||||
+
|
+
|
||||||
+gdb_test "tbreak main" "Breakpoint.*at.* file .*$srcfile, line.*" "Temporary breakpoint function"
|
+gdb_test "tbreak main" "reakpoint.*at.* file .*$srcfile, line.*" "Temporary breakpoint function"
|
||||||
+
|
+
|
||||||
+#
|
+#
|
||||||
+# test break at function in file
|
+# test break at function in file
|
||||||
+#
|
+#
|
||||||
+
|
+
|
||||||
+gdb_test "tbreak $srcfile:factorial" "Breakpoint.*at.* file .*$srcfile, line.*" \
|
+gdb_test "tbreak $srcfile:factorial" "reakpoint.*at.* file .*$srcfile, line.*" \
|
||||||
+ "Temporary breakpoint function in file"
|
+ "Temporary breakpoint function in file"
|
||||||
+
|
+
|
||||||
+#
|
+#
|
||||||
@ -1158,25 +1163,25 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/break.exp
|
|||||||
+#
|
+#
|
||||||
+send_gdb "tbreak $bp_location1\n"
|
+send_gdb "tbreak $bp_location1\n"
|
||||||
+gdb_expect {
|
+gdb_expect {
|
||||||
+ -re "Breakpoint.*at.* file .*$srcfile, line $bp_location1.*$gdb_prompt $" { pass "Temporary breakpoint line number #1" }
|
+ -re "reakpoint.*at.* file .*$srcfile, line $bp_location1.*$gdb_prompt $" { pass "Temporary breakpoint line number #1" }
|
||||||
+ -re ".*$gdb_prompt $" { pass "Temporary breakpoint line number #1" }
|
+ -re ".*$gdb_prompt $" { pass "Temporary breakpoint line number #1" }
|
||||||
+ timeout { fail "breakpoint line number #1 (timeout)" }
|
+ timeout { fail "breakpoint line number #1 (timeout)" }
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+gdb_test "tbreak $bp_location6" "Breakpoint.*at.* file .*$srcfile, line $bp_location6.*" "Temporary breakpoint line number #2"
|
+gdb_test "tbreak $bp_location6" "reakpoint.*at.* file .*$srcfile, line $bp_location6.*" "Temporary breakpoint line number #2"
|
||||||
+
|
+
|
||||||
+#
|
+#
|
||||||
+# test break at line number in file
|
+# test break at line number in file
|
||||||
+#
|
+#
|
||||||
+send_gdb "tbreak $srcfile:$bp_location2\n"
|
+send_gdb "tbreak $srcfile:$bp_location2\n"
|
||||||
+gdb_expect {
|
+gdb_expect {
|
||||||
+ -re "Breakpoint.*at.* file .*$srcfile, line $bp_location2.*$gdb_prompt $" { pass "Temporary breakpoint line number in file #1" }
|
+ -re "reakpoint.*at.* file .*$srcfile, line $bp_location2.*$gdb_prompt $" { pass "Temporary breakpoint line number in file #1" }
|
||||||
+ -re ".*$gdb_prompt $" { pass "Temporary breakpoint line number in file #1" }
|
+ -re ".*$gdb_prompt $" { pass "Temporary breakpoint line number in file #1" }
|
||||||
+ timeout { fail "Temporary breakpoint line number in file #1 (timeout)" }
|
+ timeout { fail "Temporary breakpoint line number in file #1 (timeout)" }
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+set bp_location11 [gdb_get_line_number "set breakpoint 11 here"]
|
+set bp_location11 [gdb_get_line_number "set breakpoint 11 here"]
|
||||||
+gdb_test "tbreak $srcfile:$bp_location11" "Breakpoint.*at.* file .*$srcfile, line $bp_location11.*" "Temporary breakpoint line number in file #2"
|
+gdb_test "tbreak $srcfile:$bp_location11" "reakpoint.*at.* file .*$srcfile, line $bp_location11.*" "Temporary breakpoint line number in file #2"
|
||||||
+
|
+
|
||||||
+#
|
+#
|
||||||
+# check to see what breakpoints are set (temporary this time)
|
+# check to see what breakpoints are set (temporary this time)
|
||||||
@ -1842,10 +1847,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/break.exp
|
|||||||
+ send_gdb "set args main\n"
|
+ send_gdb "set args main\n"
|
||||||
+ gdb_expect -re ".*$gdb_prompt $" {}
|
+ gdb_expect -re ".*$gdb_prompt $" {}
|
||||||
+}
|
+}
|
||||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/corefile.exp
|
Index: gdb-6.8.50.20081128/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-6.5/gdb/testsuite/gdb.pie/corefile.exp 2006-07-07 01:13:23.000000000 -0300
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/corefile.exp 2008-12-09 17:02:55.000000000 +0100
|
||||||
@@ -0,0 +1,243 @@
|
@@ -0,0 +1,243 @@
|
||||||
+# 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.
|
||||||
@ -2090,10 +2095,10 @@ Index: gdb-6.5/gdb/testsuite/gdb.pie/corefile.exp
|
|||||||
+gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(\\).*" "up in corefile.exp (reinit)"
|
+gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(\\).*" "up in corefile.exp (reinit)"
|
||||||
+
|
+
|
||||||
+gdb_test "core" "No core file now."
|
+gdb_test "core" "No core file now."
|
||||||
Index: gdb-6.5/gdb/testsuite/gdb.pie/Makefile.in
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/Makefile.in
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /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.pie/Makefile.in 2006-07-07 01:13:23.000000000 -0300
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/Makefile.in 2008-12-09 17:02:55.000000000 +0100
|
||||||
@@ -0,0 +1,19 @@
|
@@ -0,0 +1,19 @@
|
||||||
+VPATH = @srcdir@
|
+VPATH = @srcdir@
|
||||||
+srcdir = @srcdir@
|
+srcdir = @srcdir@
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
2004-12-13 Jeff Johnston <jjohnstn@redhat.com>
|
|
||||||
|
|
||||||
* dwarf2read.c (read_type_die): Ensure that structures, unions,
|
|
||||||
enumerations, and base types create symbols.
|
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/dwarf2read.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.orig/gdb/dwarf2read.c 2008-03-10 15:18:10.000000000 +0100
|
|
||||||
+++ gdb-6.8/gdb/dwarf2read.c 2008-07-14 10:26:01.000000000 +0200
|
|
||||||
@@ -7711,9 +7711,11 @@ read_type_die (struct die_info *die, str
|
|
||||||
case DW_TAG_structure_type:
|
|
||||||
case DW_TAG_union_type:
|
|
||||||
read_structure_type (die, cu);
|
|
||||||
+ process_structure_scope (die, cu);
|
|
||||||
break;
|
|
||||||
case DW_TAG_enumeration_type:
|
|
||||||
read_enumeration_type (die, cu);
|
|
||||||
+ process_enumeration_scope (die, cu);
|
|
||||||
break;
|
|
||||||
case DW_TAG_subprogram:
|
|
||||||
case DW_TAG_subroutine_type:
|
|
||||||
@@ -7751,6 +7753,7 @@ read_type_die (struct die_info *die, str
|
|
||||||
break;
|
|
||||||
case DW_TAG_base_type:
|
|
||||||
read_base_type (die, cu);
|
|
||||||
+ new_symbol (die, die->type, cu);
|
|
||||||
break;
|
|
||||||
case DW_TAG_unspecified_type:
|
|
||||||
read_unspecified_type (die, cu);
|
|
@ -1,104 +1,207 @@
|
|||||||
[base]
|
http://sourceware.org/ml/gdb-patches/2008-12/msg00243.html
|
||||||
|
|
||||||
2007-10-14 Jan Kratochvil <jan.kratochvil@redhat.com>
|
Check return values of functions declared with warn_unused_result
|
||||||
|
attribute in GLIBC 2.8.
|
||||||
|
* cli/cli-cmds.c (pwd_command): Check return value from getcwd.
|
||||||
|
* inflow.c (check_syscall): New function.
|
||||||
|
(new_tty): Use check_syscall to check return values from open and dup.
|
||||||
|
* linux-nat.c (linux_nat_info_proc_cmd): Check return value from fgets.
|
||||||
|
* main.c (captured_main): Call cwd after setting up gdb_stderr;
|
||||||
|
check for errors from getcwd.
|
||||||
|
* mi/mi-cmd-env.c (mi_cmd_env_pwd): Check return value from getcwd.
|
||||||
|
* ui-file.c (stdio_file_write): Check return value from fwrite.
|
||||||
|
(stdio_file_fputs): Check return value from fputs.
|
||||||
|
* utils.c (internal_vproblem): abort if last-ditch error message
|
||||||
|
write fails.
|
||||||
|
|
||||||
Port to GDB-6.7.
|
[ +linespec.c: Fedora patch. ]
|
||||||
|
[ +top.c: Fedora patch. ]
|
||||||
|
|
||||||
Index: gdb-6.7/gdb/mi/mi-cmd-env.c
|
---
|
||||||
===================================================================
|
gdb/ChangeLog | 14 ++++++++++++++
|
||||||
--- gdb-6.7.orig/gdb/mi/mi-cmd-env.c 2007-10-14 23:42:39.000000000 +0200
|
gdb/cli/cli-cmds.c | 4 +++-
|
||||||
+++ gdb-6.7/gdb/mi/mi-cmd-env.c 2007-10-14 23:42:39.000000000 +0200
|
gdb/inflow.c | 22 ++++++++++++++--------
|
||||||
@@ -78,7 +78,8 @@ mi_cmd_env_pwd (char *command, char **ar
|
gdb/linux-nat.c | 6 ++++--
|
||||||
|
gdb/main.c | 12 +++++++++---
|
||||||
|
gdb/mi/mi-cmd-env.c | 5 ++++-
|
||||||
|
gdb/ui-file.c | 6 ++++--
|
||||||
|
gdb/utils.c | 8 +++++++-
|
||||||
|
8 files changed, 59 insertions(+), 18 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c
|
||||||
|
index 806a68a..b80bdfc 100644
|
||||||
|
--- a/gdb/cli/cli-cmds.c
|
||||||
|
+++ b/gdb/cli/cli-cmds.c
|
||||||
|
@@ -323,7 +323,9 @@ pwd_command (char *args, int from_tty)
|
||||||
|
{
|
||||||
|
if (args)
|
||||||
|
error (_("The \"pwd\" command does not take an argument: %s"), args);
|
||||||
|
- getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
|
||||||
|
+ if (! getcwd (gdb_dirbuf, sizeof (gdb_dirbuf)))
|
||||||
|
+ error (_("Error finding name of working directory: %s"),
|
||||||
|
+ safe_strerror (errno));
|
||||||
|
|
||||||
|
if (strcmp (gdb_dirbuf, current_directory) != 0)
|
||||||
|
printf_unfiltered (_("Working directory %s\n (canonically %s).\n"),
|
||||||
|
diff --git a/gdb/inflow.c b/gdb/inflow.c
|
||||||
|
index e82514e..7ecb5ab 100644
|
||||||
|
--- a/gdb/inflow.c
|
||||||
|
+++ b/gdb/inflow.c
|
||||||
|
@@ -523,6 +523,16 @@ new_tty_prefork (const char *ttyname)
|
||||||
|
inferior_thisrun_terminal = ttyname;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void
|
||||||
|
+check_syscall (const char *msg, int result)
|
||||||
|
+{
|
||||||
|
+ if (result < 0)
|
||||||
|
+ {
|
||||||
|
+ print_sys_errmsg (msg, errno);
|
||||||
|
+ _exit (1);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void
|
||||||
|
new_tty (void)
|
||||||
|
{
|
||||||
|
@@ -549,27 +559,23 @@ new_tty (void)
|
||||||
|
|
||||||
|
/* Now open the specified new terminal. */
|
||||||
|
tty = open (inferior_thisrun_terminal, O_RDWR | O_NOCTTY);
|
||||||
|
- if (tty == -1)
|
||||||
|
- {
|
||||||
|
- print_sys_errmsg (inferior_thisrun_terminal, errno);
|
||||||
|
- _exit (1);
|
||||||
|
- }
|
||||||
|
+ check_syscall (inferior_thisrun_terminal, tty);
|
||||||
|
|
||||||
|
/* Avoid use of dup2; doesn't exist on all systems. */
|
||||||
|
if (tty != 0)
|
||||||
|
{
|
||||||
|
close (0);
|
||||||
|
- dup (tty);
|
||||||
|
+ check_syscall ("dup'ing tty into fd 0", dup (tty));
|
||||||
|
}
|
||||||
|
if (tty != 1)
|
||||||
|
{
|
||||||
|
close (1);
|
||||||
|
- dup (tty);
|
||||||
|
+ check_syscall ("dup'ing tty into fd 1", dup (tty));
|
||||||
|
}
|
||||||
|
if (tty != 2)
|
||||||
|
{
|
||||||
|
close (2);
|
||||||
|
- dup (tty);
|
||||||
|
+ check_syscall ("dup'ing tty into fd 2", dup (tty));
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef TIOCSCTTY
|
||||||
|
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
|
||||||
|
index 913bfec..a829eb8 100644
|
||||||
|
--- a/gdb/linux-nat.c
|
||||||
|
+++ b/gdb/linux-nat.c
|
||||||
|
@@ -3666,8 +3666,10 @@ linux_nat_info_proc_cmd (char *args, int from_tty)
|
||||||
|
if ((procfile = fopen (fname1, "r")) != NULL)
|
||||||
|
{
|
||||||
|
struct cleanup *cleanup = make_cleanup_fclose (procfile);
|
||||||
|
- fgets (buffer, sizeof (buffer), procfile);
|
||||||
|
- printf_filtered ("cmdline = '%s'\n", buffer);
|
||||||
|
+ if (fgets (buffer, sizeof (buffer), procfile))
|
||||||
|
+ printf_filtered ("cmdline = '%s'\n", buffer);
|
||||||
|
+ else
|
||||||
|
+ warning (_("unable to read '/proc/%lld/cmdline'"), pid);
|
||||||
|
do_cleanups (cleanup);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
diff --git a/gdb/main.c b/gdb/main.c
|
||||||
|
index a53002d..a9fd988 100644
|
||||||
|
--- a/gdb/main.c
|
||||||
|
+++ b/gdb/main.c
|
||||||
|
@@ -195,9 +195,6 @@ captured_main (void *data)
|
||||||
|
line[0] = '\0'; /* Terminate saved (now empty) cmd line */
|
||||||
|
instream = stdin;
|
||||||
|
|
||||||
|
- getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
|
||||||
|
- current_directory = gdb_dirbuf;
|
||||||
|
-
|
||||||
|
gdb_stdout = stdio_fileopen (stdout);
|
||||||
|
gdb_stderr = stdio_fileopen (stderr);
|
||||||
|
gdb_stdlog = gdb_stderr; /* for moment */
|
||||||
|
@@ -206,6 +203,15 @@ captured_main (void *data)
|
||||||
|
gdb_stdtargerr = gdb_stderr; /* for moment */
|
||||||
|
gdb_stdtargin = gdb_stdin; /* for moment */
|
||||||
|
|
||||||
|
+ if (! getcwd (gdb_dirbuf, sizeof (gdb_dirbuf)))
|
||||||
|
+ /* Don't use *_filtered or warning() (which relies on
|
||||||
|
+ current_target) until after initialize_all_files(). */
|
||||||
|
+ fprintf_unfiltered (gdb_stderr,
|
||||||
|
+ _("%s: warning: error finding working directory: %s\n"),
|
||||||
|
+ argv[0], safe_strerror (errno));
|
||||||
|
+
|
||||||
|
+ current_directory = gdb_dirbuf;
|
||||||
|
+
|
||||||
|
/* Set the sysroot path. */
|
||||||
|
#ifdef TARGET_SYSTEM_ROOT_RELOCATABLE
|
||||||
|
gdb_sysroot = make_relative_prefix (argv[0], BINDIR, TARGET_SYSTEM_ROOT);
|
||||||
|
diff --git a/gdb/mi/mi-cmd-env.c b/gdb/mi/mi-cmd-env.c
|
||||||
|
index 327ddc5..0103153 100644
|
||||||
|
--- a/gdb/mi/mi-cmd-env.c
|
||||||
|
+++ b/gdb/mi/mi-cmd-env.c
|
||||||
|
@@ -78,7 +78,10 @@ mi_cmd_env_pwd (char *command, char **argv, int argc)
|
||||||
|
|
||||||
/* Otherwise the mi level is 2 or higher. */
|
/* Otherwise the mi level is 2 or higher. */
|
||||||
|
|
||||||
- getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
|
- getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
|
||||||
+ /* Unused result. */
|
+ if (! getcwd (gdb_dirbuf, sizeof (gdb_dirbuf)))
|
||||||
+ 1 && getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
|
+ error (_("mi_cmd_env_pwd: error finding name of working directory: %s"),
|
||||||
|
+ safe_strerror (errno));
|
||||||
|
+
|
||||||
ui_out_field_string (uiout, "cwd", gdb_dirbuf);
|
ui_out_field_string (uiout, "cwd", gdb_dirbuf);
|
||||||
|
}
|
||||||
|
|
||||||
return MI_CMD_DONE;
|
diff --git a/gdb/ui-file.c b/gdb/ui-file.c
|
||||||
Index: gdb-6.7/gdb/testsuite/gdb.base/move-dir.h
|
index 9a1d892..2ed304f 100644
|
||||||
===================================================================
|
--- a/gdb/ui-file.c
|
||||||
--- gdb-6.7.orig/gdb/testsuite/gdb.base/move-dir.h 2007-10-14 23:31:22.000000000 +0200
|
+++ b/gdb/ui-file.c
|
||||||
+++ gdb-6.7/gdb/testsuite/gdb.base/move-dir.h 2007-10-14 23:42:39.000000000 +0200
|
@@ -481,7 +481,8 @@ stdio_file_write (struct ui_file *file, const char *buf, long length_buf)
|
||||||
@@ -1,4 +1,4 @@
|
if (stdio->magic != &stdio_file_magic)
|
||||||
-#include <stdlib.h>
|
internal_error (__FILE__, __LINE__,
|
||||||
+#include <stdio.h>
|
_("stdio_file_write: bad magic number"));
|
||||||
|
- fwrite (buf, length_buf, 1, stdio->file);
|
||||||
|
+ if (fwrite (buf, length_buf, 1, stdio->file) != 1)
|
||||||
|
+ error ("stdio_file_write: %s", safe_strerror (errno));
|
||||||
|
}
|
||||||
|
|
||||||
void other() {
|
static void
|
||||||
const char* ostring = "other";
|
@@ -491,7 +492,8 @@ stdio_file_fputs (const char *linebuffer, struct ui_file *file)
|
||||||
Index: gdb-6.7/gdb/testsuite/gdb.base/sigrepeat.c
|
if (stdio->magic != &stdio_file_magic)
|
||||||
===================================================================
|
internal_error (__FILE__, __LINE__,
|
||||||
--- gdb-6.7.orig/gdb/testsuite/gdb.base/sigrepeat.c 2007-08-23 20:08:49.000000000 +0200
|
_("stdio_file_fputs: bad magic number"));
|
||||||
+++ gdb-6.7/gdb/testsuite/gdb.base/sigrepeat.c 2007-10-14 23:42:39.000000000 +0200
|
- fputs (linebuffer, stdio->file);
|
||||||
@@ -21,6 +21,7 @@
|
+ if (fputs (linebuffer, stdio->file) == EOF)
|
||||||
#include <stdlib.h>
|
+ error ("stdio_file_fputs: %s", safe_strerror (errno));
|
||||||
#include <string.h>
|
}
|
||||||
#include <signal.h>
|
|
||||||
+#include <stdlib.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
|
|
||||||
static volatile int done[2];
|
|
||||||
Index: gdb-6.7/gdb/s390-tdep.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/s390-tdep.c 2007-10-02 21:26:42.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/s390-tdep.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -2214,6 +2214,9 @@ s390_return_value (struct gdbarch *gdbar
|
|
||||||
case RETURN_VALUE_STRUCT_CONVENTION:
|
|
||||||
error (_("Cannot set function return value."));
|
|
||||||
break;
|
|
||||||
+
|
|
||||||
+ default:
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (out)
|
|
||||||
@@ -2246,6 +2249,9 @@ s390_return_value (struct gdbarch *gdbar
|
|
||||||
case RETURN_VALUE_STRUCT_CONVENTION:
|
|
||||||
error (_("Function return value unknown."));
|
|
||||||
break;
|
|
||||||
+
|
|
||||||
+ default:
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Index: gdb-6.7/gdb/f-exp.y
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/f-exp.y 2007-06-12 17:33:03.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/f-exp.y 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -567,6 +567,8 @@ ptype : typebase
|
|
||||||
case tp_function:
|
|
||||||
follow_type = lookup_function_type (follow_type);
|
|
||||||
break;
|
|
||||||
+ default:
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
$$ = follow_type;
|
|
||||||
}
|
|
||||||
Index: gdb-6.7/gdb/source.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/source.c 2007-08-23 20:08:38.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/source.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -170,7 +170,7 @@ get_current_source_symtab_and_line (void
|
|
||||||
void
|
|
||||||
set_default_source_symtab_and_line (void)
|
|
||||||
{
|
|
||||||
- struct symtab_and_line cursal;
|
|
||||||
+ struct symtab_and_line cursal = {0};
|
|
||||||
|
|
||||||
if (!have_full_symbols () && !have_partial_symbols ())
|
|
||||||
error (_("No symbol table is loaded. Use the \"file\" command."));
|
|
||||||
@@ -1439,7 +1439,7 @@ static void
|
|
||||||
line_info (char *arg, int from_tty)
|
|
||||||
{
|
|
||||||
struct symtabs_and_lines sals;
|
|
||||||
- struct symtab_and_line sal;
|
|
||||||
+ struct symtab_and_line sal = {0};
|
|
||||||
CORE_ADDR start_pc, end_pc;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
diff --git a/gdb/utils.c b/gdb/utils.c
|
||||||
|
index d14009f..725f00b 100644
|
||||||
|
--- a/gdb/utils.c
|
||||||
|
+++ b/gdb/utils.c
|
||||||
|
@@ -865,7 +865,13 @@ internal_vproblem (struct internal_problem *problem,
|
||||||
|
abort (); /* NOTE: GDB has only three calls to abort(). */
|
||||||
|
default:
|
||||||
|
dejavu = 3;
|
||||||
|
- write (STDERR_FILENO, msg, sizeof (msg));
|
||||||
|
+ /* Newer GLIBC versions put the warn_unused_result attribute
|
||||||
|
+ on write, but this is one of those rare cases where
|
||||||
|
+ ignoring the return value is correct. Casting to (void)
|
||||||
|
+ does not fix this problem. This is the solution suggested
|
||||||
|
+ at http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25509. */
|
||||||
|
+ if (write (STDERR_FILENO, msg, sizeof (msg)) != sizeof (msg))
|
||||||
|
+ abort ();
|
||||||
|
exit (1);
|
||||||
|
}
|
||||||
|
}
|
||||||
Index: gdb-6.7/gdb/linespec.c
|
Index: gdb-6.7/gdb/linespec.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/linespec.c 2007-10-14 23:31:03.000000000 +0200
|
--- gdb-6.7.orig/gdb/linespec.c 2007-10-14 23:31:03.000000000 +0200
|
||||||
@ -112,208 +215,6 @@ Index: gdb-6.7/gdb/linespec.c
|
|||||||
struct symbol *sym = NULL;
|
struct symbol *sym = NULL;
|
||||||
int i1; /* Counter for the symbol array. */
|
int i1; /* Counter for the symbol array. */
|
||||||
struct symbol **sym_arr = alloca (total_number_of_methods (t)
|
struct symbol **sym_arr = alloca (total_number_of_methods (t)
|
||||||
Index: gdb-6.7/gdb/gdb-events.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/gdb-events.c 2007-08-23 20:08:31.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/gdb-events.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -319,6 +319,8 @@ gdb_events_deliver (struct gdb_events *v
|
|
||||||
case architecture_changed:
|
|
||||||
vector->architecture_changed ();
|
|
||||||
break;
|
|
||||||
+ default:
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
delivering_events = event->next;
|
|
||||||
xfree (event);
|
|
||||||
Index: gdb-6.7/gdb/dwarf2read.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/dwarf2read.c 2007-10-14 23:31:22.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/dwarf2read.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -9585,6 +9585,7 @@ dwarf_decode_macros (struct line_header
|
|
||||||
for (;;)
|
|
||||||
{
|
|
||||||
enum dwarf_macinfo_record_type macinfo_type;
|
|
||||||
+ int tmp;
|
|
||||||
|
|
||||||
/* Do we at least have room for a macinfo type byte? */
|
|
||||||
if (mac_ptr >= mac_end)
|
|
||||||
@@ -9596,13 +9597,16 @@ dwarf_decode_macros (struct line_header
|
|
||||||
macinfo_type = read_1_byte (abfd, mac_ptr);
|
|
||||||
mac_ptr++;
|
|
||||||
|
|
||||||
+ /* Check for a zero macinfo type which indicates the end of the macro
|
|
||||||
+ information. We do this as the compiler may warn us if we
|
|
||||||
+ try and look for 0 in the switch below because 0 is not
|
|
||||||
+ an enumerated value. */
|
|
||||||
+ tmp = (int)macinfo_type;
|
|
||||||
+ if (tmp == 0)
|
|
||||||
+ return;
|
|
||||||
+
|
|
||||||
switch (macinfo_type)
|
|
||||||
{
|
|
||||||
- /* A zero macinfo type indicates the end of the macro
|
|
||||||
- information. */
|
|
||||||
- case 0:
|
|
||||||
- return;
|
|
||||||
-
|
|
||||||
case DW_MACINFO_define:
|
|
||||||
case DW_MACINFO_undef:
|
|
||||||
{
|
|
||||||
Index: gdb-6.7/gdb/stabsread.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/stabsread.c 2007-10-09 00:44:32.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/stabsread.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -1842,7 +1842,8 @@ again:
|
|
||||||
struct type *domain = read_type (pp, objfile);
|
|
||||||
struct type *return_type;
|
|
||||||
struct field *args;
|
|
||||||
- int nargs, varargs;
|
|
||||||
+ int nargs = 0;
|
|
||||||
+ int varargs = 0;
|
|
||||||
|
|
||||||
if (**pp != ',')
|
|
||||||
/* Invalid member type data format. */
|
|
||||||
Index: gdb-6.7/gdb/dwarf2expr.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/dwarf2expr.c 2007-08-23 20:08:28.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/dwarf2expr.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -594,6 +594,8 @@ execute_stack_op (struct dwarf_expr_cont
|
|
||||||
op_ptr = read_uleb128 (op_ptr, op_end, ®);
|
|
||||||
result += reg;
|
|
||||||
break;
|
|
||||||
+ default:
|
|
||||||
+ break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
Index: gdb-6.7/gdb/varobj.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/varobj.c 2007-10-13 05:29:58.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/varobj.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -347,8 +347,7 @@ static struct language_specific language
|
|
||||||
c_value_of_variable}
|
|
||||||
,
|
|
||||||
/* C */
|
|
||||||
- {
|
|
||||||
- vlang_c,
|
|
||||||
+ {vlang_c,
|
|
||||||
c_number_of_children,
|
|
||||||
c_name_of_variable,
|
|
||||||
c_name_of_child,
|
|
||||||
@@ -360,8 +359,7 @@ static struct language_specific language
|
|
||||||
c_value_of_variable}
|
|
||||||
,
|
|
||||||
/* C++ */
|
|
||||||
- {
|
|
||||||
- vlang_cplus,
|
|
||||||
+ {vlang_cplus,
|
|
||||||
cplus_number_of_children,
|
|
||||||
cplus_name_of_variable,
|
|
||||||
cplus_name_of_child,
|
|
||||||
@@ -373,8 +371,7 @@ static struct language_specific language
|
|
||||||
cplus_value_of_variable}
|
|
||||||
,
|
|
||||||
/* Java */
|
|
||||||
- {
|
|
||||||
- vlang_java,
|
|
||||||
+ {vlang_java,
|
|
||||||
java_number_of_children,
|
|
||||||
java_name_of_variable,
|
|
||||||
java_name_of_child,
|
|
||||||
Index: gdb-6.7/gdb/doublest.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/doublest.c 2007-08-23 20:08:28.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/doublest.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -92,15 +92,10 @@ get_field (const bfd_byte *data, enum fl
|
|
||||||
{
|
|
||||||
result |= (unsigned long)*(data + cur_byte) << cur_bitshift;
|
|
||||||
cur_bitshift += FLOATFORMAT_CHAR_BIT;
|
|
||||||
- switch (order)
|
|
||||||
- {
|
|
||||||
- case floatformat_little:
|
|
||||||
- ++cur_byte;
|
|
||||||
- break;
|
|
||||||
- case floatformat_big:
|
|
||||||
- --cur_byte;
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
+ if (order == floatformat_little)
|
|
||||||
+ ++cur_byte;
|
|
||||||
+ else
|
|
||||||
+ --cur_byte;
|
|
||||||
}
|
|
||||||
if (len < sizeof(result) * FLOATFORMAT_CHAR_BIT)
|
|
||||||
/* Mask out bits which are not part of the field */
|
|
||||||
Index: gdb-6.7/gdb/cli/cli-cmds.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/cli/cli-cmds.c 2007-08-23 20:08:47.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/cli/cli-cmds.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -320,7 +320,8 @@ pwd_command (char *args, int from_tty)
|
|
||||||
{
|
|
||||||
if (args)
|
|
||||||
error (_("The \"pwd\" command does not take an argument: %s"), args);
|
|
||||||
- getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
|
|
||||||
+ /* Unused result. */
|
|
||||||
+ 1 && getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
|
|
||||||
|
|
||||||
if (strcmp (gdb_dirbuf, current_directory) != 0)
|
|
||||||
printf_unfiltered (_("Working directory %s\n (canonically %s).\n"),
|
|
||||||
Index: gdb-6.7/gdb/inflow.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/inflow.c 2007-08-23 20:08:35.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/inflow.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -547,17 +547,20 @@ new_tty (void)
|
|
||||||
if (tty != 0)
|
|
||||||
{
|
|
||||||
close (0);
|
|
||||||
- dup (tty);
|
|
||||||
+ /* Unused result. */
|
|
||||||
+ 1 && dup (tty);
|
|
||||||
}
|
|
||||||
if (tty != 1)
|
|
||||||
{
|
|
||||||
close (1);
|
|
||||||
- dup (tty);
|
|
||||||
+ /* Unused result. */
|
|
||||||
+ 1 && dup (tty);
|
|
||||||
}
|
|
||||||
if (tty != 2)
|
|
||||||
{
|
|
||||||
close (2);
|
|
||||||
- dup (tty);
|
|
||||||
+ /* Unused result. */
|
|
||||||
+ 1 && dup (tty);
|
|
||||||
}
|
|
||||||
if (tty > 2)
|
|
||||||
close (tty);
|
|
||||||
Index: gdb-6.7/gdb/linux-nat.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/linux-nat.c 2007-10-14 23:31:22.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/linux-nat.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -2895,7 +2895,8 @@ linux_nat_info_proc_cmd (char *args, int
|
|
||||||
sprintf (fname1, "/proc/%lld/cmdline", pid);
|
|
||||||
if ((procfile = fopen (fname1, "r")) != NULL)
|
|
||||||
{
|
|
||||||
- fgets (buffer, sizeof (buffer), procfile);
|
|
||||||
+ /* Unused result. */
|
|
||||||
+ 1 && fgets (buffer, sizeof (buffer), procfile);
|
|
||||||
printf_filtered ("cmdline = '%s'\n", buffer);
|
|
||||||
fclose (procfile);
|
|
||||||
}
|
|
||||||
Index: gdb-6.7/gdb/main.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/main.c 2007-08-23 20:08:36.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/main.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -193,7 +193,8 @@ captured_main (void *data)
|
|
||||||
line[0] = '\0'; /* Terminate saved (now empty) cmd line */
|
|
||||||
instream = stdin;
|
|
||||||
|
|
||||||
- getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
|
|
||||||
+ /* Unused result. */
|
|
||||||
+ 1 && getcwd (gdb_dirbuf, sizeof (gdb_dirbuf));
|
|
||||||
current_directory = gdb_dirbuf;
|
|
||||||
|
|
||||||
gdb_stdout = stdio_fileopen (stdout);
|
|
||||||
Index: gdb-6.7/gdb/top.c
|
Index: gdb-6.7/gdb/top.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/top.c 2007-10-14 23:38:27.000000000 +0200
|
--- gdb-6.7.orig/gdb/top.c 2007-10-14 23:38:27.000000000 +0200
|
||||||
@ -328,62 +229,3 @@ Index: gdb-6.7/gdb/top.c
|
|||||||
current_directory = gdb_dirbuf;
|
current_directory = gdb_dirbuf;
|
||||||
|
|
||||||
#ifdef __MSDOS__
|
#ifdef __MSDOS__
|
||||||
Index: gdb-6.7/gdb/ui-file.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/ui-file.c 2007-08-23 20:08:46.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/ui-file.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -480,7 +480,8 @@ stdio_file_write (struct ui_file *file,
|
|
||||||
if (stdio->magic != &stdio_file_magic)
|
|
||||||
internal_error (__FILE__, __LINE__,
|
|
||||||
_("stdio_file_write: bad magic number"));
|
|
||||||
- fwrite (buf, length_buf, 1, stdio->file);
|
|
||||||
+ /* Unused result. */
|
|
||||||
+ 1 && fwrite (buf, length_buf, 1, stdio->file);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
Index: gdb-6.7/gdb/utils.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/utils.c 2007-08-23 20:08:46.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/utils.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -716,7 +716,8 @@ internal_vproblem (struct internal_probl
|
|
||||||
abort (); /* NOTE: GDB has only three calls to abort(). */
|
|
||||||
default:
|
|
||||||
dejavu = 3;
|
|
||||||
- write (STDERR_FILENO, msg, sizeof (msg));
|
|
||||||
+ /* Unused result. */
|
|
||||||
+ 1 && write (STDERR_FILENO, msg, sizeof (msg));
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Index: gdb-6.7/gdb/gdbserver/gdbreplay.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.orig/gdb/gdbserver/gdbreplay.c 2007-08-23 20:08:48.000000000 +0200
|
|
||||||
+++ gdb-6.7/gdb/gdbserver/gdbreplay.c 2007-10-14 23:42:39.000000000 +0200
|
|
||||||
@@ -356,7 +356,12 @@ expect (FILE *fp)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
- read (remote_desc, &fromgdb, 1);
|
|
||||||
+ if (read (remote_desc, &fromgdb, 1) != 1)
|
|
||||||
+ {
|
|
||||||
+ /* Error gets reported below. */
|
|
||||||
+ fromlog = 0;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
while (fromlog == fromgdb);
|
|
||||||
if (fromlog != EOL)
|
|
||||||
@@ -383,7 +388,11 @@ play (FILE *fp)
|
|
||||||
while ((fromlog = logchar (fp)) != EOL)
|
|
||||||
{
|
|
||||||
ch = fromlog;
|
|
||||||
- write (remote_desc, &ch, 1);
|
|
||||||
+ if (write (remote_desc, &ch, 1) != 1)
|
|
||||||
+ {
|
|
||||||
+ sync_error (fp, "Sync error during write of gdb packet", ch, 0);
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=181390
|
|||||||
|
|
||||||
* gdb/utils.c (paddress): Disable cutting of the printed addresses
|
* gdb/utils.c (paddress): Disable cutting of the printed addresses
|
||||||
to the target's address bit size; user wants to see everything.
|
to the target's address bit size; user wants to see everything.
|
||||||
* gdb/value.c (value_as_address_core): Original `value_as_address'.
|
* gdb/value.c (value_as_address1): Original `value_as_address'.
|
||||||
(value_as_address): New `value_as_address' wrapper - cut memory address
|
(value_as_address): New `value_as_address' wrapper - cut memory address
|
||||||
to the target's address bit size, bugreport by John Reiser.
|
to the target's address bit size, bugreport by John Reiser.
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ Index: gdb-6.7.50.20080227/gdb/value.c
|
|||||||
-value_as_address (struct value *val)
|
-value_as_address (struct value *val)
|
||||||
+/* See `value_as_address' below - core of value to C pointer extraction. */
|
+/* See `value_as_address' below - core of value to C pointer extraction. */
|
||||||
+static CORE_ADDR
|
+static CORE_ADDR
|
||||||
+value_as_address_core (struct value *val)
|
+value_as_address1 (struct value *val)
|
||||||
{
|
{
|
||||||
/* Assume a CORE_ADDR can fit in a LONGEST (for now). Not sure
|
/* Assume a CORE_ADDR can fit in a LONGEST (for now). Not sure
|
||||||
whether we want this to be true eventually. */
|
whether we want this to be true eventually. */
|
||||||
@ -74,7 +74,7 @@ Index: gdb-6.7.50.20080227/gdb/value.c
|
|||||||
+ CORE_ADDR addr;
|
+ CORE_ADDR addr;
|
||||||
+ int addr_bit;
|
+ int addr_bit;
|
||||||
+
|
+
|
||||||
+ addr = value_as_address_core (val);
|
+ addr = value_as_address1 (val);
|
||||||
+
|
+
|
||||||
+ /* Truncate address to the size of a target address, avoiding shifts
|
+ /* Truncate address to the size of a target address, avoiding shifts
|
||||||
+ larger or equal than the width of a CORE_ADDR. The local
|
+ larger or equal than the width of a CORE_ADDR. The local
|
||||||
|
@ -30,11 +30,11 @@ glibc-debuginfo-2.7-2.x86_64: /usr/lib/debug/lib64/libc.so.6.debug:
|
|||||||
<81a2> DW_AT_name : (indirect string, offset: 0x280e): __errno_location
|
<81a2> DW_AT_name : (indirect string, offset: 0x280e): __errno_location
|
||||||
<81a8> DW_AT_MIPS_linkage_name: (indirect string, offset: 0x2808): *__GI___errno_location
|
<81a8> DW_AT_MIPS_linkage_name: (indirect string, offset: 0x2808): *__GI___errno_location
|
||||||
|
|
||||||
Index: gdb-6.8cvs20080219/gdb/dwarf2read.c
|
Index: gdb-6.8.50.20081128/gdb/dwarf2read.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/dwarf2read.c 2008-02-19 17:27:21.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/dwarf2read.c 2008-12-04 10:26:18.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/dwarf2read.c 2008-02-20 13:35:19.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/dwarf2read.c 2008-12-04 10:26:40.000000000 +0100
|
||||||
@@ -5679,8 +5679,8 @@ read_partial_die (struct partial_die_inf
|
@@ -5886,8 +5886,8 @@ read_partial_die (struct partial_die_inf
|
||||||
{
|
{
|
||||||
case DW_AT_name:
|
case DW_AT_name:
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ Index: gdb-6.8cvs20080219/gdb/dwarf2read.c
|
|||||||
part_die->name = DW_STRING (&attr);
|
part_die->name = DW_STRING (&attr);
|
||||||
break;
|
break;
|
||||||
case DW_AT_comp_dir:
|
case DW_AT_comp_dir:
|
||||||
@@ -5688,7 +5688,9 @@ read_partial_die (struct partial_die_inf
|
@@ -5895,7 +5895,9 @@ read_partial_die (struct partial_die_inf
|
||||||
part_die->dirname = DW_STRING (&attr);
|
part_die->dirname = DW_STRING (&attr);
|
||||||
break;
|
break;
|
||||||
case DW_AT_MIPS_linkage_name:
|
case DW_AT_MIPS_linkage_name:
|
||||||
@ -56,7 +56,7 @@ Index: gdb-6.8cvs20080219/gdb/dwarf2read.c
|
|||||||
break;
|
break;
|
||||||
case DW_AT_low_pc:
|
case DW_AT_low_pc:
|
||||||
has_low_pc_attr = 1;
|
has_low_pc_attr = 1;
|
||||||
@@ -7936,9 +7938,13 @@ dwarf2_linkage_name (struct die_info *di
|
@@ -8129,9 +8131,13 @@ dwarf2_linkage_name (struct die_info *di
|
||||||
{
|
{
|
||||||
struct attribute *attr;
|
struct attribute *attr;
|
||||||
|
|
||||||
@ -73,11 +73,11 @@ Index: gdb-6.8cvs20080219/gdb/dwarf2read.c
|
|||||||
attr = dwarf2_attr (die, DW_AT_name, cu);
|
attr = dwarf2_attr (die, DW_AT_name, cu);
|
||||||
if (attr && DW_STRING (attr))
|
if (attr && DW_STRING (attr))
|
||||||
return DW_STRING (attr);
|
return DW_STRING (attr);
|
||||||
Index: gdb-6.8cvs20080219/gdb/gdbtypes.c
|
Index: gdb-6.8.50.20081128/gdb/gdbtypes.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/gdbtypes.c 2008-02-14 23:03:57.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/gdbtypes.c 2008-11-10 21:53:43.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/gdbtypes.c 2008-02-20 13:35:19.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/gdbtypes.c 2008-12-04 10:26:40.000000000 +0100
|
||||||
@@ -3106,6 +3106,8 @@ gdbtypes_post_init (struct gdbarch *gdba
|
@@ -3141,6 +3141,8 @@ gdbtypes_post_init (struct gdbarch *gdba
|
||||||
init_type (TYPE_CODE_INT,
|
init_type (TYPE_CODE_INT,
|
||||||
gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
|
gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
|
||||||
0, "int", (struct objfile *) NULL);
|
0, "int", (struct objfile *) NULL);
|
||||||
@ -86,7 +86,7 @@ Index: gdb-6.8cvs20080219/gdb/gdbtypes.c
|
|||||||
builtin_type->builtin_unsigned_int =
|
builtin_type->builtin_unsigned_int =
|
||||||
init_type (TYPE_CODE_INT,
|
init_type (TYPE_CODE_INT,
|
||||||
gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
|
gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
|
||||||
@@ -3215,6 +3217,11 @@ gdbtypes_post_init (struct gdbarch *gdba
|
@@ -3250,6 +3252,11 @@ gdbtypes_post_init (struct gdbarch *gdba
|
||||||
"<text variable, no debug info>", NULL);
|
"<text variable, no debug info>", NULL);
|
||||||
TYPE_TARGET_TYPE (builtin_type->nodebug_text_symbol) =
|
TYPE_TARGET_TYPE (builtin_type->nodebug_text_symbol) =
|
||||||
builtin_type->builtin_int;
|
builtin_type->builtin_int;
|
||||||
@ -98,11 +98,11 @@ Index: gdb-6.8cvs20080219/gdb/gdbtypes.c
|
|||||||
builtin_type->nodebug_data_symbol =
|
builtin_type->nodebug_data_symbol =
|
||||||
init_type (TYPE_CODE_INT,
|
init_type (TYPE_CODE_INT,
|
||||||
gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT, 0,
|
gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT, 0,
|
||||||
Index: gdb-6.8cvs20080219/gdb/gdbtypes.h
|
Index: gdb-6.8.50.20081128/gdb/gdbtypes.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/gdbtypes.h 2008-02-14 23:03:57.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/gdbtypes.h 2008-10-28 18:19:56.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/gdbtypes.h 2008-02-20 13:35:19.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/gdbtypes.h 2008-12-04 10:26:40.000000000 +0100
|
||||||
@@ -942,6 +942,7 @@ struct builtin_type
|
@@ -975,6 +975,7 @@ struct builtin_type
|
||||||
|
|
||||||
/* Types used for symbols with no debug information. */
|
/* Types used for symbols with no debug information. */
|
||||||
struct type *nodebug_text_symbol;
|
struct type *nodebug_text_symbol;
|
||||||
@ -110,7 +110,7 @@ Index: gdb-6.8cvs20080219/gdb/gdbtypes.h
|
|||||||
struct type *nodebug_data_symbol;
|
struct type *nodebug_data_symbol;
|
||||||
struct type *nodebug_unknown_symbol;
|
struct type *nodebug_unknown_symbol;
|
||||||
struct type *nodebug_tls_symbol;
|
struct type *nodebug_tls_symbol;
|
||||||
@@ -960,6 +961,7 @@ struct builtin_type
|
@@ -987,6 +988,7 @@ struct builtin_type
|
||||||
struct type *builtin_char;
|
struct type *builtin_char;
|
||||||
struct type *builtin_short;
|
struct type *builtin_short;
|
||||||
struct type *builtin_int;
|
struct type *builtin_int;
|
||||||
@ -118,11 +118,11 @@ Index: gdb-6.8cvs20080219/gdb/gdbtypes.h
|
|||||||
struct type *builtin_long;
|
struct type *builtin_long;
|
||||||
struct type *builtin_signed_char;
|
struct type *builtin_signed_char;
|
||||||
struct type *builtin_unsigned_char;
|
struct type *builtin_unsigned_char;
|
||||||
Index: gdb-6.8cvs20080219/gdb/parse.c
|
Index: gdb-6.8.50.20081128/gdb/parse.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/parse.c 2008-01-02 00:04:03.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/parse.c 2008-11-24 18:05:43.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/parse.c 2008-02-20 13:35:19.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/parse.c 2008-12-04 10:26:40.000000000 +0100
|
||||||
@@ -437,7 +437,12 @@ write_exp_msymbol (struct minimal_symbol
|
@@ -449,7 +449,12 @@ write_exp_msymbol (struct minimal_symbol
|
||||||
case mst_text:
|
case mst_text:
|
||||||
case mst_file_text:
|
case mst_file_text:
|
||||||
case mst_solib_trampoline:
|
case mst_solib_trampoline:
|
||||||
@ -136,12 +136,12 @@ Index: gdb-6.8cvs20080219/gdb/parse.c
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case mst_data:
|
case mst_data:
|
||||||
Index: gdb-6.8cvs20080219/gdb/target.c
|
Index: gdb-6.8.50.20081128/gdb/target.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/target.c 2008-02-19 17:22:33.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/target.c 2008-12-04 10:24:58.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/target.c 2008-02-20 13:36:17.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/target.c 2008-12-04 10:29:07.000000000 +0100
|
||||||
@@ -812,6 +812,25 @@ pop_target (void)
|
@@ -850,6 +850,25 @@ pop_all_targets (int quitting)
|
||||||
internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
|
pop_all_targets_above (dummy_stratum, quitting);
|
||||||
}
|
}
|
||||||
|
|
||||||
+static int
|
+static int
|
||||||
@ -166,7 +166,7 @@ Index: gdb-6.8cvs20080219/gdb/target.c
|
|||||||
/* Using the objfile specified in OBJFILE, find the address for the
|
/* Using the objfile specified in OBJFILE, find the address for the
|
||||||
current thread's thread-local storage with offset OFFSET. */
|
current thread's thread-local storage with offset OFFSET. */
|
||||||
CORE_ADDR
|
CORE_ADDR
|
||||||
@@ -893,7 +912,28 @@ target_translate_tls_address (struct obj
|
@@ -931,7 +950,28 @@ target_translate_tls_address (struct obj
|
||||||
/* It wouldn't be wrong here to try a gdbarch method, too; finding
|
/* It wouldn't be wrong here to try a gdbarch method, too; finding
|
||||||
TLS is an ABI-specific thing. But we don't do that yet. */
|
TLS is an ABI-specific thing. But we don't do that yet. */
|
||||||
else
|
else
|
||||||
@ -177,13 +177,13 @@ Index: gdb-6.8cvs20080219/gdb/target.c
|
|||||||
+ msymbol = lookup_minimal_symbol ("errno", NULL, NULL);
|
+ msymbol = lookup_minimal_symbol ("errno", NULL, NULL);
|
||||||
+ if (msymbol != NULL
|
+ if (msymbol != NULL
|
||||||
+ && SYMBOL_VALUE_ADDRESS (msymbol) == offset
|
+ && SYMBOL_VALUE_ADDRESS (msymbol) == offset
|
||||||
+ && (SYMBOL_BFD_SECTION (msymbol)->owner == objfile->obfd
|
+ && (SYMBOL_OBJ_SECTION (msymbol)->objfile == objfile
|
||||||
+ || (objfile->separate_debug_objfile != NULL
|
+ || (objfile->separate_debug_objfile != NULL
|
||||||
+ && SYMBOL_BFD_SECTION (msymbol)->owner
|
+ && SYMBOL_OBJ_SECTION (msymbol)->objfile
|
||||||
+ == objfile->separate_debug_objfile->obfd)
|
+ == objfile->separate_debug_objfile)
|
||||||
+ || (objfile->separate_debug_objfile_backlink != NULL
|
+ || (objfile->separate_debug_objfile_backlink != NULL
|
||||||
+ && SYMBOL_BFD_SECTION (msymbol)->owner
|
+ && SYMBOL_OBJ_SECTION (msymbol)->objfile
|
||||||
+ == objfile->separate_debug_objfile_backlink->obfd)))
|
+ == objfile->separate_debug_objfile_backlink)))
|
||||||
+ {
|
+ {
|
||||||
+ if (!catch_errors (resolve_errno, (void *) &addr, "",
|
+ if (!catch_errors (resolve_errno, (void *) &addr, "",
|
||||||
+ RETURN_MASK_ALL))
|
+ RETURN_MASK_ALL))
|
||||||
@ -196,22 +196,10 @@ Index: gdb-6.8cvs20080219/gdb/target.c
|
|||||||
|
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
--- ./gdb/elfread.c 2008-08-03 11:02:10.000000000 +0200
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-errno.c
|
||||||
+++ ./gdb/elfread.c 2008-08-03 11:01:21.000000000 +0200
|
|
||||||
@@ -318,7 +318,8 @@ elf_symtab_read (struct objfile *objfile
|
|
||||||
/* Bfd symbols are section relative. */
|
|
||||||
symaddr = sym->value + sym->section->vma;
|
|
||||||
/* Relocate all non-absolute symbols by the section offset. */
|
|
||||||
- if (sym->section != &bfd_abs_section)
|
|
||||||
+ if (sym->section != &bfd_abs_section
|
|
||||||
+ && (sym->section->flags & SEC_THREAD_LOCAL) == 0)
|
|
||||||
{
|
|
||||||
symaddr += offset;
|
|
||||||
}
|
|
||||||
Index: gdb-6.8cvs20080219/gdb/testsuite/gdb.dwarf2/dw2-errno.c
|
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.8cvs20080219/gdb/testsuite/gdb.dwarf2/dw2-errno.c 2008-02-20 13:35:19.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-errno.c 2008-12-04 10:26:40.000000000 +0100
|
||||||
@@ -0,0 +1,28 @@
|
@@ -0,0 +1,28 @@
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
+/* This testcase is part of GDB, the GNU debugger.
|
||||||
+
|
+
|
||||||
@ -241,10 +229,10 @@ Index: gdb-6.8cvs20080219/gdb/testsuite/gdb.dwarf2/dw2-errno.c
|
|||||||
+
|
+
|
||||||
+ return 0; /* breakpoint */
|
+ return 0; /* breakpoint */
|
||||||
+}
|
+}
|
||||||
Index: gdb-6.8cvs20080219/gdb/testsuite/gdb.dwarf2/dw2-errno.exp
|
Index: gdb-6.8.50.20081128/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-6.8cvs20080219/gdb/testsuite/gdb.dwarf2/dw2-errno.exp 2008-02-20 13:35:19.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-errno.exp 2008-12-04 10:26:40.000000000 +0100
|
||||||
@@ -0,0 +1,67 @@
|
@@ -0,0 +1,67 @@
|
||||||
+# Copyright 2007 Free Software Foundation, Inc.
|
+# Copyright 2007 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
|
@ -7,37 +7,23 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=190810
|
|||||||
(remote_async_wait): Likewise.
|
(remote_async_wait): Likewise.
|
||||||
|
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/remote.c
|
Index: gdb-6.8.50.20081128/gdb/remote.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/remote.c 2008-07-14 10:27:07.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/remote.c 2008-12-09 16:59:51.000000000 +0100
|
||||||
+++ gdb-6.8/gdb/remote.c 2008-07-14 10:27:17.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/remote.c 2008-12-09 17:00:04.000000000 +0100
|
||||||
@@ -3509,8 +3509,13 @@ Packet: '%s'\n"),
|
@@ -4329,8 +4329,13 @@ Packet: '%s'\n"),
|
||||||
reg->regnum, regs);
|
VEC_safe_push (cached_reg_t, event->regcache, &cached_reg);
|
||||||
}
|
|
||||||
|
|
||||||
+ /* It may also occur on amd64 which defaults to 32-bit i386
|
|
||||||
+ target. gdbserver(1) is not aware of the `set architecture'
|
|
||||||
+ name itself as it is not using libbfd. */
|
|
||||||
if (*p++ != ';')
|
|
||||||
- error (_("Remote register badly formatted: %s\nhere: %s"),
|
|
||||||
+ error (_("Remote register badly formatted: %s\nhere: %s"
|
|
||||||
+ "\nTry to load the executable by `file' first,"
|
|
||||||
+ "\nyou may also check `set/show architecture'."),
|
|
||||||
buf, p);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@@ -3737,8 +3742,13 @@ Packet: '%s'\n"),
|
|
||||||
reg->regnum, regs);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /* It may also occur on amd64 which defaults to 32-bit i386
|
- if (*p != ';')
|
||||||
+ target. gdbserver(1) is not aware of the `set architecture'
|
- error (_("Remote register badly formatted: %s\nhere: %s"),
|
||||||
+ name itself as it is not using libbfd. */
|
+ /* It may also occur on amd64 which defaults to 32-bit i386
|
||||||
if (*p++ != ';')
|
+ target. gdbserver(1) is not aware of the `set architecture'
|
||||||
- error (_("Remote register badly formatted: %s\nhere: %s"),
|
+ name itself as it is not using libbfd. */
|
||||||
+ error (_("Remote register badly formatted: %s\nhere: %s"
|
+ if (*p != ';')
|
||||||
+ "\nTry to load the executable by `file' first,"
|
+ error (_("Remote register badly formatted: %s\nhere: %s"
|
||||||
+ "\nyou may also check `set/show architecture'."),
|
+ "\nTry to load the executable by `file' first,"
|
||||||
buf, p);
|
+ "\nyou may also check `set/show architecture'."),
|
||||||
}
|
buf, p);
|
||||||
|
++p;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=216711
|
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=216711
|
||||||
|
|
||||||
|
FIXME: This workaround should be dropped and
|
||||||
|
glibc/sysdeps/unix/sysv/linux/x86_64/clone.S should get CFI for the child
|
||||||
|
instead.
|
||||||
|
|
||||||
2006-12-17 Jan Kratochvil <jan.kratochvil@redhat.com>
|
2006-12-17 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
@ -20,10 +23,10 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=216711
|
|||||||
|
|
||||||
Port to GDB-6.7.
|
Port to GDB-6.7.
|
||||||
|
|
||||||
Index: gdb-6.7/gdb/amd64-linux-tdep.c
|
Index: gdb-6.8.50.20081128/gdb/amd64-linux-tdep.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/amd64-linux-tdep.c 2007-08-23 20:08:26.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/amd64-linux-tdep.c 2008-12-08 10:56:17.000000000 +0100
|
||||||
+++ gdb-6.7/gdb/amd64-linux-tdep.c 2007-10-16 15:57:03.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/amd64-linux-tdep.c 2008-12-08 21:11:08.000000000 +0100
|
||||||
@@ -234,6 +234,80 @@ amd64_linux_register_reggroup_p (struct
|
@@ -234,6 +234,80 @@ amd64_linux_register_reggroup_p (struct
|
||||||
|
|
||||||
/* Set the program counter for process PTID to PC. */
|
/* Set the program counter for process PTID to PC. */
|
||||||
@ -65,12 +68,12 @@ Index: gdb-6.7/gdb/amd64-linux-tdep.c
|
|||||||
+#define LINUX_CLONE_LEN (sizeof linux_clone_code)
|
+#define LINUX_CLONE_LEN (sizeof linux_clone_code)
|
||||||
+
|
+
|
||||||
+static int
|
+static int
|
||||||
+amd64_linux_clone_running (struct frame_info *next_frame)
|
+amd64_linux_clone_running (struct frame_info *this_frame)
|
||||||
+{
|
+{
|
||||||
+ CORE_ADDR pc = frame_pc_unwind (next_frame);
|
+ CORE_ADDR pc = get_frame_pc (this_frame);
|
||||||
+ unsigned char buf[LINUX_CLONE_LEN];
|
+ unsigned char buf[LINUX_CLONE_LEN];
|
||||||
+
|
+
|
||||||
+ if (!safe_frame_unwind_memory (next_frame, pc - LINUX_CLONE_LEN, buf,
|
+ if (!safe_frame_unwind_memory (this_frame, pc - LINUX_CLONE_LEN, buf,
|
||||||
+ LINUX_CLONE_LEN))
|
+ LINUX_CLONE_LEN))
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+
|
+
|
||||||
@ -81,9 +84,9 @@ Index: gdb-6.7/gdb/amd64-linux-tdep.c
|
|||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static int
|
+static int
|
||||||
+amd64_linux_outermost_frame (struct frame_info *next_frame)
|
+amd64_linux_outermost_frame (struct frame_info *this_frame)
|
||||||
+{
|
+{
|
||||||
+ CORE_ADDR pc = frame_pc_unwind (next_frame);
|
+ CORE_ADDR pc = get_frame_pc (this_frame);
|
||||||
+ char *name;
|
+ char *name;
|
||||||
+
|
+
|
||||||
+ find_pc_partial_function (pc, &name, NULL, NULL);
|
+ find_pc_partial_function (pc, &name, NULL, NULL);
|
||||||
@ -97,7 +100,7 @@ Index: gdb-6.7/gdb/amd64-linux-tdep.c
|
|||||||
+ subtle changes in specific glibc revisions. */
|
+ subtle changes in specific glibc revisions. */
|
||||||
+ if (name == NULL || strcmp (name, "clone") == 0
|
+ if (name == NULL || strcmp (name, "clone") == 0
|
||||||
+ || strcmp ("__clone", name) == 0)
|
+ || strcmp ("__clone", name) == 0)
|
||||||
+ return (amd64_linux_clone_running (next_frame) != 0);
|
+ return (amd64_linux_clone_running (this_frame) != 0);
|
||||||
+
|
+
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
@ -114,32 +117,32 @@ Index: gdb-6.7/gdb/amd64-linux-tdep.c
|
|||||||
/* GNU/Linux uses SVR4-style shared libraries. */
|
/* GNU/Linux uses SVR4-style shared libraries. */
|
||||||
set_solib_svr4_fetch_link_map_offsets
|
set_solib_svr4_fetch_link_map_offsets
|
||||||
(gdbarch, svr4_lp64_fetch_link_map_offsets);
|
(gdbarch, svr4_lp64_fetch_link_map_offsets);
|
||||||
Index: gdb-6.7/gdb/amd64-tdep.c
|
Index: gdb-6.8.50.20081128/gdb/amd64-tdep.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/amd64-tdep.c 2007-10-12 17:48:39.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/amd64-tdep.c 2008-12-08 10:56:17.000000000 +0100
|
||||||
+++ gdb-6.7/gdb/amd64-tdep.c 2007-10-16 15:57:03.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/amd64-tdep.c 2008-12-08 21:05:12.000000000 +0100
|
||||||
@@ -849,11 +849,16 @@ amd64_frame_this_id (struct frame_info *
|
@@ -1044,11 +1044,16 @@ amd64_frame_this_id (struct frame_info *
|
||||||
{
|
{
|
||||||
struct amd64_frame_cache *cache =
|
struct amd64_frame_cache *cache =
|
||||||
amd64_frame_cache (next_frame, this_cache);
|
amd64_frame_cache (this_frame, this_cache);
|
||||||
+ struct gdbarch_tdep *tdep = gdbarch_tdep (current_gdbarch);
|
+ struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
|
||||||
|
|
||||||
/* This marks the outermost frame. */
|
/* This marks the outermost frame. */
|
||||||
if (cache->base == 0)
|
if (cache->base == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
+ /* Detect OS dependent outermost frames; such as `clone'. */
|
+ /* Detect OS dependent outermost frames; such as `clone'. */
|
||||||
+ if (tdep->outermost_frame_p && tdep->outermost_frame_p (next_frame))
|
+ if (tdep->outermost_frame_p && tdep->outermost_frame_p (this_frame))
|
||||||
+ return;
|
+ return;
|
||||||
+
|
+
|
||||||
(*this_id) = frame_id_build (cache->base + 16, cache->pc);
|
(*this_id) = frame_id_build (cache->base + 16, cache->pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
Index: gdb-6.7/gdb/i386-tdep.c
|
Index: gdb-6.8.50.20081128/gdb/i386-tdep.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/i386-tdep.c 2007-10-12 17:48:39.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/i386-tdep.c 2008-12-08 10:56:17.000000000 +0100
|
||||||
+++ gdb-6.7/gdb/i386-tdep.c 2007-10-16 15:57:03.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/i386-tdep.c 2008-12-08 11:00:43.000000000 +0100
|
||||||
@@ -2355,6 +2355,9 @@ i386_gdbarch_init (struct gdbarch_info i
|
@@ -2698,6 +2698,9 @@ i386_gdbarch_init (struct gdbarch_info i
|
||||||
tdep->sc_pc_offset = -1;
|
tdep->sc_pc_offset = -1;
|
||||||
tdep->sc_sp_offset = -1;
|
tdep->sc_sp_offset = -1;
|
||||||
|
|
||||||
@ -149,24 +152,24 @@ Index: gdb-6.7/gdb/i386-tdep.c
|
|||||||
/* The format used for `long double' on almost all i386 targets is
|
/* The format used for `long double' on almost all i386 targets is
|
||||||
the i387 extended floating-point format. In fact, of all targets
|
the i387 extended floating-point format. In fact, of all targets
|
||||||
in the GCC 2.95 tree, only OSF/1 does it different, and insists
|
in the GCC 2.95 tree, only OSF/1 does it different, and insists
|
||||||
Index: gdb-6.7/gdb/i386-tdep.h
|
Index: gdb-6.8.50.20081128/gdb/i386-tdep.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.orig/gdb/i386-tdep.h 2007-08-23 20:08:34.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/i386-tdep.h 2008-12-08 10:56:17.000000000 +0100
|
||||||
+++ gdb-6.7/gdb/i386-tdep.h 2007-10-16 15:57:32.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/i386-tdep.h 2008-12-08 21:07:47.000000000 +0100
|
||||||
@@ -106,6 +106,9 @@ struct gdbarch_tdep
|
@@ -106,6 +106,9 @@ struct gdbarch_tdep
|
||||||
/* ISA-specific data types. */
|
/* ISA-specific data types. */
|
||||||
struct type *i386_mmx_type;
|
struct type *i386_mmx_type;
|
||||||
struct type *i386_sse_type;
|
struct type *i386_sse_type;
|
||||||
+
|
+
|
||||||
+ /* Detect OS dependent outermost frames; such as `clone'. */
|
+ /* Detect OS dependent outermost frames; such as `clone'. */
|
||||||
+ int (*outermost_frame_p) (struct frame_info *next_frame);
|
+ int (*outermost_frame_p) (struct frame_info *this_frame);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Floating-point registers. */
|
/* Floating-point registers. */
|
||||||
Index: gdb-6.7/gdb/testsuite/gdb.threads/bt-clone-stop.c
|
Index: gdb-6.8.50.20081128/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.7/gdb/testsuite/gdb.threads/bt-clone-stop.c 2007-10-16 15:57:03.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/bt-clone-stop.c 2008-12-08 11:00:43.000000000 +0100
|
||||||
@@ -0,0 +1,39 @@
|
@@ -0,0 +1,39 @@
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
+/* This testcase is part of GDB, the GNU debugger.
|
||||||
+
|
+
|
||||||
@ -207,10 +210,10 @@ Index: gdb-6.7/gdb/testsuite/gdb.threads/bt-clone-stop.c
|
|||||||
+ for (;;)
|
+ for (;;)
|
||||||
+ pause();
|
+ pause();
|
||||||
+}
|
+}
|
||||||
Index: gdb-6.7/gdb/testsuite/gdb.threads/bt-clone-stop.exp
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/bt-clone-stop.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.7/gdb/testsuite/gdb.threads/bt-clone-stop.exp 2007-10-16 15:57:03.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/bt-clone-stop.exp 2008-12-08 11:00:43.000000000 +0100
|
||||||
@@ -0,0 +1,61 @@
|
@@ -0,0 +1,61 @@
|
||||||
+# Copyright 2006 Free Software Foundation, Inc.
|
+# Copyright 2006 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=218379
|
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=218379
|
||||||
|
|
||||||
|
|
||||||
Index: gdb-6.6/gdb/minsyms.c
|
Index: gdb-6.8.50.20081128/gdb/minsyms.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.6.orig/gdb/minsyms.c 2007-01-20 13:53:48.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/minsyms.c 2008-10-01 18:56:52.000000000 +0200
|
||||||
+++ gdb-6.6/gdb/minsyms.c 2007-01-20 13:58:47.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/minsyms.c 2008-12-02 23:24:27.000000000 +0100
|
||||||
@@ -490,6 +490,11 @@ lookup_minimal_symbol_by_pc_section (COR
|
@@ -544,6 +544,11 @@ lookup_minimal_symbol_by_pc_section_1 (C
|
||||||
don't fill the bfd_section member, so don't
|
don't fill the bfd_section member, so don't
|
||||||
throw away symbols on those platforms. */
|
throw away symbols on those platforms. */
|
||||||
&& SYMBOL_BFD_SECTION (&msymbol[hi]) != NULL
|
&& SYMBOL_OBJ_SECTION (&msymbol[hi]) != NULL
|
||||||
+ /* Don't ignore symbols for solib trampolines.
|
+ /* Don't ignore symbols for solib trampolines.
|
||||||
+ Limit its sideeffects - only for non-0 sized trampolines.
|
+ Limit its sideeffects - only for non-0 sized trampolines.
|
||||||
+ Red Hat Bug 200533 with its regression Bug 218379. */
|
+ Red Hat Bug 200533 with its regression Bug 218379. */
|
||||||
+ && (MSYMBOL_TYPE (&msymbol[hi]) != mst_solib_trampoline
|
+ && (MSYMBOL_TYPE (&msymbol[hi]) != mst_solib_trampoline
|
||||||
+ || MSYMBOL_SIZE (&msymbol[hi]))
|
+ || MSYMBOL_SIZE (&msymbol[hi]))
|
||||||
&& (!matching_bfd_sections
|
&& (!matching_obj_sections
|
||||||
(SYMBOL_BFD_SECTION (&msymbol[hi]), section)))
|
(SYMBOL_OBJ_SECTION (&msymbol[hi]), section)))
|
||||||
{
|
{
|
||||||
|
@ -23,40 +23,10 @@
|
|||||||
|
|
||||||
Port to GDB-6.8pre.
|
Port to GDB-6.8pre.
|
||||||
|
|
||||||
Index: gdb-6.8cvs20080219/gdb/Makefile.in
|
Index: gdb-6.8.50.20081128/gdb/amd64-linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/Makefile.in 2008-02-19 16:52:21.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/amd64-linux-nat.c 2008-03-01 05:39:36.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/Makefile.in 2008-02-20 13:39:08.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/amd64-linux-nat.c 2008-12-02 23:06:16.000000000 +0100
|
||||||
@@ -785,6 +785,7 @@ gdb_expat_h = gdb_expat.h
|
|
||||||
gdb_locale_h = gdb_locale.h
|
|
||||||
gdb_obstack_h = gdb_obstack.h $(obstack_h)
|
|
||||||
gdb_proc_service_h = gdb_proc_service.h $(gregset_h)
|
|
||||||
+gdb_procfs32_h = gdb_procfs32.h $(gdb_user32_h)
|
|
||||||
gdb_ptrace_h = gdb_ptrace.h
|
|
||||||
gdb_regex_h = gdb_regex.h $(xregex_h)
|
|
||||||
gdb_select_h = gdb_select.h
|
|
||||||
@@ -794,6 +795,7 @@ gdb_string_h = gdb_string.h
|
|
||||||
gdb_thread_db_h = gdb_thread_db.h
|
|
||||||
gdbthread_h = gdbthread.h $(breakpoint_h) $(frame_h)
|
|
||||||
gdbtypes_h = gdbtypes.h $(hashtab_h)
|
|
||||||
+gdb_user32_h = gdb_user32.h $(gdb_stdint_h)
|
|
||||||
gdb_vfork_h = gdb_vfork.h
|
|
||||||
gdb_wait_h = gdb_wait.h
|
|
||||||
glibc_tdep_h = glibc-tdep.h
|
|
||||||
@@ -1888,7 +1890,8 @@ amd64fbsd-tdep.o: amd64fbsd-tdep.c $(def
|
|
||||||
amd64-linux-nat.o: amd64-linux-nat.c $(defs_h) $(inferior_h) $(gdbcore_h) \
|
|
||||||
$(regcache_h) $(linux_nat_h) $(gdb_assert_h) $(gdb_string_h) \
|
|
||||||
$(gdb_proc_service_h) $(gregset_h) $(amd64_tdep_h) \
|
|
||||||
- $(i386_linux_tdep_h) $(amd64_nat_h) $(amd64_linux_tdep_h)
|
|
||||||
+ $(i386_linux_tdep_h) $(amd64_nat_h) $(amd64_linux_tdep_h) \
|
|
||||||
+ $(i387_tdep_h) $(elf_bfd_h) $(gdb_procfs32_h)
|
|
||||||
amd64-linux-tdep.o: amd64-linux-tdep.c $(defs_h) $(frame_h) $(gdbcore_h) \
|
|
||||||
$(regcache_h) $(osabi_h) $(symtab_h) $(gdb_string_h) $(amd64_tdep_h) \
|
|
||||||
$(solib_svr4_h) $(gdbtypes_h) $(reggroups_h) $(amd64_linux_tdep_h)
|
|
||||||
Index: gdb-6.8cvs20080219/gdb/amd64-linux-nat.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/amd64-linux-nat.c 2008-02-16 19:10:27.000000000 +0100
|
|
||||||
+++ gdb-6.8cvs20080219/gdb/amd64-linux-nat.c 2008-02-20 13:39:08.000000000 +0100
|
|
||||||
@@ -50,6 +50,9 @@
|
@@ -50,6 +50,9 @@
|
||||||
#include "amd64-tdep.h"
|
#include "amd64-tdep.h"
|
||||||
#include "i386-linux-tdep.h"
|
#include "i386-linux-tdep.h"
|
||||||
@ -200,7 +170,7 @@ Index: gdb-6.8cvs20080219/gdb/amd64-linux-nat.c
|
|||||||
/* Transfering the general-purpose registers between GDB, inferiors
|
/* Transfering the general-purpose registers between GDB, inferiors
|
||||||
and core files. */
|
and core files. */
|
||||||
|
|
||||||
@@ -429,6 +551,11 @@ _initialize_amd64_linux_nat (void)
|
@@ -431,6 +553,11 @@ _initialize_amd64_linux_nat (void)
|
||||||
t->to_fetch_registers = amd64_linux_fetch_inferior_registers;
|
t->to_fetch_registers = amd64_linux_fetch_inferior_registers;
|
||||||
t->to_store_registers = amd64_linux_store_inferior_registers;
|
t->to_store_registers = amd64_linux_store_inferior_registers;
|
||||||
|
|
||||||
@ -212,11 +182,11 @@ Index: gdb-6.8cvs20080219/gdb/amd64-linux-nat.c
|
|||||||
/* Register the target. */
|
/* Register the target. */
|
||||||
linux_nat_add_target (t);
|
linux_nat_add_target (t);
|
||||||
linux_nat_set_new_thread (t, amd64_linux_new_thread);
|
linux_nat_set_new_thread (t, amd64_linux_new_thread);
|
||||||
Index: gdb-6.8cvs20080219/gdb/config.in
|
Index: gdb-6.8.50.20081128/gdb/config.in
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/config.in 2008-01-10 19:17:06.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/config.in 2008-08-06 21:41:31.000000000 +0200
|
||||||
+++ gdb-6.8cvs20080219/gdb/config.in 2008-02-20 13:39:08.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/config.in 2008-12-02 23:06:16.000000000 +0100
|
||||||
@@ -385,6 +385,9 @@
|
@@ -456,6 +456,9 @@
|
||||||
/* Define to 1 if you have the <sys/poll.h> header file. */
|
/* Define to 1 if you have the <sys/poll.h> header file. */
|
||||||
#undef HAVE_SYS_POLL_H
|
#undef HAVE_SYS_POLL_H
|
||||||
|
|
||||||
@ -226,7 +196,7 @@ Index: gdb-6.8cvs20080219/gdb/config.in
|
|||||||
/* Define to 1 if you have the <sys/procfs.h> header file. */
|
/* Define to 1 if you have the <sys/procfs.h> header file. */
|
||||||
#undef HAVE_SYS_PROCFS_H
|
#undef HAVE_SYS_PROCFS_H
|
||||||
|
|
||||||
@@ -412,6 +415,9 @@
|
@@ -483,6 +486,9 @@
|
||||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||||
#undef HAVE_SYS_TYPES_H
|
#undef HAVE_SYS_TYPES_H
|
||||||
|
|
||||||
@ -236,14 +206,16 @@ Index: gdb-6.8cvs20080219/gdb/config.in
|
|||||||
/* Define to 1 if you have the <sys/user.h> header file. */
|
/* Define to 1 if you have the <sys/user.h> header file. */
|
||||||
#undef HAVE_SYS_USER_H
|
#undef HAVE_SYS_USER_H
|
||||||
|
|
||||||
Index: gdb-6.8cvs20080219/gdb/configure
|
Index: gdb-6.8.50.20081128/gdb/configure
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/configure 2008-02-14 23:03:56.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/configure 2008-11-21 23:35:57.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/configure 2008-02-20 13:39:08.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/configure 2008-12-02 23:08:29.000000000 +0100
|
||||||
@@ -11140,6 +11140,157 @@ done
|
@@ -12026,6 +12026,157 @@ _ACEOF
|
||||||
|
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
+
|
||||||
|
+
|
||||||
+for ac_header in sys/user32.h sys/procfs32.h
|
+for ac_header in sys/user32.h sys/procfs32.h
|
||||||
+do
|
+do
|
||||||
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
||||||
@ -393,28 +365,26 @@ Index: gdb-6.8cvs20080219/gdb/configure
|
|||||||
+
|
+
|
||||||
+done
|
+done
|
||||||
+
|
+
|
||||||
+
|
# 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)
|
||||||
for ac_header in sys/wait.h wait.h
|
# unconditionally, so what's the point in checking these?
|
||||||
do
|
Index: gdb-6.8.50.20081128/gdb/configure.ac
|
||||||
as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
|
|
||||||
Index: gdb-6.8cvs20080219/gdb/configure.ac
|
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/configure.ac 2008-02-14 23:03:56.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/configure.ac 2008-11-21 23:35:58.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/configure.ac 2008-02-20 13:39:08.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/configure.ac 2008-12-02 23:07:33.000000000 +0100
|
||||||
@@ -523,6 +523,7 @@ AC_CHECK_HEADERS(sys/user.h, [], [],
|
@@ -686,6 +686,7 @@ AC_SUBST(PYTHON_CFLAGS)
|
||||||
# include <sys/param.h>
|
AC_HEADER_DIRENT
|
||||||
#endif
|
AC_HEADER_STAT
|
||||||
])
|
AC_HEADER_STDC
|
||||||
+AC_CHECK_HEADERS(sys/user32.h sys/procfs32.h)
|
+AC_CHECK_HEADERS([sys/user32.h sys/procfs32.h])
|
||||||
AC_CHECK_HEADERS(sys/wait.h wait.h)
|
# elf_hp.h is for HP/UX 64-bit shared library support.
|
||||||
AC_CHECK_HEADERS(termios.h termio.h sgtty.h)
|
# FIXME: kettenis/20030102: In most cases we include these (ctype.h, time.h)
|
||||||
AC_CHECK_HEADERS(unistd.h)
|
# unconditionally, so what's the point in checking these?
|
||||||
Index: gdb-6.8cvs20080219/gdb/gcore.c
|
Index: gdb-6.8.50.20081128/gdb/gcore.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/gcore.c 2008-02-19 16:52:21.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/gcore.c 2008-12-01 16:39:04.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/gcore.c 2008-02-20 13:39:08.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/gcore.c 2008-12-02 23:06:16.000000000 +0100
|
||||||
@@ -317,6 +317,11 @@ gcore_create_callback (CORE_ADDR vaddr,
|
@@ -320,6 +320,11 @@ gcore_create_callback (CORE_ADDR vaddr,
|
||||||
asection *osec;
|
asection *osec;
|
||||||
flagword flags = SEC_ALLOC | SEC_HAS_CONTENTS | SEC_LOAD;
|
flagword flags = SEC_ALLOC | SEC_HAS_CONTENTS | SEC_LOAD;
|
||||||
|
|
||||||
@ -426,10 +396,10 @@ Index: gdb-6.8cvs20080219/gdb/gcore.c
|
|||||||
/* If the memory segment has no permissions set, ignore it, otherwise
|
/* 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
|
when we later try to access it for read/write, we'll get an error
|
||||||
or jam the kernel. */
|
or jam the kernel. */
|
||||||
Index: gdb-6.8cvs20080219/gdb/gdb_procfs32.h
|
Index: gdb-6.8.50.20081128/gdb/gdb_procfs32.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.8cvs20080219/gdb/gdb_procfs32.h 2008-02-20 13:39:08.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/gdb_procfs32.h 2008-12-02 23:06:16.000000000 +0100
|
||||||
@@ -0,0 +1,128 @@
|
@@ -0,0 +1,128 @@
|
||||||
+#ifdef HAVE_SYS_PROCFS32_H
|
+#ifdef HAVE_SYS_PROCFS32_H
|
||||||
+#include <sys/procfs32.h>
|
+#include <sys/procfs32.h>
|
||||||
@ -559,10 +529,10 @@ Index: gdb-6.8cvs20080219/gdb/gdb_procfs32.h
|
|||||||
+#endif /* _SYS_PROCFS32_H */
|
+#endif /* _SYS_PROCFS32_H */
|
||||||
+
|
+
|
||||||
+#endif /* HAVE_SYS_PROCFS32_H */
|
+#endif /* HAVE_SYS_PROCFS32_H */
|
||||||
Index: gdb-6.8cvs20080219/gdb/gdb_user32.h
|
Index: gdb-6.8.50.20081128/gdb/gdb_user32.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.8cvs20080219/gdb/gdb_user32.h 2008-02-20 13:39:08.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/gdb_user32.h 2008-12-02 23:06:16.000000000 +0100
|
||||||
@@ -0,0 +1,108 @@
|
@@ -0,0 +1,108 @@
|
||||||
+#ifdef HAVE_SYS_USER32_H
|
+#ifdef HAVE_SYS_USER32_H
|
||||||
+#include <sys/user32.h>
|
+#include <sys/user32.h>
|
||||||
@ -672,11 +642,11 @@ Index: gdb-6.8cvs20080219/gdb/gdb_user32.h
|
|||||||
+#endif /* _SYS_USER32_H */
|
+#endif /* _SYS_USER32_H */
|
||||||
+
|
+
|
||||||
+#endif /* HAVE_SYS_USER32_H */
|
+#endif /* HAVE_SYS_USER32_H */
|
||||||
Index: gdb-6.8cvs20080219/gdb/linux-nat.c
|
Index: gdb-6.8.50.20081128/gdb/linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/linux-nat.c 2008-02-19 17:27:21.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/linux-nat.c 2008-12-02 22:15:53.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/linux-nat.c 2008-02-20 13:39:08.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/linux-nat.c 2008-12-02 23:13:18.000000000 +0100
|
||||||
@@ -104,6 +104,21 @@ static LONGEST (*super_xfer_partial) (st
|
@@ -209,6 +209,21 @@ static LONGEST (*super_xfer_partial) (st
|
||||||
const gdb_byte *,
|
const gdb_byte *,
|
||||||
ULONGEST, LONGEST);
|
ULONGEST, LONGEST);
|
||||||
|
|
||||||
@ -698,40 +668,29 @@ Index: gdb-6.8cvs20080219/gdb/linux-nat.c
|
|||||||
static int debug_linux_nat;
|
static int debug_linux_nat;
|
||||||
static void
|
static void
|
||||||
show_debug_linux_nat (struct ui_file *file, int from_tty,
|
show_debug_linux_nat (struct ui_file *file, int from_tty,
|
||||||
@@ -2716,11 +2731,11 @@ linux_nat_do_thread_registers (bfd *obfd
|
@@ -3470,7 +3485,7 @@ linux_nat_do_thread_registers (bfd *obfd
|
||||||
else
|
else
|
||||||
fill_gregset (regcache, &gregs, -1);
|
fill_gregset (regcache, &gregs, -1);
|
||||||
|
|
||||||
- note_data = (char *) elfcore_write_prstatus (obfd,
|
- note_data = (char *) elfcore_write_prstatus (obfd,
|
||||||
- note_data,
|
|
||||||
- note_size,
|
|
||||||
- lwp,
|
|
||||||
- stop_signal, &gregs);
|
|
||||||
+ note_data = (char *) linux_elfcore_write_prstatus (obfd,
|
+ note_data = (char *) linux_elfcore_write_prstatus (obfd,
|
||||||
+ note_data,
|
note_data,
|
||||||
+ note_size,
|
note_size,
|
||||||
+ lwp,
|
lwp,
|
||||||
+ stop_signal, &gregs);
|
@@ -3520,10 +3535,10 @@ linux_nat_do_thread_registers (bfd *obfd
|
||||||
|
else
|
||||||
|
fill_fpregset (regcache, &fpregs, -1);
|
||||||
|
|
||||||
if (core_regset_p
|
- note_data = (char *) elfcore_write_prfpreg (obfd,
|
||||||
&& (regset = gdbarch_regset_from_core_section (gdbarch, ".reg2",
|
+ note_data = (char *) linux_elfcore_write_prfpreg (obfd,
|
||||||
@@ -2731,10 +2746,11 @@ linux_nat_do_thread_registers (bfd *obfd
|
note_data,
|
||||||
else
|
note_size,
|
||||||
fill_fpregset (regcache, &fpregs, -1);
|
- &fpregs, sizeof (fpregs));
|
||||||
|
+ &fpregs, sizeof (fpregs), regcache);
|
||||||
|
}
|
||||||
|
|
||||||
- note_data = (char *) elfcore_write_prfpreg (obfd,
|
return note_data;
|
||||||
- note_data,
|
@@ -3592,9 +3607,9 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||||
- note_size,
|
|
||||||
- &fpregs, sizeof (fpregs));
|
|
||||||
+ note_data = (char *) linux_elfcore_write_prfpreg (obfd,
|
|
||||||
+ note_data,
|
|
||||||
+ note_size,
|
|
||||||
+ &fpregs, sizeof (fpregs),
|
|
||||||
+ regcache);
|
|
||||||
|
|
||||||
#ifdef FILL_FPXREGSET
|
|
||||||
if (core_regset_p
|
|
||||||
@@ -2828,9 +2844,9 @@ linux_nat_make_corefile_notes (bfd *obfd
|
|
||||||
psargs_end - string_end);
|
psargs_end - string_end);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -744,11 +703,11 @@ Index: gdb-6.8cvs20080219/gdb/linux-nat.c
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Dump information for threads. */
|
/* Dump information for threads. */
|
||||||
Index: gdb-6.8cvs20080219/gdb/linux-nat.h
|
Index: gdb-6.8.50.20081128/gdb/linux-nat.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/linux-nat.h 2008-02-19 14:26:32.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/linux-nat.h 2008-12-01 15:58:23.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/linux-nat.h 2008-02-20 13:39:37.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/linux-nat.h 2008-12-02 23:06:16.000000000 +0100
|
||||||
@@ -124,3 +124,12 @@ void linux_nat_switch_fork (ptid_t new_p
|
@@ -134,3 +134,12 @@ void linux_nat_switch_fork (ptid_t new_p
|
||||||
|
|
||||||
/* Return the saved siginfo associated with PTID. */
|
/* Return the saved siginfo associated with PTID. */
|
||||||
struct siginfo *linux_nat_get_siginfo (ptid_t ptid);
|
struct siginfo *linux_nat_get_siginfo (ptid_t ptid);
|
||||||
|
@ -3,6 +3,9 @@ If you provided some relative path to the shared library, such as with
|
|||||||
then gdb would fail to match the shared library name during the TLS lookup.
|
then gdb would fail to match the shared library name during the TLS lookup.
|
||||||
|
|
||||||
|
|
||||||
|
Dropped the workaround/fix for gdb-6.8.50.20081128 - is it still needed?
|
||||||
|
|
||||||
|
|
||||||
The testsuite needs `gdb-6.3-bz146810-solib_absolute_prefix_is_empty.patch'.
|
The testsuite needs `gdb-6.3-bz146810-solib_absolute_prefix_is_empty.patch'.
|
||||||
The testsuite needs `gdb-6.5-tls-of-separate-debuginfo.patch'.
|
The testsuite needs `gdb-6.5-tls-of-separate-debuginfo.patch'.
|
||||||
|
|
||||||
@ -20,57 +23,6 @@ The testsuite needs `gdb-6.5-tls-of-separate-debuginfo.patch'.
|
|||||||
|
|
||||||
Port to gdb-6.7.50.20080227.
|
Port to gdb-6.7.50.20080227.
|
||||||
|
|
||||||
Index: gdb-6.7.50.20080227/gdb/solib-svr4.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.7.50.20080227.orig/gdb/solib-svr4.c 2008-02-27 08:59:06.000000000 +0100
|
|
||||||
+++ gdb-6.7.50.20080227/gdb/solib-svr4.c 2008-02-27 09:00:44.000000000 +0100
|
|
||||||
@@ -1017,10 +1017,14 @@ CORE_ADDR
|
|
||||||
svr4_fetch_objfile_link_map (struct objfile *objfile)
|
|
||||||
{
|
|
||||||
CORE_ADDR lm;
|
|
||||||
+ int resolve;
|
|
||||||
|
|
||||||
if (locate_base () == 0)
|
|
||||||
return 0; /* failed somehow... */
|
|
||||||
|
|
||||||
+for (resolve = 0; resolve <= 1; resolve++)
|
|
||||||
+{
|
|
||||||
+
|
|
||||||
/* Position ourselves on the first link map. */
|
|
||||||
lm = solib_svr4_r_map ();
|
|
||||||
while (lm)
|
|
||||||
@@ -1059,6 +1063,21 @@ svr4_fetch_objfile_link_map (struct objf
|
|
||||||
safe_strerror (errcode));
|
|
||||||
else
|
|
||||||
{
|
|
||||||
+ /* solib_svr4_r_map() may contain relative pathnames while
|
|
||||||
+ `objfile->name' is absolute. */
|
|
||||||
+ if (resolve && buffer && buffer[0] != '/')
|
|
||||||
+ {
|
|
||||||
+ char *absolute;
|
|
||||||
+ int fd;
|
|
||||||
+
|
|
||||||
+ fd = solib_open (buffer, &absolute);
|
|
||||||
+ if (fd != -1)
|
|
||||||
+ {
|
|
||||||
+ make_cleanup (xfree, absolute);
|
|
||||||
+ buffer = absolute;
|
|
||||||
+ close (fd);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
/* Is this the linkmap for the file we want? */
|
|
||||||
/* If the file is not a shared library and has no name,
|
|
||||||
we are sure it is the main executable, so we return that. */
|
|
||||||
@@ -1077,6 +1096,9 @@ svr4_fetch_objfile_link_map (struct objf
|
|
||||||
builtin_type_void_data_ptr);
|
|
||||||
do_cleanups (old_chain);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+} /* resolve */
|
|
||||||
+
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Index: gdb-6.7.50.20080227/gdb/testsuite/gdb.threads/tls-sepdebug-main.c
|
Index: gdb-6.7.50.20080227/gdb/testsuite/gdb.threads/tls-sepdebug-main.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
@ -47,9 +47,11 @@
|
|||||||
Fix found by Denys Vlasenko <dvlasenk@redhat.com>.
|
Fix found by Denys Vlasenko <dvlasenk@redhat.com>.
|
||||||
Fixes Red Hat Bug 459414.
|
Fixes Red Hat Bug 459414.
|
||||||
|
|
||||||
--- ./gdb/Makefile.in 2008-08-21 00:29:46.000000000 +0200
|
Index: gdb-6.8.50.20081128/gdb/Makefile.in
|
||||||
+++ ./gdb/Makefile.in 2008-08-21 00:28:43.000000000 +0200
|
===================================================================
|
||||||
@@ -340,7 +340,7 @@ CONFIG_UNINSTALL = @CONFIG_UNINSTALL@
|
--- gdb-6.8.50.20081128.orig/gdb/Makefile.in 2008-12-04 10:33:25.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/Makefile.in 2008-12-04 10:34:31.000000000 +0100
|
||||||
|
@@ -363,7 +363,7 @@ CONFIG_UNINSTALL = @CONFIG_UNINSTALL@
|
||||||
# your system doesn't have fcntl.h in /usr/include (which is where it
|
# your system doesn't have fcntl.h in /usr/include (which is where it
|
||||||
# should be according to Posix).
|
# should be according to Posix).
|
||||||
DEFS = @DEFS@
|
DEFS = @DEFS@
|
||||||
@ -58,55 +60,19 @@
|
|||||||
|
|
||||||
# MH_CFLAGS, if defined, has host-dependent CFLAGS from the config directory.
|
# MH_CFLAGS, if defined, has host-dependent CFLAGS from the config directory.
|
||||||
GLOBAL_CFLAGS = $(MH_CFLAGS)
|
GLOBAL_CFLAGS = $(MH_CFLAGS)
|
||||||
@@ -392,7 +392,7 @@ INSTALLED_LIBS=-lbfd -lreadline -lopcode
|
@@ -415,7 +415,7 @@ INSTALLED_LIBS=-lbfd -lreadline -lopcode
|
||||||
CLIBS = $(SIM) $(READLINE) $(OPCODES) $(BFD) $(INTL) $(LIBIBERTY) $(LIBDECNUMBER) \
|
CLIBS = $(SIM) $(READLINE) $(OPCODES) $(BFD) $(INTL) $(LIBIBERTY) $(LIBDECNUMBER) \
|
||||||
$(XM_CLIBS) $(TM_CLIBS) $(NAT_CLIBS) $(GDBTKLIBS) @LIBS@ \
|
$(XM_CLIBS) $(NAT_CLIBS) $(GDBTKLIBS) @LIBS@ \
|
||||||
$(LIBICONV) $(LIBEXPAT) \
|
$(LIBICONV) $(LIBEXPAT) \
|
||||||
- $(LIBIBERTY) $(WIN32LIBS)
|
- $(LIBIBERTY) $(WIN32LIBS) $(LIBGNU)
|
||||||
+ $(LIBIBERTY) $(WIN32LIBS) -lrpm
|
+ $(LIBIBERTY) $(WIN32LIBS) $(LIBGNU) -lrpm
|
||||||
CDEPS = $(XM_CDEPS) $(TM_CDEPS) $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE_DEPS) \
|
CDEPS = $(XM_CDEPS) $(NAT_CDEPS) $(SIM) $(BFD) $(READLINE_DEPS) \
|
||||||
$(OPCODES) $(INTL_DEPS) $(LIBIBERTY) $(CONFIG_DEPS)
|
$(OPCODES) $(INTL_DEPS) $(LIBIBERTY) $(CONFIG_DEPS) $(LIBGNU)
|
||||||
|
|
||||||
@@ -2029,7 +2029,8 @@ corelow.o: corelow.c $(defs_h) $(arch_ut
|
Index: gdb-6.8.50.20081128/gdb/corelow.c
|
||||||
$(inferior_h) $(symtab_h) $(command_h) $(bfd_h) $(target_h) \
|
===================================================================
|
||||||
$(gdbcore_h) $(gdbthread_h) $(regcache_h) $(regset_h) $(symfile_h) \
|
--- gdb-6.8.50.20081128.orig/gdb/corelow.c 2008-11-09 12:27:17.000000000 +0100
|
||||||
$(exec_h) $(readline_h) $(gdb_assert_h) \
|
+++ gdb-6.8.50.20081128/gdb/corelow.c 2008-12-04 10:34:31.000000000 +0100
|
||||||
- $(exceptions_h) $(solib_h) $(filenames_h)
|
|
||||||
+ $(exceptions_h) $(solib_h) $(filenames_h) $(auxv_h) $(elf_common_h) \
|
|
||||||
+ $(objfiles_h) $(gdbcmd_h)
|
|
||||||
core-regset.o: core-regset.c $(defs_h) $(command_h) $(gdbcore_h) \
|
|
||||||
$(inferior_h) $(target_h) $(regcache_h) $(gdb_string_h) $(gregset_h)
|
|
||||||
cp-abi.o: cp-abi.c $(defs_h) $(value_h) $(cp_abi_h) $(command_h) $(gdbcmd_h) \
|
|
||||||
@@ -2117,7 +2118,7 @@ event-loop.o: event-loop.c $(defs_h) $(e
|
|
||||||
event-top.o: event-top.c $(defs_h) $(top_h) $(inferior_h) $(target_h) \
|
|
||||||
$(terminal_h) $(event_loop_h) $(event_top_h) $(interps_h) \
|
|
||||||
$(exceptions_h) $(cli_script_h) $(gdbcmd_h) $(readline_h) \
|
|
||||||
- $(readline_history_h)
|
|
||||||
+ $(readline_history_h) $(symfile_h)
|
|
||||||
exceptions.o: exceptions.c $(defs_h) $(exceptions_h) $(breakpoint_h) \
|
|
||||||
$(target_h) $(inferior_h) $(annotate_h) $(ui_out_h) $(gdb_assert_h) \
|
|
||||||
$(gdb_string_h) $(serial_h)
|
|
||||||
@@ -2884,7 +2885,8 @@ symfile.o: symfile.c $(defs_h) $(bfdlink
|
|
||||||
$(gdb_stabs_h) $(gdb_obstack_h) $(completer_h) $(bcache_h) \
|
|
||||||
$(hashtab_h) $(readline_h) $(gdb_assert_h) $(block_h) \
|
|
||||||
$(gdb_string_h) $(gdb_stat_h) $(observer_h) $(exec_h) \
|
|
||||||
- $(parser_defs_h) $(varobj_h) $(elf_bfd_h) $(solib_h)
|
|
||||||
+ $(parser_defs_h) $(varobj_h) $(elf_bfd_h) $(solib_h) $(gdb_stdint_h) \
|
|
||||||
+ $(libbfd_h) $(elf_bfd_h) $(elf_external_h)
|
|
||||||
symfile-mem.o: symfile-mem.c $(defs_h) $(symtab_h) $(gdbcore_h) \
|
|
||||||
$(objfiles_h) $(exceptions_h) $(gdbcmd_h) $(target_h) $(value_h) \
|
|
||||||
$(symfile_h) $(observer_h) $(auxv_h) $(elf_common_h)
|
|
||||||
@@ -3325,7 +3327,7 @@ tui-hooks.o: $(srcdir)/tui/tui-hooks.c $
|
|
||||||
tui-interp.o: $(srcdir)/tui/tui-interp.c $(defs_h) $(interps_h) $(top_h) \
|
|
||||||
$(event_top_h) $(event_loop_h) $(ui_out_h) $(cli_out_h) \
|
|
||||||
$(tui_data_h) $(readline_h) $(tui_win_h) $(tui_h) $(tui_io_h) \
|
|
||||||
- $(exceptions_h)
|
|
||||||
+ $(exceptions_h) $(symfile_h)
|
|
||||||
$(CC) -c $(INTERNAL_CFLAGS) $(srcdir)/tui/tui-interp.c
|
|
||||||
tui-io.o: $(srcdir)/tui/tui-io.c $(defs_h) $(target_h) \
|
|
||||||
$(event_loop_h) $(event_top_h) $(command_h) $(top_h) $(tui_h) \
|
|
||||||
--- ./gdb/corelow.c 2008-02-09 14:45:33.000000000 +0100
|
|
||||||
+++ ./gdb/corelow.c 2008-08-21 00:28:43.000000000 +0200
|
|
||||||
@@ -45,6 +45,10 @@
|
@@ -45,6 +45,10 @@
|
||||||
#include "exceptions.h"
|
#include "exceptions.h"
|
||||||
#include "solib.h"
|
#include "solib.h"
|
||||||
@ -118,8 +84,8 @@
|
|||||||
|
|
||||||
|
|
||||||
#ifndef O_LARGEFILE
|
#ifndef O_LARGEFILE
|
||||||
@@ -248,6 +252,56 @@ add_to_thread_list (bfd *abfd, asection
|
@@ -262,6 +266,56 @@ add_to_thread_list (bfd *abfd, asection
|
||||||
inferior_ptid = pid_to_ptid (thread_id); /* Yes, make it current */
|
inferior_ptid = ptid; /* Yes, make it current */
|
||||||
}
|
}
|
||||||
|
|
||||||
+static int build_id_core_loads = 1;
|
+static int build_id_core_loads = 1;
|
||||||
@ -175,23 +141,20 @@
|
|||||||
/* This routine opens and sets up the core file bfd. */
|
/* This routine opens and sets up the core file bfd. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -344,6 +398,15 @@ core_open (char *filename, int from_tty)
|
@@ -358,6 +412,12 @@ core_open (char *filename, int from_tty)
|
||||||
ontop = !push_target (&core_ops);
|
push_target (&core_ops);
|
||||||
discard_cleanups (old_chain);
|
discard_cleanups (old_chain);
|
||||||
|
|
||||||
+ if (ontop)
|
+ /* Find the build_id identifiers. If it gets executed after
|
||||||
+ {
|
+ POST_CREATE_INFERIOR we would clash with asking to discard the already
|
||||||
+ /* Find the build_id identifiers. If it gets executed after
|
+ loaded VDSO symbols. */
|
||||||
+ POST_CREATE_INFERIOR we would clash with asking to discard the already
|
+ if (build_id_core_loads != 0)
|
||||||
+ loaded VDSO symbols. */
|
+ build_id_locate_exec (from_tty);
|
||||||
+ if (build_id_core_loads != 0)
|
|
||||||
+ build_id_locate_exec (from_tty);
|
|
||||||
+ }
|
|
||||||
+
|
+
|
||||||
/* This is done first, before anything has a chance to query the
|
add_inferior_silent (corelow_pid);
|
||||||
inferior for information such as symbols. */
|
|
||||||
post_create_inferior (&core_ops, from_tty);
|
/* Do this before acknowledging the inferior, so if
|
||||||
@@ -692,4 +755,11 @@ _initialize_corelow (void)
|
@@ -737,4 +797,11 @@ _initialize_corelow (void)
|
||||||
|
|
||||||
if (!coreops_suppress_target)
|
if (!coreops_suppress_target)
|
||||||
add_target (&core_ops);
|
add_target (&core_ops);
|
||||||
@ -203,9 +166,11 @@
|
|||||||
+ NULL, NULL, NULL,
|
+ NULL, NULL, NULL,
|
||||||
+ &setlist, &showlist);
|
+ &setlist, &showlist);
|
||||||
}
|
}
|
||||||
--- ./gdb/doc/gdb.texinfo 2008-08-21 00:29:46.000000000 +0200
|
Index: gdb-6.8.50.20081128/gdb/doc/gdb.texinfo
|
||||||
+++ ./gdb/doc/gdb.texinfo 2008-08-21 00:28:43.000000000 +0200
|
===================================================================
|
||||||
@@ -12195,6 +12195,27 @@ information files.
|
--- gdb-6.8.50.20081128.orig/gdb/doc/gdb.texinfo 2008-12-04 10:34:04.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/doc/gdb.texinfo 2008-12-04 10:34:31.000000000 +0100
|
||||||
|
@@ -13138,6 +13138,27 @@ information files.
|
||||||
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@ -233,17 +198,19 @@
|
|||||||
@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
|
||||||
--- ./gdb/event-top.c 2008-01-01 23:53:09.000000000 +0100
|
Index: gdb-6.8.50.20081128/gdb/event-top.c
|
||||||
+++ ./gdb/event-top.c 2008-08-21 00:28:43.000000000 +0200
|
===================================================================
|
||||||
@@ -31,6 +31,7 @@
|
--- gdb-6.8.50.20081128.orig/gdb/event-top.c 2008-09-08 23:46:21.000000000 +0200
|
||||||
#include <signal.h>
|
+++ gdb-6.8.50.20081128/gdb/event-top.c 2008-12-04 10:34:31.000000000 +0100
|
||||||
#include "exceptions.h"
|
@@ -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 "gdbthread.h"
|
||||||
+#include "symfile.h"
|
+#include "symfile.h"
|
||||||
|
|
||||||
/* For dont_repeat() */
|
/* For dont_repeat() */
|
||||||
#include "gdbcmd.h"
|
#include "gdbcmd.h"
|
||||||
@@ -192,6 +193,8 @@ cli_command_loop (void)
|
@@ -193,6 +194,8 @@ cli_command_loop (void)
|
||||||
char *a_prompt;
|
char *a_prompt;
|
||||||
char *gdb_prompt = get_prompt ();
|
char *gdb_prompt = get_prompt ();
|
||||||
|
|
||||||
@ -252,7 +219,7 @@
|
|||||||
/* Tell readline what the prompt to display is and what function it
|
/* Tell readline what the prompt to display is and what function it
|
||||||
will need to call after a whole line is read. This also displays
|
will need to call after a whole line is read. This also displays
|
||||||
the first prompt. */
|
the first prompt. */
|
||||||
@@ -263,6 +266,8 @@ display_gdb_prompt (char *new_prompt)
|
@@ -264,6 +267,8 @@ display_gdb_prompt (char *new_prompt)
|
||||||
/* Reset the nesting depth used when trace-commands is set. */
|
/* Reset the nesting depth used when trace-commands is set. */
|
||||||
reset_command_nest_depth ();
|
reset_command_nest_depth ();
|
||||||
|
|
||||||
@ -261,9 +228,11 @@
|
|||||||
/* 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 ())
|
||||||
--- ./gdb/solib-svr4.c 2008-08-21 00:29:46.000000000 +0200
|
Index: gdb-6.8.50.20081128/gdb/solib-svr4.c
|
||||||
+++ ./gdb/solib-svr4.c 2008-08-21 00:28:43.000000000 +0200
|
===================================================================
|
||||||
@@ -764,9 +764,33 @@ svr4_current_sos (void)
|
--- gdb-6.8.50.20081128.orig/gdb/solib-svr4.c 2008-12-04 01:34:17.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/solib-svr4.c 2008-12-04 10:34:31.000000000 +0100
|
||||||
|
@@ -999,9 +999,33 @@ svr4_current_sos (void)
|
||||||
safe_strerror (errcode));
|
safe_strerror (errcode));
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -300,19 +269,20 @@
|
|||||||
}
|
}
|
||||||
xfree (buffer);
|
xfree (buffer);
|
||||||
|
|
||||||
--- ./gdb/symfile.c 2008-08-21 00:29:46.000000000 +0200
|
Index: gdb-6.8.50.20081128/gdb/symfile.c
|
||||||
+++ ./gdb/symfile.c 2008-08-21 00:29:18.000000000 +0200
|
===================================================================
|
||||||
@@ -53,6 +53,9 @@
|
--- gdb-6.8.50.20081128.orig/gdb/symfile.c 2008-12-04 10:26:12.000000000 +0100
|
||||||
#include "varobj.h"
|
+++ gdb-6.8.50.20081128/gdb/symfile.c 2008-12-04 10:36:18.000000000 +0100
|
||||||
|
@@ -54,6 +54,8 @@
|
||||||
#include "elf-bfd.h"
|
#include "elf-bfd.h"
|
||||||
#include "solib.h"
|
#include "solib.h"
|
||||||
+#include "gdb_stdint.h"
|
#include "remote.h"
|
||||||
+#include "libbfd.h"
|
+#include "libbfd.h"
|
||||||
+#include "elf/external.h"
|
+#include "elf/external.h"
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
@@ -61,6 +64,7 @@
|
@@ -62,6 +64,7 @@
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
@ -320,7 +290,7 @@
|
|||||||
|
|
||||||
|
|
||||||
int (*deprecated_ui_load_progress_hook) (const char *section, unsigned long num);
|
int (*deprecated_ui_load_progress_hook) (const char *section, unsigned long num);
|
||||||
@@ -1226,16 +1230,65 @@ symbol_file_clear (int from_tty)
|
@@ -1168,16 +1171,65 @@ symbol_file_clear (int from_tty)
|
||||||
printf_unfiltered (_("No symbol file now.\n"));
|
printf_unfiltered (_("No symbol file now.\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -388,7 +358,7 @@
|
|||||||
{
|
{
|
||||||
struct build_id *retval;
|
struct build_id *retval;
|
||||||
|
|
||||||
@@ -1251,6 +1304,348 @@ build_id_bfd_get (bfd *abfd)
|
@@ -1193,6 +1245,348 @@ build_id_bfd_get (bfd *abfd)
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -737,7 +707,7 @@
|
|||||||
/* 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
|
||||||
@@ -1265,7 +1660,7 @@ build_id_verify (const char *filename, s
|
@@ -1210,7 +1604,7 @@ build_id_verify (const char *filename, s
|
||||||
if (abfd == NULL)
|
if (abfd == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -746,7 +716,7 @@
|
|||||||
|
|
||||||
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);
|
||||||
@@ -1281,8 +1676,9 @@ build_id_verify (const char *filename, s
|
@@ -1229,8 +1623,9 @@ build_id_verify (const char *filename, s
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -758,7 +728,7 @@
|
|||||||
{
|
{
|
||||||
char *link, *s, *retval = NULL;
|
char *link, *s, *retval = NULL;
|
||||||
gdb_byte *data = build_id->data;
|
gdb_byte *data = build_id->data;
|
||||||
@@ -1290,7 +1686,9 @@ build_id_to_debug_filename (struct build
|
@@ -1238,7 +1633,9 @@ build_id_to_debug_filename (struct build
|
||||||
|
|
||||||
/* DEBUG_FILE_DIRECTORY/.build-id/ab/cdef */
|
/* DEBUG_FILE_DIRECTORY/.build-id/ab/cdef */
|
||||||
link = xmalloc (strlen (debug_file_directory) + (sizeof "/.build-id/" - 1) + 1
|
link = xmalloc (strlen (debug_file_directory) + (sizeof "/.build-id/" - 1) + 1
|
||||||
@ -769,7 +739,7 @@
|
|||||||
s = link + sprintf (link, "%s/.build-id/", debug_file_directory);
|
s = link + sprintf (link, "%s/.build-id/", debug_file_directory);
|
||||||
if (size > 0)
|
if (size > 0)
|
||||||
{
|
{
|
||||||
@@ -1301,12 +1699,14 @@ build_id_to_debug_filename (struct build
|
@@ -1249,12 +1646,14 @@ 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++);
|
||||||
@ -786,7 +756,7 @@
|
|||||||
|
|
||||||
if (retval != NULL && !build_id_verify (retval, build_id))
|
if (retval != NULL && !build_id_verify (retval, build_id))
|
||||||
{
|
{
|
||||||
@@ -1314,9 +1714,424 @@ build_id_to_debug_filename (struct build
|
@@ -1262,9 +1661,424 @@ build_id_to_debug_filename (struct build
|
||||||
retval = NULL;
|
retval = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -795,9 +765,9 @@
|
|||||||
+ else
|
+ else
|
||||||
+ xfree (link);
|
+ xfree (link);
|
||||||
+
|
+
|
||||||
return retval;
|
+ return retval;
|
||||||
}
|
+}
|
||||||
|
+
|
||||||
+#include <rpm/rpmlib.h>
|
+#include <rpm/rpmlib.h>
|
||||||
+#include <rpm/rpmts.h>
|
+#include <rpm/rpmts.h>
|
||||||
+#include <rpm/rpmdb.h>
|
+#include <rpm/rpmdb.h>
|
||||||
@ -1083,9 +1053,9 @@
|
|||||||
+
|
+
|
||||||
+ 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)
|
||||||
+{
|
+{
|
||||||
@ -1120,7 +1090,7 @@
|
|||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
+static void
|
+static void
|
||||||
+debug_print_executable_changed (void *unused)
|
+debug_print_executable_changed (void)
|
||||||
+{
|
+{
|
||||||
+ missing_rpm_change ();
|
+ missing_rpm_change ();
|
||||||
+ missing_filepair_change ();
|
+ missing_filepair_change ();
|
||||||
@ -1211,7 +1181,7 @@
|
|||||||
static char *
|
static char *
|
||||||
get_debug_link_info (struct objfile *objfile, unsigned long *crc32_out)
|
get_debug_link_info (struct objfile *objfile, unsigned long *crc32_out)
|
||||||
{
|
{
|
||||||
@@ -1402,32 +2231,36 @@ static char *
|
@@ -1347,32 +2161,36 @@ static char *
|
||||||
find_separate_debug_file (struct objfile *objfile)
|
find_separate_debug_file (struct objfile *objfile)
|
||||||
{
|
{
|
||||||
asection *sect;
|
asection *sect;
|
||||||
@ -1237,9 +1207,8 @@
|
|||||||
char *build_id_name;
|
char *build_id_name;
|
||||||
|
|
||||||
- build_id_name = build_id_to_debug_filename (build_id);
|
- build_id_name = build_id_to_debug_filename (build_id);
|
||||||
- free (build_id);
|
|
||||||
+ build_id_name = build_id_to_filename (build_id, &build_id_filename, 1);
|
+ build_id_name = build_id_to_filename (build_id, &build_id_filename, 1);
|
||||||
+ 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)
|
||||||
{
|
{
|
||||||
@ -1257,7 +1226,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
basename = get_debug_link_info (objfile, &crc32);
|
basename = get_debug_link_info (objfile, &crc32);
|
||||||
@@ -1435,7 +2268,7 @@ find_separate_debug_file (struct objfile
|
@@ -1380,7 +2198,7 @@ find_separate_debug_file (struct objfile
|
||||||
if (basename == NULL)
|
if (basename == NULL)
|
||||||
/* There's no separate debug info, hence there's no way we could
|
/* There's no separate debug info, hence there's no way we could
|
||||||
load it => no warning. */
|
load it => no warning. */
|
||||||
@ -1266,7 +1235,7 @@
|
|||||||
|
|
||||||
dir = xstrdup (objfile->name);
|
dir = xstrdup (objfile->name);
|
||||||
|
|
||||||
@@ -1451,23 +2284,19 @@ find_separate_debug_file (struct objfile
|
@@ -1396,23 +2214,19 @@ find_separate_debug_file (struct objfile
|
||||||
gdb_assert (i >= 0 && IS_DIR_SEPARATOR (dir[i]));
|
gdb_assert (i >= 0 && IS_DIR_SEPARATOR (dir[i]));
|
||||||
dir[i+1] = '\0';
|
dir[i+1] = '\0';
|
||||||
|
|
||||||
@ -1297,7 +1266,7 @@
|
|||||||
|
|
||||||
/* Then try in the subdirectory named DEBUG_SUBDIRECTORY. */
|
/* Then try in the subdirectory named DEBUG_SUBDIRECTORY. */
|
||||||
strcpy (debugfile, dir);
|
strcpy (debugfile, dir);
|
||||||
@@ -1476,11 +2305,7 @@ find_separate_debug_file (struct objfile
|
@@ -1421,11 +2235,7 @@ find_separate_debug_file (struct objfile
|
||||||
strcat (debugfile, basename);
|
strcat (debugfile, basename);
|
||||||
|
|
||||||
if (separate_debug_file_exists (debugfile, crc32, objfile->name))
|
if (separate_debug_file_exists (debugfile, crc32, objfile->name))
|
||||||
@ -1310,7 +1279,7 @@
|
|||||||
|
|
||||||
/* Then try in the global debugfile directory. */
|
/* Then try in the global debugfile directory. */
|
||||||
strcpy (debugfile, debug_file_directory);
|
strcpy (debugfile, debug_file_directory);
|
||||||
@@ -1489,11 +2314,7 @@ find_separate_debug_file (struct objfile
|
@@ -1434,11 +2244,7 @@ find_separate_debug_file (struct objfile
|
||||||
strcat (debugfile, basename);
|
strcat (debugfile, basename);
|
||||||
|
|
||||||
if (separate_debug_file_exists (debugfile, crc32, objfile->name))
|
if (separate_debug_file_exists (debugfile, crc32, objfile->name))
|
||||||
@ -1323,7 +1292,7 @@
|
|||||||
|
|
||||||
/* If the file is in the sysroot, try using its base path in the
|
/* If the file is in the sysroot, try using its base path in the
|
||||||
global debugfile directory. */
|
global debugfile directory. */
|
||||||
@@ -1508,20 +2329,18 @@ find_separate_debug_file (struct objfile
|
@@ -1453,20 +2259,18 @@ find_separate_debug_file (struct objfile
|
||||||
strcat (debugfile, basename);
|
strcat (debugfile, basename);
|
||||||
|
|
||||||
if (separate_debug_file_exists (debugfile, crc32, objfile->name))
|
if (separate_debug_file_exists (debugfile, crc32, objfile->name))
|
||||||
@ -1352,10 +1321,10 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -4208,4 +5027,16 @@ the global debug-file directory prepende
|
@@ -4196,4 +5000,16 @@ Show printing of symbol loading messages
|
||||||
NULL,
|
NULL,
|
||||||
show_debug_file_directory,
|
NULL,
|
||||||
&setlist, &showlist);
|
&setprintlist, &showprintlist);
|
||||||
+
|
+
|
||||||
+ add_setshow_zinteger_cmd ("build-id-verbose", no_class, &build_id_verbose,
|
+ add_setshow_zinteger_cmd ("build-id-verbose", no_class, &build_id_verbose,
|
||||||
+ _("\
|
+ _("\
|
||||||
@ -1369,9 +1338,11 @@
|
|||||||
+
|
+
|
||||||
+ observer_attach_executable_changed (debug_print_executable_changed);
|
+ observer_attach_executable_changed (debug_print_executable_changed);
|
||||||
}
|
}
|
||||||
--- ./gdb/symfile.h 2008-02-03 23:13:29.000000000 +0100
|
Index: gdb-6.8.50.20081128/gdb/symfile.h
|
||||||
+++ ./gdb/symfile.h 2008-08-21 00:28:43.000000000 +0200
|
===================================================================
|
||||||
@@ -358,6 +358,14 @@ extern int symfile_map_offsets_to_segmen
|
--- gdb-6.8.50.20081128.orig/gdb/symfile.h 2008-09-05 13:37:17.000000000 +0200
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/symfile.h 2008-12-04 10:34:31.000000000 +0100
|
||||||
|
@@ -365,6 +365,14 @@ extern int symfile_map_offsets_to_segmen
|
||||||
struct symfile_segment_data *get_symfile_segment_data (bfd *abfd);
|
struct symfile_segment_data *get_symfile_segment_data (bfd *abfd);
|
||||||
void free_symfile_segment_data (struct symfile_segment_data *data);
|
void free_symfile_segment_data (struct symfile_segment_data *data);
|
||||||
|
|
||||||
@ -1386,9 +1357,11 @@
|
|||||||
/* From dwarf2read.c */
|
/* From dwarf2read.c */
|
||||||
|
|
||||||
extern int dwarf2_has_info (struct objfile *);
|
extern int dwarf2_has_info (struct objfile *);
|
||||||
--- ./gdb/testsuite/lib/gdb.exp 2008-08-21 00:29:46.000000000 +0200
|
Index: gdb-6.8.50.20081128/gdb/testsuite/lib/gdb.exp
|
||||||
+++ ./gdb/testsuite/lib/gdb.exp 2008-08-21 00:28:43.000000000 +0200
|
===================================================================
|
||||||
@@ -1199,6 +1199,16 @@ proc default_gdb_start { } {
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/lib/gdb.exp 2008-12-04 01:33:56.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/lib/gdb.exp 2008-12-04 10:34:31.000000000 +0100
|
||||||
|
@@ -1227,6 +1227,16 @@ proc default_gdb_start { } {
|
||||||
warning "Couldn't set the width to 0."
|
warning "Couldn't set the width to 0."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1405,8 +1378,10 @@
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
--- ./gdb/tui/tui-interp.c 2008-01-01 23:53:22.000000000 +0100
|
Index: gdb-6.8.50.20081128/gdb/tui/tui-interp.c
|
||||||
+++ ./gdb/tui/tui-interp.c 2008-08-21 00:28:43.000000000 +0200
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/tui/tui-interp.c 2008-03-14 20:55:51.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/tui/tui-interp.c 2008-12-04 10:34:31.000000000 +0100
|
||||||
@@ -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"
|
||||||
|
@ -3,10 +3,11 @@
|
|||||||
Suppress messages `(no debugging symbols found)' on the commandline
|
Suppress messages `(no debugging symbols found)' on the commandline
|
||||||
option -readnever.
|
option -readnever.
|
||||||
|
|
||||||
diff -u -X /home/jkratoch/.diffi.list -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gdb/symfile.c
|
Index: gdb-6.8.50.20081128/gdb/symfile.c
|
||||||
--- gdb-6.6-orig/gdb/symfile.c 2008-01-12 22:10:40.000000000 +0100
|
===================================================================
|
||||||
+++ gdb-6.6/gdb/symfile.c 2008-01-22 02:15:46.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/symfile.c 2008-12-02 23:39:09.000000000 +0100
|
||||||
@@ -996,8 +996,10 @@ symbol_file_add_with_addrs_or_offsets (b
|
+++ gdb-6.8.50.20081128/gdb/symfile.c 2008-12-02 23:52:23.000000000 +0100
|
||||||
|
@@ -1028,8 +1028,10 @@ symbol_file_add_with_addrs_or_offsets (b
|
||||||
|
|
||||||
/* If the file has its own symbol tables it has no separate debug info.
|
/* If the file has its own symbol tables it has no separate debug info.
|
||||||
`.dynsym'/`.symtab' go to MSYMBOLS, `.debug_info' goes to SYMTABS/PSYMTABS.
|
`.dynsym'/`.symtab' go to MSYMBOLS, `.debug_info' goes to SYMTABS/PSYMTABS.
|
||||||
@ -19,17 +20,16 @@ diff -u -X /home/jkratoch/.diffi.list -rup gdb-6.6-orig/gdb/symfile.c gdb-6.6/gd
|
|||||||
debugfile = find_separate_debug_file (objfile);
|
debugfile = find_separate_debug_file (objfile);
|
||||||
if (debugfile)
|
if (debugfile)
|
||||||
{
|
{
|
||||||
@@ -1021,7 +1023,8 @@ symbol_file_add_with_addrs_or_offsets (b
|
@@ -1054,7 +1056,7 @@ symbol_file_add_with_addrs_or_offsets (b
|
||||||
xfree (debugfile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- if (!have_partial_symbols () && !have_full_symbols ())
|
if (!have_partial_symbols () && !have_full_symbols ()
|
||||||
+ if (!readnever_symbol_files && !have_partial_symbols ()
|
- && print_symbol_loading)
|
||||||
+ && !have_full_symbols ())
|
+ && print_symbol_loading && !readnever_symbol_files)
|
||||||
{
|
{
|
||||||
wrap_here ("");
|
wrap_here ("");
|
||||||
printf_filtered (_("(no debugging symbols found)"));
|
printf_unfiltered (_("(no debugging symbols found)"));
|
||||||
@@ -2770,7 +2959,8 @@ reread_symbols (void)
|
@@ -3239,7 +3241,8 @@ reread_symbols (void)
|
||||||
zero is OK since dbxread.c also does what it needs to do if
|
zero is OK since dbxread.c also does what it needs to do if
|
||||||
objfile->global_psymbols.size is 0. */
|
objfile->global_psymbols.size is 0. */
|
||||||
(*objfile->sf->sym_read) (objfile, 0);
|
(*objfile->sf->sym_read) (objfile, 0);
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=225783
|
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=225783
|
||||||
|
|
||||||
|
|
||||||
--- gdb-6.6-orig/gdb/Makefile.in 2007-04-08 20:49:10.000000000 +0200
|
Index: gdb-6.8.50.20081128/gdb/Makefile.in
|
||||||
+++ gdb-6.6/gdb/Makefile.in 2007-04-08 23:22:40.000000000 +0200
|
===================================================================
|
||||||
@@ -1672,17 +1672,19 @@ po/$(PACKAGE).pot: force
|
--- gdb-6.8.50.20081128.orig/gdb/Makefile.in 2008-12-02 23:06:16.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/Makefile.in 2008-12-02 23:28:02.000000000 +0100
|
||||||
|
@@ -1490,8 +1490,10 @@ po/$(PACKAGE).pot: force
|
||||||
|
|
||||||
.SUFFIXES: .y .l
|
.SUFFIXES: .y .l
|
||||||
.y.c:
|
.y.c:
|
||||||
- $(SHELL) $(YLWRAP) $< y.tab.c $@.tmp -- $(YACC) $(YFLAGS)
|
- $(SHELL) $(YLWRAP) $< y.tab.c $@.tmp -- $(YACC) $(YFLAGS)
|
||||||
- -sed -e '/extern.*malloc/d' \
|
- -sed -e '/extern.*malloc/d' \
|
||||||
+ rm -f $@ $@.tmp
|
+ rm -f $@ $@.tmp
|
||||||
@ -16,8 +18,9 @@ https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=225783
|
|||||||
-e '/extern.*realloc/d' \
|
-e '/extern.*realloc/d' \
|
||||||
-e '/extern.*free/d' \
|
-e '/extern.*free/d' \
|
||||||
-e '/include.*malloc.h/d' \
|
-e '/include.*malloc.h/d' \
|
||||||
-e 's/\([^x]\)malloc/\1xmalloc/g' \
|
@@ -1500,9 +1502,9 @@ po/$(PACKAGE).pot: force
|
||||||
-e 's/\([^x]\)realloc/\1xrealloc/g' \
|
-e 's/\([ \t;,(]\)free\([ \t]*[&(),]\)/\1xfree\2/g' \
|
||||||
|
-e 's/\([ \t;,(]\)free$$/\1xfree/g' \
|
||||||
-e '/^#line.*y.tab.c/d' \
|
-e '/^#line.*y.tab.c/d' \
|
||||||
- < $@.tmp > $@.new
|
- < $@.tmp > $@.new
|
||||||
- -rm $@.tmp
|
- -rm $@.tmp
|
||||||
|
@ -3,8 +3,10 @@
|
|||||||
* gdb.threads/atomic-seq-threaded.c,
|
* gdb.threads/atomic-seq-threaded.c,
|
||||||
gdb.threads/atomic-seq-threaded.exp: New files.
|
gdb.threads/atomic-seq-threaded.exp: New files.
|
||||||
|
|
||||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/atomic-seq-threaded.c
|
||||||
+++ ./gdb/testsuite/gdb.threads/atomic-seq-threaded.c 25 Jun 2007 20:38:21 -0000
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/atomic-seq-threaded.c 2008-12-08 22:27:01.000000000 +0100
|
||||||
@@ -0,0 +1,171 @@
|
@@ -0,0 +1,171 @@
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
+/* This testcase is part of GDB, the GNU debugger.
|
||||||
+
|
+
|
||||||
@ -177,8 +179,10 @@
|
|||||||
+
|
+
|
||||||
+ return 0; /* _exit_ */
|
+ return 0; /* _exit_ */
|
||||||
+}
|
+}
|
||||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/atomic-seq-threaded.exp
|
||||||
+++ ./gdb/testsuite/gdb.threads/atomic-seq-threaded.exp 25 Jun 2007 20:38:21 -0000
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/atomic-seq-threaded.exp 2008-12-08 22:31:01.000000000 +0100
|
||||||
@@ -0,0 +1,84 @@
|
@@ -0,0 +1,84 @@
|
||||||
+# atomic-seq-threaded.exp -- Test case for stepping over RISC atomic code seqs.
|
+# atomic-seq-threaded.exp -- Test case for stepping over RISC atomic code seqs.
|
||||||
+# This variant testcases the code for stepping another thread while skipping
|
+# This variant testcases the code for stepping another thread while skipping
|
||||||
@ -230,7 +234,7 @@
|
|||||||
+# Pass after pthread_create () without any watchpoint active.
|
+# Pass after pthread_create () without any watchpoint active.
|
||||||
+set line [gdb_get_line_number "_create_after_"]
|
+set line [gdb_get_line_number "_create_after_"]
|
||||||
+gdb_test "tbreak $line" \
|
+gdb_test "tbreak $line" \
|
||||||
+ "Breakpoint (\[0-9\]+) at .*$srcfile, line $line\..*" \
|
+ "reakpoint (\[0-9\]+) at .*$srcfile, line $line\..*" \
|
||||||
+ "set breakpoint after pthread_create ()"
|
+ "set breakpoint after pthread_create ()"
|
||||||
+gdb_test "c" \
|
+gdb_test "c" \
|
||||||
+ ".*/\\* _create_after_ \\*/.*" \
|
+ ".*/\\* _create_after_ \\*/.*" \
|
||||||
@ -254,7 +258,7 @@
|
|||||||
+# Critical code path is stepped through at this point.
|
+# Critical code path is stepped through at this point.
|
||||||
+set line [gdb_get_line_number "_exit_"]
|
+set line [gdb_get_line_number "_exit_"]
|
||||||
+gdb_test "tbreak $line" \
|
+gdb_test "tbreak $line" \
|
||||||
+ "Breakpoint \[0-9\]+ at .*$srcfile, line $line\..*" \
|
+ "reakpoint \[0-9\]+ at .*$srcfile, line $line\..*" \
|
||||||
+ "set breakpoint at _exit_"
|
+ "set breakpoint at _exit_"
|
||||||
+gdb_test "c" \
|
+gdb_test "c" \
|
||||||
+ ".*/\\* _exit_ \\*/.*" \
|
+ ".*/\\* _exit_ \\*/.*" \
|
||||||
|
@ -10,11 +10,11 @@
|
|||||||
|
|
||||||
Port to GDB-6.8pre.
|
Port to GDB-6.8pre.
|
||||||
|
|
||||||
Index: gdb-6.8cvs20080219/gdb/linux-nat.c
|
Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/linux-nat.c 2008-02-21 12:03:38.000000000 +0100
|
--- gdb-6.8.50.20081209.orig/gdb/linux-nat.c 2008-12-10 01:27:34.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/linux-nat.c 2008-02-21 12:05:01.000000000 +0100
|
+++ gdb-6.8.50.20081209/gdb/linux-nat.c 2008-12-10 01:28:14.000000000 +0100
|
||||||
@@ -1570,6 +1570,31 @@ linux_handle_extended_wait (struct lwp_i
|
@@ -1981,6 +1981,31 @@ linux_handle_extended_wait (struct lwp_i
|
||||||
_("unknown ptrace event %d"), event);
|
_("unknown ptrace event %d"), event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ Index: gdb-6.8cvs20080219/gdb/linux-nat.c
|
|||||||
/* Wait for LP to stop. Returns the wait status, or 0 if the LWP has
|
/* Wait for LP to stop. Returns the wait status, or 0 if the LWP has
|
||||||
exited. */
|
exited. */
|
||||||
|
|
||||||
@@ -1577,16 +1602,31 @@ static int
|
@@ -1988,16 +2013,31 @@ static int
|
||||||
wait_lwp (struct lwp_info *lp)
|
wait_lwp (struct lwp_info *lp)
|
||||||
{
|
{
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
@ -82,23 +82,19 @@ Index: gdb-6.8cvs20080219/gdb/linux-nat.c
|
|||||||
if (pid == -1 && errno == ECHILD)
|
if (pid == -1 && errno == ECHILD)
|
||||||
{
|
{
|
||||||
/* The thread has previously exited. We need to delete it
|
/* The thread has previously exited. We need to delete it
|
||||||
@@ -3451,10 +3491,12 @@ linux_proc_pending_signals (int pid, sig
|
@@ -4153,8 +4193,10 @@ linux_nat_xfer_osdata (struct target_ops
|
||||||
fclose (procfile);
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
+/* Transfer from the specific LWP currently set by PID of INFERIOR_PTID. */
|
+/* Transfer from the specific LWP currently set by PID of INFERIOR_PTID. */
|
||||||
+
|
+
|
||||||
static LONGEST
|
static LONGEST
|
||||||
-linux_xfer_partial (struct target_ops *ops, enum target_object object,
|
-linux_xfer_partial (struct target_ops *ops, enum target_object object,
|
||||||
- const char *annex, gdb_byte *readbuf,
|
|
||||||
- const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
|
|
||||||
+linux_xfer_partial_lwp (struct target_ops *ops, enum target_object object,
|
+linux_xfer_partial_lwp (struct target_ops *ops, enum target_object object,
|
||||||
+ const char *annex, gdb_byte *readbuf,
|
const char *annex, gdb_byte *readbuf,
|
||||||
+ const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
|
const gdb_byte *writebuf, ULONGEST offset, LONGEST len)
|
||||||
{
|
{
|
||||||
LONGEST xfer;
|
@@ -4201,6 +4243,45 @@ linux_xfer_partial (struct target_ops *o
|
||||||
|
|
||||||
@@ -3495,6 +3537,45 @@ linux_xfer_partial (struct target_ops *o
|
|
||||||
offset, len);
|
offset, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,10 +28,10 @@ http://sourceware.org/ml/gdb-patches/2008-01/msg00042.html
|
|||||||
* s390-nat.c (s390_fix_watch_points): Fix its compilation failure
|
* s390-nat.c (s390_fix_watch_points): Fix its compilation failure
|
||||||
- rename it to S390_FIX_WATCH_POINTS_LIST.
|
- rename it to S390_FIX_WATCH_POINTS_LIST.
|
||||||
|
|
||||||
Index: gdb-6.7.50.20080227/gdb/amd64-linux-nat.c
|
Index: gdb-6.8.50.20081128/gdb/amd64-linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.50.20080227.orig/gdb/amd64-linux-nat.c 2008-03-01 10:38:02.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/amd64-linux-nat.c 2008-12-07 10:09:19.000000000 +0100
|
||||||
+++ gdb-6.7.50.20080227/gdb/amd64-linux-nat.c 2008-03-01 16:33:40.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/amd64-linux-nat.c 2008-12-07 10:10:20.000000000 +0100
|
||||||
@@ -408,25 +408,43 @@ amd64_linux_dr_set (ptid_t ptid, int reg
|
@@ -408,25 +408,43 @@ amd64_linux_dr_set (ptid_t ptid, int reg
|
||||||
void
|
void
|
||||||
amd64_linux_dr_set_control (unsigned long control)
|
amd64_linux_dr_set_control (unsigned long control)
|
||||||
@ -128,7 +128,7 @@ Index: gdb-6.7.50.20080227/gdb/amd64-linux-nat.c
|
|||||||
|
|
||||||
|
|
||||||
/* This function is called by libthread_db as part of its handling of
|
/* This function is called by libthread_db as part of its handling of
|
||||||
@@ -520,6 +573,41 @@ amd64_linux_child_post_startup_inferior
|
@@ -520,6 +573,43 @@ amd64_linux_child_post_startup_inferior
|
||||||
i386_cleanup_dregs ();
|
i386_cleanup_dregs ();
|
||||||
super_post_startup_inferior (ptid);
|
super_post_startup_inferior (ptid);
|
||||||
}
|
}
|
||||||
@ -152,7 +152,9 @@ Index: gdb-6.7.50.20080227/gdb/amd64-linux-nat.c
|
|||||||
+ parent_pid = ptid_get_lwp (last_ptid);
|
+ parent_pid = ptid_get_lwp (last_ptid);
|
||||||
+ if (parent_pid == 0)
|
+ if (parent_pid == 0)
|
||||||
+ parent_pid = ptid_get_pid (last_ptid);
|
+ parent_pid = ptid_get_pid (last_ptid);
|
||||||
+ child_pid = last_status.value.related_pid;
|
+ child_pid = ptid_get_lwp (last_status.value.related_pid);
|
||||||
|
+ if (child_pid == 0)
|
||||||
|
+ child_pid = ptid_get_pid (last_status.value.related_pid);
|
||||||
+
|
+
|
||||||
+ if (! follow_child)
|
+ if (! follow_child)
|
||||||
+ {
|
+ {
|
||||||
@ -170,7 +172,7 @@ Index: gdb-6.7.50.20080227/gdb/amd64-linux-nat.c
|
|||||||
|
|
||||||
|
|
||||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||||
@@ -556,6 +644,9 @@ _initialize_amd64_linux_nat (void)
|
@@ -558,6 +648,9 @@ _initialize_amd64_linux_nat (void)
|
||||||
linux_elfcore_write_prstatus = amd64_linux_elfcore_write_prstatus;
|
linux_elfcore_write_prstatus = amd64_linux_elfcore_write_prstatus;
|
||||||
linux_elfcore_write_prfpreg = amd64_linux_elfcore_write_prfpreg;
|
linux_elfcore_write_prfpreg = amd64_linux_elfcore_write_prfpreg;
|
||||||
|
|
||||||
@ -180,24 +182,24 @@ Index: gdb-6.7.50.20080227/gdb/amd64-linux-nat.c
|
|||||||
/* Register the target. */
|
/* Register the target. */
|
||||||
linux_nat_add_target (t);
|
linux_nat_add_target (t);
|
||||||
linux_nat_set_new_thread (t, amd64_linux_new_thread);
|
linux_nat_set_new_thread (t, amd64_linux_new_thread);
|
||||||
Index: gdb-6.7.50.20080227/gdb/config/i386/nm-i386.h
|
Index: gdb-6.8.50.20081128/gdb/config/i386/nm-i386.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.50.20080227.orig/gdb/config/i386/nm-i386.h 2008-03-01 10:38:02.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/config/i386/nm-i386.h 2008-03-01 05:39:36.000000000 +0100
|
||||||
+++ gdb-6.7.50.20080227/gdb/config/i386/nm-i386.h 2008-03-01 10:50:39.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/config/i386/nm-i386.h 2008-12-07 10:09:20.000000000 +0100
|
||||||
@@ -110,6 +110,8 @@ extern int i386_stopped_by_watchpoint (v
|
@@ -120,6 +120,8 @@ extern int i386_stopped_by_watchpoint (v
|
||||||
#define target_remove_hw_breakpoint(bp_tgt) \
|
|
||||||
i386_remove_hw_breakpoint (bp_tgt)
|
#endif /* I386_WATCHPOINTS_IN_TARGET_VECTOR */
|
||||||
|
|
||||||
+extern void i386_detach_breakpoints (int detached_pid);
|
+extern void i386_detach_breakpoints (int detached_pid);
|
||||||
+
|
+
|
||||||
#endif /* I386_USE_GENERIC_WATCHPOINTS */
|
#endif /* I386_USE_GENERIC_WATCHPOINTS */
|
||||||
|
|
||||||
#endif /* NM_I386_H */
|
#endif /* NM_I386_H */
|
||||||
Index: gdb-6.7.50.20080227/gdb/i386-linux-nat.c
|
Index: gdb-6.8.50.20081128/gdb/i386-linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.50.20080227.orig/gdb/i386-linux-nat.c 2008-03-01 10:38:02.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/i386-linux-nat.c 2008-03-13 13:22:13.000000000 +0100
|
||||||
+++ gdb-6.7.50.20080227/gdb/i386-linux-nat.c 2008-03-01 16:33:40.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/i386-linux-nat.c 2008-12-07 10:09:20.000000000 +0100
|
||||||
@@ -655,21 +655,42 @@ i386_linux_dr_set_control (unsigned long
|
@@ -634,21 +634,42 @@ i386_linux_dr_set_control (unsigned long
|
||||||
ptid_t ptid;
|
ptid_t ptid;
|
||||||
|
|
||||||
i386_linux_dr[DR_CONTROL] = control;
|
i386_linux_dr[DR_CONTROL] = control;
|
||||||
@ -247,7 +249,7 @@ Index: gdb-6.7.50.20080227/gdb/i386-linux-nat.c
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -694,6 +715,41 @@ i386_linux_new_thread (ptid_t ptid)
|
@@ -673,6 +694,41 @@ i386_linux_new_thread (ptid_t ptid)
|
||||||
|
|
||||||
i386_linux_dr_set (ptid, DR_CONTROL, i386_linux_dr[DR_CONTROL]);
|
i386_linux_dr_set (ptid, DR_CONTROL, i386_linux_dr[DR_CONTROL]);
|
||||||
}
|
}
|
||||||
@ -289,7 +291,7 @@ Index: gdb-6.7.50.20080227/gdb/i386-linux-nat.c
|
|||||||
|
|
||||||
|
|
||||||
/* Called by libthread_db. Returns a pointer to the thread local
|
/* Called by libthread_db. Returns a pointer to the thread local
|
||||||
@@ -833,6 +889,40 @@ i386_linux_child_post_startup_inferior (
|
@@ -812,6 +868,40 @@ i386_linux_child_post_startup_inferior (
|
||||||
super_post_startup_inferior (ptid);
|
super_post_startup_inferior (ptid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,7 +314,7 @@ Index: gdb-6.7.50.20080227/gdb/i386-linux-nat.c
|
|||||||
+ parent_pid = ptid_get_lwp (last_ptid);
|
+ parent_pid = ptid_get_lwp (last_ptid);
|
||||||
+ if (parent_pid == 0)
|
+ if (parent_pid == 0)
|
||||||
+ parent_pid = ptid_get_pid (last_ptid);
|
+ parent_pid = ptid_get_pid (last_ptid);
|
||||||
+ child_pid = last_status.value.related_pid;
|
+ child_pid = ptid_get_pid (last_status.value.related_pid);
|
||||||
+
|
+
|
||||||
+ if (! follow_child)
|
+ if (! follow_child)
|
||||||
+ {
|
+ {
|
||||||
@ -330,7 +332,7 @@ Index: gdb-6.7.50.20080227/gdb/i386-linux-nat.c
|
|||||||
void
|
void
|
||||||
_initialize_i386_linux_nat (void)
|
_initialize_i386_linux_nat (void)
|
||||||
{
|
{
|
||||||
@@ -852,6 +942,9 @@ _initialize_i386_linux_nat (void)
|
@@ -833,6 +923,9 @@ _initialize_i386_linux_nat (void)
|
||||||
t->to_fetch_registers = i386_linux_fetch_inferior_registers;
|
t->to_fetch_registers = i386_linux_fetch_inferior_registers;
|
||||||
t->to_store_registers = i386_linux_store_inferior_registers;
|
t->to_store_registers = i386_linux_store_inferior_registers;
|
||||||
|
|
||||||
@ -340,11 +342,11 @@ Index: gdb-6.7.50.20080227/gdb/i386-linux-nat.c
|
|||||||
/* Register the target. */
|
/* Register the target. */
|
||||||
linux_nat_add_target (t);
|
linux_nat_add_target (t);
|
||||||
linux_nat_set_new_thread (t, i386_linux_new_thread);
|
linux_nat_set_new_thread (t, i386_linux_new_thread);
|
||||||
Index: gdb-6.7.50.20080227/gdb/i386-nat.c
|
Index: gdb-6.8.50.20081128/gdb/i386-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.50.20080227.orig/gdb/i386-nat.c 2008-03-01 10:38:02.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/i386-nat.c 2008-03-01 05:39:36.000000000 +0100
|
||||||
+++ gdb-6.7.50.20080227/gdb/i386-nat.c 2008-03-01 10:50:39.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/i386-nat.c 2008-12-07 10:09:20.000000000 +0100
|
||||||
@@ -544,6 +544,17 @@ i386_remove_watchpoint (CORE_ADDR addr,
|
@@ -545,6 +545,17 @@ i386_remove_watchpoint (CORE_ADDR addr,
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -362,10 +364,10 @@ Index: gdb-6.7.50.20080227/gdb/i386-nat.c
|
|||||||
/* Return non-zero if we can watch a memory region that starts at
|
/* Return non-zero if we can watch a memory region that starts at
|
||||||
address ADDR and whose length is LEN bytes. */
|
address ADDR and whose length is LEN bytes. */
|
||||||
|
|
||||||
Index: gdb-6.7.50.20080227/gdb/ia64-linux-nat.c
|
Index: gdb-6.8.50.20081128/gdb/ia64-linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.50.20080227.orig/gdb/ia64-linux-nat.c 2008-03-01 10:38:02.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/ia64-linux-nat.c 2008-12-07 10:06:03.000000000 +0100
|
||||||
+++ gdb-6.7.50.20080227/gdb/ia64-linux-nat.c 2008-03-01 10:50:39.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/ia64-linux-nat.c 2008-12-07 10:09:20.000000000 +0100
|
||||||
@@ -583,6 +583,12 @@ ia64_linux_insert_watchpoint (CORE_ADDR
|
@@ -583,6 +583,12 @@ ia64_linux_insert_watchpoint (CORE_ADDR
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -437,7 +439,7 @@ Index: gdb-6.7.50.20080227/gdb/ia64-linux-nat.c
|
|||||||
+ parent_pid = ptid_get_lwp (last_ptid);
|
+ parent_pid = ptid_get_lwp (last_ptid);
|
||||||
+ if (parent_pid == 0)
|
+ if (parent_pid == 0)
|
||||||
+ parent_pid = ptid_get_pid (last_ptid);
|
+ parent_pid = ptid_get_pid (last_ptid);
|
||||||
+ child_pid = last_status.value.related_pid;
|
+ child_pid = ptid_get_pid (last_status.value.related_pid);
|
||||||
+
|
+
|
||||||
+ if (! follow_child)
|
+ if (! follow_child)
|
||||||
+ {
|
+ {
|
||||||
@ -465,11 +467,11 @@ Index: gdb-6.7.50.20080227/gdb/ia64-linux-nat.c
|
|||||||
/* Register the target. */
|
/* Register the target. */
|
||||||
linux_nat_add_target (t);
|
linux_nat_add_target (t);
|
||||||
linux_nat_set_new_thread (t, ia64_linux_new_thread);
|
linux_nat_set_new_thread (t, ia64_linux_new_thread);
|
||||||
Index: gdb-6.7.50.20080227/gdb/ppc-linux-nat.c
|
Index: gdb-6.8.50.20081128/gdb/ppc-linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.50.20080227.orig/gdb/ppc-linux-nat.c 2008-03-01 10:38:02.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/ppc-linux-nat.c 2008-11-18 22:39:47.000000000 +0100
|
||||||
+++ gdb-6.7.50.20080227/gdb/ppc-linux-nat.c 2008-03-01 10:50:39.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/ppc-linux-nat.c 2008-12-07 10:09:20.000000000 +0100
|
||||||
@@ -847,6 +847,12 @@ ppc_linux_insert_watchpoint (CORE_ADDR a
|
@@ -1118,6 +1118,12 @@ ppc_linux_insert_watchpoint (CORE_ADDR a
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -482,7 +484,7 @@ Index: gdb-6.7.50.20080227/gdb/ppc-linux-nat.c
|
|||||||
static int
|
static int
|
||||||
ppc_linux_remove_watchpoint (CORE_ADDR addr, int len, int rw)
|
ppc_linux_remove_watchpoint (CORE_ADDR addr, int len, int rw)
|
||||||
{
|
{
|
||||||
@@ -854,6 +860,11 @@ ppc_linux_remove_watchpoint (CORE_ADDR a
|
@@ -1125,6 +1131,11 @@ ppc_linux_remove_watchpoint (CORE_ADDR a
|
||||||
ptid_t ptid;
|
ptid_t ptid;
|
||||||
long dabr_value = 0;
|
long dabr_value = 0;
|
||||||
|
|
||||||
@ -494,7 +496,7 @@ Index: gdb-6.7.50.20080227/gdb/ppc-linux-nat.c
|
|||||||
saved_dabr_value = 0;
|
saved_dabr_value = 0;
|
||||||
ALL_LWPS (lp, ptid)
|
ALL_LWPS (lp, ptid)
|
||||||
if (ptrace (PTRACE_SET_DEBUGREG, TIDGET (ptid), 0, saved_dabr_value) < 0)
|
if (ptrace (PTRACE_SET_DEBUGREG, TIDGET (ptid), 0, saved_dabr_value) < 0)
|
||||||
@@ -867,6 +878,15 @@ ppc_linux_new_thread (ptid_t ptid)
|
@@ -1138,6 +1149,15 @@ ppc_linux_new_thread (ptid_t ptid)
|
||||||
ptrace (PTRACE_SET_DEBUGREG, TIDGET (ptid), 0, saved_dabr_value);
|
ptrace (PTRACE_SET_DEBUGREG, TIDGET (ptid), 0, saved_dabr_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -510,8 +512,8 @@ Index: gdb-6.7.50.20080227/gdb/ppc-linux-nat.c
|
|||||||
static int
|
static int
|
||||||
ppc_linux_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
|
ppc_linux_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
|
||||||
{
|
{
|
||||||
@@ -976,6 +996,40 @@ ppc_linux_read_description (struct targe
|
@@ -1318,6 +1338,40 @@ ppc_linux_read_description (struct targe
|
||||||
return NULL;
|
return isa205? tdesc_powerpc_isa205_32l : tdesc_powerpc_32l;
|
||||||
}
|
}
|
||||||
|
|
||||||
+static int (*ppc_linux_super_follow_fork) (struct target_ops *ops,
|
+static int (*ppc_linux_super_follow_fork) (struct target_ops *ops,
|
||||||
@ -533,7 +535,7 @@ Index: gdb-6.7.50.20080227/gdb/ppc-linux-nat.c
|
|||||||
+ parent_pid = ptid_get_lwp (last_ptid);
|
+ parent_pid = ptid_get_lwp (last_ptid);
|
||||||
+ if (parent_pid == 0)
|
+ if (parent_pid == 0)
|
||||||
+ parent_pid = ptid_get_pid (last_ptid);
|
+ parent_pid = ptid_get_pid (last_ptid);
|
||||||
+ child_pid = last_status.value.related_pid;
|
+ child_pid = ptid_get_pid (last_status.value.related_pid);
|
||||||
+
|
+
|
||||||
+ if (! follow_child)
|
+ if (! follow_child)
|
||||||
+ {
|
+ {
|
||||||
@ -551,7 +553,7 @@ Index: gdb-6.7.50.20080227/gdb/ppc-linux-nat.c
|
|||||||
void _initialize_ppc_linux_nat (void);
|
void _initialize_ppc_linux_nat (void);
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1000,6 +1054,9 @@ _initialize_ppc_linux_nat (void)
|
@@ -1343,6 +1397,9 @@ _initialize_ppc_linux_nat (void)
|
||||||
|
|
||||||
t->to_read_description = ppc_linux_read_description;
|
t->to_read_description = ppc_linux_read_description;
|
||||||
|
|
||||||
@ -561,10 +563,10 @@ Index: gdb-6.7.50.20080227/gdb/ppc-linux-nat.c
|
|||||||
/* Register the target. */
|
/* Register the target. */
|
||||||
linux_nat_add_target (t);
|
linux_nat_add_target (t);
|
||||||
linux_nat_set_new_thread (t, ppc_linux_new_thread);
|
linux_nat_set_new_thread (t, ppc_linux_new_thread);
|
||||||
Index: gdb-6.7.50.20080227/gdb/s390-nat.c
|
Index: gdb-6.8.50.20081128/gdb/s390-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.50.20080227.orig/gdb/s390-nat.c 2008-03-01 10:38:02.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/s390-nat.c 2007-11-07 07:36:57.000000000 +0100
|
||||||
+++ gdb-6.7.50.20080227/gdb/s390-nat.c 2008-03-01 10:50:39.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/s390-nat.c 2008-12-07 10:09:20.000000000 +0100
|
||||||
@@ -283,21 +283,15 @@ s390_stopped_by_watchpoint (void)
|
@@ -283,21 +283,15 @@ s390_stopped_by_watchpoint (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -642,7 +644,7 @@ Index: gdb-6.7.50.20080227/gdb/s390-nat.c
|
|||||||
for (parea = &watch_base; *parea; parea = &(*parea)->next)
|
for (parea = &watch_base; *parea; parea = &(*parea)->next)
|
||||||
if ((*parea)->lo_addr == addr
|
if ((*parea)->lo_addr == addr
|
||||||
&& (*parea)->hi_addr == addr + len - 1)
|
&& (*parea)->hi_addr == addr + len - 1)
|
||||||
@@ -378,8 +378,10 @@ s390_remove_watchpoint (CORE_ADDR addr,
|
@@ -361,8 +378,10 @@ s390_remove_watchpoint (CORE_ADDR addr,
|
||||||
|
|
||||||
if (!*parea)
|
if (!*parea)
|
||||||
{
|
{
|
||||||
@ -653,7 +655,7 @@ Index: gdb-6.7.50.20080227/gdb/s390-nat.c
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -375,6 +392,15 @@ s390_remove_watchpoint (CORE_ADDR addr,
|
@@ -375,6 +394,15 @@ s390_remove_watchpoint (CORE_ADDR addr,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -669,7 +671,7 @@ Index: gdb-6.7.50.20080227/gdb/s390-nat.c
|
|||||||
static int
|
static int
|
||||||
s390_can_use_hw_breakpoint (int type, int cnt, int othertype)
|
s390_can_use_hw_breakpoint (int type, int cnt, int othertype)
|
||||||
{
|
{
|
||||||
@@ -387,6 +413,39 @@ s390_region_ok_for_hw_watchpoint (CORE_A
|
@@ -387,6 +415,39 @@ s390_region_ok_for_hw_watchpoint (CORE_A
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -691,7 +693,7 @@ Index: gdb-6.7.50.20080227/gdb/s390-nat.c
|
|||||||
+ parent_pid = ptid_get_lwp (last_ptid);
|
+ parent_pid = ptid_get_lwp (last_ptid);
|
||||||
+ if (parent_pid == 0)
|
+ if (parent_pid == 0)
|
||||||
+ parent_pid = ptid_get_pid (last_ptid);
|
+ parent_pid = ptid_get_pid (last_ptid);
|
||||||
+ child_pid = last_status.value.related_pid;
|
+ child_pid = ptid_get_pid (last_status.value.related_pid);
|
||||||
+
|
+
|
||||||
+ if (! follow_child)
|
+ if (! follow_child)
|
||||||
+ {
|
+ {
|
||||||
@ -709,7 +711,7 @@ Index: gdb-6.7.50.20080227/gdb/s390-nat.c
|
|||||||
|
|
||||||
void _initialize_s390_nat (void);
|
void _initialize_s390_nat (void);
|
||||||
|
|
||||||
@@ -410,6 +469,9 @@ _initialize_s390_nat (void)
|
@@ -410,6 +471,9 @@ _initialize_s390_nat (void)
|
||||||
t->to_insert_watchpoint = s390_insert_watchpoint;
|
t->to_insert_watchpoint = s390_insert_watchpoint;
|
||||||
t->to_remove_watchpoint = s390_remove_watchpoint;
|
t->to_remove_watchpoint = s390_remove_watchpoint;
|
||||||
|
|
||||||
@ -719,8 +721,10 @@ Index: gdb-6.7.50.20080227/gdb/s390-nat.c
|
|||||||
/* Register the target. */
|
/* Register the target. */
|
||||||
linux_nat_add_target (t);
|
linux_nat_add_target (t);
|
||||||
linux_nat_set_new_thread (t, s390_fix_watch_points);
|
linux_nat_set_new_thread (t, s390_fix_watch_points);
|
||||||
--- /dev/null 2008-03-30 17:41:11.547000906 -0400
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/watchpoint-fork-forkoff.c
|
||||||
+++ gdb-6.8-patched/gdb/testsuite/gdb.threads/watchpoint-fork-forkoff.c 2008-03-30 18:09:25.000000000 -0400
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/watchpoint-fork-forkoff.c 2008-12-07 10:09:20.000000000 +0100
|
||||||
@@ -0,0 +1,172 @@
|
@@ -0,0 +1,172 @@
|
||||||
+/* Test case for forgotten hw-watchpoints after fork()-off of a process.
|
+/* Test case for forgotten hw-watchpoints after fork()-off of a process.
|
||||||
+
|
+
|
||||||
@ -894,10 +898,10 @@ Index: gdb-6.7.50.20080227/gdb/s390-nat.c
|
|||||||
+#else
|
+#else
|
||||||
+# error "!FOLLOW_PARENT && !FOLLOW_CHILD"
|
+# error "!FOLLOW_PARENT && !FOLLOW_CHILD"
|
||||||
+#endif
|
+#endif
|
||||||
Index: gdb-6.7.50.20080227/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.7.50.20080227/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c 2008-03-01 10:50:39.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c 2008-12-07 10:09:20.000000000 +0100
|
||||||
@@ -0,0 +1,154 @@
|
@@ -0,0 +1,154 @@
|
||||||
+/* Test case for forgotten hw-watchpoints after fork()-off of a process.
|
+/* Test case for forgotten hw-watchpoints after fork()-off of a process.
|
||||||
+
|
+
|
||||||
@ -1053,10 +1057,10 @@ Index: gdb-6.7.50.20080227/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c
|
|||||||
+
|
+
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
Index: gdb-6.7.50.20080227/gdb/testsuite/gdb.threads/watchpoint-fork.c
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/watchpoint-fork.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.7.50.20080227/gdb/testsuite/gdb.threads/watchpoint-fork.c 2008-03-01 10:50:39.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/watchpoint-fork.c 2008-12-07 10:09:20.000000000 +0100
|
||||||
@@ -0,0 +1,56 @@
|
@@ -0,0 +1,56 @@
|
||||||
+/* Test case for forgotten hw-watchpoints after fork()-off of a process.
|
+/* Test case for forgotten hw-watchpoints after fork()-off of a process.
|
||||||
+
|
+
|
||||||
@ -1114,10 +1118,10 @@ Index: gdb-6.7.50.20080227/gdb/testsuite/gdb.threads/watchpoint-fork.c
|
|||||||
+
|
+
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
Index: gdb-6.7.50.20080227/gdb/testsuite/gdb.threads/watchpoint-fork.exp
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/watchpoint-fork.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
+++ gdb-6.7.50.20080227/gdb/testsuite/gdb.threads/watchpoint-fork.exp 2008-03-01 10:50:39.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/watchpoint-fork.exp 2008-12-07 10:09:20.000000000 +0100
|
||||||
@@ -0,0 +1,140 @@
|
@@ -0,0 +1,140 @@
|
||||||
+# Copyright 2008 Free Software Foundation, Inc.
|
+# Copyright 2008 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
@ -1259,11 +1263,11 @@ Index: gdb-6.7.50.20080227/gdb/testsuite/gdb.threads/watchpoint-fork.exp
|
|||||||
+if {[istarget "*-*-linux*"]} {
|
+if {[istarget "*-*-linux*"]} {
|
||||||
+ test child FOLLOW_CHILD
|
+ test child FOLLOW_CHILD
|
||||||
+}
|
+}
|
||||||
Index: gdb-6.7.50.20080227/gdb/doc/gdb.texinfo
|
Index: gdb-6.8.50.20081128/gdb/doc/gdb.texinfo
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.50.20080227.orig/gdb/doc/gdb.texinfo 2008-03-01 10:50:39.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/doc/gdb.texinfo 2008-12-07 10:09:20.000000000 +0100
|
||||||
+++ gdb-6.7.50.20080227/gdb/doc/gdb.texinfo 2008-03-01 10:50:39.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/doc/gdb.texinfo 2008-12-07 10:10:20.000000000 +0100
|
||||||
@@ -3386,6 +3386,14 @@ confident that no other thread can becom
|
@@ -3587,6 +3587,14 @@ confident that no other thread can becom
|
||||||
software watchpoints as usual. However, @value{GDBN} may not notice
|
software watchpoints as usual. However, @value{GDBN} may not notice
|
||||||
when a non-current thread's activity changes the expression. (Hardware
|
when a non-current thread's activity changes the expression. (Hardware
|
||||||
watchpoints, in contrast, watch an expression in all threads.)
|
watchpoints, in contrast, watch an expression in all threads.)
|
||||||
@ -1278,11 +1282,11 @@ Index: gdb-6.7.50.20080227/gdb/doc/gdb.texinfo
|
|||||||
@end quotation
|
@end quotation
|
||||||
|
|
||||||
@xref{set remote hardware-watchpoint-limit}.
|
@xref{set remote hardware-watchpoint-limit}.
|
||||||
Index: gdb-6.7.50.20080227/gdb/config/i386/nm-linux.h
|
Index: gdb-6.8.50.20081128/gdb/config/i386/nm-linux.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.50.20080227.orig/gdb/config/i386/nm-linux.h 2008-03-01 10:38:02.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/config/i386/nm-linux.h 2008-03-01 05:39:36.000000000 +0100
|
||||||
+++ gdb-6.7.50.20080227/gdb/config/i386/nm-linux.h 2008-03-01 10:50:39.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/config/i386/nm-linux.h 2008-12-07 10:09:20.000000000 +0100
|
||||||
@@ -44,6 +44,17 @@ extern void i386_linux_dr_reset_addr (in
|
@@ -45,6 +45,16 @@ extern void i386_linux_dr_reset_addr (in
|
||||||
extern unsigned long i386_linux_dr_get_status (void);
|
extern unsigned long i386_linux_dr_get_status (void);
|
||||||
#define I386_DR_LOW_GET_STATUS() \
|
#define I386_DR_LOW_GET_STATUS() \
|
||||||
i386_linux_dr_get_status ()
|
i386_linux_dr_get_status ()
|
||||||
@ -1294,17 +1298,16 @@ Index: gdb-6.7.50.20080227/gdb/config/i386/nm-linux.h
|
|||||||
+
|
+
|
||||||
+/* Override basic i386 macros for watchpoint and hardware breakpoint
|
+/* Override basic i386 macros for watchpoint and hardware breakpoint
|
||||||
+ insertion/removal to support threads. */
|
+ insertion/removal to support threads. */
|
||||||
+#undef target_remove_watchpoint
|
|
||||||
+#define target_remove_watchpoint(addr, len, type) \
|
+#define target_remove_watchpoint(addr, len, type) \
|
||||||
+ i386_linux_remove_watchpoint (addr, len, type)
|
+ i386_linux_remove_watchpoint (addr, len, type)
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_PTRACE_GETFPXREGS
|
#ifdef HAVE_PTRACE_GETFPXREGS
|
||||||
Index: gdb-6.7.50.20080227/gdb/config/i386/nm-linux64.h
|
Index: gdb-6.8.50.20081128/gdb/config/i386/nm-linux64.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.7.50.20080227.orig/gdb/config/i386/nm-linux64.h 2008-03-01 10:38:02.000000000 +0100
|
--- gdb-6.8.50.20081128.orig/gdb/config/i386/nm-linux64.h 2008-03-01 05:39:36.000000000 +0100
|
||||||
+++ gdb-6.7.50.20080227/gdb/config/i386/nm-linux64.h 2008-03-01 10:50:39.000000000 +0100
|
+++ gdb-6.8.50.20081128/gdb/config/i386/nm-linux64.h 2008-12-07 10:09:20.000000000 +0100
|
||||||
@@ -50,4 +50,15 @@ extern unsigned long amd64_linux_dr_get_
|
@@ -51,4 +51,14 @@ extern unsigned long amd64_linux_dr_get_
|
||||||
#define I386_DR_LOW_GET_STATUS() \
|
#define I386_DR_LOW_GET_STATUS() \
|
||||||
amd64_linux_dr_get_status ()
|
amd64_linux_dr_get_status ()
|
||||||
|
|
||||||
@ -1315,8 +1318,21 @@ Index: gdb-6.7.50.20080227/gdb/config/i386/nm-linux64.h
|
|||||||
+
|
+
|
||||||
+/* Override basic amd64 macros for watchpoint and hardware breakpoint
|
+/* Override basic amd64 macros for watchpoint and hardware breakpoint
|
||||||
+ insertion/removal to support threads. */
|
+ insertion/removal to support threads. */
|
||||||
+#undef target_remove_watchpoint
|
|
||||||
+#define target_remove_watchpoint(addr, len, type) \
|
+#define target_remove_watchpoint(addr, len, type) \
|
||||||
+ amd64_linux_remove_watchpoint (addr, len, type)
|
+ amd64_linux_remove_watchpoint (addr, len, type)
|
||||||
+
|
+
|
||||||
#endif /* nm-linux64.h */
|
#endif /* nm-linux64.h */
|
||||||
|
Index: gdb-6.8.50.20081128/gdb/target.h
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/target.h 2008-12-07 10:09:19.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/target.h 2008-12-07 10:10:38.000000000 +0100
|
||||||
|
@@ -1123,7 +1123,9 @@ extern char *normal_pid_to_str (ptid_t p
|
||||||
|
#ifndef target_insert_watchpoint
|
||||||
|
#define target_insert_watchpoint(addr, len, type) \
|
||||||
|
(*current_target.to_insert_watchpoint) (addr, len, type)
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
+#ifndef target_remove_watchpoint
|
||||||
|
#define target_remove_watchpoint(addr, len, type) \
|
||||||
|
(*current_target.to_remove_watchpoint) (addr, len, type)
|
||||||
|
#endif
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
--- ./gdb/infrun.c 22 Jun 2007 12:47:48 -0000 1.243
|
Index: gdb-6.8.50.20081128/gdb/infrun.c
|
||||||
+++ ./gdb/infrun.c 25 Jun 2007 20:43:18 -0000
|
===================================================================
|
||||||
@@ -466,7 +467,7 @@ static const char *scheduler_enums[] = {
|
--- gdb-6.8.50.20081128.orig/gdb/infrun.c 2008-12-09 15:56:16.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/infrun.c 2008-12-09 15:56:59.000000000 +0100
|
||||||
|
@@ -931,7 +931,7 @@ static const char *scheduler_enums[] = {
|
||||||
schedlock_step,
|
schedlock_step,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
@ -9,3 +11,31 @@
|
|||||||
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.20081128/gdb/testsuite/gdb.mi/mi-console.exp
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.mi/mi-console.exp 2008-08-06 14:52:08.000000000 +0200
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.mi/mi-console.exp 2008-12-09 15:59:34.000000000 +0100
|
||||||
|
@@ -47,6 +47,9 @@ if { [gdb_compile "${srcdir}/${subdir}/
|
||||||
|
|
||||||
|
mi_run_to_main
|
||||||
|
|
||||||
|
+# thread-id=\"all\" vs. thread-id=\"1\" below:
|
||||||
|
+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
|
||||||
|
mi_gdb_test "220-exec-next" \
|
||||||
|
"220\\^running(\r\n\\*running,thread-id=\"all\")?" \
|
||||||
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.mi/mi2-console.exp
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.mi/mi2-console.exp 2008-08-06 14:52:08.000000000 +0200
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.mi/mi2-console.exp 2008-12-09 16:00:33.000000000 +0100
|
||||||
|
@@ -47,6 +47,9 @@ if { [gdb_compile "${srcdir}/${subdir}/
|
||||||
|
|
||||||
|
mi_run_to_main
|
||||||
|
|
||||||
|
+# thread-id=\"all\" vs. thread-id=\"1\" below:
|
||||||
|
+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
|
||||||
|
send_gdb "220-exec-next\n"
|
||||||
|
gdb_expect {
|
||||||
|
@ -21,11 +21,11 @@
|
|||||||
|
|
||||||
Port to GDB-6.8pre.
|
Port to GDB-6.8pre.
|
||||||
|
|
||||||
Index: gdb-6.8cvs20080219/gdb/inferior.h
|
Index: gdb-6.8.50.20081209/gdb/inferior.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/inferior.h 2008-02-14 23:03:57.000000000 +0100
|
--- gdb-6.8.50.20081209.orig/gdb/inferior.h 2008-11-20 01:35:23.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/inferior.h 2008-02-19 14:15:01.000000000 +0100
|
+++ gdb-6.8.50.20081209/gdb/inferior.h 2008-12-10 01:22:23.000000000 +0100
|
||||||
@@ -179,7 +179,15 @@ extern void reopen_exec_file (void);
|
@@ -168,7 +168,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,21 +42,20 @@ Index: gdb-6.8cvs20080219/gdb/inferior.h
|
|||||||
|
|
||||||
/* From misc files */
|
/* From misc files */
|
||||||
|
|
||||||
Index: gdb-6.8cvs20080219/gdb/infrun.c
|
Index: gdb-6.8.50.20081209/gdb/infrun.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/infrun.c 2008-02-14 23:03:57.000000000 +0100
|
--- gdb-6.8.50.20081209.orig/gdb/infrun.c 2008-12-02 20:20:23.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/infrun.c 2008-02-19 14:24:37.000000000 +0100
|
+++ gdb-6.8.50.20081209/gdb/infrun.c 2008-12-10 01:23:46.000000000 +0100
|
||||||
@@ -74,7 +74,8 @@ static void set_schedlock_func (char *ar
|
@@ -73,7 +73,7 @@ static int follow_fork (void);
|
||||||
|
static void set_schedlock_func (char *args, int from_tty,
|
||||||
|
struct cmd_list_element *c);
|
||||||
|
|
||||||
struct execution_control_state;
|
-static int currently_stepping (struct thread_info *tp);
|
||||||
|
+static enum resume_step currently_stepping (struct thread_info *tp);
|
||||||
|
|
||||||
-static int currently_stepping (struct execution_control_state *ecs);
|
static int currently_stepping_callback (struct thread_info *tp, void *data);
|
||||||
+static enum resume_step currently_stepping (struct execution_control_state
|
|
||||||
+ *ecs);
|
|
||||||
|
|
||||||
static void xdb_handle_command (char *args, int from_tty);
|
@@ -961,7 +961,7 @@ set_schedlock_func (char *args, int from
|
||||||
|
|
||||||
@@ -508,15 +509,18 @@ set_schedlock_func (char *args, int from
|
|
||||||
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
|
||||||
@ -65,50 +64,54 @@ Index: gdb-6.8cvs20080219/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);
|
||||||
|
@@ -975,10 +975,12 @@ resume (int step, enum target_signal sig
|
||||||
QUIT;
|
QUIT;
|
||||||
|
|
||||||
if (debug_infrun)
|
if (debug_infrun)
|
||||||
- fprintf_unfiltered (gdb_stdlog, "infrun: resume (step=%d, signal=%d)\n",
|
- fprintf_unfiltered (gdb_stdlog,
|
||||||
- step, sig);
|
- "infrun: resume (step=%d, signal=%d), "
|
||||||
+ fprintf_unfiltered (gdb_stdlog, "infrun: resume (step=%s, signal=%d)\n",
|
- "trap_expected=%d\n",
|
||||||
|
- step, sig, tp->trap_expected);
|
||||||
|
+ fprintf_unfiltered (gdb_stdlog, "infrun: resume (step=%s, signal=%d), "
|
||||||
|
+ "trap_expected=%d\n",
|
||||||
+ (step == RESUME_STEP_CONTINUE ? "RESUME_STEP_CONTINUE"
|
+ (step == RESUME_STEP_CONTINUE ? "RESUME_STEP_CONTINUE"
|
||||||
+ : (step == RESUME_STEP_USER ? "RESUME_STEP_USER"
|
+ : (step == RESUME_STEP_USER ? "RESUME_STEP_USER"
|
||||||
+ : "RESUME_STEP_NEEDED")),
|
+ : "RESUME_STEP_NEEDED")),
|
||||||
+ sig);
|
+ sig, tp->trap_expected);
|
||||||
|
|
||||||
/* FIXME: calling breakpoint_here_p (read_pc ()) three times! */
|
/* Some targets (e.g. Solaris x86) have a kernel bug when stepping
|
||||||
|
over an instruction that causes a page fault without triggering
|
||||||
@@ -632,9 +636,10 @@ a command like `return' or `jump' to con
|
@@ -1127,9 +1129,10 @@ a command like `return' or `jump' to con
|
||||||
|
individually. */
|
||||||
resume_ptid = inferior_ptid;
|
resume_ptid = inferior_ptid;
|
||||||
}
|
}
|
||||||
|
- else if ((scheduler_mode == schedlock_on)
|
||||||
- if ((scheduler_mode == schedlock_on)
|
+ else if (scheduler_mode == schedlock_on
|
||||||
+ if (scheduler_mode == schedlock_on
|
|| (scheduler_mode == schedlock_step
|
||||||
|| (scheduler_mode == schedlock_step
|
- && (step || singlestep_breakpoints_inserted_p)))
|
||||||
- && (step || singlestep_breakpoints_inserted_p)))
|
+ && (step == RESUME_STEP_USER
|
||||||
+ && (step == RESUME_STEP_USER
|
+ || singlestep_breakpoints_inserted_p)))
|
||||||
+ || singlestep_breakpoints_inserted_p)))
|
|
||||||
{
|
{
|
||||||
/* User-settable 'scheduler' mode requires solo thread resume. */
|
/* User-settable 'scheduler' mode requires solo thread resume. */
|
||||||
resume_ptid = inferior_ptid;
|
resume_ptid = inferior_ptid;
|
||||||
@@ -742,7 +747,7 @@ static CORE_ADDR prev_pc;
|
@@ -1302,7 +1305,7 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||||
void
|
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
||||||
proceed (CORE_ADDR addr, enum target_signal siggnal, int step)
|
struct thread_info *tp;
|
||||||
{
|
CORE_ADDR pc = regcache_read_pc (regcache);
|
||||||
- int oneproc = 0;
|
- int oneproc = 0;
|
||||||
+ enum resume_step resume_step = RESUME_STEP_CONTINUE;
|
+ enum resume_step resume_step = RESUME_STEP_CONTINUE;
|
||||||
|
|
||||||
if (step > 0)
|
if (step > 0)
|
||||||
step_start_function = find_pc_function (read_pc ());
|
step_start_function = find_pc_function (pc);
|
||||||
@@ -756,13 +761,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
@@ -1322,13 +1325,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||||
step one instruction before inserting breakpoints so that
|
actually be executing the breakpoint insn anyway.
|
||||||
we do not stop right away (and report a second hit at this
|
We'll be (un-)executing the previous instruction. */
|
||||||
breakpoint). */
|
|
||||||
- oneproc = 1;
|
- oneproc = 1;
|
||||||
+ resume_step = RESUME_STEP_USER;
|
+ resume_step = RESUME_STEP_USER;
|
||||||
else if (gdbarch_single_step_through_delay_p (current_gdbarch)
|
else if (gdbarch_single_step_through_delay_p (gdbarch)
|
||||||
&& gdbarch_single_step_through_delay (current_gdbarch,
|
&& gdbarch_single_step_through_delay (gdbarch,
|
||||||
get_current_frame ()))
|
get_current_frame ()))
|
||||||
/* We stepped onto an instruction that needs to be stepped
|
/* We stepped onto an instruction that needs to be stepped
|
||||||
again before re-inserting the breakpoint, do so. */
|
again before re-inserting the breakpoint, do so. */
|
||||||
- oneproc = 1;
|
- oneproc = 1;
|
||||||
@ -116,21 +119,25 @@ Index: gdb-6.8cvs20080219/gdb/infrun.c
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -786,9 +791,9 @@ proceed (CORE_ADDR addr, enum target_sig
|
@@ -1359,13 +1362,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||||
that reported the most recent event. If a step-over is required
|
is required it returns TRUE and sets the current thread to
|
||||||
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))
|
||||||
- oneproc = 1;
|
- oneproc = 1;
|
||||||
+ resume_step = RESUME_STEP_USER;
|
+ resume_step = RESUME_STEP_USER;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* prepare_to_proceed may change the current thread. */
|
||||||
|
tp = inferior_thread ();
|
||||||
|
|
||||||
- if (oneproc)
|
- if (oneproc)
|
||||||
+ if (resume_step == RESUME_STEP_USER)
|
+ if (resume_step == RESUME_STEP_USER)
|
||||||
/* We will get a trace trap after one instruction.
|
{
|
||||||
Continue it automatically and insert breakpoints then. */
|
tp->trap_expected = 1;
|
||||||
stepping_over_breakpoint = 1;
|
/* If displaced stepping is enabled, we can step over the
|
||||||
@@ -832,8 +837,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
@@ -1451,8 +1454,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||||
updated correctly when the inferior is stopped. */
|
/* Reset to normal state. */
|
||||||
prev_pc = read_pc ();
|
init_infwait_state ();
|
||||||
|
|
||||||
+ if (step)
|
+ if (step)
|
||||||
+ resume_step = RESUME_STEP_USER;
|
+ resume_step = RESUME_STEP_USER;
|
||||||
@ -138,30 +145,21 @@ Index: gdb-6.8cvs20080219/gdb/infrun.c
|
|||||||
+ resume_step = RESUME_STEP_NEEDED;
|
+ resume_step = RESUME_STEP_NEEDED;
|
||||||
+
|
+
|
||||||
/* Resume inferior. */
|
/* Resume inferior. */
|
||||||
- resume (oneproc || step || bpstat_should_step (), stop_signal);
|
- resume (oneproc || step || bpstat_should_step (), tp->stop_signal);
|
||||||
+ resume (resume_step, stop_signal);
|
+ resume (resume_step, tp->stop_signal);
|
||||||
|
|
||||||
/* 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. */
|
||||||
@@ -2723,14 +2733,21 @@ process_event_stop_test:
|
@@ -3690,10 +3698,16 @@ currently_stepping_callback (struct thre
|
||||||
|
return tp != data && currently_stepping_thread (tp);
|
||||||
/* Are we in the middle of stepping? */
|
}
|
||||||
|
|
||||||
-static int
|
-static int
|
||||||
+static enum resume_step
|
+static enum resume_step
|
||||||
currently_stepping (struct execution_control_state *ecs)
|
currently_stepping (struct thread_info *tp)
|
||||||
{
|
{
|
||||||
- return ((!ecs->handling_longjmp
|
- return currently_stepping_thread (tp) || bpstat_should_step ();
|
||||||
- && ((step_range_end && step_resume_breakpoint == NULL)
|
+ if (currently_stepping_thread (tp))
|
||||||
- || stepping_over_breakpoint))
|
|
||||||
- || ecs->stepping_through_solib_after_catch
|
|
||||||
- || bpstat_should_step ());
|
|
||||||
+ if (!ecs->handling_longjmp
|
|
||||||
+ && ((step_range_end && step_resume_breakpoint == NULL)
|
|
||||||
+ || stepping_over_breakpoint))
|
|
||||||
+ return RESUME_STEP_USER;
|
|
||||||
+
|
|
||||||
+ if (ecs->stepping_through_solib_after_catch)
|
|
||||||
+ return RESUME_STEP_USER;
|
+ return RESUME_STEP_USER;
|
||||||
+
|
+
|
||||||
+ if (bpstat_should_step ())
|
+ if (bpstat_should_step ())
|
||||||
@ -170,12 +168,12 @@ Index: gdb-6.8cvs20080219/gdb/infrun.c
|
|||||||
+ return RESUME_STEP_CONTINUE;
|
+ return RESUME_STEP_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Subroutine call with source code we should not step over. Do step
|
/* Inferior has stepped into a subroutine call with source code that
|
||||||
Index: gdb-6.8cvs20080219/gdb/linux-nat.c
|
Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/linux-nat.c 2008-02-14 23:03:57.000000000 +0100
|
--- gdb-6.8.50.20081209.orig/gdb/linux-nat.c 2008-12-02 08:57:36.000000000 +0100
|
||||||
+++ gdb-6.8cvs20080219/gdb/linux-nat.c 2008-02-19 14:15:01.000000000 +0100
|
+++ gdb-6.8.50.20081209/gdb/linux-nat.c 2008-12-10 01:22:23.000000000 +0100
|
||||||
@@ -1751,7 +1751,10 @@ count_events_callback (struct lwp_info *
|
@@ -2343,7 +2343,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)
|
||||||
{
|
{
|
||||||
@ -187,10 +185,10 @@ Index: gdb-6.8cvs20080219/gdb/linux-nat.c
|
|||||||
return 1;
|
return 1;
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
Index: gdb-6.8cvs20080219/gdb/linux-nat.h
|
Index: gdb-6.8.50.20081209/gdb/linux-nat.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8cvs20080219.orig/gdb/linux-nat.h 2008-02-14 23:03:58.000000000 +0100
|
--- gdb-6.8.50.20081209.orig/gdb/linux-nat.h 2008-07-27 23:12:40.000000000 +0200
|
||||||
+++ gdb-6.8cvs20080219/gdb/linux-nat.h 2008-02-19 14:15:01.000000000 +0100
|
+++ gdb-6.8.50.20081209/gdb/linux-nat.h 2008-12-10 01:22:23.000000000 +0100
|
||||||
@@ -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,7 +1,8 @@
|
|||||||
diff -up -rup gdb-6.8-clean/gdb/linux-nat.c gdb-6.8-new/gdb/linux-nat.c
|
Index: gdb-6.8.50.20081128/gdb/linux-nat.c
|
||||||
--- gdb-6.8-clean/gdb/linux-nat.c 2008-08-26 00:04:08.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-6.8-new/gdb/linux-nat.c 2008-08-26 00:04:50.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/linux-nat.c 2008-12-04 01:44:26.000000000 +0100
|
||||||
@@ -1083,15 +1083,17 @@ resume_set_callback (struct lwp_info *lp
|
+++ gdb-6.8.50.20081128/gdb/linux-nat.c 2008-12-04 10:21:32.000000000 +0100
|
||||||
|
@@ -1661,15 +1661,17 @@ resume_set_callback (struct lwp_info *lp
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -21,56 +22,40 @@ diff -up -rup gdb-6.8-clean/gdb/linux-nat.c gdb-6.8-new/gdb/linux-nat.c
|
|||||||
target_pid_to_str (ptid),
|
target_pid_to_str (ptid),
|
||||||
signo ? strsignal (signo) : "0",
|
signo ? strsignal (signo) : "0",
|
||||||
target_pid_to_str (inferior_ptid));
|
target_pid_to_str (inferior_ptid));
|
||||||
@@ -2076,6 +2078,9 @@ retry:
|
@@ -2586,6 +2588,9 @@ linux_nat_filter_event (int lwpid, int s
|
||||||
/* Check if the thread has exited. */
|
/* Check if the thread has exited. */
|
||||||
if ((WIFEXITED (status) || WIFSIGNALED (status)) && num_lwps > 1)
|
if ((WIFEXITED (status) || WIFSIGNALED (status)) && num_lwps > 1)
|
||||||
{
|
{
|
||||||
+ enum resume_step step = lp->step;
|
+ enum resume_step step = lp->step;
|
||||||
+ pid_t pid = GET_PID (lp->ptid);
|
+ pid_t pid = GET_PID (lp->ptid);
|
||||||
+
|
+
|
||||||
/* If this is the main thread, we must stop all threads and
|
/* If this is the main thread, we must stop all threads and
|
||||||
verify if they are still alive. This is because in the nptl
|
verify if they are still alive. This is because in the nptl
|
||||||
thread model, there is no signal issued for exiting LWPs
|
thread model, there is no signal issued for exiting LWPs
|
||||||
@@ -2096,6 +2101,10 @@ retry:
|
@@ -2609,6 +2614,26 @@ linux_nat_filter_event (int lwpid, int s
|
||||||
fprintf_unfiltered (gdb_stdlog,
|
|
||||||
"LLW: %s exited.\n",
|
|
||||||
target_pid_to_str (lp->ptid));
|
|
||||||
+ /* Backward compatibility with:
|
|
||||||
+ gdb-6.3-step-thread-exit-20050211.patch */
|
|
||||||
+ if (step == RESUME_STEP_USER)
|
|
||||||
+ printf_unfiltered ("[Stepped over thread exit]\n");
|
|
||||||
|
|
||||||
exit_lwp (lp);
|
exit_lwp (lp);
|
||||||
|
|
||||||
@@ -2104,8 +2113,29 @@ retry:
|
+ if (step == RESUME_STEP_USER)
|
||||||
ignored. */
|
+ {
|
||||||
if (num_lwps > 0)
|
+ /* Now stop the closest LWP's ... */
|
||||||
{
|
+ lp = find_lwp_pid (pid_to_ptid (pid));
|
||||||
- /* Make sure there is at least one thread running. */
|
+ if (!lp)
|
||||||
- gdb_assert (iterate_over_lwps (running_callback, NULL));
|
+ lp = lwp_list;
|
||||||
+ if (step == RESUME_STEP_USER)
|
+ gdb_assert (lp != NULL);
|
||||||
+ {
|
+ errno = 0;
|
||||||
+ /* Now stop the closest LWP's ... */
|
+ ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0,
|
||||||
+ lp = find_lwp_pid (pid_to_ptid (pid));
|
+ (void *) (unsigned long) SIGSTOP);
|
||||||
+ if (!lp)
|
+ if (debug_linux_nat)
|
||||||
+ lp = lwp_list;
|
+ fprintf_unfiltered (gdb_stdlog,
|
||||||
+ errno = 0;
|
+ "PTRACE_CONT %s, 0, 0 (%s)\n",
|
||||||
+ ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0,
|
+ target_pid_to_str (lp->ptid),
|
||||||
+ (void *) (unsigned long) SIGSTOP);
|
+ errno ? safe_strerror (errno)
|
||||||
+ if (debug_linux_nat)
|
+ : "OK");
|
||||||
+ fprintf_unfiltered (gdb_stdlog,
|
+ /* Avoid the silent `delayed SIGSTOP' handling. */
|
||||||
+ "PTRACE_CONT %s, 0, 0 (%s)\n",
|
+ lp->signalled = 0;
|
||||||
+ target_pid_to_str (lp->ptid),
|
+ }
|
||||||
+ errno ? safe_strerror (errno)
|
+
|
||||||
+ : "OK");
|
/* If there is at least one more LWP, then the exit signal was
|
||||||
+ /* Avoid the silent `delayed SIGSTOP' handling. */
|
not the end of the debugged application and should be
|
||||||
+ lp->signalled = 0;
|
ignored. */
|
||||||
+ }
|
|
||||||
+ else
|
|
||||||
+ {
|
|
||||||
+ /* Make sure there is at least one thread running. */
|
|
||||||
+ gdb_assert (iterate_over_lwps (running_callback, NULL));
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/* Discard the event. */
|
|
||||||
status = 0;
|
|
||||||
|
@ -1,114 +0,0 @@
|
|||||||
Fix i386-on-x86_64 debugging giving the warning:
|
|
||||||
warning: Lowest section in system-supplied DSO at 0xffffe000 is .hash at ffffe0b4
|
|
||||||
|
|
||||||
[base]
|
|
||||||
|
|
||||||
2007-10-16 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
Port to GDB-6.7.
|
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/symfile.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.orig/gdb/symfile.c 2008-07-14 10:28:15.000000000 +0200
|
|
||||||
+++ gdb-6.8/gdb/symfile.c 2008-07-14 10:28:21.000000000 +0200
|
|
||||||
@@ -715,6 +715,38 @@ default_symfile_segments (bfd *abfd)
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Find lowest loadable section to be used as starting point for continguous
|
|
||||||
+ sections. FIXME!! won't work without call to find .text first, but this
|
|
||||||
+ assumes text is lowest section. vDSO was seen for i386-on-amd64 processes
|
|
||||||
+ to have no `.text' as it has `.text.vsyscall', `.text.sigreturn' etc.
|
|
||||||
+ instead. Execution of this function has been delayed till it is really
|
|
||||||
+ needed as it is broken for vDSOs, fortunately it is never needed on
|
|
||||||
+ GNU/Linux. */
|
|
||||||
+
|
|
||||||
+static CORE_ADDR
|
|
||||||
+find_lower_offset (struct objfile *objfile)
|
|
||||||
+{
|
|
||||||
+ asection *lower_sect;
|
|
||||||
+
|
|
||||||
+ lower_sect = bfd_get_section_by_name (objfile->obfd, ".text");
|
|
||||||
+ if (lower_sect == NULL)
|
|
||||||
+ bfd_map_over_sections (objfile->obfd, find_lowest_section,
|
|
||||||
+ &lower_sect);
|
|
||||||
+ if (lower_sect == NULL)
|
|
||||||
+ warning (_("no loadable sections found in added symbol-file %s"),
|
|
||||||
+ objfile->name);
|
|
||||||
+ else
|
|
||||||
+ if ((bfd_get_section_flags (objfile->obfd, lower_sect) & SEC_CODE) == 0)
|
|
||||||
+ warning (_("Lowest section in %s is %s at %s"),
|
|
||||||
+ objfile->name,
|
|
||||||
+ bfd_section_name (objfile->obfd, lower_sect),
|
|
||||||
+ paddr (bfd_section_vma (objfile->obfd, lower_sect)));
|
|
||||||
+ if (lower_sect != NULL)
|
|
||||||
+ return bfd_section_vma (objfile->obfd, lower_sect);
|
|
||||||
+ else
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* Process a symbol file, as either the main file or as a dynamically
|
|
||||||
loaded file.
|
|
||||||
|
|
||||||
@@ -813,32 +845,11 @@ syms_from_objfile (struct objfile *objfi
|
|
||||||
happens for the PA64 port. */
|
|
||||||
if (!mainline && addrs && addrs->other[0].name)
|
|
||||||
{
|
|
||||||
- asection *lower_sect;
|
|
||||||
asection *sect;
|
|
||||||
- CORE_ADDR lower_offset;
|
|
||||||
+ CORE_ADDR lower_offset = 0; /* Shut up the GCC warning. */
|
|
||||||
+ int lower_offset_set = 0;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
- /* Find lowest loadable section to be used as starting point for
|
|
||||||
- continguous sections. FIXME!! won't work without call to find
|
|
||||||
- .text first, but this assumes text is lowest section. */
|
|
||||||
- lower_sect = bfd_get_section_by_name (objfile->obfd, ".text");
|
|
||||||
- if (lower_sect == NULL)
|
|
||||||
- bfd_map_over_sections (objfile->obfd, find_lowest_section,
|
|
||||||
- &lower_sect);
|
|
||||||
- if (lower_sect == NULL)
|
|
||||||
- warning (_("no loadable sections found in added symbol-file %s"),
|
|
||||||
- objfile->name);
|
|
||||||
- else
|
|
||||||
- if ((bfd_get_section_flags (objfile->obfd, lower_sect) & SEC_CODE) == 0)
|
|
||||||
- warning (_("Lowest section in %s is %s at %s"),
|
|
||||||
- objfile->name,
|
|
||||||
- bfd_section_name (objfile->obfd, lower_sect),
|
|
||||||
- paddr (bfd_section_vma (objfile->obfd, lower_sect)));
|
|
||||||
- if (lower_sect != NULL)
|
|
||||||
- lower_offset = bfd_section_vma (objfile->obfd, lower_sect);
|
|
||||||
- else
|
|
||||||
- lower_offset = 0;
|
|
||||||
-
|
|
||||||
/* Calculate offsets for the loadable sections.
|
|
||||||
FIXME! Sections must be in order of increasing loadable section
|
|
||||||
so that contiguous sections can use the lower-offset!!!
|
|
||||||
@@ -860,6 +871,7 @@ syms_from_objfile (struct objfile *objfi
|
|
||||||
addrs->other[i].addr
|
|
||||||
-= bfd_section_vma (objfile->obfd, sect);
|
|
||||||
lower_offset = addrs->other[i].addr;
|
|
||||||
+ lower_offset_set = 1;
|
|
||||||
/* This is the index used by BFD. */
|
|
||||||
addrs->other[i].sectindex = sect->index ;
|
|
||||||
}
|
|
||||||
@@ -872,7 +884,17 @@ syms_from_objfile (struct objfile *objfi
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
- addrs->other[i].addr = lower_offset;
|
|
||||||
+ {
|
|
||||||
+ /* Delay finding LOWER_OFFSET only if it is needed. Otherwise
|
|
||||||
+ we would print a warning to detect a values never used. */
|
|
||||||
+ if (!lower_offset_set)
|
|
||||||
+ {
|
|
||||||
+ lower_offset = find_lower_offset (objfile);
|
|
||||||
+ lower_offset_set = 1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ addrs->other[i].addr = lower_offset;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,38 +0,0 @@
|
|||||||
2007-10-29 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* symfile.c (reread_symbols): Reread also EXEC_BFD if changed.
|
|
||||||
|
|
||||||
2008-04-11 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* symfile.c (reread_symbols): Reload whole EXEC_BFD by the EXEC module
|
|
||||||
as its in-place patching did cause regressions.
|
|
||||||
|
|
||||||
Testcase: Regressed by the gdb-6.7 version of `gdb-6.3-pie-20050110.patch':
|
|
||||||
Running ../../../gdb/testsuite/gdb.base/reread.exp ...
|
|
||||||
PASS: gdb.base/reread.exp: breakpoint foo in first file (PRMS 13484)
|
|
||||||
PASS: gdb.base/reread.exp: run to foo() (PRMS 13484)
|
|
||||||
-PASS: gdb.base/reread.exp: run to foo() second time
|
|
||||||
+FAIL: gdb.base/reread.exp: run to foo() second time
|
|
||||||
PASS: gdb.base/reread.exp: second pass: breakpoint foo in first file
|
|
||||||
-PASS: gdb.base/reread.exp: second pass: run to foo()
|
|
||||||
-PASS: gdb.base/reread.exp: second pass: continue to completion
|
|
||||||
-PASS: gdb.base/reread.exp: second pass: run to foo() second time
|
|
||||||
+FAIL: gdb.base/reread.exp: second pass: run to foo()
|
|
||||||
+FAIL: gdb.base/reread.exp: second pass: continue to completion
|
|
||||||
+FAIL: gdb.base/reread.exp: second pass: run to foo() second time
|
|
||||||
|
|
||||||
--- gdb-6.7-orig/gdb/symfile.c 2007-10-29 01:04:35.000000000 +0100
|
|
||||||
+++ gdb-6.7-patched/gdb/symfile.c 2007-10-29 01:03:13.000000000 +0100
|
|
||||||
@@ -2810,6 +2810,12 @@ reread_symbols (void)
|
|
||||||
/* We need to do this whenever any symbols go away. */
|
|
||||||
make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/);
|
|
||||||
|
|
||||||
+ if (exec_bfd != NULL && strcmp (bfd_get_filename (objfile->obfd),
|
|
||||||
+ bfd_get_filename (exec_bfd)) == 0)
|
|
||||||
+ {
|
|
||||||
+ exec_ops.to_open (bfd_get_filename (objfile->obfd), 0);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* Clean up any state BFD has sitting around. We don't need
|
|
||||||
to close the descriptor but BFD lacks a way of closing the
|
|
||||||
BFD without closing the descriptor. */
|
|
@ -91,39 +91,6 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
2008-04-21 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* ada-lang.c (get_selections): Variable PROMPT made non-const and
|
|
||||||
initialized with a trailing space now. Use PROMPT_ARG of
|
|
||||||
COMMAND_LINE_INPUT instead of printing it ourselves.
|
|
||||||
|
|
||||||
--- ./gdb/ada-lang.c 6 Apr 2008 08:56:36 -0000 1.137
|
|
||||||
+++ ./gdb/ada-lang.c 21 Apr 2008 13:33:42 -0000
|
|
||||||
@@ -3424,18 +3424,15 @@ get_selections (int *choices, int n_choi
|
|
||||||
int is_all_choice, char *annotation_suffix)
|
|
||||||
{
|
|
||||||
char *args;
|
|
||||||
- const char *prompt;
|
|
||||||
+ char *prompt;
|
|
||||||
int n_chosen;
|
|
||||||
int first_choice = is_all_choice ? 2 : 1;
|
|
||||||
|
|
||||||
prompt = getenv ("PS2");
|
|
||||||
if (prompt == NULL)
|
|
||||||
- prompt = ">";
|
|
||||||
+ prompt = "> ";
|
|
||||||
|
|
||||||
- printf_unfiltered (("%s "), prompt);
|
|
||||||
- gdb_flush (gdb_stdout);
|
|
||||||
-
|
|
||||||
- args = command_line_input ((char *) NULL, 0, annotation_suffix);
|
|
||||||
+ args = command_line_input (prompt, 0, annotation_suffix);
|
|
||||||
|
|
||||||
if (args == NULL)
|
|
||||||
error_no_arg (_("one or more choice numbers"));
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Found on RHEL-5.s390x.
|
Found on RHEL-5.s390x.
|
||||||
|
|
||||||
--- sources/gdb/testsuite/gdb.base/dump.exp-orig 2008-08-28 11:44:40.000000000 +0200
|
--- sources/gdb/testsuite/gdb.base/dump.exp-orig 2008-08-28 11:44:40.000000000 +0200
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/linux-nat.c gdb-6.8/gdb/linux-nat.c
|
Index: gdb-6.8.50.20081128/gdb/linux-nat.c
|
||||||
--- gdb-6.8-base/gdb/linux-nat.c 2008-08-27 18:09:35.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-6.8/gdb/linux-nat.c 2008-08-27 18:48:40.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/linux-nat.c 2008-12-06 21:48:18.000000000 +0100
|
||||||
@@ -117,6 +117,9 @@
|
+++ gdb-6.8.50.20081128/gdb/linux-nat.c 2008-12-06 22:00:42.000000000 +0100
|
||||||
|
@@ -199,6 +199,9 @@ blocked. */
|
||||||
static struct target_ops *linux_ops;
|
static struct target_ops *linux_ops;
|
||||||
static struct target_ops linux_ops_saved;
|
static struct target_ops linux_ops_saved;
|
||||||
|
|
||||||
@ -11,19 +12,23 @@ diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/linux-nat.c gdb
|
|||||||
/* The method to call, if any, when a new thread is attached. */
|
/* The method to call, if any, when a new thread is attached. */
|
||||||
static void (*linux_nat_new_thread) (ptid_t);
|
static void (*linux_nat_new_thread) (ptid_t);
|
||||||
|
|
||||||
@@ -531,6 +534,11 @@ linux_child_follow_fork (struct target_o
|
@@ -871,7 +874,14 @@ linux_child_follow_fork (struct target_o
|
||||||
|
fork_save_infrun_state (fp, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
- target_detach (NULL, 0);
|
||||||
+ /* We should check PID_WAS_STOPPED and detach it stopped accordingly.
|
+ {
|
||||||
+ In this point of code it cannot be 1 as we would not get FORK
|
+ /* We should check PID_WAS_STOPPED and detach it stopped accordingly.
|
||||||
+ executed without CONTINUE first which resets PID_WAS_STOPPED.
|
+ In this point of code it cannot be 1 as we would not get FORK
|
||||||
+ We would have to first TARGET_STOP and WAITPID it as with running
|
+ executed without CONTINUE first which resets PID_WAS_STOPPED.
|
||||||
+ inferior PTRACE_DETACH, SIGSTOP will ignore the signal. */
|
+ We would have to first TARGET_STOP and WAITPID it as with running
|
||||||
target_detach (NULL, 0);
|
+ inferior PTRACE_DETACH, SIGSTOP will ignore the signal. */
|
||||||
}
|
+ target_detach (NULL, 0);
|
||||||
|
+ }
|
||||||
|
|
||||||
@@ -936,6 +944,7 @@ linux_nat_post_attach_wait (ptid_t ptid,
|
inferior_ptid = ptid_build (child_pid, child_pid, 0);
|
||||||
|
add_inferior (child_pid);
|
||||||
|
@@ -1203,6 +1213,7 @@ linux_nat_post_attach_wait (ptid_t ptid,
|
||||||
if (debug_linux_nat)
|
if (debug_linux_nat)
|
||||||
fprintf_unfiltered (gdb_stdlog,
|
fprintf_unfiltered (gdb_stdlog,
|
||||||
"LNPAW: Attaching to a stopped process\n");
|
"LNPAW: Attaching to a stopped process\n");
|
||||||
@ -31,9 +36,9 @@ diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/linux-nat.c gdb
|
|||||||
|
|
||||||
/* The process is definitely stopped. It is in a job control
|
/* The process is definitely stopped. It is in a job control
|
||||||
stop, unless the kernel predates the TASK_STOPPED /
|
stop, unless the kernel predates the TASK_STOPPED /
|
||||||
@@ -1128,6 +1137,9 @@ get_pending_status (struct lwp_info *lp,
|
@@ -1535,6 +1546,9 @@ GPT: lwp %s had signal %s, but it is in
|
||||||
else
|
*status = lp->status;
|
||||||
*status = lp->status;
|
}
|
||||||
|
|
||||||
+ if (*status == 0 && GET_PID (lp->ptid) == pid_was_stopped)
|
+ if (*status == 0 && GET_PID (lp->ptid) == pid_was_stopped)
|
||||||
+ *status = W_STOPCODE (SIGSTOP);
|
+ *status = W_STOPCODE (SIGSTOP);
|
||||||
@ -41,16 +46,16 @@ diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/linux-nat.c gdb
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1207,6 +1219,8 @@ linux_nat_detach (char *args, int from_t
|
@@ -1631,6 +1645,8 @@ linux_nat_detach (struct target_ops *ops
|
||||||
|
inferior_ptid = pid_to_ptid (pid);
|
||||||
trap_ptid = null_ptid;
|
linux_ops->to_detach (ops, args, from_tty);
|
||||||
|
|
||||||
+ pid_was_stopped = 0;
|
+ pid_was_stopped = 0;
|
||||||
+
|
+
|
||||||
/* Destroy LWP info; it's no longer valid. */
|
if (target_can_async_p ())
|
||||||
init_lwp_list ();
|
drain_queued_events (pid);
|
||||||
|
}
|
||||||
@@ -1340,6 +1354,14 @@ linux_nat_resume (ptid_t ptid, int step,
|
@@ -1787,6 +1803,14 @@ linux_nat_resume (ptid_t ptid, int step_
|
||||||
resume_callback. */
|
resume_callback. */
|
||||||
lp->stopped = 0;
|
lp->stopped = 0;
|
||||||
|
|
||||||
@ -65,9 +70,19 @@ diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/linux-nat.c gdb
|
|||||||
if (resume_all)
|
if (resume_all)
|
||||||
iterate_over_lwps (resume_callback, NULL);
|
iterate_over_lwps (resume_callback, NULL);
|
||||||
|
|
||||||
diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/testsuite/gdb.threads/attach-into-signal.c gdb-6.8/gdb/testsuite/gdb.threads/attach-into-signal.c
|
@@ -3281,6 +3305,8 @@ linux_nat_mourn_inferior (struct target_
|
||||||
--- gdb-6.8-base/gdb/testsuite/gdb.threads/attach-into-signal.c 2008-08-27 17:44:23.000000000 +0200
|
there are other viable forks to debug. Delete the exiting
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.threads/attach-into-signal.c 2008-08-27 18:13:41.000000000 +0200
|
one and context-switch to the first available. */
|
||||||
|
linux_fork_mourn_inferior ();
|
||||||
|
+
|
||||||
|
+ pid_was_stopped = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static LONGEST
|
||||||
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/attach-into-signal.c
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.threads/attach-into-signal.c 2008-05-01 20:50:14.000000000 +0200
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/attach-into-signal.c 2008-12-06 21:57:23.000000000 +0100
|
||||||
@@ -1,19 +1,20 @@
|
@@ -1,19 +1,20 @@
|
||||||
/* This testcase is part of GDB, the GNU debugger.
|
/* This testcase is part of GDB, the GNU debugger.
|
||||||
|
|
||||||
@ -106,9 +121,10 @@ diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/testsuite/gdb.t
|
|||||||
|
|
||||||
abort ();
|
abort ();
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/testsuite/gdb.threads/attach-into-signal.exp gdb-6.8/gdb/testsuite/gdb.threads/attach-into-signal.exp
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/attach-into-signal.exp
|
||||||
--- gdb-6.8-base/gdb/testsuite/gdb.threads/attach-into-signal.exp 2008-08-27 17:44:23.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.threads/attach-into-signal.exp 2008-08-27 18:13:41.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.threads/attach-into-signal.exp 2008-05-01 20:50:14.000000000 +0200
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/attach-into-signal.exp 2008-12-06 21:57:23.000000000 +0100
|
||||||
@@ -1,27 +1,29 @@
|
@@ -1,27 +1,29 @@
|
||||||
-# Copyright 2008
|
-# Copyright 2008
|
||||||
-# Free Software Foundation, Inc.
|
-# Free Software Foundation, Inc.
|
||||||
@ -240,9 +256,10 @@ diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/testsuite/gdb.t
|
|||||||
-gdb_test "set debug lin-lwp 1" "" ""
|
-gdb_test "set debug lin-lwp 1" "" ""
|
||||||
-
|
-
|
||||||
corefunc threaded
|
corefunc threaded
|
||||||
diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/testsuite/gdb.threads/attach-stopped.c gdb-6.8/gdb/testsuite/gdb.threads/attach-stopped.c
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/attach-stopped.c
|
||||||
--- gdb-6.8-base/gdb/testsuite/gdb.threads/attach-stopped.c 2008-08-27 17:44:23.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.threads/attach-stopped.c 2008-08-27 18:13:41.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.threads/attach-stopped.c 2008-05-01 20:50:14.000000000 +0200
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/attach-stopped.c 2008-12-06 21:57:23.000000000 +0100
|
||||||
@@ -1,19 +1,20 @@
|
@@ -1,19 +1,20 @@
|
||||||
/* This testcase is part of GDB, the GNU debugger.
|
/* This testcase is part of GDB, the GNU debugger.
|
||||||
|
|
||||||
@ -268,9 +285,10 @@ diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/testsuite/gdb.t
|
|||||||
|
|
||||||
/* This program is intended to be started outside of gdb, then
|
/* This program is intended to be started outside of gdb, then
|
||||||
manually stopped via a signal. */
|
manually stopped via a signal. */
|
||||||
diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/testsuite/gdb.threads/attach-stopped.exp gdb-6.8/gdb/testsuite/gdb.threads/attach-stopped.exp
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/attach-stopped.exp
|
||||||
--- gdb-6.8-base/gdb/testsuite/gdb.threads/attach-stopped.exp 2008-08-27 17:44:23.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.threads/attach-stopped.exp 2008-08-27 18:13:41.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.threads/attach-stopped.exp 2008-05-01 20:50:14.000000000 +0200
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/attach-stopped.exp 2008-12-06 21:57:23.000000000 +0100
|
||||||
@@ -1,26 +1,33 @@
|
@@ -1,26 +1,33 @@
|
||||||
-# Copyright 2008
|
-# Copyright 2008
|
||||||
-# Free Software Foundation, Inc.
|
-# Free Software Foundation, Inc.
|
||||||
@ -380,9 +398,10 @@ diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/testsuite/gdb.t
|
|||||||
|
|
||||||
set test "$threadtype: attach2 to stopped, after setting file"
|
set test "$threadtype: attach2 to stopped, after setting file"
|
||||||
gdb_test_multiple "attach $testpid" "$test" {
|
gdb_test_multiple "attach $testpid" "$test" {
|
||||||
diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/testsuite/gdb.threads/attachstop-mt.c gdb-6.8/gdb/testsuite/gdb.threads/attachstop-mt.c
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/attachstop-mt.c
|
||||||
--- gdb-6.8-base/gdb/testsuite/gdb.threads/attachstop-mt.c 2008-08-27 17:44:23.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.threads/attachstop-mt.c 2008-08-27 18:13:41.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.threads/attachstop-mt.c 2008-05-01 20:50:14.000000000 +0200
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/attachstop-mt.c 2008-12-06 21:57:23.000000000 +0100
|
||||||
@@ -1,19 +1,20 @@
|
@@ -1,19 +1,20 @@
|
||||||
/* This testcase is part of GDB, the GNU debugger.
|
/* This testcase is part of GDB, the GNU debugger.
|
||||||
|
|
||||||
@ -408,52 +427,11 @@ diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/testsuite/gdb.t
|
|||||||
|
|
||||||
/* This program is intended to be started outside of gdb, then
|
/* This program is intended to be started outside of gdb, then
|
||||||
manually stopped via a signal. */
|
manually stopped via a signal. */
|
||||||
diff -up -u -X /home/jkratoch2/.diffi.list -rup gdb-6.8-base/gdb/testsuite/gdb.threads/attachstop-mt.exp gdb-6.8/gdb/testsuite/gdb.threads/attachstop-mt.exp
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/attachstop-mt.exp
|
||||||
--- gdb-6.8-base/gdb/testsuite/gdb.threads/attachstop-mt.exp 2008-08-27 17:44:23.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.threads/attachstop-mt.exp 2008-08-27 18:13:41.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.threads/attachstop-mt.exp 2008-09-28 13:39:45.000000000 +0200
|
||||||
@@ -1,26 +1,33 @@
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/attachstop-mt.exp 2008-12-06 21:57:23.000000000 +0100
|
||||||
-# Copyright 2008
|
@@ -176,12 +176,23 @@ gdb_test "bt" ".*sleep.*(func|main).*" "
|
||||||
-# Free Software Foundation, Inc.
|
|
||||||
+# Copyright 2006
|
|
||||||
|
|
||||||
# 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
|
|
||||||
+# the Free Software Foundation; either version 2 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/>.
|
|
||||||
+# along with this program; if not, write to the Free Software
|
|
||||||
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
|
|
||||||
# This test was created by modifying gdb.threads/attachstop.
|
|
||||||
# This file was created by Jan Kratochvil <jan.kratochvil@redhat.com>.
|
|
||||||
# Regression for: https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=197584
|
|
||||||
|
|
||||||
+if $tracelevel then {
|
|
||||||
+ strace $tracelevel
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set prms_id 0
|
|
||||||
+set bug_id 0
|
|
||||||
+
|
|
||||||
# This test only works on Linux
|
|
||||||
-if { ![isnative] || [is_remote host] || ![istarget *-linux*] } {
|
|
||||||
- continue
|
|
||||||
+if { ![istarget "*-*-linux-gnu*"] } {
|
|
||||||
+ return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
set testfile "attachstop-mt"
|
|
||||||
@@ -169,12 +176,23 @@ gdb_test "bt" ".*sleep.*(func|main).*" "
|
|
||||||
# Exit and detach the process.
|
# Exit and detach the process.
|
||||||
gdb_exit
|
gdb_exit
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,26 +0,0 @@
|
|||||||
--- gdb-6.8/gdb/Makefile.in-orig 2008-06-17 15:16:20.000000000 +0200
|
|
||||||
+++ gdb-6.8/gdb/Makefile.in 2008-06-17 15:17:01.000000000 +0200
|
|
||||||
@@ -1100,16 +1100,22 @@ YYOBJ = c-exp.o \
|
|
||||||
|
|
||||||
DISTSTUFF = $(YYFILES)
|
|
||||||
|
|
||||||
+DEPDIR = .deps
|
|
||||||
+
|
|
||||||
# Prevent Sun make from putting in the machine type. Setting
|
|
||||||
# TARGET_ARCH to nothing works for SunOS 3, 4.0, but not for 4.1.
|
|
||||||
.c.o:
|
|
||||||
- $(CC) -c $(INTERNAL_CFLAGS) $<
|
|
||||||
+ @mkdir -p $(DEPDIR)
|
|
||||||
+ $(CC) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c $(INTERNAL_CFLAGS) $<
|
|
||||||
+ @mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
|
|
||||||
|
|
||||||
all: gdb$(EXEEXT) $(CONFIG_ALL)
|
|
||||||
@$(MAKE) $(FLAGS_TO_PASS) DO=all "DODIRS=`echo $(SUBDIRS) | sed 's/testsuite//'`" subdir_do
|
|
||||||
.PHONY: all-tui
|
|
||||||
all-tui: $(TUI)$(EXEEXT)
|
|
||||||
|
|
||||||
+-include $(DEPDIR)/*.Po
|
|
||||||
+
|
|
||||||
installcheck:
|
|
||||||
|
|
||||||
# The check target can not use subdir_do, because subdir_do does not
|
|
@ -1,18 +0,0 @@
|
|||||||
A part of:
|
|
||||||
http://sourceware.org/ml/gdb-cvs/2008-06/msg00160.html
|
|
||||||
|
|
||||||
It was crashing the RH testcase `gdb.threads/watchthreads2.exp'.
|
|
||||||
|
|
||||||
diff -up -u -X /root/jkratoch/.diffi.list -rup gdb-6.8/gdb/breakpoint.c gdb-6.8-patched/gdb/breakpoint.c
|
|
||||||
--- gdb-6.8/gdb/breakpoint.c 2008-08-28 11:56:56.000000000 +0200
|
|
||||||
+++ gdb-6.8-patched/gdb/breakpoint.c 2008-08-28 11:53:43.000000000 +0200
|
|
||||||
@@ -3173,6 +3173,9 @@ bpstat_what (bpstat bs)
|
|
||||||
/* I suspect this can happen if it was a momentary breakpoint
|
|
||||||
which has since been deleted. */
|
|
||||||
continue;
|
|
||||||
+ if (bs->breakpoint_at->owner == NULL)
|
|
||||||
+ bs_class = bp_nostop;
|
|
||||||
+ else
|
|
||||||
switch (bs->breakpoint_at->owner->type)
|
|
||||||
{
|
|
||||||
case bp_none:
|
|
@ -1,7 +1,8 @@
|
|||||||
diff -d -urpN gdb-6.8.4/bfd/elf-bfd.h gdb-6.8.7/bfd/elf-bfd.h
|
Index: gdb-6.8.50.20081209/bfd/elf-bfd.h
|
||||||
--- gdb-6.8.4/bfd/elf-bfd.h 2008-07-25 16:16:15.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-6.8.7/bfd/elf-bfd.h 2008-07-29 12:29:20.000000000 +0200
|
--- gdb-6.8.50.20081209.orig/bfd/elf-bfd.h 2008-12-03 15:50:57.000000000 +0100
|
||||||
@@ -2125,7 +2125,7 @@ extern Elf_Internal_Phdr * _bfd_elf_find
|
+++ gdb-6.8.50.20081209/bfd/elf-bfd.h 2008-12-10 01:35:08.000000000 +0100
|
||||||
|
@@ -2154,7 +2154,7 @@ extern Elf_Internal_Phdr * _bfd_elf_find
|
||||||
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);
|
||||||
extern char *elfcore_write_prpsinfo
|
extern char *elfcore_write_prpsinfo
|
||||||
@ -10,10 +11,11 @@ diff -d -urpN gdb-6.8.4/bfd/elf-bfd.h gdb-6.8.7/bfd/elf-bfd.h
|
|||||||
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
|
||||||
diff -d -urpN gdb-6.8.4/bfd/elf.c gdb-6.8.7/bfd/elf.c
|
Index: gdb-6.8.50.20081209/bfd/elf.c
|
||||||
--- gdb-6.8.4/bfd/elf.c 2008-07-25 16:16:15.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-6.8.7/bfd/elf.c 2008-07-29 12:45:52.000000000 +0200
|
--- gdb-6.8.50.20081209.orig/bfd/elf.c 2008-12-03 15:50:57.000000000 +0100
|
||||||
@@ -8256,6 +8256,7 @@ char *
|
+++ gdb-6.8.50.20081209/bfd/elf.c 2008-12-10 01:35:08.000000000 +0100
|
||||||
|
@@ -8345,6 +8345,7 @@ char *
|
||||||
elfcore_write_prpsinfo (bfd *abfd,
|
elfcore_write_prpsinfo (bfd *abfd,
|
||||||
char *buf,
|
char *buf,
|
||||||
int *bufsiz,
|
int *bufsiz,
|
||||||
@ -21,7 +23,7 @@ diff -d -urpN gdb-6.8.4/bfd/elf.c gdb-6.8.7/bfd/elf.c
|
|||||||
const char *fname,
|
const char *fname,
|
||||||
const char *psargs)
|
const char *psargs)
|
||||||
{
|
{
|
||||||
@@ -8282,9 +8283,15 @@ elfcore_write_prpsinfo (bfd *abfd,
|
@@ -8371,9 +8372,15 @@ elfcore_write_prpsinfo (bfd *abfd,
|
||||||
int note_type = NT_PRPSINFO;
|
int note_type = NT_PRPSINFO;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -40,7 +42,7 @@ diff -d -urpN gdb-6.8.4/bfd/elf.c gdb-6.8.7/bfd/elf.c
|
|||||||
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));
|
||||||
}
|
}
|
||||||
@@ -8299,9 +8306,15 @@ elfcore_write_prpsinfo (bfd *abfd,
|
@@ -8388,9 +8395,15 @@ elfcore_write_prpsinfo (bfd *abfd,
|
||||||
int note_type = NT_PRPSINFO;
|
int note_type = NT_PRPSINFO;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -59,9 +61,10 @@ diff -d -urpN gdb-6.8.4/bfd/elf.c gdb-6.8.7/bfd/elf.c
|
|||||||
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));
|
||||||
}
|
}
|
||||||
diff -d -urpN gdb-6.8.4/gdb/amd64-linux-nat.c gdb-6.8.7/gdb/amd64-linux-nat.c
|
Index: gdb-6.8.50.20081209/gdb/amd64-linux-nat.c
|
||||||
--- gdb-6.8.4/gdb/amd64-linux-nat.c 2008-07-25 16:16:15.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-6.8.7/gdb/amd64-linux-nat.c 2008-07-29 12:46:02.000000000 +0200
|
--- gdb-6.8.50.20081209.orig/gdb/amd64-linux-nat.c 2008-12-10 01:28:28.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081209/gdb/amd64-linux-nat.c 2008-12-10 01:35:08.000000000 +0100
|
||||||
@@ -139,6 +139,7 @@ static int amd64_linux_gregset32_reg_off
|
@@ -139,6 +139,7 @@ static int amd64_linux_gregset32_reg_off
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
@ -95,10 +98,11 @@ diff -d -urpN gdb-6.8.4/gdb/amd64-linux-nat.c gdb-6.8.7/gdb/amd64-linux-nat.c
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
diff -d -urpN gdb-6.8.4/gdb/fbsd-nat.c gdb-6.8.7/gdb/fbsd-nat.c
|
Index: gdb-6.8.50.20081209/gdb/fbsd-nat.c
|
||||||
--- gdb-6.8.4/gdb/fbsd-nat.c 2008-07-25 16:16:15.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-6.8.7/gdb/fbsd-nat.c 2008-07-29 12:29:20.000000000 +0200
|
--- gdb-6.8.50.20081209.orig/gdb/fbsd-nat.c 2008-10-28 16:22:12.000000000 +0100
|
||||||
@@ -184,6 +184,7 @@ fbsd_make_corefile_notes (bfd *obfd, int
|
+++ gdb-6.8.50.20081209/gdb/fbsd-nat.c 2008-12-10 01:35:08.000000000 +0100
|
||||||
|
@@ -210,6 +210,7 @@ fbsd_make_corefile_notes (bfd *obfd, int
|
||||||
psargs = reconcat (psargs, psargs, " ", get_inferior_args (), NULL);
|
psargs = reconcat (psargs, psargs, " ", get_inferior_args (), NULL);
|
||||||
|
|
||||||
note_data = elfcore_write_prpsinfo (obfd, note_data, note_size,
|
note_data = elfcore_write_prpsinfo (obfd, note_data, note_size,
|
||||||
@ -106,18 +110,19 @@ diff -d -urpN gdb-6.8.4/gdb/fbsd-nat.c gdb-6.8.7/gdb/fbsd-nat.c
|
|||||||
fname, psargs);
|
fname, psargs);
|
||||||
}
|
}
|
||||||
|
|
||||||
diff -d -urpN gdb-6.8.4/gdb/linux-nat.c gdb-6.8.7/gdb/linux-nat.c
|
Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||||
--- gdb-6.8.4/gdb/linux-nat.c 2008-07-25 16:16:15.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-6.8.7/gdb/linux-nat.c 2008-07-29 13:50:52.000000000 +0200
|
--- gdb-6.8.50.20081209.orig/gdb/linux-nat.c 2008-12-10 01:28:14.000000000 +0100
|
||||||
@@ -47,6 +47,7 @@
|
+++ gdb-6.8.50.20081209/gdb/linux-nat.c 2008-12-10 01:35:25.000000000 +0100
|
||||||
#include "gdbthread.h" /* for struct thread_info etc. */
|
@@ -53,6 +53,7 @@
|
||||||
#include "gdb_stat.h" /* for struct stat */
|
#include <sys/types.h>
|
||||||
#include <fcntl.h> /* for O_RDONLY */
|
#include "gdb_dirent.h"
|
||||||
|
#include "xml-support.h"
|
||||||
+#include "gdb_procfs32.h" /* for struct elf_prpsinfo32 */
|
+#include "gdb_procfs32.h" /* for struct elf_prpsinfo32 */
|
||||||
|
|
||||||
#ifndef O_LARGEFILE
|
#ifdef HAVE_PERSONALITY
|
||||||
#define O_LARGEFILE 0
|
# include <sys/personality.h>
|
||||||
@@ -108,7 +109,7 @@ static LONGEST (*super_xfer_partial) (st
|
@@ -216,7 +217,7 @@ static LONGEST (*super_xfer_partial) (st
|
||||||
/* This functions make elfcore note sections.
|
/* This functions make elfcore note sections.
|
||||||
They may get overriden by code adjusting data for multi-target builds. */
|
They may get overriden by code adjusting data for multi-target builds. */
|
||||||
char *(*linux_elfcore_write_prpsinfo)
|
char *(*linux_elfcore_write_prpsinfo)
|
||||||
@ -126,8 +131,8 @@ diff -d -urpN gdb-6.8.4/gdb/linux-nat.c gdb-6.8.7/gdb/linux-nat.c
|
|||||||
char *(*linux_elfcore_write_prstatus)
|
char *(*linux_elfcore_write_prstatus)
|
||||||
(bfd *, char *, int *, long, int, const void *) = elfcore_write_prstatus;
|
(bfd *, char *, int *, long, int, const void *) = elfcore_write_prstatus;
|
||||||
static char *
|
static char *
|
||||||
@@ -2812,6 +2813,159 @@ linux_nat_do_registers (bfd *obfd, ptid_
|
@@ -3614,6 +3615,159 @@ linux_nat_corefile_thread_callback (stru
|
||||||
note_data, note_size);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
+/* Should be always true for Linux */
|
+/* Should be always true for Linux */
|
||||||
@ -286,7 +291,7 @@ diff -d -urpN gdb-6.8.4/gdb/linux-nat.c gdb-6.8.7/gdb/linux-nat.c
|
|||||||
/* 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. */
|
||||||
|
|
||||||
@@ -2831,8 +2985,14 @@ linux_nat_make_corefile_notes (bfd *obfd
|
@@ -3633,8 +3787,14 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||||
|
|
||||||
if (get_exec_file (0))
|
if (get_exec_file (0))
|
||||||
{
|
{
|
||||||
@ -301,7 +306,7 @@ diff -d -urpN gdb-6.8.4/gdb/linux-nat.c gdb-6.8.7/gdb/linux-nat.c
|
|||||||
if (get_inferior_args ())
|
if (get_inferior_args ())
|
||||||
{
|
{
|
||||||
char *string_end;
|
char *string_end;
|
||||||
@@ -2848,9 +3008,15 @@ linux_nat_make_corefile_notes (bfd *obfd
|
@@ -3650,9 +3810,15 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||||
psargs_end - string_end);
|
psargs_end - string_end);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -319,10 +324,11 @@ diff -d -urpN gdb-6.8.4/gdb/linux-nat.c gdb-6.8.7/gdb/linux-nat.c
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Dump information for threads. */
|
/* Dump information for threads. */
|
||||||
diff -d -urpN gdb-6.8.4/gdb/linux-nat.h gdb-6.8.7/gdb/linux-nat.h
|
Index: gdb-6.8.50.20081209/gdb/linux-nat.h
|
||||||
--- gdb-6.8.4/gdb/linux-nat.h 2008-07-25 16:16:15.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-6.8.7/gdb/linux-nat.h 2008-07-29 12:29:20.000000000 +0200
|
--- gdb-6.8.50.20081209.orig/gdb/linux-nat.h 2008-12-10 01:27:33.000000000 +0100
|
||||||
@@ -133,7 +133,7 @@ struct siginfo *linux_nat_get_siginfo (p
|
+++ gdb-6.8.50.20081209/gdb/linux-nat.h 2008-12-10 01:35:08.000000000 +0100
|
||||||
|
@@ -138,7 +138,7 @@ struct siginfo *linux_nat_get_siginfo (p
|
||||||
/* These functions make elfcore note sections.
|
/* These functions make elfcore note sections.
|
||||||
They may get overriden by code adjusting data for multi-target builds. */
|
They may get overriden by code adjusting data for multi-target builds. */
|
||||||
extern char *(*linux_elfcore_write_prpsinfo)
|
extern char *(*linux_elfcore_write_prpsinfo)
|
||||||
@ -331,10 +337,11 @@ diff -d -urpN gdb-6.8.4/gdb/linux-nat.h gdb-6.8.7/gdb/linux-nat.h
|
|||||||
extern char *(*linux_elfcore_write_prstatus)
|
extern char *(*linux_elfcore_write_prstatus)
|
||||||
(bfd *, char *, int *, long, int, const void *);
|
(bfd *, char *, int *, long, int, const void *);
|
||||||
extern char *(*linux_elfcore_write_prfpreg)
|
extern char *(*linux_elfcore_write_prfpreg)
|
||||||
diff -d -urpN gdb-6.8.4/gdb/procfs.c gdb-6.8.7/gdb/procfs.c
|
Index: gdb-6.8.50.20081209/gdb/procfs.c
|
||||||
--- gdb-6.8.4/gdb/procfs.c 2008-07-25 16:16:15.000000000 +0200
|
===================================================================
|
||||||
+++ gdb-6.8.7/gdb/procfs.c 2008-07-29 12:29:20.000000000 +0200
|
--- gdb-6.8.50.20081209.orig/gdb/procfs.c 2008-11-09 12:27:17.000000000 +0100
|
||||||
@@ -6118,6 +6118,7 @@ procfs_make_note_section (bfd *obfd, int
|
+++ gdb-6.8.50.20081209/gdb/procfs.c 2008-12-10 01:35:08.000000000 +0100
|
||||||
|
@@ -6181,6 +6181,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,545 +0,0 @@
|
|||||||
http://sourceware.org/ml/gdb-cvs/2008-10/msg00019.html
|
|
||||||
|
|
||||||
gdb/
|
|
||||||
2008-10-02 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
Replace TYPE_ARRAY_{UPPER,LOWER}_BOUND_TYPE by a bit if {un,}defined.
|
|
||||||
* c-typeprint.c (c_type_print_varspec_suffix), m2-typeprint.c
|
|
||||||
(m2_array), p-typeprint.c (pascal_type_print_varspec_prefix),
|
|
||||||
valops.c (value_cast), varobj.c (c_number_of_children): Replace
|
|
||||||
TYPE_ARRAY_UPPER_BOUND_TYPE compared to BOUND_CANNOT_BE_DETERMINED by
|
|
||||||
TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED.
|
|
||||||
* parse.c (follow_types): Use TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED.
|
|
||||||
* f-valprint.c (f77_get_dynamic_upperbound): Replace with ...
|
|
||||||
(f77_get_upperbound): ... this function handling now only
|
|
||||||
TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED.
|
|
||||||
(f77_get_dynamic_lowerbound): Replace with ...
|
|
||||||
(f77_get_lowerbound): ... this function handling now only
|
|
||||||
TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED.
|
|
||||||
(f77_get_dynamic_length_of_aggregate, f77_create_arrayprint_offset_tbl):
|
|
||||||
Update their callers.
|
|
||||||
* eval.c (evaluate_subexp_standard): Update their callers.
|
|
||||||
* f-lang.h (f77_get_dynamic_upperbound, f77_get_upperbound)
|
|
||||||
(f77_get_dynamic_lowerbound, f77_get_lowerbound): Update their
|
|
||||||
prototypes.
|
|
||||||
(BOUND_FETCH_OK, BOUND_FETCH_ERROR): Remove.
|
|
||||||
* f-typeprint.c (f_type_print_varspec_suffix, f_type_print_base): Remove
|
|
||||||
the lower_bound_was_default variable. Update the
|
|
||||||
f77_get_dynamic_upperbound, f77_get_upperbound and
|
|
||||||
TYPE_ARRAY_UPPER_BOUND_TYPE calls.
|
|
||||||
* gdbtypes.c (print_bound_type): Remove the function.
|
|
||||||
(recursive_dump_type): Remove its calls printing UPPER_BOUND_TYPE and
|
|
||||||
LOWER_BOUND_TYPE.
|
|
||||||
* gdbtypes.h (enum array_bound_type): Remove.
|
|
||||||
(struct main_type): Remove the fields upper_bound_type and
|
|
||||||
lower_bound_type. Comment the new overload of the field artificial.
|
|
||||||
(TYPE_ARRAY_UPPER_BOUND_TYPE): Replace by ...
|
|
||||||
(TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED): ... this macro.
|
|
||||||
(TYPE_ARRAY_LOWER_BOUND_TYPE): Replace by ...
|
|
||||||
(TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED): ... this macro.
|
|
||||||
|
|
||||||
gdb/testsuite/
|
|
||||||
2008-10-02 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* gdb.base/maint.exp (maint print type): Remove printing
|
|
||||||
UPPER_BOUND_TYPE and LOWER_BOUND_TYPE.
|
|
||||||
|
|
||||||
[ Ported to gdb-6.8fedora. ]
|
|
||||||
|
|
||||||
--- ./gdb/c-typeprint.c 2008-01-01 23:53:09.000000000 +0100
|
|
||||||
+++ ./gdb/c-typeprint.c 2008-10-29 10:55:07.000000000 +0100
|
|
||||||
@@ -542,7 +542,7 @@ c_type_print_varspec_suffix (struct type
|
|
||||||
|
|
||||||
fprintf_filtered (stream, "[");
|
|
||||||
if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
|
|
||||||
- && TYPE_ARRAY_UPPER_BOUND_TYPE (type) != BOUND_CANNOT_BE_DETERMINED)
|
|
||||||
+ && !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
|
||||||
fprintf_filtered (stream, "%d",
|
|
||||||
(TYPE_LENGTH (type)
|
|
||||||
/ TYPE_LENGTH (TYPE_TARGET_TYPE (type))));
|
|
||||||
--- ./gdb/eval.c 2008-10-29 10:50:23.000000000 +0100
|
|
||||||
+++ ./gdb/eval.c 2008-10-29 10:55:07.000000000 +0100
|
|
||||||
@@ -1674,13 +1674,8 @@ evaluate_subexp_standard (struct type *e
|
|
||||||
/* Internal type of array is arranged right to left */
|
|
||||||
for (i = 0; i < nargs; i++)
|
|
||||||
{
|
|
||||||
- retcode = f77_get_dynamic_upperbound (tmp_type, &upper);
|
|
||||||
- if (retcode == BOUND_FETCH_ERROR)
|
|
||||||
- error (_("Cannot obtain dynamic upper bound"));
|
|
||||||
-
|
|
||||||
- retcode = f77_get_dynamic_lowerbound (tmp_type, &lower);
|
|
||||||
- if (retcode == BOUND_FETCH_ERROR)
|
|
||||||
- error (_("Cannot obtain dynamic lower bound"));
|
|
||||||
+ upper = f77_get_upperbound (tmp_type);
|
|
||||||
+ lower = f77_get_lowerbound (tmp_type);
|
|
||||||
|
|
||||||
array_size_array[nargs - i - 1] = upper - lower + 1;
|
|
||||||
|
|
||||||
--- ./gdb/f-lang.h 2008-10-29 10:50:23.000000000 +0100
|
|
||||||
+++ ./gdb/f-lang.h 2008-10-29 10:55:07.000000000 +0100
|
|
||||||
@@ -83,9 +83,6 @@ extern SAVED_F77_COMMON_PTR find_common_
|
|
||||||
#define BLANK_COMMON_NAME_MF77 "__BLNK__" /* MF77 assigned */
|
|
||||||
#define BLANK_COMMON_NAME_LOCAL "__BLANK" /* Local GDB */
|
|
||||||
|
|
||||||
-#define BOUND_FETCH_OK 1
|
|
||||||
-#define BOUND_FETCH_ERROR -999
|
|
||||||
-
|
|
||||||
/* When reasonable array bounds cannot be fetched, such as when
|
|
||||||
you ask to 'mt print symbols' and there is no stack frame and
|
|
||||||
therefore no way of knowing the bounds of stack-based arrays,
|
|
||||||
@@ -97,9 +94,9 @@ extern SAVED_F77_COMMON_PTR find_common_
|
|
||||||
extern char *real_main_name; /* Name of main function */
|
|
||||||
extern int real_main_c_value; /* C_value field of main function */
|
|
||||||
|
|
||||||
-extern int f77_get_dynamic_upperbound (struct type *, int *);
|
|
||||||
+extern int f77_get_upperbound (struct type *);
|
|
||||||
|
|
||||||
-extern int f77_get_dynamic_lowerbound (struct type *, int *);
|
|
||||||
+extern int f77_get_lowerbound (struct type *);
|
|
||||||
|
|
||||||
extern void f77_get_dynamic_array_length (struct type *);
|
|
||||||
|
|
||||||
--- ./gdb/f-typeprint.c 2008-10-29 10:50:23.000000000 +0100
|
|
||||||
+++ ./gdb/f-typeprint.c 2008-10-29 10:55:07.000000000 +0100
|
|
||||||
@@ -150,7 +150,6 @@ f_type_print_varspec_suffix (struct type
|
|
||||||
int show, int passed_a_ptr, int demangled_args)
|
|
||||||
{
|
|
||||||
int upper_bound, lower_bound;
|
|
||||||
- int lower_bound_was_default = 0;
|
|
||||||
static int arrayprint_recurse_level = 0;
|
|
||||||
int retcode;
|
|
||||||
|
|
||||||
@@ -173,35 +172,19 @@ f_type_print_varspec_suffix (struct type
|
|
||||||
if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_ARRAY)
|
|
||||||
f_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
|
|
||||||
|
|
||||||
- retcode = f77_get_dynamic_lowerbound (type, &lower_bound);
|
|
||||||
-
|
|
||||||
- lower_bound_was_default = 0;
|
|
||||||
-
|
|
||||||
- if (retcode == BOUND_FETCH_ERROR)
|
|
||||||
- fprintf_filtered (stream, "???");
|
|
||||||
- else if (lower_bound == 1) /* The default */
|
|
||||||
- lower_bound_was_default = 1;
|
|
||||||
- else
|
|
||||||
- fprintf_filtered (stream, "%d", lower_bound);
|
|
||||||
-
|
|
||||||
- if (lower_bound_was_default)
|
|
||||||
- lower_bound_was_default = 0;
|
|
||||||
- else
|
|
||||||
- fprintf_filtered (stream, ":");
|
|
||||||
+ lower_bound = f77_get_lowerbound (type);
|
|
||||||
+ if (lower_bound != 1) /* Not the default. */
|
|
||||||
+ fprintf_filtered (stream, "%d:", lower_bound);
|
|
||||||
|
|
||||||
/* Make sure that, if we have an assumed size array, we
|
|
||||||
print out a warning and print the upperbound as '*' */
|
|
||||||
|
|
||||||
- if (TYPE_ARRAY_UPPER_BOUND_TYPE (type) == BOUND_CANNOT_BE_DETERMINED)
|
|
||||||
+ if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
|
||||||
fprintf_filtered (stream, "*");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
- retcode = f77_get_dynamic_upperbound (type, &upper_bound);
|
|
||||||
-
|
|
||||||
- if (retcode == BOUND_FETCH_ERROR)
|
|
||||||
- fprintf_filtered (stream, "???");
|
|
||||||
- else
|
|
||||||
- fprintf_filtered (stream, "%d", upper_bound);
|
|
||||||
+ upper_bound = f77_get_upperbound (type);
|
|
||||||
+ fprintf_filtered (stream, "%d", upper_bound);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_ARRAY)
|
|
||||||
@@ -351,16 +334,12 @@ f_type_print_base (struct type *type, st
|
|
||||||
case TYPE_CODE_STRING:
|
|
||||||
/* Strings may have dynamic upperbounds (lengths) like arrays. */
|
|
||||||
|
|
||||||
- if (TYPE_ARRAY_UPPER_BOUND_TYPE (type) == BOUND_CANNOT_BE_DETERMINED)
|
|
||||||
+ if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
|
||||||
fprintfi_filtered (level, stream, "character*(*)");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
- retcode = f77_get_dynamic_upperbound (type, &upper_bound);
|
|
||||||
-
|
|
||||||
- if (retcode == BOUND_FETCH_ERROR)
|
|
||||||
- fprintf_filtered (stream, "character*???");
|
|
||||||
- else
|
|
||||||
- fprintf_filtered (stream, "character*%d", upper_bound);
|
|
||||||
+ upper_bound = f77_get_upperbound (type);
|
|
||||||
+ fprintf_filtered (stream, "character*%d", upper_bound);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
--- ./gdb/f-valprint.c 2008-10-29 10:50:23.000000000 +0100
|
|
||||||
+++ ./gdb/f-valprint.c 2008-10-29 20:48:30.000000000 +0100
|
|
||||||
@@ -61,130 +61,28 @@ int f77_array_offset_tbl[MAX_FORTRAN_DIM
|
|
||||||
#define F77_DIM_OFFSET(n) (f77_array_offset_tbl[n][0])
|
|
||||||
|
|
||||||
int
|
|
||||||
-f77_get_dynamic_lowerbound (struct type *type, int *lower_bound)
|
|
||||||
+f77_get_lowerbound (struct type *type)
|
|
||||||
{
|
|
||||||
- struct frame_info *frame;
|
|
||||||
- CORE_ADDR current_frame_addr;
|
|
||||||
- CORE_ADDR ptr_to_lower_bound;
|
|
||||||
-
|
|
||||||
- switch (TYPE_ARRAY_LOWER_BOUND_TYPE (type))
|
|
||||||
- {
|
|
||||||
- case BOUND_BY_VALUE_ON_STACK:
|
|
||||||
- frame = deprecated_safe_get_selected_frame ();
|
|
||||||
- current_frame_addr = get_frame_base (frame);
|
|
||||||
- if (current_frame_addr > 0)
|
|
||||||
- {
|
|
||||||
- *lower_bound =
|
|
||||||
- read_memory_integer (current_frame_addr +
|
|
||||||
- TYPE_ARRAY_LOWER_BOUND_VALUE (type),
|
|
||||||
- 4);
|
|
||||||
- }
|
|
||||||
- else
|
|
||||||
- {
|
|
||||||
- *lower_bound = DEFAULT_LOWER_BOUND;
|
|
||||||
- return BOUND_FETCH_ERROR;
|
|
||||||
- }
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- case BOUND_SIMPLE:
|
|
||||||
- *lower_bound = TYPE_ARRAY_LOWER_BOUND_VALUE (type);
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- case BOUND_CANNOT_BE_DETERMINED:
|
|
||||||
- error (_("Lower bound may not be '*' in F77"));
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- case BOUND_BY_REF_ON_STACK:
|
|
||||||
- frame = deprecated_safe_get_selected_frame ();
|
|
||||||
- current_frame_addr = get_frame_base (frame);
|
|
||||||
- if (current_frame_addr > 0)
|
|
||||||
- {
|
|
||||||
- ptr_to_lower_bound =
|
|
||||||
- read_memory_typed_address (current_frame_addr +
|
|
||||||
- TYPE_ARRAY_LOWER_BOUND_VALUE (type),
|
|
||||||
- builtin_type_void_data_ptr);
|
|
||||||
- *lower_bound = read_memory_integer (ptr_to_lower_bound, 4);
|
|
||||||
- }
|
|
||||||
- else
|
|
||||||
- {
|
|
||||||
- *lower_bound = DEFAULT_LOWER_BOUND;
|
|
||||||
- return BOUND_FETCH_ERROR;
|
|
||||||
- }
|
|
||||||
- break;
|
|
||||||
+ if (TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED (type))
|
|
||||||
+ error (_("Lower bound may not be '*' in F77"));
|
|
||||||
|
|
||||||
- case BOUND_BY_REF_IN_REG:
|
|
||||||
- case BOUND_BY_VALUE_IN_REG:
|
|
||||||
- default:
|
|
||||||
- error (_("??? unhandled dynamic array bound type ???"));
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
- return BOUND_FETCH_OK;
|
|
||||||
+ return TYPE_ARRAY_LOWER_BOUND_VALUE (type);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
-f77_get_dynamic_upperbound (struct type *type, int *upper_bound)
|
|
||||||
+f77_get_upperbound (struct type *type)
|
|
||||||
{
|
|
||||||
- struct frame_info *frame;
|
|
||||||
- CORE_ADDR current_frame_addr = 0;
|
|
||||||
- CORE_ADDR ptr_to_upper_bound;
|
|
||||||
-
|
|
||||||
- switch (TYPE_ARRAY_UPPER_BOUND_TYPE (type))
|
|
||||||
- {
|
|
||||||
- case BOUND_BY_VALUE_ON_STACK:
|
|
||||||
- frame = deprecated_safe_get_selected_frame ();
|
|
||||||
- current_frame_addr = get_frame_base (frame);
|
|
||||||
- if (current_frame_addr > 0)
|
|
||||||
- {
|
|
||||||
- *upper_bound =
|
|
||||||
- read_memory_integer (current_frame_addr +
|
|
||||||
- TYPE_ARRAY_UPPER_BOUND_VALUE (type),
|
|
||||||
- 4);
|
|
||||||
- }
|
|
||||||
- else
|
|
||||||
- {
|
|
||||||
- *upper_bound = DEFAULT_UPPER_BOUND;
|
|
||||||
- return BOUND_FETCH_ERROR;
|
|
||||||
- }
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- case BOUND_SIMPLE:
|
|
||||||
- *upper_bound = TYPE_ARRAY_UPPER_BOUND_VALUE (type);
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- case BOUND_CANNOT_BE_DETERMINED:
|
|
||||||
- /* we have an assumed size array on our hands. Assume that
|
|
||||||
- upper_bound == lower_bound so that we show at least
|
|
||||||
- 1 element.If the user wants to see more elements, let
|
|
||||||
- him manually ask for 'em and we'll subscript the
|
|
||||||
- array and show him */
|
|
||||||
- f77_get_dynamic_lowerbound (type, upper_bound);
|
|
||||||
- break;
|
|
||||||
-
|
|
||||||
- case BOUND_BY_REF_ON_STACK:
|
|
||||||
- frame = deprecated_safe_get_selected_frame ();
|
|
||||||
- current_frame_addr = get_frame_base (frame);
|
|
||||||
- if (current_frame_addr > 0)
|
|
||||||
- {
|
|
||||||
- ptr_to_upper_bound =
|
|
||||||
- read_memory_typed_address (current_frame_addr +
|
|
||||||
- TYPE_ARRAY_UPPER_BOUND_VALUE (type),
|
|
||||||
- builtin_type_void_data_ptr);
|
|
||||||
- *upper_bound = read_memory_integer (ptr_to_upper_bound, 4);
|
|
||||||
- }
|
|
||||||
- else
|
|
||||||
- {
|
|
||||||
- *upper_bound = DEFAULT_UPPER_BOUND;
|
|
||||||
- return BOUND_FETCH_ERROR;
|
|
||||||
- }
|
|
||||||
- break;
|
|
||||||
+ if (TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
|
||||||
+ {
|
|
||||||
+ /* We have an assumed size array on our hands. Assume that
|
|
||||||
+ upper_bound == lower_bound so that we show at least 1 element.
|
|
||||||
+ If the user wants to see more elements, let him manually ask for 'em
|
|
||||||
+ and we'll subscript the array and show him. */
|
|
||||||
|
|
||||||
- case BOUND_BY_REF_IN_REG:
|
|
||||||
- case BOUND_BY_VALUE_IN_REG:
|
|
||||||
- default:
|
|
||||||
- error (_("??? unhandled dynamic array bound type ???"));
|
|
||||||
- break;
|
|
||||||
+ return f77_get_lowerbound (type);
|
|
||||||
}
|
|
||||||
- return BOUND_FETCH_OK;
|
|
||||||
+
|
|
||||||
+ return TYPE_ARRAY_UPPER_BOUND_VALUE (type);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Obtain F77 adjustable array dimensions */
|
|
||||||
@@ -210,13 +108,8 @@ f77_get_dynamic_length_of_aggregate (str
|
|
||||||
f77_get_dynamic_length_of_aggregate (TYPE_TARGET_TYPE (type));
|
|
||||||
|
|
||||||
/* Recursion ends here, start setting up lengths. */
|
|
||||||
- retcode = f77_get_dynamic_lowerbound (type, &lower_bound);
|
|
||||||
- if (retcode == BOUND_FETCH_ERROR)
|
|
||||||
- error (_("Cannot obtain valid array lower bound"));
|
|
||||||
-
|
|
||||||
- retcode = f77_get_dynamic_upperbound (type, &upper_bound);
|
|
||||||
- if (retcode == BOUND_FETCH_ERROR)
|
|
||||||
- error (_("Cannot obtain valid array upper bound"));
|
|
||||||
+ lower_bound = f77_get_lowerbound (type);
|
|
||||||
+ upper_bound = f77_get_upperbound (type);
|
|
||||||
|
|
||||||
/* Patch in a valid length value. */
|
|
||||||
|
|
||||||
@@ -239,16 +132,8 @@ f77_create_arrayprint_offset_tbl (struct
|
|
||||||
|
|
||||||
while ((TYPE_CODE (tmp_type) == TYPE_CODE_ARRAY))
|
|
||||||
{
|
|
||||||
- if (TYPE_ARRAY_UPPER_BOUND_TYPE (tmp_type) == BOUND_CANNOT_BE_DETERMINED)
|
|
||||||
- fprintf_filtered (stream, "<assumed size array> ");
|
|
||||||
-
|
|
||||||
- retcode = f77_get_dynamic_upperbound (tmp_type, &upper);
|
|
||||||
- if (retcode == BOUND_FETCH_ERROR)
|
|
||||||
- error (_("Cannot obtain dynamic upper bound"));
|
|
||||||
-
|
|
||||||
- retcode = f77_get_dynamic_lowerbound (tmp_type, &lower);
|
|
||||||
- if (retcode == BOUND_FETCH_ERROR)
|
|
||||||
- error (_("Cannot obtain dynamic lower bound"));
|
|
||||||
+ upper = f77_get_upperbound (tmp_type);
|
|
||||||
+ lower = f77_get_lowerbound (tmp_type);
|
|
||||||
|
|
||||||
F77_DIM_SIZE (ndimen) = upper - lower + 1;
|
|
||||||
|
|
||||||
--- ./gdb/gdbtypes.c 2008-10-29 10:50:23.000000000 +0100
|
|
||||||
+++ ./gdb/gdbtypes.c 2008-10-29 10:55:07.000000000 +0100
|
|
||||||
@@ -2529,35 +2529,6 @@ print_cplus_stuff (struct type *type, in
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void
|
|
||||||
-print_bound_type (int bt)
|
|
||||||
-{
|
|
||||||
- switch (bt)
|
|
||||||
- {
|
|
||||||
- case BOUND_CANNOT_BE_DETERMINED:
|
|
||||||
- printf_filtered ("(BOUND_CANNOT_BE_DETERMINED)");
|
|
||||||
- break;
|
|
||||||
- case BOUND_BY_REF_ON_STACK:
|
|
||||||
- printf_filtered ("(BOUND_BY_REF_ON_STACK)");
|
|
||||||
- break;
|
|
||||||
- case BOUND_BY_VALUE_ON_STACK:
|
|
||||||
- printf_filtered ("(BOUND_BY_VALUE_ON_STACK)");
|
|
||||||
- break;
|
|
||||||
- case BOUND_BY_REF_IN_REG:
|
|
||||||
- printf_filtered ("(BOUND_BY_REF_IN_REG)");
|
|
||||||
- break;
|
|
||||||
- case BOUND_BY_VALUE_IN_REG:
|
|
||||||
- printf_filtered ("(BOUND_BY_VALUE_IN_REG)");
|
|
||||||
- break;
|
|
||||||
- case BOUND_SIMPLE:
|
|
||||||
- printf_filtered ("(BOUND_SIMPLE)");
|
|
||||||
- break;
|
|
||||||
- default:
|
|
||||||
- printf_filtered (_("(unknown bound type)"));
|
|
||||||
- break;
|
|
||||||
- }
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
static struct obstack dont_print_type_obstack;
|
|
||||||
|
|
||||||
void
|
|
||||||
@@ -2692,14 +2663,6 @@ recursive_dump_type (struct type *type,
|
|
||||||
}
|
|
||||||
puts_filtered ("\n");
|
|
||||||
printfi_filtered (spaces, "length %d\n", TYPE_LENGTH (type));
|
|
||||||
- printfi_filtered (spaces, "upper_bound_type 0x%x ",
|
|
||||||
- TYPE_ARRAY_UPPER_BOUND_TYPE (type));
|
|
||||||
- print_bound_type (TYPE_ARRAY_UPPER_BOUND_TYPE (type));
|
|
||||||
- puts_filtered ("\n");
|
|
||||||
- printfi_filtered (spaces, "lower_bound_type 0x%x ",
|
|
||||||
- TYPE_ARRAY_LOWER_BOUND_TYPE (type));
|
|
||||||
- print_bound_type (TYPE_ARRAY_LOWER_BOUND_TYPE (type));
|
|
||||||
- puts_filtered ("\n");
|
|
||||||
printfi_filtered (spaces, "objfile ");
|
|
||||||
gdb_print_host_address (TYPE_OBJFILE (type), gdb_stdout);
|
|
||||||
printf_filtered ("\n");
|
|
||||||
@@ -2942,10 +2942,6 @@ copy_type_recursive (struct objfile *obj
|
|
||||||
|
|
||||||
/* Copy the common fields of types. */
|
|
||||||
TYPE_CODE (new_type) = TYPE_CODE (type);
|
|
||||||
- TYPE_ARRAY_UPPER_BOUND_TYPE (new_type) =
|
|
||||||
- TYPE_ARRAY_UPPER_BOUND_TYPE (type);
|
|
||||||
- TYPE_ARRAY_LOWER_BOUND_TYPE (new_type) =
|
|
||||||
- TYPE_ARRAY_LOWER_BOUND_TYPE (type);
|
|
||||||
if (TYPE_NAME (type))
|
|
||||||
TYPE_NAME (new_type) = xstrdup (TYPE_NAME (type));
|
|
||||||
if (TYPE_TAG_NAME (type))
|
|
||||||
--- ./gdb/gdbtypes.h 2008-10-29 10:50:23.000000000 +0100
|
|
||||||
+++ ./gdb/gdbtypes.h 2008-10-29 10:56:05.000000000 +0100
|
|
||||||
@@ -310,17 +310,6 @@ enum type_code
|
|
||||||
#define TYPE_FLAG_NOTTEXT (1 << 17)
|
|
||||||
#define TYPE_NOTTEXT(t) (TYPE_FLAGS (t) & TYPE_FLAG_NOTTEXT)
|
|
||||||
|
|
||||||
-/* Array bound type. */
|
|
||||||
-enum array_bound_type
|
|
||||||
-{
|
|
||||||
- BOUND_SIMPLE = 0,
|
|
||||||
- BOUND_BY_VALUE_IN_REG,
|
|
||||||
- BOUND_BY_REF_IN_REG,
|
|
||||||
- BOUND_BY_VALUE_ON_STACK,
|
|
||||||
- BOUND_BY_REF_ON_STACK,
|
|
||||||
- BOUND_CANNOT_BE_DETERMINED
|
|
||||||
-};
|
|
||||||
-
|
|
||||||
/* This structure is space-critical.
|
|
||||||
Its layout has been tweaked to reduce the space used. */
|
|
||||||
|
|
||||||
@@ -330,12 +319,6 @@ struct main_type
|
|
||||||
|
|
||||||
ENUM_BITFIELD(type_code) code : 8;
|
|
||||||
|
|
||||||
- /* Array bounds. These fields appear at this location because
|
|
||||||
- they pack nicely here. */
|
|
||||||
-
|
|
||||||
- ENUM_BITFIELD(array_bound_type) upper_bound_type : 4;
|
|
||||||
- ENUM_BITFIELD(array_bound_type) lower_bound_type : 4;
|
|
||||||
-
|
|
||||||
/* Name of this type, or NULL if none.
|
|
||||||
|
|
||||||
This is used for printing only, except by poorly designed C++ code.
|
|
||||||
@@ -437,7 +420,8 @@ struct main_type
|
|
||||||
|
|
||||||
/* For a function or member type, this is 1 if the argument is marked
|
|
||||||
artificial. Artificial arguments should not be shown to the
|
|
||||||
- user. */
|
|
||||||
+ user. For TYPE_CODE_RANGE it is set if the specific bound is not
|
|
||||||
+ defined. */
|
|
||||||
unsigned int artificial : 1;
|
|
||||||
|
|
||||||
/* This flag is zero for non-static fields, 1 for fields whose location
|
|
||||||
@@ -802,10 +786,10 @@ extern void allocate_cplus_struct_type (
|
|
||||||
|
|
||||||
/* Moto-specific stuff for FORTRAN arrays */
|
|
||||||
|
|
||||||
-#define TYPE_ARRAY_UPPER_BOUND_TYPE(thistype) \
|
|
||||||
- TYPE_MAIN_TYPE(thistype)->upper_bound_type
|
|
||||||
-#define TYPE_ARRAY_LOWER_BOUND_TYPE(thistype) \
|
|
||||||
- TYPE_MAIN_TYPE(thistype)->lower_bound_type
|
|
||||||
+#define TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED(arraytype) \
|
|
||||||
+ (TYPE_FIELD_ARTIFICIAL((TYPE_FIELD_TYPE((arraytype),0)),1))
|
|
||||||
+#define TYPE_ARRAY_LOWER_BOUND_IS_UNDEFINED(arraytype) \
|
|
||||||
+ (TYPE_FIELD_ARTIFICIAL((TYPE_FIELD_TYPE((arraytype),0)),0))
|
|
||||||
|
|
||||||
#define TYPE_ARRAY_UPPER_BOUND_VALUE(arraytype) \
|
|
||||||
(TYPE_FIELD_BITPOS((TYPE_FIELD_TYPE((arraytype),0)),1))
|
|
||||||
--- ./gdb/m2-typeprint.c 2008-01-01 23:53:11.000000000 +0100
|
|
||||||
+++ ./gdb/m2-typeprint.c 2008-10-29 10:55:12.000000000 +0100
|
|
||||||
@@ -202,7 +202,7 @@ static void m2_array (struct type *type,
|
|
||||||
{
|
|
||||||
fprintf_filtered (stream, "ARRAY [");
|
|
||||||
if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
|
|
||||||
- && TYPE_ARRAY_UPPER_BOUND_TYPE (type) != BOUND_CANNOT_BE_DETERMINED)
|
|
||||||
+ && !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
|
||||||
{
|
|
||||||
if (TYPE_INDEX_TYPE (type) != 0)
|
|
||||||
{
|
|
||||||
--- ./gdb/p-typeprint.c 2008-01-01 23:53:12.000000000 +0100
|
|
||||||
+++ ./gdb/p-typeprint.c 2008-10-29 10:55:12.000000000 +0100
|
|
||||||
@@ -251,7 +251,7 @@ pascal_type_print_varspec_prefix (struct
|
|
||||||
fprintf_filtered (stream, "(");
|
|
||||||
fprintf_filtered (stream, "array ");
|
|
||||||
if (TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
|
|
||||||
- && TYPE_ARRAY_UPPER_BOUND_TYPE (type) != BOUND_CANNOT_BE_DETERMINED)
|
|
||||||
+ && !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
|
||||||
fprintf_filtered (stream, "[%d..%d] ",
|
|
||||||
TYPE_ARRAY_LOWER_BOUND_VALUE (type),
|
|
||||||
TYPE_ARRAY_UPPER_BOUND_VALUE (type)
|
|
||||||
--- ./gdb/parse.c 2008-10-29 10:47:18.000000000 +0100
|
|
||||||
+++ ./gdb/parse.c 2008-10-29 10:55:12.000000000 +0100
|
|
||||||
@@ -1175,8 +1175,7 @@ follow_types (struct type *follow_type)
|
|
||||||
create_array_type ((struct type *) NULL,
|
|
||||||
follow_type, range_type);
|
|
||||||
if (array_size < 0)
|
|
||||||
- TYPE_ARRAY_UPPER_BOUND_TYPE (follow_type)
|
|
||||||
- = BOUND_CANNOT_BE_DETERMINED;
|
|
||||||
+ TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (follow_type) = 1;
|
|
||||||
break;
|
|
||||||
case tp_function:
|
|
||||||
/* FIXME-type-allocation: need a way to free this type when we are
|
|
||||||
--- ./gdb/testsuite/gdb.base/maint.exp 2008-01-28 19:06:59.000000000 +0100
|
|
||||||
+++ ./gdb/testsuite/gdb.base/maint.exp 2008-10-29 20:50:33.000000000 +0100
|
|
||||||
@@ -404,7 +404,7 @@ gdb_expect {
|
|
||||||
|
|
||||||
send_gdb "maint print type argc\n"
|
|
||||||
gdb_expect {
|
|
||||||
- -re "type node $hex\r\nname .int. \\($hex\\)\r\ntagname .<NULL>. \\($hex\\)\r\ncode $hex \\(TYPE_CODE_INT\\)\r\nlength \[24\]\r\nupper_bound_type $hex \\(BOUND_SIMPLE\\)\r\nlower_bound_type $hex \\(BOUND_SIMPLE\\)\r\nobjfile $hex\r\ntarget_type $hex\r\npointer_type $hex\r\nreference_type $hex\r\ntype_chain $hex\r\ninstance_flags $hex\r\nflags $hex\r\nnfields 0 $hex\r\nvptr_basetype $hex\r\nvptr_fieldno -1\r\ntype_specific $hex\r\n$gdb_prompt $"\
|
|
||||||
+ -re "type node $hex\r\nname .int. \\($hex\\)\r\ntagname .<NULL>. \\($hex\\)\r\ncode $hex \\(TYPE_CODE_INT\\)\r\nlength \[24\]\r\nobjfile $hex\r\ntarget_type $hex\r\npointer_type $hex\r\nreference_type $hex\r\ntype_chain $hex\r\ninstance_flags $hex\r\nflags $hex\r\nnfields 0 $hex\r\nvptr_basetype $hex\r\nvptr_fieldno -1\r\ntype_specific $hex\r\n$gdb_prompt $"\
|
|
||||||
{ pass "maint print type" }
|
|
||||||
-re ".*$gdb_prompt $" { fail "maint print type" }
|
|
||||||
timeout { fail "(timeout) maint print type" }
|
|
||||||
--- ./gdb/valops.c 2008-10-29 10:50:23.000000000 +0100
|
|
||||||
+++ ./gdb/valops.c 2008-10-29 10:55:12.000000000 +0100
|
|
||||||
@@ -291,8 +291,7 @@ value_cast (struct type *type, struct va
|
|
||||||
{
|
|
||||||
struct type *element_type = TYPE_TARGET_TYPE (type);
|
|
||||||
unsigned element_length = TYPE_LENGTH (check_typedef (element_type));
|
|
||||||
- if (element_length > 0
|
|
||||||
- && TYPE_ARRAY_UPPER_BOUND_TYPE (type) == BOUND_CANNOT_BE_DETERMINED)
|
|
||||||
+ if (element_length > 0 && TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
|
||||||
{
|
|
||||||
struct type *range_type = TYPE_INDEX_TYPE (type);
|
|
||||||
int val_length = TYPE_LENGTH (type2);
|
|
||||||
--- ./gdb/varobj.c 2008-10-29 10:47:21.000000000 +0100
|
|
||||||
+++ ./gdb/varobj.c 2008-10-29 10:55:12.000000000 +0100
|
|
||||||
@@ -1988,7 +1988,7 @@ c_number_of_children (struct varobj *var
|
|
||||||
{
|
|
||||||
case TYPE_CODE_ARRAY:
|
|
||||||
if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (target) > 0
|
|
||||||
- && TYPE_ARRAY_UPPER_BOUND_TYPE (type) != BOUND_CANNOT_BE_DETERMINED)
|
|
||||||
+ && !TYPE_ARRAY_UPPER_BOUND_IS_UNDEFINED (type))
|
|
||||||
children = TYPE_LENGTH (type) / TYPE_LENGTH (target);
|
|
||||||
else
|
|
||||||
/* If we don't know how many elements there are, don't display
|
|
@ -1,579 +0,0 @@
|
|||||||
http://sourceware.org/ml/gdb-cvs/2008-10/msg00099.html
|
|
||||||
|
|
||||||
2008-10-08 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
Convert static_kind into loc_kind enum.
|
|
||||||
* gdbtypes.h (enum field_loc_kind): New.
|
|
||||||
(union field_location): New field dwarf_block.
|
|
||||||
(struct field): Rename static_kind as loc_kind.
|
|
||||||
(FIELD_STATIC_KIND): Rename to ...
|
|
||||||
(FIELD_LOC_KIND): ... here.
|
|
||||||
(TYPE_FIELD_STATIC_KIND): Rename to ...
|
|
||||||
(TYPE_FIELD_LOC_KIND): ... here and use there now new FIELD_LOC_KIND.
|
|
||||||
(TYPE_FIELD_STATIC_HAS_ADDR): Remove.
|
|
||||||
(TYPE_FIELD_STATIC): Remove.
|
|
||||||
(TYPE_FIELD_BITPOS): Reformat.
|
|
||||||
(SET_FIELD_BITPOS): New.
|
|
||||||
(FIELD_PHYSADDR): Rename to ...
|
|
||||||
(FIELD_STATIC_PHYSADDR): ... here.
|
|
||||||
(TYPE_FIELD_STATIC_PHYSADDR): Follow the FIELD_PHYSADDR rename.
|
|
||||||
(SET_FIELD_PHYSADDR): Use new FIELD_LOC_KIND.
|
|
||||||
(FIELD_PHYSNAME): Rename to ...
|
|
||||||
(FIELD_STATIC_PHYSNAME): ... here.
|
|
||||||
(TYPE_FIELD_STATIC_PHYSNAME): Follow the FIELD_PHYSNAME rename.
|
|
||||||
(SET_FIELD_PHYSNAME): Use new FIELD_LOC_KIND.
|
|
||||||
(FIELD_DWARF_BLOCK, TYPE_FIELD_DWARF_BLOCK, SET_FIELD_DWARF_BLOCK): New.
|
|
||||||
(field_is_static): New declaration.
|
|
||||||
* gdbtypes.c (field_is_static): New function.
|
|
||||||
(copy_type_recursive): Update throughout.
|
|
||||||
* amd64-tdep.c, c-typeprint.c, coffread.c, cp-valprint.c, dwarf2read.c,
|
|
||||||
eval.c, jv-typeprint.c, jv-valprint.c, mdebugread.c, p-typeprint.c,
|
|
||||||
p-valprint.c, valops.c, value.c, varobj.c: Update throughout.
|
|
||||||
|
|
||||||
[ Ported to gdb-6.8fedora. ]
|
|
||||||
|
|
||||||
--- ./gdb/amd64-tdep.c 2008-10-29 10:47:21.000000000 +0100
|
|
||||||
+++ ./gdb/amd64-tdep.c 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -317,7 +317,7 @@ amd64_classify_aggregate (struct type *t
|
|
||||||
enum amd64_reg_class subclass[2];
|
|
||||||
|
|
||||||
/* Ignore static fields. */
|
|
||||||
- if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
gdb_assert (pos == 0 || pos == 1);
|
|
||||||
--- ./gdb/c-typeprint.c 2008-10-29 10:55:07.000000000 +0100
|
|
||||||
+++ ./gdb/c-typeprint.c 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -872,14 +872,12 @@ c_type_print_base (struct type *type, st
|
|
||||||
}
|
|
||||||
|
|
||||||
print_spaces_filtered (level + 4, stream);
|
|
||||||
- if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
- {
|
|
||||||
- fprintf_filtered (stream, "static ");
|
|
||||||
- }
|
|
||||||
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
+ fprintf_filtered (stream, "static ");
|
|
||||||
c_print_type (TYPE_FIELD_TYPE (type, i),
|
|
||||||
TYPE_FIELD_NAME (type, i),
|
|
||||||
stream, show - 1, level + 4);
|
|
||||||
- if (!TYPE_FIELD_STATIC (type, i)
|
|
||||||
+ if (!field_is_static (&TYPE_FIELD (type, i))
|
|
||||||
&& TYPE_FIELD_PACKED (type, i))
|
|
||||||
{
|
|
||||||
/* It is a bitfield. This code does not attempt
|
|
||||||
--- ./gdb/coffread.c 2008-01-16 12:21:42.000000000 +0100
|
|
||||||
+++ ./gdb/coffread.c 2008-10-29 20:58:56.000000000 +0100
|
|
||||||
@@ -1946,9 +1946,8 @@ coff_read_struct_type (int index, int le
|
|
||||||
strlen (name),
|
|
||||||
¤t_objfile->objfile_obstack);
|
|
||||||
FIELD_TYPE (list->field) = decode_type (ms, ms->c_type, &sub_aux);
|
|
||||||
- FIELD_BITPOS (list->field) = 8 * ms->c_value;
|
|
||||||
+ SET_FIELD_BITPOS (list->field, 8 * ms->c_value);
|
|
||||||
FIELD_BITSIZE (list->field) = 0;
|
|
||||||
- FIELD_STATIC_KIND (list->field) = 0;
|
|
||||||
nfields++;
|
|
||||||
break;
|
|
||||||
|
|
||||||
@@ -1965,9 +1964,8 @@ coff_read_struct_type (int index, int le
|
|
||||||
strlen (name),
|
|
||||||
¤t_objfile->objfile_obstack);
|
|
||||||
FIELD_TYPE (list->field) = decode_type (ms, ms->c_type, &sub_aux);
|
|
||||||
- FIELD_BITPOS (list->field) = ms->c_value;
|
|
||||||
+ SET_FIELD_BITPOS (list->field, ms->c_value);
|
|
||||||
FIELD_BITSIZE (list->field) = sub_aux.x_sym.x_misc.x_lnsz.x_size;
|
|
||||||
- FIELD_STATIC_KIND (list->field) = 0;
|
|
||||||
nfields++;
|
|
||||||
break;
|
|
||||||
|
|
||||||
@@ -2083,11 +2081,10 @@ coff_read_enum_type (int index, int leng
|
|
||||||
struct symbol *xsym = syms->symbol[j];
|
|
||||||
SYMBOL_TYPE (xsym) = type;
|
|
||||||
TYPE_FIELD_NAME (type, n) = DEPRECATED_SYMBOL_NAME (xsym);
|
|
||||||
- TYPE_FIELD_BITPOS (type, n) = SYMBOL_VALUE (xsym);
|
|
||||||
+ SET_FIELD_BITPOS (TYPE_FIELD (type, n), SYMBOL_VALUE (xsym));
|
|
||||||
if (SYMBOL_VALUE (xsym) < 0)
|
|
||||||
unsigned_enum = 0;
|
|
||||||
TYPE_FIELD_BITSIZE (type, n) = 0;
|
|
||||||
- TYPE_FIELD_STATIC_KIND (type, n) = 0;
|
|
||||||
}
|
|
||||||
if (syms == osyms)
|
|
||||||
break;
|
|
||||||
--- ./gdb/cp-valprint.c 2008-01-01 23:53:09.000000000 +0100
|
|
||||||
+++ ./gdb/cp-valprint.c 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -192,7 +192,8 @@ cp_print_value_fields (struct type *type
|
|
||||||
for (i = n_baseclasses; i < len; i++)
|
|
||||||
{
|
|
||||||
/* If requested, skip printing of static fields. */
|
|
||||||
- if (!static_field_print && TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ if (!static_field_print
|
|
||||||
+ && field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (fields_seen)
|
|
||||||
@@ -225,7 +226,7 @@ cp_print_value_fields (struct type *type
|
|
||||||
fputs_filtered ("\"( ptr \"", stream);
|
|
||||||
else
|
|
||||||
fputs_filtered ("\"( nodef \"", stream);
|
|
||||||
- if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
fputs_filtered ("static ", stream);
|
|
||||||
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
|
|
||||||
current_language->la_language,
|
|
||||||
@@ -240,7 +241,7 @@ cp_print_value_fields (struct type *type
|
|
||||||
{
|
|
||||||
annotate_field_begin (TYPE_FIELD_TYPE (type, i));
|
|
||||||
|
|
||||||
- if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
fputs_filtered ("static ", stream);
|
|
||||||
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
|
|
||||||
current_language->la_language,
|
|
||||||
@@ -252,7 +253,8 @@ cp_print_value_fields (struct type *type
|
|
||||||
annotate_field_value ();
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (!TYPE_FIELD_STATIC (type, i) && TYPE_FIELD_PACKED (type, i))
|
|
||||||
+ if (!field_is_static (&TYPE_FIELD (type, i))
|
|
||||||
+ && TYPE_FIELD_PACKED (type, i))
|
|
||||||
{
|
|
||||||
struct value *v;
|
|
||||||
|
|
||||||
@@ -277,7 +279,7 @@ cp_print_value_fields (struct type *type
|
|
||||||
{
|
|
||||||
fputs_filtered ("<optimized out or zero length>", stream);
|
|
||||||
}
|
|
||||||
- else if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ else if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
{
|
|
||||||
struct value *v = value_static_field (type, i);
|
|
||||||
if (v == NULL)
|
|
||||||
--- ./gdb/dwarf2read.c 2008-10-29 10:50:56.000000000 +0100
|
|
||||||
+++ ./gdb/dwarf2read.c 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -3492,7 +3492,7 @@ dwarf2_add_field (struct field_info *fip
|
|
||||||
/* Get type of field. */
|
|
||||||
fp->type = die_type (die, cu);
|
|
||||||
|
|
||||||
- FIELD_STATIC_KIND (*fp) = 0;
|
|
||||||
+ SET_FIELD_BITPOS (*fp, 0);
|
|
||||||
|
|
||||||
/* Get bit size of field (zero if none). */
|
|
||||||
attr = dwarf2_attr (die, DW_AT_bit_size, cu);
|
|
||||||
@@ -3521,10 +3521,8 @@ dwarf2_add_field (struct field_info *fip
|
|
||||||
else
|
|
||||||
byte_offset = decode_locdesc (DW_BLOCK (attr), cu);
|
|
||||||
|
|
||||||
- FIELD_BITPOS (*fp) = byte_offset * bits_per_byte;
|
|
||||||
+ SET_FIELD_BITPOS (*fp, byte_offset * bits_per_byte);
|
|
||||||
}
|
|
||||||
- else
|
|
||||||
- FIELD_BITPOS (*fp) = 0;
|
|
||||||
attr = dwarf2_attr (die, DW_AT_bit_offset, cu);
|
|
||||||
if (attr)
|
|
||||||
{
|
|
||||||
@@ -3617,10 +3615,9 @@ dwarf2_add_field (struct field_info *fip
|
|
||||||
/* C++ base class field. */
|
|
||||||
attr = dwarf2_attr (die, DW_AT_data_member_location, cu);
|
|
||||||
if (attr)
|
|
||||||
- FIELD_BITPOS (*fp) = (decode_locdesc (DW_BLOCK (attr), cu)
|
|
||||||
- * bits_per_byte);
|
|
||||||
+ SET_FIELD_BITPOS (*fp, decode_locdesc (DW_BLOCK (attr), cu)
|
|
||||||
+ * bits_per_byte);
|
|
||||||
FIELD_BITSIZE (*fp) = 0;
|
|
||||||
- FIELD_STATIC_KIND (*fp) = 0;
|
|
||||||
FIELD_TYPE (*fp) = die_type (die, cu);
|
|
||||||
FIELD_NAME (*fp) = type_name_no_tag (fp->type);
|
|
||||||
fip->nbaseclasses++;
|
|
||||||
@@ -4379,9 +4376,8 @@ process_enumeration_scope (struct die_in
|
|
||||||
|
|
||||||
FIELD_NAME (fields[num_fields]) = DEPRECATED_SYMBOL_NAME (sym);
|
|
||||||
FIELD_TYPE (fields[num_fields]) = NULL;
|
|
||||||
- FIELD_BITPOS (fields[num_fields]) = SYMBOL_VALUE (sym);
|
|
||||||
+ SET_FIELD_BITPOS (fields[num_fields], SYMBOL_VALUE (sym));
|
|
||||||
FIELD_BITSIZE (fields[num_fields]) = 0;
|
|
||||||
- FIELD_STATIC_KIND (fields[num_fields]) = 0;
|
|
||||||
|
|
||||||
num_fields++;
|
|
||||||
}
|
|
||||||
--- ./gdb/eval.c 2008-10-29 10:55:07.000000000 +0100
|
|
||||||
+++ ./gdb/eval.c 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -288,7 +288,8 @@ evaluate_struct_tuple (struct value *str
|
|
||||||
fieldno++;
|
|
||||||
/* Skip static fields. */
|
|
||||||
while (fieldno < TYPE_NFIELDS (struct_type)
|
|
||||||
- && TYPE_FIELD_STATIC_KIND (struct_type, fieldno))
|
|
||||||
+ && field_is_static (&TYPE_FIELD (struct_type,
|
|
||||||
+ fieldno)))
|
|
||||||
fieldno++;
|
|
||||||
subfieldno = fieldno;
|
|
||||||
if (fieldno >= TYPE_NFIELDS (struct_type))
|
|
||||||
--- ./gdb/gdbtypes.c 2008-10-29 10:55:07.000000000 +0100
|
|
||||||
+++ ./gdb/gdbtypes.c 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -2407,6 +2407,20 @@ print_arg_types (struct field *args, int
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+int
|
|
||||||
+field_is_static (struct field *f)
|
|
||||||
+{
|
|
||||||
+ /* "static" fields are the fields whose location is not relative
|
|
||||||
+ to the address of the enclosing struct. It would be nice to
|
|
||||||
+ have a dedicated flag that would be set for static fields when
|
|
||||||
+ the type is being created. But in practice, checking the field
|
|
||||||
+ loc_kind should give us an accurate answer (at least as long as
|
|
||||||
+ we assume that DWARF block locations are not going to be used
|
|
||||||
+ for static fields). FIXME? */
|
|
||||||
+ return (FIELD_LOC_KIND (*f) == FIELD_LOC_KIND_PHYSNAME
|
|
||||||
+ || FIELD_LOC_KIND (*f) == FIELD_LOC_KIND_PHYSADDR);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static void
|
|
||||||
dump_fn_fieldlists (struct type *type, int spaces)
|
|
||||||
{
|
|
||||||
@@ -2939,18 +2953,25 @@ copy_type_recursive (struct objfile *obj
|
|
||||||
if (TYPE_FIELD_NAME (type, i))
|
|
||||||
TYPE_FIELD_NAME (new_type, i) =
|
|
||||||
xstrdup (TYPE_FIELD_NAME (type, i));
|
|
||||||
- if (TYPE_FIELD_STATIC_HAS_ADDR (type, i))
|
|
||||||
- SET_FIELD_PHYSADDR (TYPE_FIELD (new_type, i),
|
|
||||||
- TYPE_FIELD_STATIC_PHYSADDR (type, i));
|
|
||||||
- else if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
- SET_FIELD_PHYSNAME (TYPE_FIELD (new_type, i),
|
|
||||||
- xstrdup (TYPE_FIELD_STATIC_PHYSNAME (type,
|
|
||||||
- i)));
|
|
||||||
- else
|
|
||||||
+ switch (TYPE_FIELD_LOC_KIND (type, i))
|
|
||||||
{
|
|
||||||
- TYPE_FIELD_BITPOS (new_type, i) =
|
|
||||||
- TYPE_FIELD_BITPOS (type, i);
|
|
||||||
- TYPE_FIELD_STATIC_KIND (new_type, i) = 0;
|
|
||||||
+ case FIELD_LOC_KIND_BITPOS:
|
|
||||||
+ SET_FIELD_BITPOS (TYPE_FIELD (new_type, i),
|
|
||||||
+ TYPE_FIELD_BITPOS (type, i));
|
|
||||||
+ break;
|
|
||||||
+ case FIELD_LOC_KIND_PHYSADDR:
|
|
||||||
+ SET_FIELD_PHYSADDR (TYPE_FIELD (new_type, i),
|
|
||||||
+ TYPE_FIELD_STATIC_PHYSADDR (type, i));
|
|
||||||
+ break;
|
|
||||||
+ case FIELD_LOC_KIND_PHYSNAME:
|
|
||||||
+ SET_FIELD_PHYSNAME (TYPE_FIELD (new_type, i),
|
|
||||||
+ xstrdup (TYPE_FIELD_STATIC_PHYSNAME (type,
|
|
||||||
+ i)));
|
|
||||||
+ break;
|
|
||||||
+ default:
|
|
||||||
+ internal_error (__FILE__, __LINE__,
|
|
||||||
+ _("Unexpected type field location kind: %d"),
|
|
||||||
+ TYPE_FIELD_LOC_KIND (type, i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
--- ./gdb/gdbtypes.h 2008-10-29 10:56:05.000000000 +0100
|
|
||||||
+++ ./gdb/gdbtypes.h 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -310,6 +310,16 @@ enum type_code
|
|
||||||
#define TYPE_FLAG_NOTTEXT (1 << 17)
|
|
||||||
#define TYPE_NOTTEXT(t) (TYPE_FLAGS (t) & TYPE_FLAG_NOTTEXT)
|
|
||||||
|
|
||||||
+/* Determine which field of the union main_type.fields[x].loc is used. */
|
|
||||||
+
|
|
||||||
+enum field_loc_kind
|
|
||||||
+ {
|
|
||||||
+ FIELD_LOC_KIND_BITPOS, /* bitpos */
|
|
||||||
+ FIELD_LOC_KIND_PHYSADDR, /* physaddr */
|
|
||||||
+ FIELD_LOC_KIND_PHYSNAME, /* physname */
|
|
||||||
+ FIELD_LOC_KIND_DWARF_BLOCK /* dwarf_block */
|
|
||||||
+ };
|
|
||||||
+
|
|
||||||
/* This structure is space-critical.
|
|
||||||
Its layout has been tweaked to reduce the space used. */
|
|
||||||
|
|
||||||
@@ -415,6 +425,12 @@ struct main_type
|
|
||||||
|
|
||||||
CORE_ADDR physaddr;
|
|
||||||
char *physname;
|
|
||||||
+
|
|
||||||
+ /* The field location can be computed by evaluating the following DWARF
|
|
||||||
+ block. This can be used in Fortran variable-length arrays, for
|
|
||||||
+ instance. */
|
|
||||||
+
|
|
||||||
+ struct dwarf2_locexpr_baton *dwarf_block;
|
|
||||||
}
|
|
||||||
loc;
|
|
||||||
|
|
||||||
@@ -424,11 +440,8 @@ struct main_type
|
|
||||||
defined. */
|
|
||||||
unsigned int artificial : 1;
|
|
||||||
|
|
||||||
- /* This flag is zero for non-static fields, 1 for fields whose location
|
|
||||||
- is specified by the label loc.physname, and 2 for fields whose location
|
|
||||||
- is specified by loc.physaddr. */
|
|
||||||
-
|
|
||||||
- unsigned int static_kind : 2;
|
|
||||||
+ /* Discriminant for union field_location. */
|
|
||||||
+ ENUM_BITFIELD(field_loc_kind) loc_kind : 2;
|
|
||||||
|
|
||||||
/* Size of this field, in bits, or zero if not packed.
|
|
||||||
For an unpacked field, the field's type's length
|
|
||||||
@@ -824,20 +837,34 @@ extern void allocate_cplus_struct_type (
|
|
||||||
|
|
||||||
#define FIELD_TYPE(thisfld) ((thisfld).type)
|
|
||||||
#define FIELD_NAME(thisfld) ((thisfld).name)
|
|
||||||
+#define FIELD_LOC_KIND(thisfld) ((thisfld).loc_kind)
|
|
||||||
#define FIELD_BITPOS(thisfld) ((thisfld).loc.bitpos)
|
|
||||||
+#define FIELD_STATIC_PHYSNAME(thisfld) ((thisfld).loc.physname)
|
|
||||||
+#define FIELD_STATIC_PHYSADDR(thisfld) ((thisfld).loc.physaddr)
|
|
||||||
+#define FIELD_DWARF_BLOCK(thisfld) ((thisfld).loc.dwarf_block)
|
|
||||||
+#define SET_FIELD_BITPOS(thisfld, bitpos) \
|
|
||||||
+ (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_BITPOS, \
|
|
||||||
+ FIELD_BITPOS (thisfld) = (bitpos))
|
|
||||||
+#define SET_FIELD_PHYSNAME(thisfld, name) \
|
|
||||||
+ (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSNAME, \
|
|
||||||
+ FIELD_STATIC_PHYSNAME (thisfld) = (name))
|
|
||||||
+#define SET_FIELD_PHYSADDR(thisfld, addr) \
|
|
||||||
+ (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSADDR, \
|
|
||||||
+ FIELD_STATIC_PHYSADDR (thisfld) = (addr))
|
|
||||||
+#define SET_FIELD_DWARF_BLOCK(thisfld, addr) \
|
|
||||||
+ (FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_DWARF_BLOCK, \
|
|
||||||
+ FIELD_DWARF_BLOCK (thisfld) = (addr))
|
|
||||||
#define FIELD_ARTIFICIAL(thisfld) ((thisfld).artificial)
|
|
||||||
#define FIELD_BITSIZE(thisfld) ((thisfld).bitsize)
|
|
||||||
-#define FIELD_STATIC_KIND(thisfld) ((thisfld).static_kind)
|
|
||||||
-#define FIELD_PHYSNAME(thisfld) ((thisfld).loc.physname)
|
|
||||||
-#define FIELD_PHYSADDR(thisfld) ((thisfld).loc.physaddr)
|
|
||||||
-#define SET_FIELD_PHYSNAME(thisfld, name) \
|
|
||||||
- ((thisfld).static_kind = 1, FIELD_PHYSNAME(thisfld) = (name))
|
|
||||||
-#define SET_FIELD_PHYSADDR(thisfld, name) \
|
|
||||||
- ((thisfld).static_kind = 2, FIELD_PHYSADDR(thisfld) = (name))
|
|
||||||
+
|
|
||||||
#define TYPE_FIELD(thistype, n) TYPE_MAIN_TYPE(thistype)->fields[n]
|
|
||||||
#define TYPE_FIELD_TYPE(thistype, n) FIELD_TYPE(TYPE_FIELD(thistype, n))
|
|
||||||
#define TYPE_FIELD_NAME(thistype, n) FIELD_NAME(TYPE_FIELD(thistype, n))
|
|
||||||
-#define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS(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_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME (TYPE_FIELD (thistype, n))
|
|
||||||
+#define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR (TYPE_FIELD (thistype, n))
|
|
||||||
+#define TYPE_FIELD_DWARF_BLOCK(thistype, n) FIELD_DWARF_BLOCK (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_PACKED(thistype, n) (FIELD_BITSIZE(TYPE_FIELD(thistype,n))!=0)
|
|
||||||
@@ -873,12 +900,6 @@ extern void allocate_cplus_struct_type (
|
|
||||||
(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits == NULL ? 0 \
|
|
||||||
: B_TST(TYPE_CPLUS_SPECIFIC(thistype)->virtual_field_bits, (n)))
|
|
||||||
|
|
||||||
-#define TYPE_FIELD_STATIC(thistype, n) (TYPE_MAIN_TYPE (thistype)->fields[n].static_kind != 0)
|
|
||||||
-#define TYPE_FIELD_STATIC_KIND(thistype, n) TYPE_MAIN_TYPE (thistype)->fields[n].static_kind
|
|
||||||
-#define TYPE_FIELD_STATIC_HAS_ADDR(thistype, n) (TYPE_MAIN_TYPE (thistype)->fields[n].static_kind == 2)
|
|
||||||
-#define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_PHYSNAME(TYPE_FIELD(thistype, n))
|
|
||||||
-#define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_PHYSADDR(TYPE_FIELD(thistype, n))
|
|
||||||
-
|
|
||||||
#define TYPE_FN_FIELDLISTS(thistype) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists
|
|
||||||
#define TYPE_FN_FIELDLIST(thistype, n) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists[n]
|
|
||||||
#define TYPE_FN_FIELDLIST1(thistype, n) TYPE_CPLUS_SPECIFIC(thistype)->fn_fieldlists[n].fn_fields
|
|
||||||
@@ -1331,6 +1352,8 @@ extern int rank_one_type (struct type *,
|
|
||||||
|
|
||||||
extern void recursive_dump_type (struct type *, int);
|
|
||||||
|
|
||||||
+extern int field_is_static (struct field *);
|
|
||||||
+
|
|
||||||
/* printcmd.c */
|
|
||||||
|
|
||||||
extern void print_scalar_formatted (const void *, struct type *, int, int,
|
|
||||||
--- ./gdb/jv-typeprint.c 2008-01-01 23:53:11.000000000 +0100
|
|
||||||
+++ ./gdb/jv-typeprint.c 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -185,7 +185,7 @@ java_type_print_base (struct type *type,
|
|
||||||
fprintf_filtered (stream, "public ");
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
fprintf_filtered (stream, "static ");
|
|
||||||
|
|
||||||
java_print_type (TYPE_FIELD_TYPE (type, i),
|
|
||||||
--- ./gdb/jv-valprint.c 2008-01-01 23:53:11.000000000 +0100
|
|
||||||
+++ ./gdb/jv-valprint.c 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -302,7 +302,7 @@ java_print_value_fields (struct type *ty
|
|
||||||
for (i = n_baseclasses; i < len; i++)
|
|
||||||
{
|
|
||||||
/* If requested, skip printing of static fields. */
|
|
||||||
- if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
{
|
|
||||||
char *name = TYPE_FIELD_NAME (type, i);
|
|
||||||
if (!static_field_print)
|
|
||||||
@@ -340,7 +340,7 @@ java_print_value_fields (struct type *ty
|
|
||||||
fputs_filtered ("\"( ptr \"", stream);
|
|
||||||
else
|
|
||||||
fputs_filtered ("\"( nodef \"", stream);
|
|
||||||
- if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
fputs_filtered ("static ", stream);
|
|
||||||
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
|
|
||||||
language_cplus,
|
|
||||||
@@ -355,7 +355,7 @@ java_print_value_fields (struct type *ty
|
|
||||||
{
|
|
||||||
annotate_field_begin (TYPE_FIELD_TYPE (type, i));
|
|
||||||
|
|
||||||
- if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
fputs_filtered ("static ", stream);
|
|
||||||
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
|
|
||||||
language_cplus,
|
|
||||||
@@ -365,7 +365,8 @@ java_print_value_fields (struct type *ty
|
|
||||||
annotate_field_value ();
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (!TYPE_FIELD_STATIC (type, i) && TYPE_FIELD_PACKED (type, i))
|
|
||||||
+ if (!field_is_static (&TYPE_FIELD (type, i))
|
|
||||||
+ && TYPE_FIELD_PACKED (type, i))
|
|
||||||
{
|
|
||||||
struct value *v;
|
|
||||||
|
|
||||||
@@ -389,7 +390,7 @@ java_print_value_fields (struct type *ty
|
|
||||||
{
|
|
||||||
fputs_filtered ("<optimized out or zero length>", stream);
|
|
||||||
}
|
|
||||||
- else if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ else if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
{
|
|
||||||
struct value *v = value_static_field (type, i);
|
|
||||||
if (v == NULL)
|
|
||||||
--- ./gdb/mdebugread.c 2008-01-01 23:53:12.000000000 +0100
|
|
||||||
+++ ./gdb/mdebugread.c 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -1053,11 +1053,10 @@ parse_symbol (SYMR *sh, union aux_ext *a
|
|
||||||
if (tsym.st != stMember)
|
|
||||||
break;
|
|
||||||
|
|
||||||
- FIELD_BITPOS (*f) = tsym.value;
|
|
||||||
+ SET_FIELD_BITPOS (*f, tsym.value);
|
|
||||||
FIELD_TYPE (*f) = t;
|
|
||||||
FIELD_NAME (*f) = debug_info->ss + cur_fdr->issBase + tsym.iss;
|
|
||||||
FIELD_BITSIZE (*f) = 0;
|
|
||||||
- FIELD_STATIC_KIND (*f) = 0;
|
|
||||||
|
|
||||||
enum_sym = ((struct symbol *)
|
|
||||||
obstack_alloc (¤t_objfile->objfile_obstack,
|
|
||||||
@@ -1247,11 +1246,10 @@ parse_symbol (SYMR *sh, union aux_ext *a
|
|
||||||
case stMember: /* member of struct or union */
|
|
||||||
f = &TYPE_FIELDS (top_stack->cur_type)[top_stack->cur_field++];
|
|
||||||
FIELD_NAME (*f) = name;
|
|
||||||
- FIELD_BITPOS (*f) = sh->value;
|
|
||||||
+ SET_FIELD_BITPOS (*f, sh->value);
|
|
||||||
bitsize = 0;
|
|
||||||
FIELD_TYPE (*f) = parse_type (cur_fd, ax, sh->index, &bitsize, bigend, name);
|
|
||||||
FIELD_BITSIZE (*f) = bitsize;
|
|
||||||
- FIELD_STATIC_KIND (*f) = 0;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case stIndirect: /* forward declaration on Irix5 */
|
|
||||||
--- ./gdb/p-typeprint.c 2008-10-29 10:55:12.000000000 +0100
|
|
||||||
+++ ./gdb/p-typeprint.c 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -575,14 +575,12 @@ pascal_type_print_base (struct type *typ
|
|
||||||
}
|
|
||||||
|
|
||||||
print_spaces_filtered (level + 4, stream);
|
|
||||||
- if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
- {
|
|
||||||
- fprintf_filtered (stream, "static ");
|
|
||||||
- }
|
|
||||||
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
+ fprintf_filtered (stream, "static ");
|
|
||||||
pascal_print_type (TYPE_FIELD_TYPE (type, i),
|
|
||||||
TYPE_FIELD_NAME (type, i),
|
|
||||||
stream, show - 1, level + 4);
|
|
||||||
- if (!TYPE_FIELD_STATIC (type, i)
|
|
||||||
+ if (!field_is_static (&TYPE_FIELD (type, i))
|
|
||||||
&& TYPE_FIELD_PACKED (type, i))
|
|
||||||
{
|
|
||||||
/* It is a bitfield. This code does not attempt
|
|
||||||
--- ./gdb/p-valprint.c 2008-01-01 23:53:12.000000000 +0100
|
|
||||||
+++ ./gdb/p-valprint.c 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -671,7 +671,8 @@ pascal_object_print_value_fields (struct
|
|
||||||
for (i = n_baseclasses; i < len; i++)
|
|
||||||
{
|
|
||||||
/* If requested, skip printing of static fields. */
|
|
||||||
- if (!pascal_static_field_print && TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ if (!pascal_static_field_print
|
|
||||||
+ && field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
continue;
|
|
||||||
if (fields_seen)
|
|
||||||
fprintf_filtered (stream, ", ");
|
|
||||||
@@ -703,7 +704,7 @@ pascal_object_print_value_fields (struct
|
|
||||||
fputs_filtered ("\"( ptr \"", stream);
|
|
||||||
else
|
|
||||||
fputs_filtered ("\"( nodef \"", stream);
|
|
||||||
- if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
fputs_filtered ("static ", stream);
|
|
||||||
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
|
|
||||||
language_cplus,
|
|
||||||
@@ -718,7 +719,7 @@ pascal_object_print_value_fields (struct
|
|
||||||
{
|
|
||||||
annotate_field_begin (TYPE_FIELD_TYPE (type, i));
|
|
||||||
|
|
||||||
- if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
fputs_filtered ("static ", stream);
|
|
||||||
fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
|
|
||||||
language_cplus,
|
|
||||||
@@ -728,7 +729,8 @@ pascal_object_print_value_fields (struct
|
|
||||||
annotate_field_value ();
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (!TYPE_FIELD_STATIC (type, i) && TYPE_FIELD_PACKED (type, i))
|
|
||||||
+ if (!field_is_static (&TYPE_FIELD (type, i))
|
|
||||||
+ && TYPE_FIELD_PACKED (type, i))
|
|
||||||
{
|
|
||||||
struct value *v;
|
|
||||||
|
|
||||||
@@ -752,7 +754,7 @@ pascal_object_print_value_fields (struct
|
|
||||||
{
|
|
||||||
fputs_filtered ("<optimized out or zero length>", stream);
|
|
||||||
}
|
|
||||||
- else if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ else if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
{
|
|
||||||
/* struct value *v = value_static_field (type, i); v4.17 specific */
|
|
||||||
struct value *v;
|
|
||||||
--- ./gdb/valops.c 2008-10-29 10:55:12.000000000 +0100
|
|
||||||
+++ ./gdb/valops.c 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -1269,7 +1269,7 @@ search_struct_field (char *name, struct
|
|
||||||
if (t_field_name && (strcmp_iw (t_field_name, name) == 0))
|
|
||||||
{
|
|
||||||
struct value *v;
|
|
||||||
- if (TYPE_FIELD_STATIC (type, i))
|
|
||||||
+ if (field_is_static (&TYPE_FIELD (type, i)))
|
|
||||||
{
|
|
||||||
v = value_static_field (type, i);
|
|
||||||
if (v == 0)
|
|
||||||
@@ -2382,7 +2382,7 @@ value_struct_elt_for_reference (struct t
|
|
||||||
|
|
||||||
if (t_field_name && strcmp (t_field_name, name) == 0)
|
|
||||||
{
|
|
||||||
- if (TYPE_FIELD_STATIC (t, i))
|
|
||||||
+ if (field_is_static (&TYPE_FIELD (t, i)))
|
|
||||||
{
|
|
||||||
v = value_static_field (t, i);
|
|
||||||
if (v == NULL)
|
|
||||||
--- ./gdb/value.c 2008-10-29 10:47:18.000000000 +0100
|
|
||||||
+++ ./gdb/value.c 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -1261,7 +1261,7 @@ value_static_field (struct type *type, i
|
|
||||||
{
|
|
||||||
struct value *retval;
|
|
||||||
|
|
||||||
- if (TYPE_FIELD_STATIC_HAS_ADDR (type, fieldno))
|
|
||||||
+ if (TYPE_FIELD_LOC_KIND (type, fieldno) == FIELD_LOC_KIND_PHYSADDR)
|
|
||||||
{
|
|
||||||
retval = value_at (TYPE_FIELD_TYPE (type, fieldno),
|
|
||||||
TYPE_FIELD_STATIC_PHYSADDR (type, fieldno));
|
|
||||||
--- ./gdb/varobj.c 2008-10-29 10:55:12.000000000 +0100
|
|
||||||
+++ ./gdb/varobj.c 2008-10-29 20:56:57.000000000 +0100
|
|
||||||
@@ -2050,7 +2050,7 @@ value_struct_element_index (struct value
|
|
||||||
|
|
||||||
TRY_CATCH (e, RETURN_MASK_ERROR)
|
|
||||||
{
|
|
||||||
- if (TYPE_FIELD_STATIC (type, type_index))
|
|
||||||
+ if (field_is_static (&TYPE_FIELD (type, type_index)))
|
|
||||||
result = value_static_field (type, type_index);
|
|
||||||
else
|
|
||||||
result = value_primitive_field (value, 0, type_index, type);
|
|
File diff suppressed because it is too large
Load Diff
@ -1,24 +1,24 @@
|
|||||||
Fix resolving of variables at locations lists in prelinked libs (BZ 466901).
|
Fix resolving of variables at locations lists in prelinked libs (BZ 466901).
|
||||||
|
|
||||||
--- ./gdb/dwarf2loc.c-orig 2008-11-06 22:17:45.000000000 +0100
|
Index: gdb-6.8.50.20081128/gdb/dwarf2loc.c
|
||||||
+++ ./gdb/dwarf2loc.c 2008-11-06 22:18:01.000000000 +0100
|
===================================================================
|
||||||
@@ -57,9 +57,12 @@ find_location_expression (struct dwarf2_
|
--- gdb-6.8.50.20081128.orig/gdb/dwarf2loc.c 2008-12-08 11:00:45.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/dwarf2loc.c 2008-12-08 18:02:49.000000000 +0100
|
||||||
|
@@ -55,7 +55,9 @@ find_location_expression (struct dwarf2_
|
||||||
|
CORE_ADDR low, high;
|
||||||
|
gdb_byte *loc_ptr, *buf_end;
|
||||||
int length;
|
int length;
|
||||||
unsigned int addr_size = gdbarch_addr_bit (current_gdbarch) / TARGET_CHAR_BIT;
|
- 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);
|
||||||
|
unsigned int addr_size = dwarf2_per_cu_addr_size (baton->per_cu);
|
||||||
CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
|
CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
|
||||||
+ struct objfile *objfile = (baton->objfile->separate_debug_objfile
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp
|
||||||
+ ? baton->objfile->separate_debug_objfile
|
===================================================================
|
||||||
+ : baton->objfile);
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
/* Adjust base_address for relocatable objects. */
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp 2008-12-08 18:00:43.000000000 +0100
|
||||||
- CORE_ADDR base_offset = ANOFFSET (baton->objfile->section_offsets,
|
|
||||||
- SECT_OFF_TEXT (baton->objfile));
|
|
||||||
+ CORE_ADDR base_offset = ANOFFSET (objfile->section_offsets,
|
|
||||||
+ SECT_OFF_TEXT (objfile));
|
|
||||||
CORE_ADDR base_address = baton->base_address + base_offset;
|
|
||||||
|
|
||||||
loc_ptr = baton->data;
|
|
||||||
--- /dev/null 2008-11-06 15:02:28.406299691 +0100
|
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp 2008-11-06 23:11:02.000000000 +0100
|
|
||||||
@@ -0,0 +1,102 @@
|
@@ -0,0 +1,102 @@
|
||||||
+# Copyright 2008 Free Software Foundation, Inc.
|
+# Copyright 2008 Free Software Foundation, Inc.
|
||||||
+
|
+
|
||||||
@ -122,8 +122,10 @@ Fix resolving of variables at locations lists in prelinked libs (BZ 466901).
|
|||||||
+
|
+
|
||||||
+# `abort' can get expressed as `*__GI_abort'.
|
+# `abort' can get expressed as `*__GI_abort'.
|
||||||
+gdb_test "bt full" "in \[^ \]*abort \\(.*in func \\(.*\ti = -?\[0-9\].*in main \\(.*" "Backtrace after abort()"
|
+gdb_test "bt full" "in \[^ \]*abort \\(.*in func \\(.*\ti = -?\[0-9\].*in main \\(.*" "Backtrace after abort()"
|
||||||
--- /dev/null 2008-11-06 15:02:28.406299691 +0100
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c 2008-11-06 22:59:05.000000000 +0100
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c 2008-12-08 18:00:43.000000000 +0100
|
||||||
@@ -0,0 +1,26 @@
|
@@ -0,0 +1,26 @@
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
+/* This testcase is part of GDB, the GNU debugger.
|
||||||
+
|
+
|
||||||
@ -151,8 +153,10 @@ Fix resolving of variables at locations lists in prelinked libs (BZ 466901).
|
|||||||
+ func ();
|
+ func ();
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+}
|
+}
|
||||||
--- /dev/null 2008-11-06 15:02:28.406299691 +0100
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-func.S
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-func.S 2008-11-06 22:49:50.000000000 +0100
|
===================================================================
|
||||||
|
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-func.S 2008-12-08 18:00:43.000000000 +0100
|
||||||
@@ -0,0 +1,328 @@
|
@@ -0,0 +1,328 @@
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
+/* This testcase is part of GDB, the GNU debugger.
|
||||||
+
|
+
|
||||||
|
@ -18,11 +18,11 @@
|
|||||||
gdb.base/watchpoint.c (global_ptr_ptr): New variable.
|
gdb.base/watchpoint.c (global_ptr_ptr): New variable.
|
||||||
(func4): New testing code for GLOBAL_PTR_PTR.
|
(func4): New testing code for GLOBAL_PTR_PTR.
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/breakpoint.c
|
Index: gdb-6.8.50.20081128/gdb/breakpoint.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/breakpoint.c 2008-07-14 10:28:30.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/breakpoint.c 2008-12-01 16:13:12.000000000 +0100
|
||||||
+++ gdb-6.8/gdb/breakpoint.c 2008-07-14 10:28:36.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/breakpoint.c 2008-12-03 00:00:08.000000000 +0100
|
||||||
@@ -846,7 +846,15 @@ is_hardware_watchpoint (struct breakpoin
|
@@ -770,7 +770,15 @@ is_hardware_watchpoint (struct breakpoin
|
||||||
If VAL_CHAIN is non-NULL, *VAL_CHAIN will be released from the
|
If VAL_CHAIN is non-NULL, *VAL_CHAIN will be released from the
|
||||||
value chain. The caller must free the values individually. If
|
value chain. The caller must free the values individually. If
|
||||||
VAL_CHAIN is NULL, all generated values will be left on the value
|
VAL_CHAIN is NULL, all generated values will be left on the value
|
||||||
@ -39,7 +39,7 @@ Index: gdb-6.8/gdb/breakpoint.c
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
fetch_watchpoint_value (struct expression *exp, struct value **valp,
|
fetch_watchpoint_value (struct expression *exp, struct value **valp,
|
||||||
@@ -5705,7 +5713,7 @@ watch_command_1 (char *arg, int accessfl
|
@@ -5824,7 +5832,7 @@ watch_command_1 (char *arg, int accessfl
|
||||||
struct symtab_and_line sal;
|
struct symtab_and_line sal;
|
||||||
struct expression *exp;
|
struct expression *exp;
|
||||||
struct block *exp_valid_block;
|
struct block *exp_valid_block;
|
||||||
@ -48,7 +48,7 @@ Index: gdb-6.8/gdb/breakpoint.c
|
|||||||
struct frame_info *frame;
|
struct frame_info *frame;
|
||||||
struct frame_info *prev_frame = NULL;
|
struct frame_info *prev_frame = NULL;
|
||||||
char *exp_start = NULL;
|
char *exp_start = NULL;
|
||||||
@@ -5791,6 +5799,27 @@ watch_command_1 (char *arg, int accessfl
|
@@ -5910,6 +5918,27 @@ watch_command_1 (char *arg, int accessfl
|
||||||
exp_valid_block = innermost_block;
|
exp_valid_block = innermost_block;
|
||||||
mark = value_mark ();
|
mark = value_mark ();
|
||||||
fetch_watchpoint_value (exp, &val, NULL, NULL);
|
fetch_watchpoint_value (exp, &val, NULL, NULL);
|
||||||
@ -76,11 +76,11 @@ Index: gdb-6.8/gdb/breakpoint.c
|
|||||||
if (val != NULL)
|
if (val != NULL)
|
||||||
release_value (val);
|
release_value (val);
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/gdbtypes.h
|
Index: gdb-6.8.50.20081128/gdb/gdbtypes.h
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/gdbtypes.h 2008-07-14 10:28:30.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/gdbtypes.h 2008-12-02 22:53:14.000000000 +0100
|
||||||
+++ gdb-6.8/gdb/gdbtypes.h 2008-07-14 10:28:36.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/gdbtypes.h 2008-12-03 00:00:08.000000000 +0100
|
||||||
@@ -69,7 +69,22 @@ enum type_code
|
@@ -70,7 +70,22 @@ enum type_code
|
||||||
TYPE_CODE_UNION, /* C union or Pascal variant part */
|
TYPE_CODE_UNION, /* C union or Pascal variant part */
|
||||||
TYPE_CODE_ENUM, /* Enumeration type */
|
TYPE_CODE_ENUM, /* Enumeration type */
|
||||||
TYPE_CODE_FLAGS, /* Bit flags type */
|
TYPE_CODE_FLAGS, /* Bit flags type */
|
||||||
@ -104,11 +104,11 @@ Index: gdb-6.8/gdb/gdbtypes.h
|
|||||||
TYPE_CODE_INT, /* Integer type */
|
TYPE_CODE_INT, /* Integer type */
|
||||||
|
|
||||||
/* Floating type. This is *NOT* a complex type. Beware, there are parts
|
/* Floating type. This is *NOT* a complex type. Beware, there are parts
|
||||||
Index: gdb-6.8/gdb/doc/gdb.texinfo
|
Index: gdb-6.8.50.20081128/gdb/doc/gdb.texinfo
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/doc/gdb.texinfo 2008-07-14 10:28:29.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/doc/gdb.texinfo 2008-12-02 23:43:49.000000000 +0100
|
||||||
+++ gdb-6.8/gdb/doc/gdb.texinfo 2008-07-14 10:28:36.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/doc/gdb.texinfo 2008-12-03 00:00:08.000000000 +0100
|
||||||
@@ -3267,6 +3267,18 @@ This command prints a list of watchpoint
|
@@ -3479,6 +3479,18 @@ This command prints a list of watchpoint
|
||||||
it is the same as @code{info break} (@pxref{Set Breaks}).
|
it is the same as @code{info break} (@pxref{Set Breaks}).
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@ -127,10 +127,10 @@ Index: gdb-6.8/gdb/doc/gdb.texinfo
|
|||||||
@value{GDBN} sets a @dfn{hardware watchpoint} if possible. Hardware
|
@value{GDBN} sets a @dfn{hardware watchpoint} if possible. Hardware
|
||||||
watchpoints execute very quickly, and the debugger reports a change in
|
watchpoints execute very quickly, and the debugger reports a change in
|
||||||
value at the exact instruction where the change occurs. If @value{GDBN}
|
value at the exact instruction where the change occurs. If @value{GDBN}
|
||||||
Index: gdb-6.8/gdb/testsuite/gdb.base/watchpoint.c
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.base/watchpoint.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/testsuite/gdb.base/watchpoint.c 2008-07-14 10:28:30.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.base/watchpoint.c 2008-03-03 14:24:12.000000000 +0100
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.base/watchpoint.c 2008-07-14 10:28:36.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.base/watchpoint.c 2008-12-03 00:00:08.000000000 +0100
|
||||||
@@ -40,6 +40,7 @@ struct foo struct1, struct2, *ptr1, *ptr
|
@@ -40,6 +40,7 @@ struct foo struct1, struct2, *ptr1, *ptr
|
||||||
int doread = 0;
|
int doread = 0;
|
||||||
|
|
||||||
@ -150,11 +150,11 @@ Index: gdb-6.8/gdb/testsuite/gdb.base/watchpoint.c
|
|||||||
}
|
}
|
||||||
|
|
||||||
int main ()
|
int main ()
|
||||||
Index: gdb-6.8/gdb/testsuite/gdb.base/watchpoint.exp
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.base/watchpoint.exp
|
||||||
===================================================================
|
===================================================================
|
||||||
--- gdb-6.8.orig/gdb/testsuite/gdb.base/watchpoint.exp 2008-07-14 10:28:30.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.base/watchpoint.exp 2008-08-06 14:52:07.000000000 +0200
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.base/watchpoint.exp 2008-07-14 10:28:36.000000000 +0200
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.base/watchpoint.exp 2008-12-03 00:01:07.000000000 +0100
|
||||||
@@ -644,7 +644,21 @@ proc test_watchpoint_and_breakpoint {} {
|
@@ -641,7 +641,21 @@ proc test_watchpoint_and_breakpoint {} {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -177,7 +177,7 @@ Index: gdb-6.8/gdb/testsuite/gdb.base/watchpoint.exp
|
|||||||
proc test_inaccessible_watchpoint {} {
|
proc test_inaccessible_watchpoint {} {
|
||||||
global gdb_prompt
|
global gdb_prompt
|
||||||
|
|
||||||
@@ -653,7 +667,8 @@ proc test_inaccessible_watchpoint {} {
|
@@ -650,7 +664,8 @@ proc test_inaccessible_watchpoint {} {
|
||||||
|
|
||||||
if [runto func4] then {
|
if [runto func4] then {
|
||||||
gdb_test "watch *global_ptr" ".*atchpoint \[0-9\]+: \\*global_ptr"
|
gdb_test "watch *global_ptr" ".*atchpoint \[0-9\]+: \\*global_ptr"
|
||||||
@ -187,7 +187,7 @@ Index: gdb-6.8/gdb/testsuite/gdb.base/watchpoint.exp
|
|||||||
gdb_test_multiple "next" "next over ptr init" {
|
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 $" {
|
-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.
|
# We can not test for <unknown> here because NULL may be readable.
|
||||||
@@ -666,6 +681,28 @@ proc test_inaccessible_watchpoint {} {
|
@@ -663,6 +678,28 @@ proc test_inaccessible_watchpoint {} {
|
||||||
pass "next over buffer set"
|
pass "next over buffer set"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -215,8 +215,8 @@ Index: gdb-6.8/gdb/testsuite/gdb.base/watchpoint.exp
|
|||||||
+ gdb_test "delete \$global_ptr_ptr_breakpoint_number" ""
|
+ gdb_test "delete \$global_ptr_ptr_breakpoint_number" ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -834,6 +871,17 @@ if [initialize] then {
|
@@ -830,6 +867,17 @@ if [initialize] then {
|
||||||
}
|
}
|
||||||
|
|
||||||
test_watchpoint_and_breakpoint
|
test_watchpoint_and_breakpoint
|
||||||
|
@ -1,544 +0,0 @@
|
|||||||
2008-06-08 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* configure.ac: Add check for HAVE_PERSONALITY and
|
|
||||||
HAVE_DECL_ADDR_NO_RANDOMIZE.
|
|
||||||
* configure, config.in: Regenerate.
|
|
||||||
* fork-child.c: New include <errno.h>.
|
|
||||||
[HAVE_PERSONALITY]: New include <sys/personality.h>.
|
|
||||||
[HAVE_PERSONALITY] (set_disable_randomization): New function.
|
|
||||||
(disable_randomization, show_disable_randomization): New.
|
|
||||||
(fork_inferior) [HAVE_PERSONALITY] [!HAVE_DECL_ADDR_NO_RANDOMIZE]: Set
|
|
||||||
ADDR_NO_RANDOMIZE.
|
|
||||||
(fork_inferior) [HAVE_PERSONALITY]: Disable randomization upon the
|
|
||||||
variable DISABLE_RANDOMIZATION.
|
|
||||||
(_initialize_fork_child): Call ADD_SETSHOW_BOOLEAN_CMD for the variable
|
|
||||||
DISABLE_RANDOMIZATION.
|
|
||||||
|
|
||||||
2008-06-08 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* gdb.texinfo (Starting): Document "set disable-randomization".
|
|
||||||
|
|
||||||
2008-06-08 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* gdb.base/randomize.exp, gdb.base/randomize.c: New files.
|
|
||||||
|
|
||||||
[ Ported for Fedora GDB. ]
|
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/config.in
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.orig/gdb/config.in 2008-07-14 10:27:27.000000000 +0200
|
|
||||||
+++ gdb-6.8/gdb/config.in 2008-07-14 10:28:50.000000000 +0200
|
|
||||||
@@ -64,6 +64,10 @@
|
|
||||||
/* Define to 1 if you have the <curses.h> header file. */
|
|
||||||
#undef HAVE_CURSES_H
|
|
||||||
|
|
||||||
+/* Define to 1 if you have the declaration of `ADDR_NO_RANDOMIZE', and to 0 if
|
|
||||||
+ you don't. */
|
|
||||||
+#undef HAVE_DECL_ADDR_NO_RANDOMIZE
|
|
||||||
+
|
|
||||||
/* Define to 1 if you have the declaration of `free', and to 0 if you don't.
|
|
||||||
*/
|
|
||||||
#undef HAVE_DECL_FREE
|
|
||||||
@@ -203,6 +207,9 @@
|
|
||||||
/* Define to 1 if you have the <nlist.h> header file. */
|
|
||||||
#undef HAVE_NLIST_H
|
|
||||||
|
|
||||||
+/* Define if you support the personality syscall. */
|
|
||||||
+#undef HAVE_PERSONALITY
|
|
||||||
+
|
|
||||||
/* Define to 1 if you have the `poll' function. */
|
|
||||||
#undef HAVE_POLL
|
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/configure
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.orig/gdb/configure 2008-07-14 10:27:27.000000000 +0200
|
|
||||||
+++ gdb-6.8/gdb/configure 2008-07-14 10:28:50.000000000 +0200
|
|
||||||
@@ -22911,6 +22911,188 @@ _ACEOF
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
+echo "$as_me:$LINENO: checking whether ADDR_NO_RANDOMIZE is declared" >&5
|
|
||||||
+echo $ECHO_N "checking whether ADDR_NO_RANDOMIZE is declared... $ECHO_C" >&6
|
|
||||||
+if test "${ac_cv_have_decl_ADDR_NO_RANDOMIZE+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/personality.h>
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main ()
|
|
||||||
+{
|
|
||||||
+#ifndef ADDR_NO_RANDOMIZE
|
|
||||||
+ char *p = (char *) ADDR_NO_RANDOMIZE;
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+ ;
|
|
||||||
+ 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_have_decl_ADDR_NO_RANDOMIZE=yes
|
|
||||||
+else
|
|
||||||
+ echo "$as_me: failed program was:" >&5
|
|
||||||
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
+
|
|
||||||
+ac_cv_have_decl_ADDR_NO_RANDOMIZE=no
|
|
||||||
+fi
|
|
||||||
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
|
|
||||||
+fi
|
|
||||||
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_ADDR_NO_RANDOMIZE" >&5
|
|
||||||
+echo "${ECHO_T}$ac_cv_have_decl_ADDR_NO_RANDOMIZE" >&6
|
|
||||||
+if test $ac_cv_have_decl_ADDR_NO_RANDOMIZE = yes; then
|
|
||||||
+
|
|
||||||
+cat >>confdefs.h <<_ACEOF
|
|
||||||
+#define HAVE_DECL_ADDR_NO_RANDOMIZE 1
|
|
||||||
+_ACEOF
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+else
|
|
||||||
+ cat >>confdefs.h <<_ACEOF
|
|
||||||
+#define HAVE_DECL_ADDR_NO_RANDOMIZE 0
|
|
||||||
+_ACEOF
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+if test "$cross_compiling" = yes; then
|
|
||||||
+ cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
+/* confdefs.h. */
|
|
||||||
+_ACEOF
|
|
||||||
+cat confdefs.h >>conftest.$ac_ext
|
|
||||||
+cat >>conftest.$ac_ext <<_ACEOF
|
|
||||||
+/* end confdefs.h. */
|
|
||||||
+#include <sys/personality.h>
|
|
||||||
+int
|
|
||||||
+main ()
|
|
||||||
+{
|
|
||||||
+
|
|
||||||
+# if !HAVE_DECL_ADDR_NO_RANDOMIZE
|
|
||||||
+# define ADDR_NO_RANDOMIZE 0x0040000
|
|
||||||
+# endif
|
|
||||||
+ /* Test the flag could be set and stays set. */
|
|
||||||
+ personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
|
|
||||||
+ if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
|
|
||||||
+ return 1
|
|
||||||
+ ;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+_ACEOF
|
|
||||||
+rm -f conftest.$ac_objext conftest$ac_exeext
|
|
||||||
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
||||||
+ (eval $ac_link) 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_exeext'
|
|
||||||
+ { (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
|
|
||||||
+ have_personality=true
|
|
||||||
+else
|
|
||||||
+ echo "$as_me: failed program was:" >&5
|
|
||||||
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
+
|
|
||||||
+have_personality=false
|
|
||||||
+fi
|
|
||||||
+rm -f conftest.err conftest.$ac_objext \
|
|
||||||
+ conftest$ac_exeext conftest.$ac_ext
|
|
||||||
+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/personality.h>
|
|
||||||
+int
|
|
||||||
+main ()
|
|
||||||
+{
|
|
||||||
+
|
|
||||||
+# if !HAVE_DECL_ADDR_NO_RANDOMIZE
|
|
||||||
+# define ADDR_NO_RANDOMIZE 0x0040000
|
|
||||||
+# endif
|
|
||||||
+ /* Test the flag could be set and stays set. */
|
|
||||||
+ personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
|
|
||||||
+ if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
|
|
||||||
+ return 1
|
|
||||||
+ ;
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+_ACEOF
|
|
||||||
+rm -f conftest$ac_exeext
|
|
||||||
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
|
||||||
+ (eval $ac_link) 2>&5
|
|
||||||
+ ac_status=$?
|
|
||||||
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
|
|
||||||
+ { (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
|
|
||||||
+ have_personality=true
|
|
||||||
+else
|
|
||||||
+ echo "$as_me: program exited with status $ac_status" >&5
|
|
||||||
+echo "$as_me: failed program was:" >&5
|
|
||||||
+sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
+
|
|
||||||
+( exit $ac_status )
|
|
||||||
+have_personality=false
|
|
||||||
+fi
|
|
||||||
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
|
|
||||||
+fi
|
|
||||||
+if $have_personality
|
|
||||||
+then
|
|
||||||
+
|
|
||||||
+cat >>confdefs.h <<\_ACEOF
|
|
||||||
+#define HAVE_PERSONALITY 1
|
|
||||||
+_ACEOF
|
|
||||||
+
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
|
|
||||||
|
|
||||||
# Check whether --with-sysroot or --without-sysroot was given.
|
|
||||||
Index: gdb-6.8/gdb/configure.ac
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.orig/gdb/configure.ac 2008-07-14 10:27:27.000000000 +0200
|
|
||||||
+++ gdb-6.8/gdb/configure.ac 2008-07-14 10:28:50.000000000 +0200
|
|
||||||
@@ -1254,6 +1254,29 @@ if test "x$gdb_cv_sys_syscall_h_has_tkil
|
|
||||||
AC_DEFINE(HAVE_TKILL_SYSCALL, 1, [Define if you support the tkill syscall.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
+dnl Check if we can disable the virtual address space randomization.
|
|
||||||
+dnl The functionality of setarch -R.
|
|
||||||
+AC_CHECK_DECLS([ADDR_NO_RANDOMIZE],,, [#include <sys/personality.h>])
|
|
||||||
+define([PERSONALITY_TEST], [AC_LANG_PROGRAM([#include <sys/personality.h>], [
|
|
||||||
+# if !HAVE_DECL_ADDR_NO_RANDOMIZE
|
|
||||||
+# define ADDR_NO_RANDOMIZE 0x0040000
|
|
||||||
+# endif
|
|
||||||
+ /* Test the flag could be set and stays set. */
|
|
||||||
+ personality (personality (0xffffffff) | ADDR_NO_RANDOMIZE);
|
|
||||||
+ if (!(personality (personality (0xffffffff)) & ADDR_NO_RANDOMIZE))
|
|
||||||
+ return 1])])
|
|
||||||
+AC_RUN_IFELSE([PERSONALITY_TEST],
|
|
||||||
+ [have_personality=true],
|
|
||||||
+ [have_personality=false],
|
|
||||||
+ [AC_LINK_IFELSE([PERSONALITY_TEST],
|
|
||||||
+ [have_personality=true],
|
|
||||||
+ [have_personality=false])])
|
|
||||||
+if $have_personality
|
|
||||||
+then
|
|
||||||
+ AC_DEFINE([HAVE_PERSONALITY], 1,
|
|
||||||
+ [Define if you support the personality syscall.])
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
dnl Handle optional features that can be enabled.
|
|
||||||
|
|
||||||
AC_ARG_WITH(sysroot,
|
|
||||||
Index: gdb-6.8/gdb/fork-child.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.orig/gdb/fork-child.c 2008-01-29 22:11:24.000000000 +0100
|
|
||||||
+++ gdb-6.8/gdb/fork-child.c 2008-07-14 10:28:50.000000000 +0200
|
|
||||||
@@ -32,12 +32,45 @@
|
|
||||||
#include "gdbthread.h"
|
|
||||||
#include "command.h" /* for dont_repeat () */
|
|
||||||
#include "solib.h"
|
|
||||||
+#include "gdbcmd.h"
|
|
||||||
|
|
||||||
#include <signal.h>
|
|
||||||
+#include <errno.h>
|
|
||||||
+#ifdef HAVE_PERSONALITY
|
|
||||||
+# include <sys/personality.h>
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/* This just gets used as a default if we can't find SHELL. */
|
|
||||||
#define SHELL_FILE "/bin/sh"
|
|
||||||
|
|
||||||
+static int disable_randomization =
|
|
||||||
+#ifdef HAVE_PERSONALITY
|
|
||||||
+ 1;
|
|
||||||
+#else
|
|
||||||
+ 0;
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#ifndef HAVE_PERSONALITY
|
|
||||||
+static void
|
|
||||||
+set_disable_randomization (char *args, int from_tty, struct cmd_list_element *c)
|
|
||||||
+{
|
|
||||||
+ if (disable_randomization)
|
|
||||||
+ {
|
|
||||||
+ disable_randomization = 0;
|
|
||||||
+ error (_("Unsupported on this platform."));
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+show_disable_randomization (struct ui_file *file, int from_tty,
|
|
||||||
+ struct cmd_list_element *c, const char *value)
|
|
||||||
+{
|
|
||||||
+ fprintf_filtered (file, _("\
|
|
||||||
+Disabling randomization of debuggee's virtual address space is %s.\n"),
|
|
||||||
+ value);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
extern char **environ;
|
|
||||||
|
|
||||||
/* Break up SCRATCH into an argument vector suitable for passing to
|
|
||||||
@@ -289,6 +322,24 @@ fork_inferior (char *exec_file_arg, char
|
|
||||||
if (debug_fork)
|
|
||||||
sleep (debug_fork);
|
|
||||||
|
|
||||||
+#ifdef HAVE_PERSONALITY
|
|
||||||
+# if !HAVE_DECL_ADDR_NO_RANDOMIZE
|
|
||||||
+# define ADDR_NO_RANDOMIZE 0x0040000
|
|
||||||
+# endif
|
|
||||||
+ if (disable_randomization)
|
|
||||||
+ {
|
|
||||||
+ int val;
|
|
||||||
+
|
|
||||||
+ errno = 0;
|
|
||||||
+ val = personality (0xffffffff);
|
|
||||||
+ if (errno == 0)
|
|
||||||
+ personality (val | ADDR_NO_RANDOMIZE);
|
|
||||||
+ if (errno != 0 || !(personality (0xffffffff) & ADDR_NO_RANDOMIZE))
|
|
||||||
+ warning (_("Currently enabled disable-randomization is unsupported "
|
|
||||||
+ "on this platform."));
|
|
||||||
+ }
|
|
||||||
+#endif /* HAVE_PERSONALITY */
|
|
||||||
+
|
|
||||||
/* Run inferior in a separate process group. */
|
|
||||||
debug_setpgrp = gdb_setpgid ();
|
|
||||||
if (debug_setpgrp == -1)
|
|
||||||
@@ -446,3 +497,23 @@ startup_inferior (int ntraps)
|
|
||||||
}
|
|
||||||
stop_soon = NO_STOP_QUIETLY;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+void
|
|
||||||
+_initialize_fork_child (void)
|
|
||||||
+{
|
|
||||||
+
|
|
||||||
+ add_setshow_boolean_cmd ("disable-randomization", class_support,
|
|
||||||
+ &disable_randomization, _("\
|
|
||||||
+Set disabling of debuggee's virtual address space randomization."), _("\
|
|
||||||
+Show disabling of debuggee's virtual address space randomization."), _("\
|
|
||||||
+When this mode is on (which is the default), the randomization of\n\
|
|
||||||
+the virtual address space is disabled. Standalone programs run with the\n\
|
|
||||||
+randomization enabled by default on some platforms."),
|
|
||||||
+#ifdef HAVE_PERSONALITY
|
|
||||||
+ NULL,
|
|
||||||
+#else
|
|
||||||
+ &set_disable_randomization,
|
|
||||||
+#endif
|
|
||||||
+ &show_disable_randomization,
|
|
||||||
+ &setlist, &showlist);
|
|
||||||
+}
|
|
||||||
Index: gdb-6.8/gdb/doc/gdb.texinfo
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.orig/gdb/doc/gdb.texinfo 2008-07-14 10:28:36.000000000 +0200
|
|
||||||
+++ gdb-6.8/gdb/doc/gdb.texinfo 2008-07-14 10:28:50.000000000 +0200
|
|
||||||
@@ -1820,6 +1820,57 @@ argument to @value{GDBN} (@pxref{Invocat
|
|
||||||
@value{GDBN}}), or by using the @code{file} or @code{exec-file} command
|
|
||||||
(@pxref{Files, ,Commands to Specify Files}).
|
|
||||||
|
|
||||||
+@kindex set disable-randomization
|
|
||||||
+@item set disable-randomization
|
|
||||||
+@itemx set disable-randomization on
|
|
||||||
+This option (enabled by default in @value{GDBN}) will turn off the native
|
|
||||||
+randomization of the virtual address space of the started program. This option
|
|
||||||
+is useful for multiple debugging sessions to make the execution better
|
|
||||||
+reproducible and memory addresses reusable across debugging sessions.
|
|
||||||
+
|
|
||||||
+This feature is implemented at least on @sc{gnu}/Linux and OpenBSD. You can
|
|
||||||
+get the same behavior using
|
|
||||||
+
|
|
||||||
+@smallexample
|
|
||||||
+(@value{GDBP}) set exec-wrapper setarch `uname -m` -R
|
|
||||||
+@end smallexample
|
|
||||||
+
|
|
||||||
+@item set disable-randomization off
|
|
||||||
+Leave the behavior of the started executable unchanged. Some bugs rear their
|
|
||||||
+ugly heads only when the program is loaded at certain addresses. If your bug
|
|
||||||
+disappears when you run the program under @value{GDBN}, that might be because
|
|
||||||
+@value{GDBN} by default disables the address randomization on platforms, such
|
|
||||||
+as @sc{gnu}/Linux, which do that for stand-alone programs. Use @kbd{set
|
|
||||||
+disable-randomization off} to try to reproduce such elusive bugs.
|
|
||||||
+
|
|
||||||
+The virtual address space randomization is implemented at least on
|
|
||||||
+@sc{gnu}/Linux and OpenBSD. It protects the programs against some kinds of
|
|
||||||
+security attacks. In these cases the attacker needs to know the exact location
|
|
||||||
+of a concrete executable code. Randomizing its location makes it impossible to
|
|
||||||
+inject jumps misusing a code at its expected addresses.
|
|
||||||
+
|
|
||||||
+Prelinking shared libraries provides a startup performance advantage but it
|
|
||||||
+makes addresses in these libraries predictable for privileged processes by
|
|
||||||
+having just unprivileged access at the target system. Reading the shared
|
|
||||||
+library binary gives enough information for assembling the malicious code
|
|
||||||
+misusing it. Still even a prelinked shared library can get loaded a a new
|
|
||||||
+random address just requiring the regular relocation process during the
|
|
||||||
+startup. Shared libraries not already prelinked are always loaded at
|
|
||||||
+a randomly chosen address.
|
|
||||||
+
|
|
||||||
+Position independent executables (PIE) contain position independent code
|
|
||||||
+similar to the shared libraries and therefore such executables get loaded at
|
|
||||||
+a randomly chosen address upon startup. PIE executables always load even
|
|
||||||
+already prelinked shared libraries at a random address. You can build such
|
|
||||||
+executable using @command{gcc -fPIE -pie}.
|
|
||||||
+
|
|
||||||
+Heap (malloc storage), stack and custom mmap areas are always placed randomly
|
|
||||||
+(as long as the randomization is enabled).
|
|
||||||
+
|
|
||||||
+@item show disable-randomization
|
|
||||||
+Show the current setting of the explicit disable of the native randomization of
|
|
||||||
+the virtual address space of the started program.
|
|
||||||
+
|
|
||||||
@end table
|
|
||||||
|
|
||||||
If you are running your program in an execution environment that
|
|
||||||
Index: gdb-6.8/gdb/testsuite/gdb.base/randomize.c
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.base/randomize.c 2008-07-14 10:28:50.000000000 +0200
|
|
||||||
@@ -0,0 +1,32 @@
|
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
|
||||||
+
|
|
||||||
+ Copyright 2008 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+ Please email any bugs, comments, and/or additions to this file to:
|
|
||||||
+ bug-gdb@prep.ai.mit.edu */
|
|
||||||
+
|
|
||||||
+#include <stdlib.h>
|
|
||||||
+#include <stdio.h>
|
|
||||||
+
|
|
||||||
+int main()
|
|
||||||
+{
|
|
||||||
+ void *p;
|
|
||||||
+
|
|
||||||
+ p = malloc (1);
|
|
||||||
+ printf ("address = %p\n", p);
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
Index: gdb-6.8/gdb/testsuite/gdb.base/randomize.exp
|
|
||||||
===================================================================
|
|
||||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.base/randomize.exp 2008-07-14 10:28:50.000000000 +0200
|
|
||||||
@@ -0,0 +1,63 @@
|
|
||||||
+# Copyright 2008 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
|
||||||
+# it under the terms of the GNU General Public License as published by
|
|
||||||
+# the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+# (at your option) any later version.
|
|
||||||
+#
|
|
||||||
+# This program is distributed in the hope that it will be useful,
|
|
||||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+# GNU General Public License for more details.
|
|
||||||
+#
|
|
||||||
+# You should have received a copy of the GNU General Public License
|
|
||||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+set testfile randomize
|
|
||||||
+set srcfile ${testfile}.c
|
|
||||||
+set binfile ${objdir}/${subdir}/${testfile}
|
|
||||||
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
|
|
||||||
+ untested "Couldn't compile test program"
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+# Get things started.
|
|
||||||
+
|
|
||||||
+gdb_exit
|
|
||||||
+gdb_start
|
|
||||||
+gdb_reinitialize_dir $srcdir/$subdir
|
|
||||||
+gdb_load ${binfile}
|
|
||||||
+
|
|
||||||
+proc address_get { testname } {
|
|
||||||
+ global gdb_prompt
|
|
||||||
+
|
|
||||||
+ if {![runto_main]} {
|
|
||||||
+ return -1
|
|
||||||
+ }
|
|
||||||
+ gdb_test_multiple "continue" $testname {
|
|
||||||
+ -re "address = (0x\[0-9a-f\]*).*Program exited normally..*$gdb_prompt $" {
|
|
||||||
+ pass $testname
|
|
||||||
+ return $expect_out(1,string)
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+gdb_test "set disable-randomization off"
|
|
||||||
+set addr1 [address_get "randomized first address"]
|
|
||||||
+set addr2 [address_get "randomized second address"]
|
|
||||||
+set test "randomized addresses should not match"
|
|
||||||
+if {$addr1 eq $addr2} {
|
|
||||||
+ fail $test
|
|
||||||
+} else {
|
|
||||||
+ pass $test
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+gdb_test "set disable-randomization on"
|
|
||||||
+set addr1 [address_get "fixed first address"]
|
|
||||||
+set addr2 [address_get "fixed second address"]
|
|
||||||
+set test "fixed addresses should match"
|
|
||||||
+if {$addr1 eq $addr2} {
|
|
||||||
+ pass $test
|
|
||||||
+} else {
|
|
||||||
+ fail $test
|
|
||||||
+}
|
|
@ -1,88 +0,0 @@
|
|||||||
2008-06-18 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* configure.ac (--enable-tui): AC_MSG_ERROR for explicit --enable-tui.
|
|
||||||
* configure: Regenerated.
|
|
||||||
|
|
||||||
--- ./gdb/configure.ac 9 Jun 2008 15:03:59 -0000 1.70
|
|
||||||
+++ ./gdb/configure.ac 18 Jun 2008 17:14:21 -0000
|
|
||||||
@@ -260,11 +260,11 @@ fi
|
|
||||||
AC_ARG_ENABLE(tui,
|
|
||||||
[ --enable-tui enable full-screen terminal user interface (TUI)],
|
|
||||||
[case $enableval in
|
|
||||||
- yes | no)
|
|
||||||
+ yes | no | auto)
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
AC_MSG_ERROR([bad value $enableval for --enable-tui]) ;;
|
|
||||||
- esac],enable_tui=yes)
|
|
||||||
+ esac],enable_tui=auto)
|
|
||||||
|
|
||||||
# Enable gdbtk.
|
|
||||||
AC_ARG_ENABLE(gdbtk,
|
|
||||||
@@ -1576,7 +1576,7 @@ AC_PATH_X
|
|
||||||
|
|
||||||
# Check whether we should enable the TUI, but only do so if we really
|
|
||||||
# can.
|
|
||||||
-if test x"$enable_tui" = xyes; then
|
|
||||||
+if test x"$enable_tui" != xno; then
|
|
||||||
if test -d $srcdir/tui; then
|
|
||||||
if test "$ac_cv_search_waddstr" != no; then
|
|
||||||
CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_TUI_OBS)"
|
|
||||||
@@ -1589,7 +1589,11 @@ if test x"$enable_tui" = xyes; then
|
|
||||||
CONFIG_INSTALL="${CONFIG_INSTALL} install-tui"
|
|
||||||
CONFIG_UNINSTALL="${CONFIG_UNINSTALL} uninstall-tui"
|
|
||||||
else
|
|
||||||
- AC_MSG_WARN([no enhanced curses library found; disabling TUI])
|
|
||||||
+ if test x"$enable_tui" = xyes; then
|
|
||||||
+ AC_MSG_ERROR([no enhanced curses library found; disable TUI])
|
|
||||||
+ else
|
|
||||||
+ AC_MSG_WARN([no enhanced curses library found; disabling TUI])
|
|
||||||
+ fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
--- ./gdb/configure 9 Jun 2008 15:03:58 -0000 1.250
|
|
||||||
+++ ./gdb/configure 18 Jun 2008 17:14:12 -0000
|
|
||||||
@@ -7540,7 +7540,7 @@ fi
|
|
||||||
if test "${enable_tui+set}" = set; then
|
|
||||||
enableval="$enable_tui"
|
|
||||||
case $enableval in
|
|
||||||
- yes | no)
|
|
||||||
+ yes | no | auto)
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
{ { echo "$as_me:$LINENO: error: bad value $enableval for --enable-tui" >&5
|
|
||||||
@@ -7548,7 +7548,7 @@ echo "$as_me: error: bad value $enableva
|
|
||||||
{ (exit 1); exit 1; }; } ;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
- enable_tui=yes
|
|
||||||
+ enable_tui=auto
|
|
||||||
fi;
|
|
||||||
|
|
||||||
# Enable gdbtk.
|
|
||||||
@@ -28324,7 +28324,7 @@ fi
|
|
||||||
|
|
||||||
# Check whether we should enable the TUI, but only do so if we really
|
|
||||||
# can.
|
|
||||||
-if test x"$enable_tui" = xyes; then
|
|
||||||
+if test x"$enable_tui" != xno; then
|
|
||||||
if test -d $srcdir/tui; then
|
|
||||||
if test "$ac_cv_search_waddstr" != no; then
|
|
||||||
CONFIG_OBS="$CONFIG_OBS \$(SUBDIR_TUI_OBS)"
|
|
||||||
@@ -28337,8 +28337,14 @@ if test x"$enable_tui" = xyes; then
|
|
||||||
CONFIG_INSTALL="${CONFIG_INSTALL} install-tui"
|
|
||||||
CONFIG_UNINSTALL="${CONFIG_UNINSTALL} uninstall-tui"
|
|
||||||
else
|
|
||||||
- { echo "$as_me:$LINENO: WARNING: no enhanced curses library found; disabling TUI" >&5
|
|
||||||
+ if test x"$enable_tui" = xyes; then
|
|
||||||
+ { { echo "$as_me:$LINENO: error: no enhanced curses library found; disable TUI" >&5
|
|
||||||
+echo "$as_me: error: no enhanced curses library found; disable TUI" >&2;}
|
|
||||||
+ { (exit 1); exit 1; }; }
|
|
||||||
+ else
|
|
||||||
+ { echo "$as_me:$LINENO: WARNING: no enhanced curses library found; disabling TUI" >&5
|
|
||||||
echo "$as_me: WARNING: no enhanced curses library found; disabling TUI" >&2;}
|
|
||||||
+ fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
@ -1,14 +0,0 @@
|
|||||||
--- ./gdb/dwarf2read.c 24 Aug 2008 16:39:56 -0000 1.277
|
|
||||||
+++ ./gdb/dwarf2read.c 26 Aug 2008 18:51:28 -0000
|
|
||||||
@@ -2761,7 +2769,10 @@ process_die (struct die_info *die, struc
|
|
||||||
Fortran case, so we'll have to replace this gdb_assert if
|
|
||||||
Fortran compilers start generating that info. */
|
|
||||||
processing_has_namespace_info = 1;
|
|
||||||
- gdb_assert (die->child == NULL);
|
|
||||||
+ if (cu->language != language_fortran && die->child == NULL)
|
|
||||||
+ complaint (&symfile_complaints,
|
|
||||||
+ _("%s at offset %d has unexpected children"),
|
|
||||||
+ dwarf_tag_name (die->tag), die->offset);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
new_symbol (die, NULL, cu);
|
|
@ -1,14 +1,16 @@
|
|||||||
--- ./gdb/dwarf2read.c 21 Aug 2008 18:57:34 -0000 1.276
|
Index: gdb-6.8.50.20081128/gdb/dwarf2read.c
|
||||||
+++ ./gdb/dwarf2read.c 26 Aug 2008 17:54:37 -0000
|
===================================================================
|
||||||
@@ -1798,6 +1798,7 @@ scan_partial_symbols (struct partial_die
|
--- gdb-6.8.50.20081128.orig/gdb/dwarf2read.c 2008-12-06 14:06:17.000000000 +0100
|
||||||
}
|
+++ gdb-6.8.50.20081128/gdb/dwarf2read.c 2008-12-06 21:53:09.000000000 +0100
|
||||||
|
@@ -1825,6 +1825,7 @@ scan_partial_symbols (struct partial_die
|
||||||
|
add_partial_subprogram (pdi, lowpc, highpc, cu);
|
||||||
break;
|
break;
|
||||||
case DW_TAG_variable:
|
case DW_TAG_variable:
|
||||||
+ case DW_TAG_constant:
|
+ case DW_TAG_constant:
|
||||||
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)
|
||||||
@@ -1983,6 +1984,7 @@ add_partial_symbol (struct partial_die_i
|
@@ -2010,6 +2011,7 @@ add_partial_symbol (struct partial_die_i
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case DW_TAG_variable:
|
case DW_TAG_variable:
|
||||||
@ -16,7 +18,15 @@
|
|||||||
if (pdi->is_external)
|
if (pdi->is_external)
|
||||||
{
|
{
|
||||||
/* Global Variable.
|
/* Global Variable.
|
||||||
@@ -3590,7 +3593,8 @@ dwarf2_add_field (struct field_info *fip
|
@@ -2864,6 +2866,7 @@ dwarf2_full_name (struct die_info *die,
|
||||||
|
if (!pdi_needs_namespace (die->tag)
|
||||||
|
&& die->tag != DW_TAG_subprogram
|
||||||
|
&& die->tag != DW_TAG_variable
|
||||||
|
+ && die->tag != DW_TAG_constant
|
||||||
|
&& die->tag != DW_TAG_member)
|
||||||
|
return name;
|
||||||
|
|
||||||
|
@@ -3704,7 +3707,8 @@ dwarf2_add_field (struct field_info *fip
|
||||||
fip->non_public_fields = 1;
|
fip->non_public_fields = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -26,7 +36,7 @@
|
|||||||
{
|
{
|
||||||
/* C++ static member. */
|
/* C++ static member. */
|
||||||
|
|
||||||
@@ -4069,7 +4073,8 @@ read_structure_type (struct die_info *di
|
@@ -4182,7 +4186,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
|
||||||
@ -36,7 +46,7 @@
|
|||||||
{
|
{
|
||||||
/* 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
|
||||||
@@ -4188,6 +4193,7 @@ process_structure_scope (struct die_info
|
@@ -4301,6 +4306,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
|
||||||
@ -44,15 +54,15 @@
|
|||||||
|| child_die->tag == DW_TAG_inheritance)
|
|| child_die->tag == DW_TAG_inheritance)
|
||||||
{
|
{
|
||||||
/* Do nothing. */
|
/* Do nothing. */
|
||||||
@@ -5565,6 +5571,7 @@ load_partial_dies (bfd *abfd, gdb_byte *
|
@@ -5700,6 +5706,7 @@ load_partial_dies (bfd *abfd, gdb_byte *
|
||||||
&& abbrev->tag != DW_TAG_enumerator
|
|
||||||
&& abbrev->tag != DW_TAG_subprogram
|
&& abbrev->tag != DW_TAG_subprogram
|
||||||
|
&& abbrev->tag != DW_TAG_lexical_block
|
||||||
&& abbrev->tag != DW_TAG_variable
|
&& abbrev->tag != DW_TAG_variable
|
||||||
+ && abbrev->tag != DW_TAG_constant
|
+ && abbrev->tag != DW_TAG_constant
|
||||||
&& abbrev->tag != DW_TAG_namespace
|
&& abbrev->tag != DW_TAG_namespace
|
||||||
&& abbrev->tag != DW_TAG_member)
|
&& abbrev->tag != DW_TAG_member)
|
||||||
{
|
{
|
||||||
@@ -5672,6 +5679,7 @@ load_partial_dies (bfd *abfd, gdb_byte *
|
@@ -5807,6 +5814,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
|
||||||
@ -60,7 +70,7 @@
|
|||||||
|| abbrev->tag == DW_TAG_namespace
|
|| abbrev->tag == DW_TAG_namespace
|
||||||
|| part_die->is_declaration)
|
|| part_die->is_declaration)
|
||||||
{
|
{
|
||||||
@@ -7579,6 +7579,11 @@ new_symbol (struct die_info *die, struct
|
@@ -7593,6 +7601,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;
|
||||||
|
@ -1,276 +0,0 @@
|
|||||||
gdb/
|
|
||||||
2008-10-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
Fix automatic restoration of breakpoints memory for ia64.
|
|
||||||
* ia64-tdep.c (ia64_memory_insert_breakpoint): New comment part for
|
|
||||||
SHADOW_CONTENTS content. Remova variable instr. New variable cleanup.
|
|
||||||
Force automatic breakpoints restoration. PLACED_SIZE and SHADOW_LEN
|
|
||||||
are now set larger, to BUNDLE_LEN - 2.
|
|
||||||
(ia64_memory_remove_breakpoint): Rename variables bundle to bundle_mem
|
|
||||||
and instr to instr_saved. New variables bundle_saved and
|
|
||||||
instr_breakpoint. Comment new reasons why we need to disable automatic
|
|
||||||
restoration of breakpoints. Assert PLACED_SIZE and SHADOW_LEN. New
|
|
||||||
check of the original memory content.
|
|
||||||
(ia64_breakpoint_from_pc): Array breakpoint extended to BUNDLE_LEN.
|
|
||||||
Sanity check the PCPTR parameter SLOTNUM value. New #if check on
|
|
||||||
BREAKPOINT_MAX vs. BUNDLE_LEN. Increase LENPTR to BUNDLE_LEN - 2.
|
|
||||||
|
|
||||||
gdb/testsuite/
|
|
||||||
2008-10-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
|
||||||
|
|
||||||
* gdb.base/breakpoint-shadow.exp, gdb.base/breakpoint-shadow.c: New.
|
|
||||||
|
|
||||||
[ RHEL-5 disable of `set breakpoint always-inserted'. ]
|
|
||||||
|
|
||||||
--- ./gdb/ia64-tdep.c 11 Sep 2008 14:23:15 -0000 1.184
|
|
||||||
+++ ./gdb/ia64-tdep.c 28 Oct 2008 10:28:41 -0000
|
|
||||||
@@ -545,7 +545,21 @@ fetch_instruction (CORE_ADDR addr, instr
|
|
||||||
simulators. So I changed the pattern slightly to do "break.i 0x080001"
|
|
||||||
instead. But that didn't work either (I later found out that this
|
|
||||||
pattern was used by the simulator that I was using.) So I ended up
|
|
||||||
- using the pattern seen below. */
|
|
||||||
+ using the pattern seen below.
|
|
||||||
+
|
|
||||||
+ SHADOW_CONTENTS has byte-based addressing (PLACED_ADDRESS and SHADOW_LEN)
|
|
||||||
+ while we need bit-based addressing as the instructions length is 41 bits and
|
|
||||||
+ we must not modify/corrupt the adjacent ones in the same bundle.
|
|
||||||
+ Fortunately we may store larger memory incl. the adjacent bits with the
|
|
||||||
+ original memory content (not the possibly already stored breakpoints there).
|
|
||||||
+ We need to be careful in ia64_memory_remove_breakpoint to always restore
|
|
||||||
+ only the specific bits of this instruction ignoring any adjacent stored
|
|
||||||
+ bits.
|
|
||||||
+
|
|
||||||
+ We use the original addressing with the low nibble 0..2 which gets
|
|
||||||
+ incorrectly interpreted by the generic GDB code as the byte offset of
|
|
||||||
+ SHADOW_CONTENTS. We store whole BUNDLE_LEN bytes just without these two
|
|
||||||
+ possibly skipped bytes. */
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
#define IA64_BREAKPOINT 0x00002000040LL
|
|
||||||
@@ -559,15 +573,21 @@ ia64_memory_insert_breakpoint (struct gd
|
|
||||||
CORE_ADDR addr = bp_tgt->placed_address;
|
|
||||||
char bundle[BUNDLE_LEN];
|
|
||||||
int slotnum = (int) (addr & 0x0f) / SLOT_MULTIPLIER;
|
|
||||||
- long long instr;
|
|
||||||
int val;
|
|
||||||
int template;
|
|
||||||
+ struct cleanup *cleanup;
|
|
||||||
|
|
||||||
if (slotnum > 2)
|
|
||||||
error (_("Can't insert breakpoint for slot numbers greater than 2."));
|
|
||||||
|
|
||||||
addr &= ~0x0f;
|
|
||||||
|
|
||||||
+ /* Enable the automatic memory restoration from breakpoints while
|
|
||||||
+ we read our instruction bundle. Otherwise, we could store into
|
|
||||||
+ SHADOW_CONTENTS an already stored breakpoint at the same location.
|
|
||||||
+ In practice it is already being prevented by the DUPLICATE field and
|
|
||||||
+ update_global_location_list. */
|
|
||||||
+ cleanup = make_show_memory_breakpoints_cleanup (0);
|
|
||||||
val = target_read_memory (addr, bundle, BUNDLE_LEN);
|
|
||||||
|
|
||||||
/* Check for L type instruction in 2nd slot, if present then
|
|
||||||
@@ -578,13 +598,18 @@ ia64_memory_insert_breakpoint (struct gd
|
|
||||||
slotnum = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
- instr = slotN_contents (bundle, slotnum);
|
|
||||||
- memcpy (bp_tgt->shadow_contents, &instr, sizeof (instr));
|
|
||||||
- bp_tgt->placed_size = bp_tgt->shadow_len = sizeof (instr);
|
|
||||||
+ /* Slot number 2 may skip at most 2 bytes at the beginning. */
|
|
||||||
+ bp_tgt->placed_size = bp_tgt->shadow_len = BUNDLE_LEN - 2;
|
|
||||||
+
|
|
||||||
+ /* Store the whole bundle, except for the initial skipped bytes by the slot
|
|
||||||
+ number interpreted as bytes offset in PLACED_ADDRESS. */
|
|
||||||
+ memcpy (bp_tgt->shadow_contents, bundle + slotnum, bp_tgt->shadow_len);
|
|
||||||
+
|
|
||||||
replace_slotN_contents (bundle, IA64_BREAKPOINT, slotnum);
|
|
||||||
if (val == 0)
|
|
||||||
- target_write_memory (addr, bundle, BUNDLE_LEN);
|
|
||||||
+ target_write_memory (addr + slotnum, bundle + slotnum, bp_tgt->shadow_len);
|
|
||||||
|
|
||||||
+ do_cleanups (cleanup);
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -593,9 +618,9 @@ ia64_memory_remove_breakpoint (struct gd
|
|
||||||
struct bp_target_info *bp_tgt)
|
|
||||||
{
|
|
||||||
CORE_ADDR addr = bp_tgt->placed_address;
|
|
||||||
- char bundle[BUNDLE_LEN];
|
|
||||||
+ char bundle_mem[BUNDLE_LEN], bundle_saved[BUNDLE_LEN];
|
|
||||||
int slotnum = (addr & 0x0f) / SLOT_MULTIPLIER;
|
|
||||||
- long long instr;
|
|
||||||
+ long long instr_breakpoint, instr_saved;
|
|
||||||
int val;
|
|
||||||
int template;
|
|
||||||
struct cleanup *cleanup;
|
|
||||||
@@ -604,23 +629,39 @@ ia64_memory_remove_breakpoint (struct gd
|
|
||||||
|
|
||||||
/* Disable the automatic memory restoration from breakpoints while
|
|
||||||
we read our instruction bundle. Otherwise, the general restoration
|
|
||||||
- mechanism kicks in and ends up corrupting our bundle, because it
|
|
||||||
- is not aware of the concept of instruction bundles. */
|
|
||||||
+ mechanism kicks in and we would possibly remove parts of the adjacent
|
|
||||||
+ placed breakpoints. It is due to our SHADOW_CONTENTS overlapping the real
|
|
||||||
+ breakpoint instruction bits region. */
|
|
||||||
cleanup = make_show_memory_breakpoints_cleanup (1);
|
|
||||||
- val = target_read_memory (addr, bundle, BUNDLE_LEN);
|
|
||||||
+ val = target_read_memory (addr, bundle_mem, BUNDLE_LEN);
|
|
||||||
|
|
||||||
/* Check for L type instruction in 2nd slot, if present then
|
|
||||||
bump up the slot number to the 3rd slot */
|
|
||||||
- template = extract_bit_field (bundle, 0, 5);
|
|
||||||
+ template = extract_bit_field (bundle_mem, 0, 5);
|
|
||||||
if (slotnum == 1 && template_encoding_table[template][1] == L)
|
|
||||||
{
|
|
||||||
slotnum = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
- memcpy (&instr, bp_tgt->shadow_contents, sizeof instr);
|
|
||||||
- replace_slotN_contents (bundle, instr, slotnum);
|
|
||||||
+ gdb_assert (bp_tgt->placed_size == BUNDLE_LEN - 2);
|
|
||||||
+ gdb_assert (bp_tgt->placed_size == bp_tgt->shadow_len);
|
|
||||||
+
|
|
||||||
+ instr_breakpoint = slotN_contents (bundle_mem, slotnum);
|
|
||||||
+ if (instr_breakpoint != IA64_BREAKPOINT)
|
|
||||||
+ warning (_("Breakpoint removal cannot find the placed breakpoint at %s"),
|
|
||||||
+ paddr_nz (bp_tgt->placed_address));
|
|
||||||
+
|
|
||||||
+ /* Extract the original saved instruction from SLOTNUM normalizing its
|
|
||||||
+ bit-shift for INSTR_SAVED. */
|
|
||||||
+ memcpy (bundle_saved, bundle_mem, BUNDLE_LEN);
|
|
||||||
+ memcpy (bundle_saved + slotnum, bp_tgt->shadow_contents, bp_tgt->shadow_len);
|
|
||||||
+ instr_saved = slotN_contents (bundle_saved, slotnum);
|
|
||||||
+
|
|
||||||
+ /* In BUNDLE_MEM be careful to modify only the bits belonging to SLOTNUM and
|
|
||||||
+ never any other possibly also stored in SHADOW_CONTENTS. */
|
|
||||||
+ replace_slotN_contents (bundle_mem, instr_saved, slotnum);
|
|
||||||
if (val == 0)
|
|
||||||
- target_write_memory (addr, bundle, BUNDLE_LEN);
|
|
||||||
+ target_write_memory (addr, bundle_mem, BUNDLE_LEN);
|
|
||||||
|
|
||||||
do_cleanups (cleanup);
|
|
||||||
return val;
|
|
||||||
@@ -631,12 +672,18 @@ ia64_memory_remove_breakpoint (struct gd
|
|
||||||
const unsigned char *
|
|
||||||
ia64_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
|
|
||||||
{
|
|
||||||
- static unsigned char breakpoint[] =
|
|
||||||
- { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
|
||||||
- *lenptr = sizeof (breakpoint);
|
|
||||||
-#if 0
|
|
||||||
- *pcptr &= ~0x0f;
|
|
||||||
+ static unsigned char breakpoint[BUNDLE_LEN];
|
|
||||||
+ int slotnum = (int) (*pcptr & 0x0f) / SLOT_MULTIPLIER;
|
|
||||||
+
|
|
||||||
+ if (slotnum > 2)
|
|
||||||
+ error (_("Can't insert breakpoint for slot numbers greater than 2."));
|
|
||||||
+
|
|
||||||
+#if BREAKPOINT_MAX < BUNDLE_LEN
|
|
||||||
+# error "BREAKPOINT_MAX < BUNDLE_LEN"
|
|
||||||
#endif
|
|
||||||
+
|
|
||||||
+ *lenptr = BUNDLE_LEN - 2;
|
|
||||||
+
|
|
||||||
return breakpoint;
|
|
||||||
}
|
|
||||||
|
|
||||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
|
||||||
+++ ./gdb/testsuite/gdb.base/breakpoint-shadow.c 28 Oct 2008 10:28:41 -0000
|
|
||||||
@@ -0,0 +1,27 @@
|
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
|
||||||
+
|
|
||||||
+ Copyright 2008 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main (void)
|
|
||||||
+{
|
|
||||||
+ volatile int i;
|
|
||||||
+
|
|
||||||
+ i = 1; /* break-first */
|
|
||||||
+ i = 2; /* break-second */
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
|
||||||
+++ ./gdb/testsuite/gdb.base/breakpoint-shadow.exp 28 Oct 2008 10:28:41 -0000
|
|
||||||
@@ -0,0 +1,65 @@
|
|
||||||
+# Copyright 2008 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
|
||||||
+# it under the terms of the GNU General Public License as published by
|
|
||||||
+# the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+# (at your option) any later version.
|
|
||||||
+#
|
|
||||||
+# This program is distributed in the hope that it will be useful,
|
|
||||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+# GNU General Public License for more details.
|
|
||||||
+#
|
|
||||||
+# You should have received a copy of the GNU General Public License
|
|
||||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+set testfile breakpoint-shadow
|
|
||||||
+set srcfile ${testfile}.c
|
|
||||||
+set binfile ${objdir}/${subdir}/${testfile}
|
|
||||||
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
|
|
||||||
+ untested "Couldn't compile test program"
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+gdb_exit
|
|
||||||
+gdb_start
|
|
||||||
+gdb_reinitialize_dir $srcdir/$subdir
|
|
||||||
+gdb_load ${binfile}
|
|
||||||
+
|
|
||||||
+# We need to start the inferior to place the breakpoints in the memory at all.
|
|
||||||
+if { [gdb_start_cmd] < 0 } {
|
|
||||||
+ untested start
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+gdb_test "" "main \\(\\) at .*" "start"
|
|
||||||
+
|
|
||||||
+# The default "auto" mode removes all the breakpoints when we stop (and not
|
|
||||||
+# running the nonstop mode). We would not be able to test the shadow.
|
|
||||||
+#RHEL-5:
|
|
||||||
+#gdb_test "set breakpoint always-inserted on"
|
|
||||||
+#gdb_test "show breakpoint always-inserted" "Always inserted breakpoint mode is on."
|
|
||||||
+
|
|
||||||
+set match "\nDump of assembler code for function main:\r\n(.*)End of assembler dump.\r\n$gdb_prompt $"
|
|
||||||
+
|
|
||||||
+set test "disassembly without breakpoints"
|
|
||||||
+gdb_test_multiple "disass main" $test {
|
|
||||||
+ -re $match {
|
|
||||||
+ set orig $expect_out(1,string)
|
|
||||||
+ pass $test
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+gdb_test "b [gdb_get_line_number "break-first"]" "Breakpoint \[0-9\] at .*" "First breakpoint placed"
|
|
||||||
+gdb_test "b [gdb_get_line_number "break-second"]" "Breakpoint \[0-9\] at .*" "Second breakpoint placed"
|
|
||||||
+
|
|
||||||
+set test "disassembly with breakpoints"
|
|
||||||
+gdb_test_multiple "disass main" $test {
|
|
||||||
+ -re $match {
|
|
||||||
+ set got $expect_out(1,string)
|
|
||||||
+ if [string equal -nocase $orig $got] {
|
|
||||||
+ pass $test
|
|
||||||
+ } else {
|
|
||||||
+ fail $test
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
@ -1,119 +0,0 @@
|
|||||||
It is a regression from:
|
|
||||||
http://sourceware.org/ml/gdb-patches/2007-03/msg00290.html
|
|
||||||
http://sourceware.org/ml/gdb-cvs/2007-03/msg00114.html
|
|
||||||
|
|
||||||
Without started inferior the only target in the stack is `exec' which has no
|
|
||||||
hardware-watchpoints support for sure.
|
|
||||||
|
|
||||||
--- /dev/null 2008-11-16 09:11:50.595000000 +0100
|
|
||||||
+++ gdb-6.8/gdb/config/ia64/nm-linux.h 2008-11-18 11:00:34.000000000 +0100
|
|
||||||
@@ -0,0 +1,31 @@
|
|
||||||
+/* Native support for GNU/Linux, for GDB, the GNU debugger.
|
|
||||||
+
|
|
||||||
+ Copyright 1999, 2000, 2001, 2004, 2005, 2007, 2008 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 2 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, write to the Free Software
|
|
||||||
+ Foundation, Inc., 59 Temple Place - Suite 330,
|
|
||||||
+ Boston, MA 02111-1307, USA. */
|
|
||||||
+
|
|
||||||
+#ifndef NM_LINUX_H
|
|
||||||
+#define NM_LINUX_H
|
|
||||||
+
|
|
||||||
+#include "config/nm-linux.h"
|
|
||||||
+
|
|
||||||
+/* Hardware watchpoints */
|
|
||||||
+
|
|
||||||
+#define TARGET_CAN_USE_HARDWARE_WATCHPOINT(type, cnt, ot) 1
|
|
||||||
+
|
|
||||||
+#endif /* #ifndef NM_LINUX_H */
|
|
||||||
--- gdb-6.8/gdb/config/ia64/linux.mh-orig 2007-04-26 00:17:48.000000000 +0200
|
|
||||||
+++ gdb-6.8/gdb/config/ia64/linux.mh 2008-11-18 11:09:33.000000000 +0100
|
|
||||||
@@ -1,6 +1,6 @@
|
|
||||||
# Host: Intel IA-64 running GNU/Linux
|
|
||||||
|
|
||||||
-NAT_FILE= config/nm-linux.h
|
|
||||||
+NAT_FILE= nm-linux.h
|
|
||||||
NATDEPFILES= inf-ptrace.o fork-child.o corelow.o gcore.o \
|
|
||||||
core-regset.o ia64-linux-nat.o \
|
|
||||||
proc-service.o linux-thread-db.o linux-nat.o linux-fork.o
|
|
||||||
--- /dev/null 2008-11-16 09:11:50.595000000 +0100
|
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.base/hw-watchpoint-available.exp 2008-11-18 11:28:40.000000000 +0100
|
|
||||||
@@ -0,0 +1,35 @@
|
|
||||||
+# Copyright 2008 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+# This program is free software; you can redistribute it and/or modify
|
|
||||||
+# it under the terms of the GNU General Public License as published by
|
|
||||||
+# the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+# (at your option) any later version.
|
|
||||||
+#
|
|
||||||
+# This program is distributed in the hope that it will be useful,
|
|
||||||
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+# GNU General Public License for more details.
|
|
||||||
+#
|
|
||||||
+# You should have received a copy of the GNU General Public License
|
|
||||||
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+if {![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"] && ![istarget "ia64-*-*"]
|
|
||||||
+ && ![istarget "s390*-*-*"]} then {
|
|
||||||
+ verbose "Skipping hw-watchpoint-available test."
|
|
||||||
+ return
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+set testfile hw-watchpoint-available
|
|
||||||
+set srcfile ${testfile}.c
|
|
||||||
+set binfile ${objdir}/${subdir}/${testfile}
|
|
||||||
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
|
|
||||||
+ untested "Couldn't compile test program"
|
|
||||||
+ return -1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+gdb_exit
|
|
||||||
+gdb_start
|
|
||||||
+gdb_reinitialize_dir $srcdir/$subdir
|
|
||||||
+gdb_load ${binfile}
|
|
||||||
+
|
|
||||||
+gdb_test "watch watchee" "Hardware watchpoint 1: watchee"
|
|
||||||
--- /dev/null 2008-11-16 09:11:50.595000000 +0100
|
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.base/hw-watchpoint-available.c 2008-11-18 11:24:38.000000000 +0100
|
|
||||||
@@ -0,0 +1,27 @@
|
|
||||||
+/* This testcase is part of GDB, the GNU debugger.
|
|
||||||
+
|
|
||||||
+ Copyright 2008 Free Software Foundation, Inc.
|
|
||||||
+
|
|
||||||
+ This program is free software; you can redistribute it and/or modify
|
|
||||||
+ it under the terms of the GNU General Public License as published by
|
|
||||||
+ the Free Software Foundation; either version 3 of the License, or
|
|
||||||
+ (at your option) any later version.
|
|
||||||
+
|
|
||||||
+ This program is distributed in the hope that it will be useful,
|
|
||||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
+ GNU General Public License for more details.
|
|
||||||
+
|
|
||||||
+ You should have received a copy of the GNU General Public License
|
|
||||||
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
+
|
|
||||||
+ Please email any bugs, comments, and/or additions to this file to:
|
|
||||||
+ bug-gdb@prep.ai.mit.edu */
|
|
||||||
+
|
|
||||||
+int watchee;
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main (void)
|
|
||||||
+{
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
272
gdb-6.8-inlining-addon.patch
Normal file
272
gdb-6.8-inlining-addon.patch
Normal file
@ -0,0 +1,272 @@
|
|||||||
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-bt.c
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.opt/inline-bt.c 2008-12-10 00:25:31.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-bt.c 2008-12-10 00:37:26.000000000 +0100
|
||||||
|
@@ -13,10 +13,16 @@
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
-int x, y;
|
||||||
|
+/* VOLATILE forces all the inlining to happen as otherwise the whole program
|
||||||
|
+ gets optimized by CSE to just simple assignments of the results. */
|
||||||
|
+volatile int x, y;
|
||||||
|
volatile int result;
|
||||||
|
|
||||||
|
-void bar(void);
|
||||||
|
+inline void bar(void)
|
||||||
|
+{
|
||||||
|
+ x += y; /* set breakpoint 1 here */
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
|
||||||
|
inline int func1(void)
|
||||||
|
{
|
||||||
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-bt.exp
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.opt/inline-bt.exp 2008-12-10 00:25:31.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-bt.exp 2008-12-10 00:37:26.000000000 +0100
|
||||||
|
@@ -41,18 +41,19 @@ if { [skip_inline_frame_tests] } {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
-set line1 [gdb_get_line_number "set breakpoint 1 here" ${fullsrcfile2}]
|
||||||
|
-gdb_breakpoint $srcfile2:$line1
|
||||||
|
+set line1 [gdb_get_line_number "set breakpoint 1 here" ${srcfile}]
|
||||||
|
+gdb_breakpoint $srcfile:$line1
|
||||||
|
|
||||||
|
gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar (1)"
|
||||||
|
gdb_test "backtrace" "#0 bar.*#1 .*main.*" "backtrace from bar (1)"
|
||||||
|
-gdb_test "info frame" ".*called by frame.*" "bar not inlined"
|
||||||
|
+gdb_test "info frame" ".*inlined into frame.*" "bar inlined"
|
||||||
|
|
||||||
|
-gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar (2)"
|
||||||
|
-gdb_test "backtrace" "#0 bar.*#1 .*func1.*#2 .*main.*" \
|
||||||
|
- "backtrace from bar (2)"
|
||||||
|
-gdb_test "up" "#1 .*func1.*" "up from bar (2)"
|
||||||
|
-gdb_test "info frame" ".*inlined into frame.*" "func1 inlined (2)"
|
||||||
|
+# gcc-4.3.1 omits the line number information for (2).
|
||||||
|
+#gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar (2)"
|
||||||
|
+#gdb_test "backtrace" "#0 bar.*#1 .*func1.*#2 .*main.*" \
|
||||||
|
+# "backtrace from bar (2)"
|
||||||
|
+#gdb_test "up" "#1 .*func1.*" "up from bar (2)"
|
||||||
|
+#gdb_test "info frame" ".*inlined into frame.*" "func1 inlined (2)"
|
||||||
|
|
||||||
|
gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar (3)"
|
||||||
|
gdb_test "backtrace" "#0 bar.*#1 .*func1.*#2 .*func2.*#3 .*main.*" \
|
||||||
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-cmds.c
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.opt/inline-cmds.c 2008-12-10 00:25:31.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-cmds.c 2008-12-10 00:37:26.000000000 +0100
|
||||||
|
@@ -13,13 +13,19 @@
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
-int x, y;
|
||||||
|
+/* VOLATILE forces all the inlining to happen as otherwise the whole program
|
||||||
|
+ gets optimized by CSE to just simple assignments of the results. */
|
||||||
|
+volatile int x, y;
|
||||||
|
volatile int result;
|
||||||
|
|
||||||
|
-void bar(void);
|
||||||
|
void marker(void);
|
||||||
|
void noinline(void);
|
||||||
|
|
||||||
|
+inline void bar(void)
|
||||||
|
+{
|
||||||
|
+ x += y; /* set breakpoint 1 here */
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
inline int func1(void)
|
||||||
|
{
|
||||||
|
bar ();
|
||||||
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-cmds.exp
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.opt/inline-cmds.exp 2008-12-10 00:25:31.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-cmds.exp 2008-12-10 00:36:27.000000000 +0100
|
||||||
|
@@ -45,9 +45,9 @@ if { [skip_inline_frame_tests] } {
|
||||||
|
|
||||||
|
# First, check that the things we expected to be inlined really were,
|
||||||
|
# and those that shouldn't be weren't.
|
||||||
|
-set line1 [gdb_get_line_number "set breakpoint 1 here" ${fullsrcfile2}]
|
||||||
|
+set line1 [gdb_get_line_number "set breakpoint 1 here" ${srcfile2}]
|
||||||
|
gdb_breakpoint $srcfile2:$line1
|
||||||
|
-set line2 [gdb_get_line_number "set breakpoint 2 here" ${fullsrcfile2}]
|
||||||
|
+set line2 [gdb_get_line_number "set breakpoint 2 here" ${srcfile2}]
|
||||||
|
gdb_breakpoint $srcfile2:$line2
|
||||||
|
|
||||||
|
gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar (1)"
|
||||||
|
@@ -66,7 +66,7 @@ gdb_test "info frame" ".*inlined into fr
|
||||||
|
|
||||||
|
gdb_test "continue" ".*set breakpoint 2 here.*" "continue to marker"
|
||||||
|
gdb_test "backtrace" "#0 marker.*#1 .*main.*" "backtrace from marker"
|
||||||
|
-gdb_test "info frame" ".*called by frame.*" "marker not inlined"
|
||||||
|
+gdb_test "info frame" ".*\n called by frame.*" "marker not inlined"
|
||||||
|
|
||||||
|
# Next, check that we can next over inlined functions. We should not end up
|
||||||
|
# inside any of them.
|
||||||
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-locals.c
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.opt/inline-locals.c 2008-12-10 00:25:31.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-locals.c 2008-12-10 00:37:26.000000000 +0100
|
||||||
|
@@ -13,11 +13,16 @@
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
-int x, y;
|
||||||
|
+/* VOLATILE forces all the inlining to happen as otherwise the whole program
|
||||||
|
+ gets optimized by CSE to just simple assignments of the results. */
|
||||||
|
+volatile int x, y;
|
||||||
|
volatile int result;
|
||||||
|
volatile int *array_p;
|
||||||
|
|
||||||
|
-void bar(void);
|
||||||
|
+inline void bar(void)
|
||||||
|
+{
|
||||||
|
+ x += y; /* set breakpoint 1 here */
|
||||||
|
+}
|
||||||
|
|
||||||
|
inline int func1(int arg1)
|
||||||
|
{
|
||||||
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-locals.exp
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.opt/inline-locals.exp 2008-12-10 00:25:31.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-locals.exp 2008-12-10 00:37:26.000000000 +0100
|
||||||
|
@@ -43,8 +43,8 @@ if { [skip_inline_var_tests] } {
|
||||||
|
|
||||||
|
set no_frames [skip_inline_frame_tests]
|
||||||
|
|
||||||
|
-set line1 [gdb_get_line_number "set breakpoint 1 here" ${fullsrcfile2}]
|
||||||
|
-gdb_breakpoint $srcfile2:$line1
|
||||||
|
+set line1 [gdb_get_line_number "set breakpoint 1 here" ${srcfile}]
|
||||||
|
+gdb_breakpoint $srcfile:$line1
|
||||||
|
|
||||||
|
gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar (1)"
|
||||||
|
|
||||||
|
@@ -77,6 +77,9 @@ if { ! $no_frames } {
|
||||||
|
|
||||||
|
# Make sure that locals on the stack are found. This is an array to
|
||||||
|
# prevent it from living in a register.
|
||||||
|
+if [test_compiler_info "gcc-4-3-*"] {
|
||||||
|
+ setup_kfail *-*-* "gcc/debug.optimization"
|
||||||
|
+}
|
||||||
|
gdb_test "print array\[0\]" "\\\$$decimal = 0" "print local (2)"
|
||||||
|
|
||||||
|
if { ! $no_frames } {
|
||||||
|
@@ -115,4 +118,7 @@ if { ! $no_frames } {
|
||||||
|
gdb_test "info locals" ".*arg2 = 184.*" "info locals above bar (3b)"
|
||||||
|
}
|
||||||
|
|
||||||
|
+if [test_compiler_info "gcc-4-3-*"] {
|
||||||
|
+ setup_kfail *-*-* "gcc/debug.optimization"
|
||||||
|
+}
|
||||||
|
gdb_test "print array\[0\]" "\\\$$decimal = 184" "print local (3)"
|
||||||
|
Index: gdb-6.8.50.20081128/gdb/frame.c
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/frame.c 2008-12-10 00:25:31.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/frame.c 2008-12-10 00:25:31.000000000 +0100
|
||||||
|
@@ -269,7 +269,7 @@ fprint_frame (struct ui_file *file, stru
|
||||||
|
static struct frame_info *
|
||||||
|
skip_inlined_frames (struct frame_info *frame)
|
||||||
|
{
|
||||||
|
- while (get_frame_type (frame) == INLINE_FRAME)
|
||||||
|
+ while (frame && get_frame_type (frame) == INLINE_FRAME)
|
||||||
|
frame = get_prev_frame (frame);
|
||||||
|
|
||||||
|
return frame;
|
||||||
|
Index: gdb-6.8.50.20081128/gdb/breakpoint.c
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/breakpoint.c 2008-12-10 00:25:31.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/breakpoint.c 2008-12-10 00:36:27.000000000 +0100
|
||||||
|
@@ -57,6 +57,7 @@
|
||||||
|
#include "top.h"
|
||||||
|
#include "wrapper.h"
|
||||||
|
#include "valprint.h"
|
||||||
|
+#include "inline-frame.h"
|
||||||
|
|
||||||
|
#include "mi/mi-common.h"
|
||||||
|
|
||||||
|
@@ -2976,6 +2977,12 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||||
|
bs->print = 0;
|
||||||
|
}
|
||||||
|
bs->commands = copy_command_lines (bs->commands);
|
||||||
|
+
|
||||||
|
+ /* Display the innermost inlined frame at a breakpont as it gives to
|
||||||
|
+ most of the available information. */
|
||||||
|
+ if (b->type != bp_until && b->type != bp_finish)
|
||||||
|
+ while (inline_skipped_frames (ptid))
|
||||||
|
+ step_into_inline_frame (ptid);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Print nothing for this entry if we dont stop or if we dont print. */
|
||||||
|
Index: gdb-6.8.50.20081128/gdb/inline-frame.c
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/inline-frame.c 2008-12-10 00:25:31.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/inline-frame.c 2008-12-10 00:40:49.000000000 +0100
|
||||||
|
@@ -183,6 +183,12 @@ inline_frame_sniffer (const struct frame
|
||||||
|
if (frame_block == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
+ /* For >=2 inlined functions SKIPPED_SYMBOL needs to be different after each
|
||||||
|
+ step_into_inline_frame call. But skip_inline_frames is called only once
|
||||||
|
+ and thus SKIPPED_SYMBOL needs to be calculated by INLINE_FRAME_SNIFFER. */
|
||||||
|
+ if (state)
|
||||||
|
+ state->skipped_symbol = NULL;
|
||||||
|
+
|
||||||
|
/* Calculate DEPTH, the number of inlined functions at this
|
||||||
|
location. */
|
||||||
|
depth = 0;
|
||||||
|
@@ -192,6 +198,10 @@ inline_frame_sniffer (const struct frame
|
||||||
|
if (block_inlined_p (cur_block))
|
||||||
|
depth++;
|
||||||
|
|
||||||
|
+ if (state && depth == state->skipped_frames
|
||||||
|
+ && state->skipped_symbol == NULL)
|
||||||
|
+ state->skipped_symbol = BLOCK_FUNCTION (cur_block);
|
||||||
|
+
|
||||||
|
cur_block = BLOCK_SUPERBLOCK (cur_block);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -275,7 +285,6 @@ skip_inline_frames (ptid_t ptid)
|
||||||
|
{
|
||||||
|
CORE_ADDR this_pc;
|
||||||
|
struct block *frame_block, *cur_block;
|
||||||
|
- struct symbol *last_sym = NULL;
|
||||||
|
int skip_count = 0;
|
||||||
|
struct inline_state *state;
|
||||||
|
|
||||||
|
@@ -296,10 +305,7 @@ skip_inline_frames (ptid_t ptid)
|
||||||
|
of BLOCK_START. */
|
||||||
|
if (BLOCK_START (cur_block) == this_pc
|
||||||
|
|| block_starting_point_at (this_pc, cur_block))
|
||||||
|
- {
|
||||||
|
- skip_count++;
|
||||||
|
- last_sym = BLOCK_FUNCTION (cur_block);
|
||||||
|
- }
|
||||||
|
+ skip_count++;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
@@ -311,7 +317,6 @@ skip_inline_frames (ptid_t ptid)
|
||||||
|
state = allocate_inline_frame_state (ptid);
|
||||||
|
state->skipped_frames = skip_count;
|
||||||
|
state->saved_pc = this_pc;
|
||||||
|
- state->skipped_symbol = last_sym;
|
||||||
|
|
||||||
|
if (skip_count != 0)
|
||||||
|
reinit_frame_cache ();
|
||||||
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-markers.c
|
||||||
|
===================================================================
|
||||||
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.opt/inline-markers.c 2008-12-10 00:25:31.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-markers.c 2008-12-10 00:37:26.000000000 +0100
|
||||||
|
@@ -15,11 +15,6 @@
|
||||||
|
|
||||||
|
extern int x, y;
|
||||||
|
|
||||||
|
-void bar(void)
|
||||||
|
-{
|
||||||
|
- x += y; /* set breakpoint 1 here */
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
void marker(void)
|
||||||
|
{
|
||||||
|
x += y; /* set breakpoint 2 here */
|
@ -1,10 +1,11 @@
|
|||||||
Implement `b <funcname>' for <funcname> with concete inlined instances by
|
Implement `b <funcname>' for <funcname> with concete inlined instances by
|
||||||
a multiple-PC breakpoint.
|
a multiple-PC breakpoint.
|
||||||
|
|
||||||
diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/ada-lang.c sources-inline-works3/gdb/ada-lang.c
|
Index: gdb-6.8.50.20081128/gdb/ada-lang.c
|
||||||
--- sources-inline-works3-orig/gdb/ada-lang.c 2008-06-24 20:58:11.000000000 +0200
|
===================================================================
|
||||||
+++ sources-inline-works3/gdb/ada-lang.c 2008-06-26 15:29:33.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/ada-lang.c 2008-11-25 00:21:15.000000000 +0100
|
||||||
@@ -4625,7 +4625,7 @@ remove_irrelevant_renamings (struct ada_
|
+++ gdb-6.8.50.20081128/gdb/ada-lang.c 2008-12-06 21:39:56.000000000 +0100
|
||||||
|
@@ -4614,7 +4614,7 @@ remove_irrelevant_renamings (struct ada_
|
||||||
if (current_block == NULL)
|
if (current_block == NULL)
|
||||||
return nsyms;
|
return nsyms;
|
||||||
|
|
||||||
@ -13,7 +14,7 @@ diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/ad
|
|||||||
if (current_function == NULL)
|
if (current_function == NULL)
|
||||||
return nsyms;
|
return nsyms;
|
||||||
|
|
||||||
@@ -6721,7 +6721,7 @@ ada_find_renaming_symbol (const char *na
|
@@ -6625,7 +6625,7 @@ ada_find_renaming_symbol (const char *na
|
||||||
static struct symbol *
|
static struct symbol *
|
||||||
find_old_style_renaming_symbol (const char *name, struct block *block)
|
find_old_style_renaming_symbol (const char *name, struct block *block)
|
||||||
{
|
{
|
||||||
@ -22,10 +23,11 @@ diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/ad
|
|||||||
char *rename;
|
char *rename;
|
||||||
|
|
||||||
if (function_sym != NULL)
|
if (function_sym != NULL)
|
||||||
diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/block.c sources-inline-works3/gdb/block.c
|
Index: gdb-6.8.50.20081128/gdb/block.c
|
||||||
--- sources-inline-works3-orig/gdb/block.c 2008-06-24 20:58:11.000000000 +0200
|
===================================================================
|
||||||
+++ sources-inline-works3/gdb/block.c 2008-06-26 15:29:09.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/block.c 2008-12-06 14:06:16.000000000 +0100
|
||||||
@@ -73,6 +73,19 @@ block_linkage_function (const struct blo
|
+++ gdb-6.8.50.20081128/gdb/block.c 2008-12-06 21:40:29.000000000 +0100
|
||||||
|
@@ -75,6 +75,19 @@ block_linkage_function (const struct blo
|
||||||
return BLOCK_FUNCTION (bl);
|
return BLOCK_FUNCTION (bl);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,13 +44,14 @@ diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/bl
|
|||||||
+ return BLOCK_FUNCTION (bl);
|
+ return BLOCK_FUNCTION (bl);
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
/* Return one if BLOCK represents an inlined function. */
|
/* Return one if BL represents an inlined function. */
|
||||||
|
|
||||||
int
|
int
|
||||||
diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/block.h sources-inline-works3/gdb/block.h
|
Index: gdb-6.8.50.20081128/gdb/block.h
|
||||||
--- sources-inline-works3-orig/gdb/block.h 2008-06-24 20:58:11.000000000 +0200
|
===================================================================
|
||||||
+++ sources-inline-works3/gdb/block.h 2008-06-26 15:29:20.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/block.h 2008-12-06 14:06:16.000000000 +0100
|
||||||
@@ -137,6 +137,7 @@ struct blockvector
|
+++ gdb-6.8.50.20081128/gdb/block.h 2008-12-06 21:39:56.000000000 +0100
|
||||||
|
@@ -133,6 +133,7 @@ struct blockvector
|
||||||
enum { GLOBAL_BLOCK = 0, STATIC_BLOCK = 1, FIRST_LOCAL_BLOCK = 2 };
|
enum { GLOBAL_BLOCK = 0, STATIC_BLOCK = 1, FIRST_LOCAL_BLOCK = 2 };
|
||||||
|
|
||||||
extern struct symbol *block_linkage_function (const struct block *);
|
extern struct symbol *block_linkage_function (const struct block *);
|
||||||
@ -56,10 +59,11 @@ diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/bl
|
|||||||
|
|
||||||
extern int block_inlined_p (const struct block *block);
|
extern int block_inlined_p (const struct block *block);
|
||||||
|
|
||||||
diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/blockframe.c sources-inline-works3/gdb/blockframe.c
|
Index: gdb-6.8.50.20081128/gdb/blockframe.c
|
||||||
--- sources-inline-works3-orig/gdb/blockframe.c 2008-06-24 20:58:25.000000000 +0200
|
===================================================================
|
||||||
+++ sources-inline-works3/gdb/blockframe.c 2008-06-26 15:34:44.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/blockframe.c 2008-12-06 14:06:16.000000000 +0100
|
||||||
@@ -157,7 +157,7 @@ find_pc_sect_function (CORE_ADDR pc, str
|
+++ gdb-6.8.50.20081128/gdb/blockframe.c 2008-12-06 21:39:56.000000000 +0100
|
||||||
|
@@ -143,7 +143,7 @@ find_pc_sect_function (CORE_ADDR pc, str
|
||||||
struct block *b = block_for_pc_sect (pc, section);
|
struct block *b = block_for_pc_sect (pc, section);
|
||||||
if (b == 0)
|
if (b == 0)
|
||||||
return 0;
|
return 0;
|
||||||
@ -68,10 +72,11 @@ diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/bl
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Return the function containing pc value PC.
|
/* Return the function containing pc value PC.
|
||||||
diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/breakpoint.c sources-inline-works3/gdb/breakpoint.c
|
Index: gdb-6.8.50.20081128/gdb/breakpoint.c
|
||||||
--- sources-inline-works3-orig/gdb/breakpoint.c 2008-06-24 20:58:25.000000000 +0200
|
===================================================================
|
||||||
+++ sources-inline-works3/gdb/breakpoint.c 2008-06-26 15:28:35.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/breakpoint.c 2008-12-06 14:06:17.000000000 +0100
|
||||||
@@ -5692,7 +5692,7 @@ resolve_sal_pc (struct symtab_and_line *
|
+++ gdb-6.8.50.20081128/gdb/breakpoint.c 2008-12-06 21:39:56.000000000 +0100
|
||||||
|
@@ -5712,7 +5712,7 @@ resolve_sal_pc (struct symtab_and_line *
|
||||||
bv = blockvector_for_pc_sect (sal->pc, 0, &b, sal->symtab);
|
bv = blockvector_for_pc_sect (sal->pc, 0, &b, sal->symtab);
|
||||||
if (bv != NULL)
|
if (bv != NULL)
|
||||||
{
|
{
|
||||||
@ -80,19 +85,20 @@ diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/br
|
|||||||
if (sym != NULL)
|
if (sym != NULL)
|
||||||
{
|
{
|
||||||
fixup_symbol_section (sym, sal->symtab->objfile);
|
fixup_symbol_section (sym, sal->symtab->objfile);
|
||||||
diff -up -u -X /home/jkratoch/.diffi.list -rup sources-inline-works3-orig/gdb/testsuite/gdb.opt/inline-cmds.exp sources-inline-works3/gdb/testsuite/gdb.opt/inline-cmds.exp
|
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-cmds.exp
|
||||||
--- sources-inline-works3-orig/gdb/testsuite/gdb.opt/inline-cmds.exp 2008-06-24 20:58:25.000000000 +0200
|
===================================================================
|
||||||
+++ sources-inline-works3/gdb/testsuite/gdb.opt/inline-cmds.exp 2008-06-26 15:49:12.000000000 +0200
|
--- gdb-6.8.50.20081128.orig/gdb/testsuite/gdb.opt/inline-cmds.exp 2008-12-06 21:37:27.000000000 +0100
|
||||||
@@ -42,8 +42,10 @@ if { [skip_inline_frame_tests] } {
|
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.opt/inline-cmds.exp 2008-12-06 21:41:37.000000000 +0100
|
||||||
|
@@ -45,8 +45,10 @@ if { [skip_inline_frame_tests] } {
|
||||||
|
|
||||||
# First, check that the things we expected to be inlined really were,
|
# First, check that the things we expected to be inlined really were,
|
||||||
# and those that shouldn't be weren't.
|
# and those that shouldn't be weren't.
|
||||||
-set line1 [gdb_get_line_number "set breakpoint 1 here"]
|
-set line1 [gdb_get_line_number "set breakpoint 1 here" ${srcfile2}]
|
||||||
-gdb_breakpoint $line1
|
-gdb_breakpoint $srcfile2:$line1
|
||||||
+# We test also inlining by the function name, otherwise we would use:
|
+# We test also inlining by the function name, otherwise we would use:
|
||||||
+# set line1 [gdb_get_line_number "set breakpoint 1 here"]
|
+# set line1 [gdb_get_line_number "set breakpoint 1 here" ${srcfile2}]
|
||||||
+# gdb_breakpoint $line1
|
+# gdb_breakpoint $srcfile2:$line1
|
||||||
+gdb_breakpoint "bar"
|
+gdb_breakpoint "bar"
|
||||||
set line2 [gdb_get_line_number "set breakpoint 2 here"]
|
set line2 [gdb_get_line_number "set breakpoint 2 here" ${srcfile2}]
|
||||||
gdb_breakpoint $line2
|
gdb_breakpoint $srcfile2:$line2
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -5,9 +5,11 @@ Some of the threads may not be properly PTRACE_DETACHed which hurts if they
|
|||||||
should have been detached with SIGSTOP (as they are accidentally left running
|
should have been detached with SIGSTOP (as they are accidentally left running
|
||||||
on the debugger termination).
|
on the debugger termination).
|
||||||
|
|
||||||
--- ./gdb/defs.h 26 Jun 2008 15:51:28 -0000 1.227
|
Index: gdb-6.8.50.20081128/gdb/defs.h
|
||||||
+++ ./gdb/defs.h 10 Jul 2008 10:37:32 -0000
|
===================================================================
|
||||||
@@ -141,6 +141,7 @@ extern char *gdb_sysroot;
|
--- gdb-6.8.50.20081128.orig/gdb/defs.h 2008-11-27 10:23:01.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/defs.h 2008-12-06 21:49:32.000000000 +0100
|
||||||
|
@@ -155,6 +155,7 @@ extern char *gdb_sysroot;
|
||||||
extern char *debug_file_directory;
|
extern char *debug_file_directory;
|
||||||
|
|
||||||
extern int quit_flag;
|
extern int quit_flag;
|
||||||
@ -15,18 +17,20 @@ on the debugger termination).
|
|||||||
extern int immediate_quit;
|
extern int immediate_quit;
|
||||||
extern int sevenbit_strings;
|
extern int sevenbit_strings;
|
||||||
|
|
||||||
@@ -159,7 +159,7 @@ extern void quit (void);
|
@@ -168,7 +169,7 @@ extern void quit (void);
|
||||||
#define QUIT_FIXME "ignoring redefinition of QUIT"
|
needed. */
|
||||||
#else
|
|
||||||
#define QUIT { \
|
#define QUIT { \
|
||||||
- if (quit_flag) quit (); \
|
- if (quit_flag) quit (); \
|
||||||
+ if (quit_flag && !quit_flag_cleanup) quit (); \
|
+ if (quit_flag && !quit_flag_cleanup) quit (); \
|
||||||
if (deprecated_interactive_hook) deprecated_interactive_hook (); \
|
if (deprecated_interactive_hook) deprecated_interactive_hook (); \
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
--- ./gdb/event-top.c 9 Jul 2008 22:16:14 -0000 1.61
|
Index: gdb-6.8.50.20081128/gdb/event-top.c
|
||||||
+++ ./gdb/event-top.c 10 Jul 2008 10:37:33 -0000
|
===================================================================
|
||||||
@@ -941,7 +941,7 @@ async_request_quit (gdb_client_data arg)
|
--- gdb-6.8.50.20081128.orig/gdb/event-top.c 2008-12-04 10:34:31.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/event-top.c 2008-12-06 21:49:07.000000000 +0100
|
||||||
|
@@ -939,7 +939,7 @@ async_request_quit (gdb_client_data arg)
|
||||||
is no reason to call quit again here, unless immediate_quit is
|
is no reason to call quit again here, unless immediate_quit is
|
||||||
set.*/
|
set.*/
|
||||||
|
|
||||||
@ -35,9 +39,11 @@ on the debugger termination).
|
|||||||
quit ();
|
quit ();
|
||||||
}
|
}
|
||||||
|
|
||||||
--- ./gdb/top.c 9 Jul 2008 22:30:46 -0000 1.145
|
Index: gdb-6.8.50.20081128/gdb/top.c
|
||||||
+++ ./gdb/top.c 10 Jul 2008 10:37:37 -0000
|
===================================================================
|
||||||
@@ -1263,7 +1263,9 @@ quit_force (char *args, int from_tty)
|
--- gdb-6.8.50.20081128.orig/gdb/top.c 2008-12-04 10:23:12.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/top.c 2008-12-06 21:49:07.000000000 +0100
|
||||||
|
@@ -1299,7 +1299,9 @@ quit_force (char *args, int from_tty)
|
||||||
qt.args = args;
|
qt.args = args;
|
||||||
qt.from_tty = from_tty;
|
qt.from_tty = from_tty;
|
||||||
|
|
||||||
@ -48,9 +54,11 @@ on the debugger termination).
|
|||||||
catch_errors (quit_target, &qt,
|
catch_errors (quit_target, &qt,
|
||||||
"Quitting: ", RETURN_MASK_ALL);
|
"Quitting: ", RETURN_MASK_ALL);
|
||||||
|
|
||||||
--- ./gdb/utils.c 10 Jun 2008 09:29:15 -0000 1.189
|
Index: gdb-6.8.50.20081128/gdb/utils.c
|
||||||
+++ ./gdb/utils.c 10 Jul 2008 10:37:38 -0000
|
===================================================================
|
||||||
@@ -120,6 +120,11 @@ int job_control;
|
--- gdb-6.8.50.20081128.orig/gdb/utils.c 2008-12-04 10:31:00.000000000 +0100
|
||||||
|
+++ gdb-6.8.50.20081128/gdb/utils.c 2008-12-06 21:49:07.000000000 +0100
|
||||||
|
@@ -114,6 +114,11 @@ int job_control;
|
||||||
|
|
||||||
int quit_flag;
|
int quit_flag;
|
||||||
|
|
||||||
|
@ -1,97 +0,0 @@
|
|||||||
diff -up gdb-6.8/gdb/sparc64-linux-tdep.c.sparc gdb-6.8/gdb/sparc64-linux-tdep.c
|
|
||||||
--- gdb-6.8/gdb/sparc64-linux-tdep.c.sparc 2008-01-01 16:53:13.000000000 -0600
|
|
||||||
+++ gdb-6.8/gdb/sparc64-linux-tdep.c 2008-05-15 14:08:57.000000000 -0500
|
|
||||||
@@ -174,6 +174,30 @@ sparc64_linux_collect_core_fpregset (con
|
|
||||||
sparc64_collect_fpregset (regcache, regnum, fpregs);
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Set the program counter for process PTID to PC. */
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+sparc64_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
|
|
||||||
+{
|
|
||||||
+ struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
|
|
||||||
+ ULONGEST state;
|
|
||||||
+
|
|
||||||
+ regcache_cooked_write_unsigned (regcache, tdep->pc_regnum, pc);
|
|
||||||
+ regcache_cooked_write_unsigned (regcache, tdep->npc_regnum, pc + 4);
|
|
||||||
+
|
|
||||||
+ /* Clear the "in syscall" bit to prevent the kernel from
|
|
||||||
+ messing with the PCs we just installed, if we happen to be
|
|
||||||
+ within an interrupted system call that the kernel wants to
|
|
||||||
+ restart.
|
|
||||||
+
|
|
||||||
+ Note that after we return from the dummy call, the TSTATE et al.
|
|
||||||
+ registers will be automatically restored, and the kernel
|
|
||||||
+ continues to restart the system call at this point. */
|
|
||||||
+ regcache_cooked_read_unsigned (regcache, SPARC64_STATE_REGNUM, &state);
|
|
||||||
+ state &= ~((ULONGEST)0x20);
|
|
||||||
+ regcache_cooked_write_unsigned (regcache, SPARC64_STATE_REGNUM, state);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -211,6 +235,8 @@ sparc64_linux_init_abi (struct gdbarch_i
|
|
||||||
|
|
||||||
/* Make sure we can single-step over signal return system calls. */
|
|
||||||
tdep->step_trap = sparc64_linux_step_trap;
|
|
||||||
+
|
|
||||||
+ set_gdbarch_write_pc (gdbarch, sparc64_linux_write_pc);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
diff -up gdb-6.8/gdb/sparc-linux-tdep.c.sparc gdb-6.8/gdb/sparc-linux-tdep.c
|
|
||||||
--- gdb-6.8/gdb/sparc-linux-tdep.c.sparc 2008-01-01 16:53:13.000000000 -0600
|
|
||||||
+++ gdb-6.8/gdb/sparc-linux-tdep.c 2008-05-15 14:08:12.000000000 -0500
|
|
||||||
@@ -211,6 +211,30 @@ sparc32_linux_collect_core_fpregset (con
|
|
||||||
sparc32_collect_fpregset (regcache, regnum, fpregs);
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Set the program counter for process PTID to PC. */
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+sparc_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
|
|
||||||
+{
|
|
||||||
+ struct gdbarch_tdep *tdep = gdbarch_tdep (get_regcache_arch (regcache));
|
|
||||||
+ ULONGEST psr;
|
|
||||||
+
|
|
||||||
+ regcache_cooked_write_unsigned (regcache, tdep->pc_regnum, pc);
|
|
||||||
+ regcache_cooked_write_unsigned (regcache, tdep->npc_regnum, pc + 4);
|
|
||||||
+
|
|
||||||
+ /* Clear the "in syscall" bit to prevent the kernel from
|
|
||||||
+ messing with the PCs we just installed, if we happen to be
|
|
||||||
+ within an interrupted system call that the kernel wants to
|
|
||||||
+ restart.
|
|
||||||
+
|
|
||||||
+ Note that after we return from the dummy call, the PSR et al.
|
|
||||||
+ registers will be automatically restored, and the kernel
|
|
||||||
+ continues to restart the system call at this point. */
|
|
||||||
+ regcache_cooked_read_unsigned (regcache, SPARC32_PSR_REGNUM, &psr);
|
|
||||||
+ psr &= ~0x000004000;
|
|
||||||
+ regcache_cooked_write_unsigned (regcache, SPARC32_PSR_REGNUM, psr);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -238,10 +262,6 @@ sparc32_linux_init_abi (struct gdbarch_i
|
|
||||||
prologue analysis. */
|
|
||||||
tdep->plt_entry_size = 12;
|
|
||||||
|
|
||||||
- /* GNU/Linux doesn't support the 128-bit `long double' from the psABI. */
|
|
||||||
- set_gdbarch_long_double_bit (gdbarch, 64);
|
|
||||||
- set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
|
|
||||||
-
|
|
||||||
/* Enable TLS support. */
|
|
||||||
set_gdbarch_fetch_tls_load_module_address (gdbarch,
|
|
||||||
svr4_fetch_objfile_link_map);
|
|
||||||
@@ -251,6 +271,8 @@ sparc32_linux_init_abi (struct gdbarch_i
|
|
||||||
|
|
||||||
/* Hook in the DWARF CFI frame unwinder. */
|
|
||||||
frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
|
|
||||||
+
|
|
||||||
+ set_gdbarch_write_pc (gdbarch, sparc_linux_write_pc);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
|
File diff suppressed because it is too large
Load Diff
@ -1,482 +0,0 @@
|
|||||||
http://sourceware.org/ml/gdb-patches/2008-02/msg00472.html
|
|
||||||
|
|
||||||
2008-02-28 Daniel Jacobowitz <dan@codesourcery.com>
|
|
||||||
|
|
||||||
* breakpoint.c (fetch_watchpoint_value): New function.
|
|
||||||
(update_watchpoint): Set and clear val_valid. Use
|
|
||||||
fetch_watchpoint_value. Handle unreadable values on the
|
|
||||||
value chain. Correct check for user-requested array watchpoints.
|
|
||||||
(breakpoint_init_inferior): Clear val_valid.
|
|
||||||
(watchpoint_value_print): New function.
|
|
||||||
(print_it_typical): Use it. Do not free or clear old_val. Print
|
|
||||||
watchpoints even if old_val == NULL.
|
|
||||||
(watchpoint_check): Use fetch_watchpoint_value. Check for values
|
|
||||||
becoming readable or unreadable.
|
|
||||||
(watch_command_1): Use fetch_watchpoint_value. Set val_valid.
|
|
||||||
(do_enable_watchpoint): Likewise.
|
|
||||||
* breakpoint.h (struct breakpoint): Update comment for val. Add
|
|
||||||
val_valid.
|
|
||||||
* NEWS: Mention watchpoints on inaccessible memory.
|
|
||||||
|
|
||||||
2008-02-28 Daniel Jacobowitz <dan@codesourcery.com>
|
|
||||||
|
|
||||||
* gdb.base/watchpoint.c (global_ptr, func4): New.
|
|
||||||
(main): Call func4.
|
|
||||||
* gdb.base/watchpoint.exp: Call test_inaccessible_watchpoint.
|
|
||||||
(test_inaccessible_watchpoint): New.
|
|
||||||
|
|
||||||
[ Backported for GDB-6.8. ]
|
|
||||||
|
|
||||||
It fixes the regression since GDB-6.7.1rh on x86_64 -m64 -fPIE/-pie:
|
|
||||||
-PASS: gdb.base/watchpoint.exp: run to marker1 in test_simple_watchpoint
|
|
||||||
+FAIL: gdb.base/watchpoint.exp: run to marker1 in test_simple_watchpoint
|
|
||||||
|
|
||||||
Index: gdb-6.8/gdb/NEWS
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.orig/gdb/NEWS 2008-04-19 20:48:13.000000000 +0200
|
|
||||||
+++ gdb-6.8/gdb/NEWS 2008-04-19 20:50:24.000000000 +0200
|
|
||||||
@@ -1,6 +1,9 @@
|
|
||||||
What has changed in GDB?
|
|
||||||
(Organized release by release)
|
|
||||||
|
|
||||||
+* Watchpoints can now be set on unreadable memory locations, e.g. addresses
|
|
||||||
+which will be allocated using malloc later in program execution.
|
|
||||||
+
|
|
||||||
*** Changes in GDB 6.8
|
|
||||||
|
|
||||||
* New native configurations
|
|
||||||
Index: gdb-6.8/gdb/breakpoint.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.orig/gdb/breakpoint.c 2008-04-19 20:48:11.000000000 +0200
|
|
||||||
+++ gdb-6.8/gdb/breakpoint.c 2008-04-19 20:51:49.000000000 +0200
|
|
||||||
@@ -55,6 +55,7 @@
|
|
||||||
#include "memattr.h"
|
|
||||||
#include "ada-lang.h"
|
|
||||||
#include "top.h"
|
|
||||||
+#include "wrapper.h"
|
|
||||||
|
|
||||||
#include "gdb-events.h"
|
|
||||||
#include "mi/mi-common.h"
|
|
||||||
@@ -826,7 +827,65 @@ is_hardware_watchpoint (struct breakpoin
|
|
||||||
|| bpt->type == bp_access_watchpoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
-/* Assuming that B is a hardware breakpoint:
|
|
||||||
+/* Find the current value of a watchpoint on EXP. Return the value in
|
|
||||||
+ *VALP and *RESULTP and the chain of intermediate and final values
|
|
||||||
+ in *VAL_CHAIN. RESULTP and VAL_CHAIN may be NULL if the caller does
|
|
||||||
+ not need them.
|
|
||||||
+
|
|
||||||
+ If an error occurs while evaluating the expression, *RESULTP will
|
|
||||||
+ be set to NULL. *RESULTP may be a lazy value, if the result could
|
|
||||||
+ not be read from memory. It is used to determine whether a value
|
|
||||||
+ is user-specified (we should watch the whole value) or intermediate
|
|
||||||
+ (we should watch only the bit used to locate the final value).
|
|
||||||
+
|
|
||||||
+ If the final value, or any intermediate value, could not be read
|
|
||||||
+ from memory, *VALP will be set to NULL. *VAL_CHAIN will still be
|
|
||||||
+ set to any referenced values. *VALP will never be a lazy value.
|
|
||||||
+ This is the value which we store in struct breakpoint.
|
|
||||||
+
|
|
||||||
+ 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. */
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+fetch_watchpoint_value (struct expression *exp, struct value **valp,
|
|
||||||
+ struct value **resultp, struct value **val_chain)
|
|
||||||
+{
|
|
||||||
+ struct value *mark, *new_mark, *result;
|
|
||||||
+
|
|
||||||
+ *valp = NULL;
|
|
||||||
+ if (resultp)
|
|
||||||
+ *resultp = NULL;
|
|
||||||
+ if (val_chain)
|
|
||||||
+ *val_chain = NULL;
|
|
||||||
+
|
|
||||||
+ /* Evaluate the expression. */
|
|
||||||
+ mark = value_mark ();
|
|
||||||
+ result = NULL;
|
|
||||||
+ gdb_evaluate_expression (exp, &result);
|
|
||||||
+ new_mark = value_mark ();
|
|
||||||
+ if (mark == new_mark)
|
|
||||||
+ return;
|
|
||||||
+ if (resultp)
|
|
||||||
+ *resultp = result;
|
|
||||||
+
|
|
||||||
+ /* Make sure it's not lazy, so that after the target stops again we
|
|
||||||
+ have a non-lazy previous value to compare with. */
|
|
||||||
+ if (result != NULL
|
|
||||||
+ && (!value_lazy (result) || gdb_value_fetch_lazy (result)))
|
|
||||||
+ *valp = result;
|
|
||||||
+
|
|
||||||
+ if (val_chain)
|
|
||||||
+ {
|
|
||||||
+ /* Return the chain of intermediate values. We use this to
|
|
||||||
+ decide which addresses to watch. */
|
|
||||||
+ *val_chain = new_mark;
|
|
||||||
+ value_release_to_mark (mark);
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/* Assuming that B is a hardware watchpoint:
|
|
||||||
- Reparse watchpoint expression, is REPARSE is non-zero
|
|
||||||
- Evaluate expression and store the result in B->val
|
|
||||||
- Update the list of values that must be watched in B->loc.
|
|
||||||
@@ -837,7 +896,6 @@ static void
|
|
||||||
update_watchpoint (struct breakpoint *b, int reparse)
|
|
||||||
{
|
|
||||||
int within_current_scope;
|
|
||||||
- struct value *mark = value_mark ();
|
|
||||||
struct frame_id saved_frame_id;
|
|
||||||
struct bp_location *loc;
|
|
||||||
bpstat bs;
|
|
||||||
@@ -889,9 +947,9 @@ update_watchpoint (struct breakpoint *b,
|
|
||||||
to the user when the old value and the new value may actually
|
|
||||||
be completely different objects. */
|
|
||||||
value_free (b->val);
|
|
||||||
- b->val = NULL;
|
|
||||||
+ b->val = NULL;
|
|
||||||
+ b->val_valid = 0;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
|
|
||||||
/* If we failed to parse the expression, for example because
|
|
||||||
it refers to a global variable in a not-yet-loaded shared library,
|
|
||||||
@@ -900,43 +958,37 @@ update_watchpoint (struct breakpoint *b,
|
|
||||||
is different from out-of-scope watchpoint. */
|
|
||||||
if (within_current_scope && b->exp)
|
|
||||||
{
|
|
||||||
- struct value *v, *next;
|
|
||||||
+ struct value *val_chain, *v, *result, *next;
|
|
||||||
+
|
|
||||||
+ fetch_watchpoint_value (b->exp, &v, &result, &val_chain);
|
|
||||||
|
|
||||||
- /* Evaluate the expression and make sure it's not lazy, so that
|
|
||||||
- after target stops again, we have a non-lazy previous value
|
|
||||||
- to compare with. Also, making the value non-lazy will fetch
|
|
||||||
- intermediate values as needed, which we use to decide which
|
|
||||||
- addresses to watch.
|
|
||||||
-
|
|
||||||
- The value returned by evaluate_expression is stored in b->val.
|
|
||||||
- In addition, we look at all values which were created
|
|
||||||
- during evaluation, and set watchoints at addresses as needed.
|
|
||||||
- Those values are explicitly deleted here. */
|
|
||||||
- v = evaluate_expression (b->exp);
|
|
||||||
/* Avoid setting b->val if it's already set. The meaning of
|
|
||||||
b->val is 'the last value' user saw, and we should update
|
|
||||||
it only if we reported that last value to user. As it
|
|
||||||
happens, the code that reports it updates b->val directly. */
|
|
||||||
- if (b->val == NULL)
|
|
||||||
- b->val = v;
|
|
||||||
- value_contents (v);
|
|
||||||
- value_release_to_mark (mark);
|
|
||||||
+ if (!b->val_valid)
|
|
||||||
+ {
|
|
||||||
+ b->val = v;
|
|
||||||
+ b->val_valid = 1;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/* Look at each value on the value chain. */
|
|
||||||
- for (; v; v = next)
|
|
||||||
+ for (v = val_chain; v; v = next)
|
|
||||||
{
|
|
||||||
/* If it's a memory location, and GDB actually needed
|
|
||||||
its contents to evaluate the expression, then we
|
|
||||||
- must watch it. */
|
|
||||||
+ must watch it. If the first value returned is
|
|
||||||
+ still lazy, that means an error occurred reading it;
|
|
||||||
+ watch it anyway in case it becomes readable. */
|
|
||||||
if (VALUE_LVAL (v) == lval_memory
|
|
||||||
- && ! value_lazy (v))
|
|
||||||
+ && (v == val_chain || ! value_lazy (v)))
|
|
||||||
{
|
|
||||||
struct type *vtype = check_typedef (value_type (v));
|
|
||||||
|
|
||||||
/* We only watch structs and arrays if user asked
|
|
||||||
for it explicitly, never if they just happen to
|
|
||||||
appear in the middle of some value chain. */
|
|
||||||
- if (v == b->val
|
|
||||||
+ if (v == result
|
|
||||||
|| (TYPE_CODE (vtype) != TYPE_CODE_STRUCT
|
|
||||||
&& TYPE_CODE (vtype) != TYPE_CODE_ARRAY))
|
|
||||||
{
|
|
||||||
@@ -1682,6 +1734,7 @@ breakpoint_init_inferior (enum inf_conte
|
|
||||||
if (b->val)
|
|
||||||
value_free (b->val);
|
|
||||||
b->val = NULL;
|
|
||||||
+ b->val_valid = 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
@@ -2104,6 +2157,17 @@ top:
|
|
||||||
do_cleanups (old_chain);
|
|
||||||
}
|
|
||||||
|
|
||||||
+/* Print out the (old or new) value associated with a watchpoint. */
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+watchpoint_value_print (struct value *val, struct ui_file *stream)
|
|
||||||
+{
|
|
||||||
+ if (val == NULL)
|
|
||||||
+ fprintf_unfiltered (stream, _("<unreadable>"));
|
|
||||||
+ else
|
|
||||||
+ value_print (val, stream, 0, Val_pretty_default);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/* This is the normal print function for a bpstat. In the future,
|
|
||||||
much of this logic could (should?) be moved to bpstat_stop_status,
|
|
||||||
by having it set different print_it values.
|
|
||||||
@@ -2222,26 +2286,21 @@ print_it_typical (bpstat bs)
|
|
||||||
|
|
||||||
case bp_watchpoint:
|
|
||||||
case bp_hardware_watchpoint:
|
|
||||||
- if (bs->old_val != NULL)
|
|
||||||
- {
|
|
||||||
- annotate_watchpoint (b->number);
|
|
||||||
- if (ui_out_is_mi_like_p (uiout))
|
|
||||||
- ui_out_field_string
|
|
||||||
- (uiout, "reason",
|
|
||||||
- async_reason_lookup (EXEC_ASYNC_WATCHPOINT_TRIGGER));
|
|
||||||
- mention (b);
|
|
||||||
- ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "value");
|
|
||||||
- ui_out_text (uiout, "\nOld value = ");
|
|
||||||
- value_print (bs->old_val, stb->stream, 0, Val_pretty_default);
|
|
||||||
- ui_out_field_stream (uiout, "old", stb);
|
|
||||||
- ui_out_text (uiout, "\nNew value = ");
|
|
||||||
- value_print (b->val, stb->stream, 0, Val_pretty_default);
|
|
||||||
- ui_out_field_stream (uiout, "new", stb);
|
|
||||||
- do_cleanups (ui_out_chain);
|
|
||||||
- ui_out_text (uiout, "\n");
|
|
||||||
- value_free (bs->old_val);
|
|
||||||
- bs->old_val = NULL;
|
|
||||||
- }
|
|
||||||
+ annotate_watchpoint (b->number);
|
|
||||||
+ if (ui_out_is_mi_like_p (uiout))
|
|
||||||
+ ui_out_field_string
|
|
||||||
+ (uiout, "reason",
|
|
||||||
+ async_reason_lookup (EXEC_ASYNC_WATCHPOINT_TRIGGER));
|
|
||||||
+ mention (b);
|
|
||||||
+ ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "value");
|
|
||||||
+ ui_out_text (uiout, "\nOld value = ");
|
|
||||||
+ watchpoint_value_print (bs->old_val, stb->stream);
|
|
||||||
+ ui_out_field_stream (uiout, "old", stb);
|
|
||||||
+ ui_out_text (uiout, "\nNew value = ");
|
|
||||||
+ watchpoint_value_print (b->val, stb->stream);
|
|
||||||
+ ui_out_field_stream (uiout, "new", stb);
|
|
||||||
+ do_cleanups (ui_out_chain);
|
|
||||||
+ ui_out_text (uiout, "\n");
|
|
||||||
/* More than one watchpoint may have been triggered. */
|
|
||||||
return PRINT_UNKNOWN;
|
|
||||||
break;
|
|
||||||
@@ -2254,7 +2313,7 @@ print_it_typical (bpstat bs)
|
|
||||||
mention (b);
|
|
||||||
ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "value");
|
|
||||||
ui_out_text (uiout, "\nValue = ");
|
|
||||||
- value_print (b->val, stb->stream, 0, Val_pretty_default);
|
|
||||||
+ watchpoint_value_print (b->val, stb->stream);
|
|
||||||
ui_out_field_stream (uiout, "value", stb);
|
|
||||||
do_cleanups (ui_out_chain);
|
|
||||||
ui_out_text (uiout, "\n");
|
|
||||||
@@ -2262,7 +2321,7 @@ print_it_typical (bpstat bs)
|
|
||||||
break;
|
|
||||||
|
|
||||||
case bp_access_watchpoint:
|
|
||||||
- if (bs->old_val != NULL)
|
|
||||||
+ if (bs->old_val != NULL)
|
|
||||||
{
|
|
||||||
annotate_watchpoint (b->number);
|
|
||||||
if (ui_out_is_mi_like_p (uiout))
|
|
||||||
@@ -2272,10 +2331,8 @@ print_it_typical (bpstat bs)
|
|
||||||
mention (b);
|
|
||||||
ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "value");
|
|
||||||
ui_out_text (uiout, "\nOld value = ");
|
|
||||||
- value_print (bs->old_val, stb->stream, 0, Val_pretty_default);
|
|
||||||
+ watchpoint_value_print (bs->old_val, stb->stream);
|
|
||||||
ui_out_field_stream (uiout, "old", stb);
|
|
||||||
- value_free (bs->old_val);
|
|
||||||
- bs->old_val = NULL;
|
|
||||||
ui_out_text (uiout, "\nNew value = ");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
@@ -2288,7 +2345,7 @@ print_it_typical (bpstat bs)
|
|
||||||
ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "value");
|
|
||||||
ui_out_text (uiout, "\nValue = ");
|
|
||||||
}
|
|
||||||
- value_print (b->val, stb->stream, 0,Val_pretty_default);
|
|
||||||
+ watchpoint_value_print (b->val, stb->stream);
|
|
||||||
ui_out_field_stream (uiout, "new", stb);
|
|
||||||
do_cleanups (ui_out_chain);
|
|
||||||
ui_out_text (uiout, "\n");
|
|
||||||
@@ -2575,13 +2632,20 @@ watchpoint_check (void *p)
|
|
||||||
we might be in the middle of evaluating a function call. */
|
|
||||||
|
|
||||||
struct value *mark = value_mark ();
|
|
||||||
- struct value *new_val = evaluate_expression (b->exp);
|
|
||||||
- if (!value_equal (b->val, new_val))
|
|
||||||
+ struct value *new_val;
|
|
||||||
+
|
|
||||||
+ fetch_watchpoint_value (b->exp, &new_val, NULL, NULL);
|
|
||||||
+ if ((b->val != NULL) != (new_val != NULL)
|
|
||||||
+ || (b->val != NULL && !value_equal (b->val, new_val)))
|
|
||||||
{
|
|
||||||
- release_value (new_val);
|
|
||||||
- value_free_to_mark (mark);
|
|
||||||
+ if (new_val != NULL)
|
|
||||||
+ {
|
|
||||||
+ release_value (new_val);
|
|
||||||
+ value_free_to_mark (mark);
|
|
||||||
+ }
|
|
||||||
bs->old_val = b->val;
|
|
||||||
b->val = new_val;
|
|
||||||
+ b->val_valid = 1;
|
|
||||||
/* We will stop here */
|
|
||||||
return WP_VALUE_CHANGED;
|
|
||||||
}
|
|
||||||
@@ -5723,10 +5787,9 @@ watch_command_1 (char *arg, int accessfl
|
|
||||||
exp_end = arg;
|
|
||||||
exp_valid_block = innermost_block;
|
|
||||||
mark = value_mark ();
|
|
||||||
- val = evaluate_expression (exp);
|
|
||||||
- release_value (val);
|
|
||||||
- if (value_lazy (val))
|
|
||||||
- value_fetch_lazy (val);
|
|
||||||
+ fetch_watchpoint_value (exp, &val, NULL, NULL);
|
|
||||||
+ if (val != NULL)
|
|
||||||
+ release_value (val);
|
|
||||||
|
|
||||||
tok = arg;
|
|
||||||
while (*tok == ' ' || *tok == '\t')
|
|
||||||
@@ -5815,6 +5878,7 @@ watch_command_1 (char *arg, int accessfl
|
|
||||||
b->exp_valid_block = exp_valid_block;
|
|
||||||
b->exp_string = savestring (exp_start, exp_end - exp_start);
|
|
||||||
b->val = val;
|
|
||||||
+ b->val_valid = 1;
|
|
||||||
b->loc->cond = cond;
|
|
||||||
if (cond_start)
|
|
||||||
b->cond_string = savestring (cond_start, cond_end - cond_start);
|
|
||||||
@@ -7698,11 +7762,11 @@ is valid is not currently in scope.\n"),
|
|
||||||
if (bpt->val)
|
|
||||||
value_free (bpt->val);
|
|
||||||
mark = value_mark ();
|
|
||||||
- bpt->val = evaluate_expression (bpt->exp);
|
|
||||||
- release_value (bpt->val);
|
|
||||||
- if (value_lazy (bpt->val))
|
|
||||||
- value_fetch_lazy (bpt->val);
|
|
||||||
-
|
|
||||||
+ fetch_watchpoint_value (bpt->exp, &bpt->val, NULL, NULL);
|
|
||||||
+ if (bpt->val)
|
|
||||||
+ release_value (bpt->val);
|
|
||||||
+ bpt->val_valid = 1;
|
|
||||||
+
|
|
||||||
if (bpt->type == bp_hardware_watchpoint ||
|
|
||||||
bpt->type == bp_read_watchpoint ||
|
|
||||||
bpt->type == bp_access_watchpoint)
|
|
||||||
Index: gdb-6.8/gdb/breakpoint.h
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.orig/gdb/breakpoint.h 2008-04-19 20:47:23.000000000 +0200
|
|
||||||
+++ gdb-6.8/gdb/breakpoint.h 2008-04-19 20:50:24.000000000 +0200
|
|
||||||
@@ -391,8 +391,13 @@ struct breakpoint
|
|
||||||
/* The largest block within which it is valid, or NULL if it is
|
|
||||||
valid anywhere (e.g. consists just of global symbols). */
|
|
||||||
struct block *exp_valid_block;
|
|
||||||
- /* Value of the watchpoint the last time we checked it. */
|
|
||||||
+ /* Value of the watchpoint the last time we checked it, or NULL
|
|
||||||
+ when we do not know the value yet or the value was not
|
|
||||||
+ readable. VAL is never lazy. */
|
|
||||||
struct value *val;
|
|
||||||
+ /* Nonzero if VAL is valid. If VAL_VALID is set but VAL is NULL,
|
|
||||||
+ then an error occurred reading the value. */
|
|
||||||
+ int val_valid;
|
|
||||||
|
|
||||||
/* Holds the address of the related watchpoint_scope breakpoint
|
|
||||||
when using watchpoints on local variables (might the concept
|
|
||||||
Index: gdb-6.8/gdb/testsuite/gdb.base/watchpoint.c
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.orig/gdb/testsuite/gdb.base/watchpoint.c 2008-04-19 20:47:16.000000000 +0200
|
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.base/watchpoint.c 2008-04-19 20:50:24.000000000 +0200
|
|
||||||
@@ -39,6 +39,8 @@ struct foo struct1, struct2, *ptr1, *ptr
|
|
||||||
|
|
||||||
int doread = 0;
|
|
||||||
|
|
||||||
+char *global_ptr;
|
|
||||||
+
|
|
||||||
void marker1 ()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
@@ -110,6 +112,14 @@ func1 ()
|
|
||||||
return 73;
|
|
||||||
}
|
|
||||||
|
|
||||||
+void
|
|
||||||
+func4 ()
|
|
||||||
+{
|
|
||||||
+ buf[0] = 3;
|
|
||||||
+ global_ptr = buf;
|
|
||||||
+ buf[0] = 7;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
int main ()
|
|
||||||
{
|
|
||||||
#ifdef usestubs
|
|
||||||
@@ -185,5 +195,7 @@ int main ()
|
|
||||||
|
|
||||||
func3 ();
|
|
||||||
|
|
||||||
+ func4 ();
|
|
||||||
+
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
Index: gdb-6.8/gdb/testsuite/gdb.base/watchpoint.exp
|
|
||||||
===================================================================
|
|
||||||
--- gdb-6.8.orig/gdb/testsuite/gdb.base/watchpoint.exp 2008-04-19 20:47:16.000000000 +0200
|
|
||||||
+++ gdb-6.8/gdb/testsuite/gdb.base/watchpoint.exp 2008-04-19 20:52:11.000000000 +0200
|
|
||||||
@@ -645,6 +645,30 @@ proc test_watchpoint_and_breakpoint {} {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+proc test_inaccessible_watchpoint {} {
|
|
||||||
+ global gdb_prompt
|
|
||||||
+
|
|
||||||
+ # This is a test for watchpoints on currently inaccessible (but later
|
|
||||||
+ # valid) memory.
|
|
||||||
+
|
|
||||||
+ if [runto func4] then {
|
|
||||||
+ gdb_test "watch *global_ptr" ".*atchpoint \[0-9\]+: \\*global_ptr"
|
|
||||||
+ gdb_test "next" ".*global_ptr = buf.*"
|
|
||||||
+ 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.
|
|
||||||
+ # This test does rely on *NULL != 3.
|
|
||||||
+ pass "next over ptr init"
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ gdb_test_multiple "next" "next over buffer set" {
|
|
||||||
+ -re ".*atchpoint \[0-9\]+: \\*global_ptr\r\n\r\nOld value = 3 .*\r\nNew value = 7 .*\r\n.*$gdb_prompt $" {
|
|
||||||
+ pass "next over buffer set"
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
# Start with a fresh gdb.
|
|
||||||
|
|
||||||
gdb_exit
|
|
||||||
@@ -655,6 +679,7 @@ set prev_timeout $timeout
|
|
||||||
set timeout 600
|
|
||||||
verbose "Timeout now 600 sec.\n"
|
|
||||||
|
|
||||||
+gdb_test "set debug solib 1"
|
|
||||||
if [initialize] then {
|
|
||||||
|
|
||||||
test_simple_watchpoint
|
|
||||||
@@ -797,6 +822,8 @@ if [initialize] then {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
+ test_inaccessible_watchpoint
|
|
||||||
+
|
|
||||||
# See above.
|
|
||||||
if [istarget "mips-idt-*"] then {
|
|
||||||
gdb_exit
|
|
56
gdb-fortran-testsuite-gfortran.patch
Normal file
56
gdb-fortran-testsuite-gfortran.patch
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
http://sourceware.org/ml/gdb-patches/2008-12/msg00155.html
|
||||||
|
|
||||||
|
2008-12-08 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
|
* gdb.fortran/subarray.exp: Expect also the strings type output.
|
||||||
|
* gdb.fortran/derived-type.exp: Likewise. Expect also the kind=X types.
|
||||||
|
Update for the f-valprint.c modification from 2008-04-22.
|
||||||
|
|
||||||
|
--- ./gdb/testsuite/gdb.fortran/derived-type.exp 1 Jan 2008 22:53:19 -0000 1.6
|
||||||
|
+++ ./gdb/testsuite/gdb.fortran/derived-type.exp 8 Dec 2008 18:04:34 -0000
|
||||||
|
@@ -42,23 +42,22 @@ if ![runto MAIN__] then {
|
||||||
|
}
|
||||||
|
|
||||||
|
gdb_test "ptype p" \
|
||||||
|
- "type = Type bar.*int4.*\:\: c.*real.*\:\: d.*End Type bar" \
|
||||||
|
+ "type = Type bar.*int.*\:\: c.*real.*\:\: d.*End Type bar" \
|
||||||
|
"ptype p"
|
||||||
|
gdb_test "ptype q" \
|
||||||
|
- "type = Type foo.*real.*\:\: a.*Type bar.*int4.*\:\: c.*real.*\:\: d.*End Type bar \:\: x.*character.*\\(7\\) \:\: b.*End Type foo" \
|
||||||
|
+ "type = Type foo.*real.*\:\: *a.*Type bar.*int.*\:\: *c.*real.*\:\: *d.*End Type bar \:\: *x.*character.*7.* \:\: *b.*End Type foo" \
|
||||||
|
"type-printing for derived type"
|
||||||
|
|
||||||
|
gdb_breakpoint [gdb_get_line_number "print"]
|
||||||
|
gdb_continue_to_breakpoint "print"
|
||||||
|
|
||||||
|
-gdb_test "print p" "\\$\[0-9\]+ = \\{ 1, 2.375\\}"
|
||||||
|
+gdb_test "print p" "\\$\[0-9\]+ = \\( 1, 2.375 \\)"
|
||||||
|
gdb_test "print p%c" "\\$\[0-9\]+ = 1"
|
||||||
|
gdb_test "print p%d" "\\$\[0-9\]+ = 2.375"
|
||||||
|
gdb_test "print q%a" "\\$\[0-9\]+ = 3.125"
|
||||||
|
-gdb_test "print q%b" "\\$\[0-9\]+ = \\(.*a.*b.*c.*d.*e.*f.*g.*\\)"
|
||||||
|
+gdb_test "print q%b" "\\$\[0-9\]+ = (\\(.*a.*b.*c.*d.*e.*f.*g.*\\)|'abcdefg')"
|
||||||
|
gdb_test "print q%x%c" "\\$\[0-9\]+ = 1"
|
||||||
|
gdb_test "print q%x%d" "\\$\[0-9\]+ = 2.375"
|
||||||
|
gdb_test "print q" \
|
||||||
|
- "\\$\[0-9\]+ = \\{ 3.125, \\{ 1, 2.375\\}, \\(.*a.*b.*c.*d.*e.*f.*g.*\\)\\}" \
|
||||||
|
+ "\\$\[0-9\]+ = \\( 3.125, \\( 1, 2.375 \\), (\\(.*a.*b.*c.*d.*e.*f.*g.*\\)|'abcdefg') \\)" \
|
||||||
|
"print q"
|
||||||
|
-
|
||||||
|
--- ./gdb/testsuite/gdb.fortran/subarray.exp 1 Jan 2008 22:53:19 -0000 1.6
|
||||||
|
+++ ./gdb/testsuite/gdb.fortran/subarray.exp 8 Dec 2008 18:04:34 -0000
|
||||||
|
@@ -53,10 +53,10 @@ gdb_test "continue" \
|
||||||
|
|
||||||
|
# Test four different kinds of subarray expression evaluation.
|
||||||
|
|
||||||
|
-gdb_test "print str(2:4)" ".*1 = \\(98 'b', 99 'c', 100 'd'\\).*" "print str(2:4)"
|
||||||
|
-gdb_test "print str(:3)" ".*2 = \\(97 'a', 98 'b', 99 'c'\\).*" "print str(:3)"
|
||||||
|
-gdb_test "print str(5:)" ".*3 = \\(101 'e', 102 'f', 103 'g'\\).*" "print str(5:)"
|
||||||
|
-gdb_test "print str(:)" ".*4 = \\(97 'a', 98 'b', 99 'c', 100 'd', 101 'e', 102 'f', 103 'g'\\).*" "print str(:)"
|
||||||
|
+gdb_test "print str(2:4)" ".*1 = (\\(98 'b', 99 'c', 100 'd'\\)|'bcd').*" "print str(2:4)"
|
||||||
|
+gdb_test "print str(:3)" ".*2 = (\\(97 'a', 98 'b', 99 'c'\\)|'abc').*" "print str(:3)"
|
||||||
|
+gdb_test "print str(5:)" ".*3 = (\\(101 'e', 102 'f', 103 'g'\\)|'efg').*" "print str(5:)"
|
||||||
|
+gdb_test "print str(:)" ".*4 = (\\(97 'a', 98 'b', 99 'c', 100 'd', 101 'e', 102 'f', 103 'g'\\)|'abcdefg').*" "print str(:)"
|
||||||
|
|
||||||
|
gdb_test "print array(2:4)" ".*5 = \\(2, 3, 4\\).*" "print array(2:4)"
|
||||||
|
gdb_test "print array(:3)" ".*6 = \\(1, 2, 3\\).*" "print array(:3)"
|
136
gdb-watchpoint-hw-without-inferior.patch
Normal file
136
gdb-watchpoint-hw-without-inferior.patch
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
2008-12-07 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
|
Fix hw watchpoints created before the inferior was started.
|
||||||
|
* breakpoint.c (update_watchpoint): Convert the bp_watchpoint and
|
||||||
|
bp_hardware_watchpoint types according to the current runtime state.
|
||||||
|
(insert_breakpoints): Call update_watchpoint even for `bp_watchpoint's.
|
||||||
|
|
||||||
|
2008-12-07 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
|
* gdb.base/watchpoint-hw.exp, gdb.base/watchpoint-hw.c: New.
|
||||||
|
|
||||||
|
--- ./gdb/breakpoint.c 7 Dec 2008 15:59:51 -0000 1.364
|
||||||
|
+++ ./gdb/breakpoint.c 7 Dec 2008 21:20:54 -0000
|
||||||
|
@@ -892,6 +892,28 @@ update_watchpoint (struct breakpoint *b,
|
||||||
|
b->val_valid = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* Change the type of breakpoint between hardware assisted or an
|
||||||
|
+ ordinary watchpoint depending on the hardware support and free
|
||||||
|
+ hardware slots. */
|
||||||
|
+ if (b->type == bp_watchpoint || b->type == bp_hardware_watchpoint)
|
||||||
|
+ {
|
||||||
|
+ int i, mem_cnt, target_resources_ok, other_type_used;
|
||||||
|
+
|
||||||
|
+ i = hw_watchpoint_used_count (bp_hardware_watchpoint,
|
||||||
|
+ &other_type_used);
|
||||||
|
+ mem_cnt = can_use_hardware_watchpoint (val_chain);
|
||||||
|
+
|
||||||
|
+ /* Hack around 'unused var' error for some targets here. */
|
||||||
|
+ (void) i;
|
||||||
|
+ if (mem_cnt)
|
||||||
|
+ target_resources_ok = TARGET_CAN_USE_HARDWARE_WATCHPOINT
|
||||||
|
+ (bp_hardware_watchpoint, i + mem_cnt, other_type_used);
|
||||||
|
+ if (!mem_cnt || target_resources_ok <= 0)
|
||||||
|
+ b->type = bp_watchpoint;
|
||||||
|
+ else
|
||||||
|
+ b->type = bp_hardware_watchpoint;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/* Look at each value on the value chain. */
|
||||||
|
for (v = val_chain; v; v = next)
|
||||||
|
{
|
||||||
|
@@ -1204,8 +1226,9 @@ insert_breakpoints (void)
|
||||||
|
{
|
||||||
|
struct breakpoint *bpt;
|
||||||
|
|
||||||
|
+ /* Software watchpoint may get converted to hardware ones. */
|
||||||
|
ALL_BREAKPOINTS (bpt)
|
||||||
|
- if (is_hardware_watchpoint (bpt))
|
||||||
|
+ if (is_hardware_watchpoint (bpt) || bpt->type == bp_watchpoint)
|
||||||
|
update_watchpoint (bpt, 0 /* don't reparse. */);
|
||||||
|
|
||||||
|
update_global_location_list (1);
|
||||||
|
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||||
|
+++ ./gdb/testsuite/gdb.base/watchpoint-hw.c 7 Dec 2008 21:20:56 -0000
|
||||||
|
@@ -0,0 +1,27 @@
|
||||||
|
+/* This testcase is part of GDB, the GNU debugger.
|
||||||
|
+
|
||||||
|
+ Copyright 2008 Free Software Foundation, Inc.
|
||||||
|
+
|
||||||
|
+ This program is free software; you can redistribute it and/or modify
|
||||||
|
+ it under the terms of the GNU General Public License as published by
|
||||||
|
+ the Free Software Foundation; either version 3 of the License, or
|
||||||
|
+ (at your option) any later version.
|
||||||
|
+
|
||||||
|
+ This program is distributed in the hope that it will be useful,
|
||||||
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
+ GNU General Public License for more details.
|
||||||
|
+
|
||||||
|
+ You should have received a copy of the GNU General Public License
|
||||||
|
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
+
|
||||||
|
+ Please email any bugs, comments, and/or additions to this file to:
|
||||||
|
+ bug-gdb@prep.ai.mit.edu */
|
||||||
|
+
|
||||||
|
+int watchee;
|
||||||
|
+
|
||||||
|
+int
|
||||||
|
+main (void)
|
||||||
|
+{
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
--- /dev/null 1 Jan 1970 00:00:00 -0000
|
||||||
|
+++ ./gdb/testsuite/gdb.base/watchpoint-hw.exp 7 Dec 2008 21:20:56 -0000
|
||||||
|
@@ -0,0 +1,50 @@
|
||||||
|
+# Copyright 2008 Free Software Foundation, Inc.
|
||||||
|
+
|
||||||
|
+# This program is free software; you can redistribute it and/or modify
|
||||||
|
+# it under the terms of the GNU General Public License as published by
|
||||||
|
+# the Free Software Foundation; either version 3 of the License, or
|
||||||
|
+# (at your option) any later version.
|
||||||
|
+#
|
||||||
|
+# This program is distributed in the hope that it will be useful,
|
||||||
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
+# GNU General Public License for more details.
|
||||||
|
+#
|
||||||
|
+# You should have received a copy of the GNU General Public License
|
||||||
|
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
+
|
||||||
|
+if {![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"] && ![istarget "ia64-*-*"]
|
||||||
|
+ && ![istarget "s390*-*-*"]} then {
|
||||||
|
+ verbose "Skipping watchpoint-hw test."
|
||||||
|
+ return
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+set testfile watchpoint-hw
|
||||||
|
+set srcfile ${testfile}.c
|
||||||
|
+set binfile ${objdir}/${subdir}/${testfile}
|
||||||
|
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
|
||||||
|
+ untested "Couldn't compile test program"
|
||||||
|
+ return -1
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gdb_exit
|
||||||
|
+gdb_start
|
||||||
|
+gdb_reinitialize_dir $srcdir/$subdir
|
||||||
|
+gdb_load ${binfile}
|
||||||
|
+
|
||||||
|
+# Create the watchpoint before the inferior gets started. Now the native CPU
|
||||||
|
+# target is still not active and its `to_can_use_hw_breakpoint' is not
|
||||||
|
+# installed, therefore only a software watchpoint gets created.
|
||||||
|
+
|
||||||
|
+gdb_test "watch watchee" "atchpoint 1: watchee"
|
||||||
|
+
|
||||||
|
+# `runto_main' or `runto main' would delete the watchpoint created above.
|
||||||
|
+
|
||||||
|
+if { [gdb_start_cmd] < 0 } {
|
||||||
|
+ untested start
|
||||||
|
+ return -1
|
||||||
|
+}
|
||||||
|
+gdb_test "" "main .* at .*" "start"
|
||||||
|
+
|
||||||
|
+# Check it is really a `hw'-watchpoint.
|
||||||
|
+gdb_test "info watchpoints" "1 *hw watchpoint .* watchee"
|
94
gdb.spec
94
gdb.spec
@ -9,11 +9,11 @@ Name: gdb%{?_with_debug:-debug}
|
|||||||
# Set version to contents of gdb/version.in.
|
# Set version to contents of gdb/version.in.
|
||||||
# NOTE: the FSF gdb versions are numbered N.M for official releases, like 6.3
|
# NOTE: the FSF gdb versions are numbered N.M for official releases, like 6.3
|
||||||
# and, since January 2005, X.Y.Z.date for daily snapshots, like 6.3.50.20050112 # (daily snapshot from mailine), or 6.3.0.20040112 (head of the release branch).
|
# and, since January 2005, X.Y.Z.date for daily snapshots, like 6.3.50.20050112 # (daily snapshot from mailine), or 6.3.0.20040112 (head of the release branch).
|
||||||
Version: 6.8
|
Version: 6.8.50.20081209
|
||||||
|
|
||||||
# The release always contains a leading reserved number, start it at 1.
|
# The release always contains a leading reserved number, start it at 1.
|
||||||
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
|
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
|
||||||
Release: 33%{?_with_upstream:.upstream}%{?dist}
|
Release: 1%{?_with_upstream:.upstream}%{?dist}
|
||||||
|
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
Group: Development/Debuggers
|
Group: Development/Debuggers
|
||||||
@ -63,10 +63,6 @@ Patch2: gdb-6.3-rh-testversion-20041202.patch
|
|||||||
Patch3: gdb-6.3-rh-testlibunwind-20041202.patch
|
Patch3: gdb-6.3-rh-testlibunwind-20041202.patch
|
||||||
Patch4: gdb-6.3-rh-testlibunwind1fix-20041202.patch
|
Patch4: gdb-6.3-rh-testlibunwind1fix-20041202.patch
|
||||||
|
|
||||||
# Recognize i386 signal trampolines before CFI. Ensures that signal
|
|
||||||
# frames are identified as signal frames.
|
|
||||||
Patch101: gdb-6.3-sigx86-20040621.patch
|
|
||||||
|
|
||||||
# Use convert_from_func_ptr_addr on the solib breakpoint address;
|
# Use convert_from_func_ptr_addr on the solib breakpoint address;
|
||||||
# simplifies and makes more consistent the logic.
|
# simplifies and makes more consistent the logic.
|
||||||
Patch104: gdb-6.3-ppcdotsolib-20041022.patch
|
Patch104: gdb-6.3-ppcdotsolib-20041022.patch
|
||||||
@ -96,9 +92,6 @@ Patch117: gdb-6.3-removebp-20041130.patch
|
|||||||
# --readnever option.
|
# --readnever option.
|
||||||
Patch118: gdb-6.3-gstack-20050411.patch
|
Patch118: gdb-6.3-gstack-20050411.patch
|
||||||
|
|
||||||
# Fix to ensure types are visible
|
|
||||||
Patch120: gdb-6.3-type-fix-20041213.patch
|
|
||||||
|
|
||||||
# VSYSCALL and PIE
|
# VSYSCALL and PIE
|
||||||
Patch122: gdb-6.3-test-pie-20050107.patch
|
Patch122: gdb-6.3-test-pie-20050107.patch
|
||||||
Patch124: gdb-6.3-pie-20050110.patch
|
Patch124: gdb-6.3-pie-20050110.patch
|
||||||
@ -119,9 +112,6 @@ Patch136: gdb-6.3-test-movedir-20050125.patch
|
|||||||
# Fix to support unwinding syscalls in ia64 corefiles
|
# Fix to support unwinding syscalls in ia64 corefiles
|
||||||
# Patch138: gdb-6.3-ia64-corefile-fix-20050127.patch
|
# Patch138: gdb-6.3-ia64-corefile-fix-20050127.patch
|
||||||
|
|
||||||
# Tolerate DW_AT_type referencing <0>.
|
|
||||||
Patch139: gdb-6.3-dwattype0-20050201.patch
|
|
||||||
|
|
||||||
# Fix gcore for threads
|
# Fix gcore for threads
|
||||||
Patch140: gdb-6.3-gcore-thread-20050204.patch
|
Patch140: gdb-6.3-gcore-thread-20050204.patch
|
||||||
|
|
||||||
@ -185,13 +175,6 @@ Patch176: gdb-6.3-large-core-20051206.patch
|
|||||||
# corrupted or missing PATH.
|
# corrupted or missing PATH.
|
||||||
Patch177: gdb-6.3-gstack-without-path-20060414.patch
|
Patch177: gdb-6.3-gstack-without-path-20060414.patch
|
||||||
|
|
||||||
# Do not let errors related with debug registers break thread debugging.
|
|
||||||
Patch178: gdb-6.3-catch-debug-registers-error-20060527.patch
|
|
||||||
|
|
||||||
# Cope with waitpid modifying status even when returning zero, as on
|
|
||||||
# ia32el.
|
|
||||||
Patch179: gdb-6.3-ia32el-fix-waitpid-20060615.patch
|
|
||||||
|
|
||||||
# Fix debuginfo addresses resolving for --emit-relocs Linux kernels (BZ 203661).
|
# Fix debuginfo addresses resolving for --emit-relocs Linux kernels (BZ 203661).
|
||||||
Patch188: gdb-6.5-bz203661-emit-relocs.patch
|
Patch188: gdb-6.5-bz203661-emit-relocs.patch
|
||||||
|
|
||||||
@ -211,7 +194,7 @@ Patch196: gdb-6.5-sharedlibrary-path.patch
|
|||||||
|
|
||||||
# Suggest fixing your target architecture for gdbserver(1) (BZ 190810).
|
# Suggest fixing your target architecture for gdbserver(1) (BZ 190810).
|
||||||
# FIXME: It could be autodetected.
|
# FIXME: It could be autodetected.
|
||||||
Patch199: gdb-6.5-bz190810-gdbserver-arch-advice.patch
|
Patch199: gdb-6.5-bz190810-gdbserver-arch-advice.patch
|
||||||
|
|
||||||
# Fix dereferencing registers for 32bit inferiors on 64bit hosts (BZ 181390).
|
# Fix dereferencing registers for 32bit inferiors on 64bit hosts (BZ 181390).
|
||||||
Patch200: gdb-6.5-bz181390-memory-address-width.patch
|
Patch200: gdb-6.5-bz181390-memory-address-width.patch
|
||||||
@ -234,7 +217,7 @@ Patch214: gdb-6.5-bz216711-clone-is-outermost.patch
|
|||||||
|
|
||||||
# Try to reduce sideeffects of skipping ppc .so libs trampolines (BZ 218379).
|
# Try to reduce sideeffects of skipping ppc .so libs trampolines (BZ 218379).
|
||||||
Patch215: gdb-6.5-bz218379-ppc-solib-trampoline-fix.patch
|
Patch215: gdb-6.5-bz218379-ppc-solib-trampoline-fix.patch
|
||||||
Patch216: gdb-6.5-bz218379-ppc-solib-trampoline-test.patch
|
Patch216: gdb-6.5-bz218379-ppc-solib-trampoline-test.patch
|
||||||
|
|
||||||
# Fix lockup on trampoline vs. its function lookup; unreproducible (BZ 218379).
|
# Fix lockup on trampoline vs. its function lookup; unreproducible (BZ 218379).
|
||||||
Patch217: gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch
|
Patch217: gdb-6.5-bz218379-solib-trampoline-lookup-lock-fix.patch
|
||||||
@ -249,7 +232,7 @@ Patch229: gdb-6.3-bz140532-ppc-unwinding-test.patch
|
|||||||
Patch231: gdb-6.3-bz202689-exec-from-pthread-test.patch
|
Patch231: gdb-6.3-bz202689-exec-from-pthread-test.patch
|
||||||
|
|
||||||
# Backported post gdb-6.8 release fixups.
|
# Backported post gdb-6.8 release fixups.
|
||||||
Patch232: gdb-6.8-upstream.patch
|
###Patch232: gdb-6.8-upstream.patch
|
||||||
|
|
||||||
# Testcase for PPC Power6/DFP instructions disassembly (BZ 230000).
|
# Testcase for PPC Power6/DFP instructions disassembly (BZ 230000).
|
||||||
Patch234: gdb-6.6-bz230000-power6-disassembly-test.patch
|
Patch234: gdb-6.6-bz230000-power6-disassembly-test.patch
|
||||||
@ -294,9 +277,6 @@ Patch271: gdb-6.5-bz243845-stale-testing-zombie-test.patch
|
|||||||
# New locating of the matching binaries from the pure core file (build-id).
|
# New locating of the matching binaries from the pure core file (build-id).
|
||||||
Patch274: gdb-6.6-buildid-locate.patch
|
Patch274: gdb-6.6-buildid-locate.patch
|
||||||
|
|
||||||
# Fixed the kernel i386-on-x86_64 VDSO loading (producing `Lowest section in').
|
|
||||||
Patch277: gdb-6.6-vdso-i386-on-amd64-warning.patch
|
|
||||||
|
|
||||||
# Fix hardware watchpoints after inferior forks-off some process.
|
# Fix hardware watchpoints after inferior forks-off some process.
|
||||||
# Threaded `set follow-fork-mode child' still not fixed there, glibc fixes reqd.
|
# Threaded `set follow-fork-mode child' still not fixed there, glibc fixes reqd.
|
||||||
# `set detach-on-fork off' not fixed there in general - it already assert-fails.
|
# `set detach-on-fork off' not fixed there in general - it already assert-fails.
|
||||||
@ -305,9 +285,6 @@ Patch280: gdb-6.6-multifork-debugreg.patch
|
|||||||
# Fix displaying of numeric char arrays as strings (BZ 224128).
|
# Fix displaying of numeric char arrays as strings (BZ 224128).
|
||||||
Patch282: gdb-6.7-charsign-test.patch
|
Patch282: gdb-6.7-charsign-test.patch
|
||||||
|
|
||||||
# Fix rereading of the main executable on its change.
|
|
||||||
Patch283: gdb-6.7-reread-exec_bfd.patch
|
|
||||||
|
|
||||||
# Test PPC hiding of call-volatile parameter register.
|
# Test PPC hiding of call-volatile parameter register.
|
||||||
Patch284: gdb-6.7-ppc-clobbered-registers-O2-test.patch
|
Patch284: gdb-6.7-ppc-clobbered-registers-O2-test.patch
|
||||||
|
|
||||||
@ -339,13 +316,8 @@ Patch304: gdb-6.7-kernel-headers-compat.patch
|
|||||||
|
|
||||||
# Fix/implement the Fortran dynamic arrays support (BZ 377541).
|
# Fix/implement the Fortran dynamic arrays support (BZ 377541).
|
||||||
# Fix the variable-length-arrays support (BZ 468266, feature BZ 377541).
|
# Fix the variable-length-arrays support (BZ 468266, feature BZ 377541).
|
||||||
Patch345: gdb-6.8-bz377541-vla-bound-undefined.patch
|
|
||||||
Patch346: gdb-6.8-bz377541-vla-loc-kind.patch
|
|
||||||
Patch305: gdb-6.8-bz377541-vla.patch
|
Patch305: gdb-6.8-bz377541-vla.patch
|
||||||
|
|
||||||
# Backport fix of a segfault + PIE regression since 6.7.1 on PIE executables.
|
|
||||||
Patch306: gdb-6.8-watchpoint-inaccessible-memory.patch
|
|
||||||
|
|
||||||
# Test GCORE for shmid 0 shared memory mappings.
|
# Test GCORE for shmid 0 shared memory mappings.
|
||||||
Patch309: gdb-6.3-mapping-zero-inode-test.patch
|
Patch309: gdb-6.3-mapping-zero-inode-test.patch
|
||||||
|
|
||||||
@ -358,9 +330,6 @@ Patch314: gdb-6.3-watchpoint-cond-gone-test.patch
|
|||||||
# Test various forms of threads tracking across exec() (BZ 442765).
|
# Test various forms of threads tracking across exec() (BZ 442765).
|
||||||
Patch315: gdb-6.8-bz442765-threaded-exec-test.patch
|
Patch315: gdb-6.8-bz442765-threaded-exec-test.patch
|
||||||
|
|
||||||
# Enable program counter for processing PTID to PC (sparc/sparc64)
|
|
||||||
Patch316: gdb-6.8-sparc-fix.patch
|
|
||||||
|
|
||||||
# Silence memcpy check which returns false positive (sparc64)
|
# Silence memcpy check which returns false positive (sparc64)
|
||||||
Patch317: gdb-6.8-sparc64-silence-memcpy-check.patch
|
Patch317: gdb-6.8-sparc64-silence-memcpy-check.patch
|
||||||
|
|
||||||
@ -370,25 +339,18 @@ Patch318: gdb-6.8-gcc35998-ada-memory-trash.patch
|
|||||||
# Test a crash on libraries missing the .text section.
|
# Test a crash on libraries missing the .text section.
|
||||||
Patch320: gdb-6.5-section-num-fixup-test.patch
|
Patch320: gdb-6.5-section-num-fixup-test.patch
|
||||||
|
|
||||||
# Protect development in the build tree by automatic Makefile dependencies.
|
|
||||||
Patch321: gdb-6.8-auto-dependencies.patch
|
|
||||||
|
|
||||||
# Refuse creating watchpoints of an address value, suggested by Martin Stransky.
|
# Refuse creating watchpoints of an address value, suggested by Martin Stransky.
|
||||||
Patch322: gdb-6.8-constant-watchpoints.patch
|
Patch322: gdb-6.8-constant-watchpoints.patch
|
||||||
|
|
||||||
# Disable randomization (such as by setarch -R), suggested by Jakub Jelinek.
|
|
||||||
Patch323: gdb-6.8-disable-randomization.patch
|
|
||||||
|
|
||||||
# Fix compatibility with recent glibc headers.
|
# Fix compatibility with recent glibc headers.
|
||||||
Patch324: gdb-6.8-glibc-headers-compat.patch
|
Patch324: gdb-6.8-glibc-headers-compat.patch
|
||||||
|
|
||||||
# Force build failure for missing libraries for --enable-tui.
|
|
||||||
# Create a single binary `gdb' autodetecting --tui by its argv[0].
|
# Create a single binary `gdb' autodetecting --tui by its argv[0].
|
||||||
Patch325: gdb-6.8-forced-enable-tui.patch
|
|
||||||
Patch326: gdb-6.8-tui-singlebinary.patch
|
Patch326: gdb-6.8-tui-singlebinary.patch
|
||||||
|
|
||||||
# Support transparent debugging of inlined functions for an optimized code.
|
# Support transparent debugging of inlined functions for an optimized code.
|
||||||
Patch327: gdb-6.8-inlining.patch
|
Patch327: gdb-6.8-inlining.patch
|
||||||
|
Patch350: gdb-6.8-inlining-addon.patch
|
||||||
Patch328: gdb-6.8-inlining-by-name.patch
|
Patch328: gdb-6.8-inlining-by-name.patch
|
||||||
|
|
||||||
# Fix PRPSINFO in the core files dumped by gcore (BZ 254229).
|
# Fix PRPSINFO in the core files dumped by gcore (BZ 254229).
|
||||||
@ -403,30 +365,23 @@ Patch331: gdb-6.8-quit-never-aborts.patch
|
|||||||
# Support DW_TAG_constant for Fortran in recent Fedora/RH GCCs.
|
# Support DW_TAG_constant for Fortran in recent Fedora/RH GCCs.
|
||||||
Patch332: gdb-6.8-fortran-tag-constant.patch
|
Patch332: gdb-6.8-fortran-tag-constant.patch
|
||||||
|
|
||||||
# Fix crash on DW_TAG_module for Fortran in recent Fedora/RH GCCs.
|
|
||||||
Patch333: gdb-6.8-fortran-module-ignore.patch
|
|
||||||
|
|
||||||
# bare names of constructors and destructors should be unique for GDB-6.8+.
|
# bare names of constructors and destructors should be unique for GDB-6.8+.
|
||||||
Patch334: gdb-6.8-ctors-dtors-unique.patch
|
Patch334: gdb-6.8-ctors-dtors-unique.patch
|
||||||
|
|
||||||
# Fix attaching to stopped processes and/or pending signals.
|
# Fix attaching to stopped processes and/or pending signals.
|
||||||
Patch336: gdb-6.8-attach-signalled-upstream.patch
|
|
||||||
Patch337: gdb-6.8-attach-signalled-detach-stopped.patch
|
Patch337: gdb-6.8-attach-signalled-detach-stopped.patch
|
||||||
|
|
||||||
# Fix occasional crash on a removed watchpoint.
|
|
||||||
Patch338: gdb-6.8-breakpoint-gone.patch
|
|
||||||
|
|
||||||
# Fix occasional stepping lockup on many threads, seen on ia64.
|
|
||||||
Patch342: gdb-6.8-ia64-breakpoint-restoration.patch
|
|
||||||
|
|
||||||
# Test the watchpoints conditionals works.
|
# Test the watchpoints conditionals works.
|
||||||
Patch343: gdb-6.8-watchpoint-conditionals-test.patch
|
Patch343: gdb-6.8-watchpoint-conditionals-test.patch
|
||||||
|
|
||||||
# Fix resolving of variables at locations lists in prelinked libs (BZ 466901).
|
# Fix resolving of variables at locations lists in prelinked libs (BZ 466901).
|
||||||
Patch348: gdb-6.8-bz466901-backtrace-full-prelinked.patch
|
Patch348: gdb-6.8-bz466901-backtrace-full-prelinked.patch
|
||||||
|
|
||||||
# Enable ia64 hardware watchpoints if created before starting inferior.
|
# Enable hardware watchpoints if created before starting inferior.
|
||||||
Patch349: gdb-6.8-ia64-exec-hw-watchpoint.patch
|
Patch349: gdb-watchpoint-hw-without-inferior.patch
|
||||||
|
|
||||||
|
# Fix upstream testsuite regression + make Fortran tests gfortran compatible.
|
||||||
|
Patch351: gdb-fortran-testsuite-gfortran.patch
|
||||||
|
|
||||||
BuildRequires: ncurses-devel texinfo gettext flex bison expat-devel
|
BuildRequires: ncurses-devel texinfo gettext flex bison expat-devel
|
||||||
Requires: readline
|
Requires: readline
|
||||||
@ -504,12 +459,12 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
|
|||||||
|
|
||||||
%if 0%{!?_with_upstream:1}
|
%if 0%{!?_with_upstream:1}
|
||||||
|
|
||||||
%patch232 -p1
|
###patch232 -p1
|
||||||
|
%patch305 -p1
|
||||||
%patch1 -p1
|
%patch1 -p1
|
||||||
%patch3 -p1
|
%patch3 -p1
|
||||||
%patch4 -p1
|
%patch4 -p1
|
||||||
|
|
||||||
%patch101 -p1
|
|
||||||
%patch104 -p1
|
%patch104 -p1
|
||||||
%patch105 -p1
|
%patch105 -p1
|
||||||
%patch106 -p1
|
%patch106 -p1
|
||||||
@ -518,14 +473,12 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
|
|||||||
%patch116 -p1
|
%patch116 -p1
|
||||||
%patch117 -p1
|
%patch117 -p1
|
||||||
%patch118 -p1
|
%patch118 -p1
|
||||||
%patch120 -p1
|
|
||||||
%patch122 -p1
|
%patch122 -p1
|
||||||
%patch125 -p1
|
%patch125 -p1
|
||||||
%patch128 -p1
|
%patch128 -p1
|
||||||
%patch133 -p1
|
%patch133 -p1
|
||||||
%patch134 -p1
|
%patch134 -p1
|
||||||
%patch136 -p1
|
%patch136 -p1
|
||||||
%patch139 -p1
|
|
||||||
%patch140 -p1
|
%patch140 -p1
|
||||||
%patch141 -p1
|
%patch141 -p1
|
||||||
%patch259 -p1
|
%patch259 -p1
|
||||||
@ -548,8 +501,6 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
|
|||||||
%patch170 -p1
|
%patch170 -p1
|
||||||
%patch176 -p1
|
%patch176 -p1
|
||||||
%patch177 -p1
|
%patch177 -p1
|
||||||
%patch178 -p1
|
|
||||||
%patch179 -p1
|
|
||||||
%patch188 -p1
|
%patch188 -p1
|
||||||
%patch190 -p1
|
%patch190 -p1
|
||||||
%patch194 -p1
|
%patch194 -p1
|
||||||
@ -585,10 +536,8 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
|
|||||||
%patch266 -p1
|
%patch266 -p1
|
||||||
%patch271 -p1
|
%patch271 -p1
|
||||||
%patch274 -p1
|
%patch274 -p1
|
||||||
%patch277 -p1
|
|
||||||
%patch280 -p1
|
%patch280 -p1
|
||||||
%patch282 -p1
|
%patch282 -p1
|
||||||
%patch283 -p1
|
|
||||||
%patch284 -p1
|
%patch284 -p1
|
||||||
%patch287 -p1
|
%patch287 -p1
|
||||||
%patch289 -p1
|
%patch289 -p1
|
||||||
@ -599,39 +548,29 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
|
|||||||
%patch298 -p1
|
%patch298 -p1
|
||||||
%patch301 -p1
|
%patch301 -p1
|
||||||
%patch304 -p1
|
%patch304 -p1
|
||||||
%patch345 -p1
|
|
||||||
%patch346 -p1
|
|
||||||
%patch305 -p1
|
|
||||||
%patch306 -p1
|
|
||||||
%patch309 -p1
|
%patch309 -p1
|
||||||
%patch311 -p1
|
%patch311 -p1
|
||||||
%patch314 -p1
|
%patch314 -p1
|
||||||
%patch315 -p1
|
%patch315 -p1
|
||||||
%patch316 -p1
|
|
||||||
%patch317 -p1
|
%patch317 -p1
|
||||||
%patch318 -p1
|
%patch318 -p1
|
||||||
%patch320 -p1
|
%patch320 -p1
|
||||||
%patch321 -p1
|
|
||||||
%patch322 -p1
|
%patch322 -p1
|
||||||
%patch323 -p1
|
|
||||||
%patch324 -p1
|
%patch324 -p1
|
||||||
%patch325 -p1
|
|
||||||
%patch326 -p1
|
%patch326 -p1
|
||||||
%patch327 -p1
|
%patch327 -p1
|
||||||
|
%patch350 -p1
|
||||||
%patch328 -p1
|
%patch328 -p1
|
||||||
%patch329 -p1
|
%patch329 -p1
|
||||||
%patch330 -p1
|
%patch330 -p1
|
||||||
%patch331 -p1
|
%patch331 -p1
|
||||||
%patch332 -p1
|
%patch332 -p1
|
||||||
%patch333 -p1
|
|
||||||
%patch334 -p1
|
%patch334 -p1
|
||||||
%patch336 -p1
|
|
||||||
%patch337 -p1
|
%patch337 -p1
|
||||||
%patch338 -p1
|
|
||||||
%patch342 -p1
|
|
||||||
%patch343 -p1
|
%patch343 -p1
|
||||||
%patch348 -p1
|
%patch348 -p1
|
||||||
%patch349 -p1
|
%patch349 -p1
|
||||||
|
%patch351 -p1
|
||||||
%patch124 -p1
|
%patch124 -p1
|
||||||
|
|
||||||
find -name "*.orig" | xargs rm -f
|
find -name "*.orig" | xargs rm -f
|
||||||
@ -895,6 +834,9 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Sun Dec 14 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20081209-1
|
||||||
|
- Upgrade to the upstream gdb-6.8.50 snapshot.
|
||||||
|
|
||||||
* Mon Dec 1 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-33
|
* Mon Dec 1 2008 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8-33
|
||||||
- Make `--with testsuite' BuildRequires properly conditional.
|
- Make `--with testsuite' BuildRequires properly conditional.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user