- Upgrade to the FSF GDB gdb-6.8.50 snapshot: 6.8.50.20090803
- archer-jankratochvil-fedora12 commit: 0222cb1f4ddd1eda32965e464cb60b1e44e110b2
This commit is contained in:
parent
6ca358b064
commit
e5611bfae3
@ -1 +1 @@
|
||||
gdb-6.8.50.20090302.tar.bz2
|
||||
gdb-6.8.50.20090803.tar.bz2
|
||||
|
@ -1,52 +0,0 @@
|
||||
2005-01-21 Jeff Johnston <jjohnstn@redhat.com>
|
||||
|
||||
* linespec.c (collect_methods): Don't do special processing for
|
||||
destructors as this will be handled in find_methods.
|
||||
(find_methods): Fix ctor check to also check for dtor.
|
||||
|
||||
2007-10-14 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/linespec.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/linespec.c 2007-10-13 05:26:33.000000000 +0200
|
||||
+++ gdb-6.7/gdb/linespec.c 2007-10-14 23:31:03.000000000 +0200
|
||||
@@ -398,12 +398,14 @@ add_matching_methods (int method_counter
|
||||
|
||||
/* Check for special case of looking for member that
|
||||
doesn't have a mangled name provided. This will happen
|
||||
- when we have in-charge and not-in-charge constructors.
|
||||
+ when we have in-charge and not-in-charge ctors/dtors.
|
||||
Since we don't have a mangled name to work with, if we
|
||||
- look for the symbol, we can only find the class itself.
|
||||
+ look for the symbol, we can at best find the class itself.
|
||||
We can find the information we need in the minimal symbol
|
||||
table which has the full member name information we need. */
|
||||
- if (strlen (phys_name) <= strlen (class_name))
|
||||
+ if (strlen (phys_name) <= strlen (class_name)
|
||||
+ || (strlen (phys_name) == strlen (class_name) + 1
|
||||
+ && phys_name[0] == '~'))
|
||||
return add_minsym_members (class_name, phys_name, msym_arr);
|
||||
|
||||
/* Destructor is handled by caller, don't add it to
|
||||
@@ -1731,6 +1733,11 @@ collect_methods (char *copy, struct type
|
||||
{
|
||||
int i1 = 0; /* Counter for the symbol array. */
|
||||
|
||||
+#if 0
|
||||
+ /* Ignore this special method for getting destructors because
|
||||
+ find_methods is more robust and can handle multiple
|
||||
+ destructors which is the case when gcc generates a not-in-charge
|
||||
+ vs an in-charge destructor. */
|
||||
if (destructor_name_p (copy, t))
|
||||
{
|
||||
/* Destructors are a special case. */
|
||||
@@ -1749,6 +1756,7 @@ collect_methods (char *copy, struct type
|
||||
}
|
||||
}
|
||||
else
|
||||
+#endif
|
||||
i1 = find_methods (t, copy, SYMBOL_LANGUAGE (sym_class), sym_arr, msym_arr);
|
||||
|
||||
return i1;
|
@ -3,13 +3,13 @@
|
||||
* linux-nat.c (linux_nat_xfer_memory): Don't use
|
||||
linux_proc_xfer_memory for ia64.
|
||||
|
||||
Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||
Index: gdb-6.8.50.20090803/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081209.orig/gdb/linux-nat.c 2008-12-10 01:22:23.000000000 +0100
|
||||
+++ gdb-6.8.50.20081209/gdb/linux-nat.c 2008-12-10 01:25:26.000000000 +0100
|
||||
@@ -4123,10 +4123,15 @@ linux_xfer_partial (struct target_ops *o
|
||||
return linux_nat_xfer_osdata (ops, object, annex, readbuf, writebuf,
|
||||
offset, len);
|
||||
--- gdb-6.8.50.20090803.orig/gdb/linux-nat.c 2009-08-04 06:29:47.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/linux-nat.c 2009-08-04 06:29:55.000000000 +0200
|
||||
@@ -4495,10 +4495,15 @@ linux_xfer_partial (struct target_ops *o
|
||||
offset &= ((ULONGEST) 1 << addr_bit) - 1;
|
||||
}
|
||||
|
||||
+#ifndef NATIVE_XFER_UNWIND_TABLE
|
||||
+ /* FIXME: For ia64, we cannot currently use linux_proc_xfer_memory
|
||||
|
@ -4,20 +4,20 @@
|
||||
to install and uninstall.
|
||||
* gstack.sh, gstack.1: New files.
|
||||
|
||||
Index: gdb-6.8.50.20090226/gdb/Makefile.in
|
||||
Index: gdb-6.8.50.20090802/gdb/Makefile.in
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090226.orig/gdb/Makefile.in 2009-02-26 22:09:59.000000000 +0100
|
||||
+++ gdb-6.8.50.20090226/gdb/Makefile.in 2009-02-26 22:10:22.000000000 +0100
|
||||
@@ -973,7 +973,7 @@ install: all install-only
|
||||
|
||||
# The "install-only" target also installs the syscalls' XML files in
|
||||
# the system.
|
||||
-install-only: $(CONFIG_INSTALL) xml-syscall-install
|
||||
+install-only: install-gstack $(CONFIG_INSTALL) xml-syscall-install
|
||||
--- gdb-6.8.50.20090802.orig/gdb/Makefile.in 2009-08-03 09:50:57.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/Makefile.in 2009-08-03 11:09:49.000000000 +0200
|
||||
@@ -947,7 +947,7 @@ gdb.z:gdb.1
|
||||
# time it takes for make to check that all is up to date.
|
||||
# install-only is intended to address that need.
|
||||
install: all install-only
|
||||
-install-only: $(CONFIG_INSTALL)
|
||||
+install-only: install-gstack $(CONFIG_INSTALL)
|
||||
transformed_name=`t='$(program_transform_name)'; \
|
||||
echo gdb | sed -e "$$t"` ; \
|
||||
if test "x$$transformed_name" = x; then \
|
||||
@@ -1005,9 +1005,26 @@ install-tui:
|
||||
@@ -979,9 +979,26 @@ install-tui:
|
||||
$(DESTDIR)$(man1dir) ; \
|
||||
$(INSTALL_DATA) $(srcdir)/gdb.1 \
|
||||
$(DESTDIR)$(man1dir)/$$transformed_name.1
|
||||
@ -45,7 +45,7 @@ Index: gdb-6.8.50.20090226/gdb/Makefile.in
|
||||
transformed_name=`t='$(program_transform_name)'; \
|
||||
echo gdb | sed -e $$t` ; \
|
||||
if test "x$$transformed_name" = x; then \
|
||||
@@ -1029,6 +1046,17 @@ uninstall-tui:
|
||||
@@ -1003,6 +1020,17 @@ uninstall-tui:
|
||||
fi ; \
|
||||
rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \
|
||||
$(DESTDIR)$(man1dir)/$$transformed_name.1
|
||||
@ -63,10 +63,10 @@ Index: gdb-6.8.50.20090226/gdb/Makefile.in
|
||||
|
||||
# The C++ name parser can be built standalone for testing.
|
||||
test-cp-name-parser.o: cp-name-parser.c
|
||||
Index: gdb-6.8.50.20090226/gdb/gstack.sh
|
||||
Index: gdb-6.8.50.20090802/gdb/gstack.sh
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20090226/gdb/gstack.sh 2009-02-26 22:10:05.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/gstack.sh 2009-08-03 11:08:52.000000000 +0200
|
||||
@@ -0,0 +1,48 @@
|
||||
+#!/bin/sh
|
||||
+
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: gdb-6.8.50.20081128/gdb/gcore.c
|
||||
Index: gdb-6.8.50.20090802/gdb/gcore.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081128.orig/gdb/gcore.c 2008-09-11 16:27:34.000000000 +0200
|
||||
+++ 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
|
||||
--- gdb-6.8.50.20090802.orig/gdb/gcore.c 2009-08-03 12:27:55.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/gcore.c 2009-08-03 12:28:56.000000000 +0200
|
||||
@@ -479,8 +479,14 @@ gcore_copy_callback (bfd *obfd, asection
|
||||
if (size > total_size)
|
||||
size = total_size;
|
||||
|
||||
@ -12,9 +12,9 @@ Index: gdb-6.8.50.20081128/gdb/gcore.c
|
||||
if (target_read_memory (bfd_section_vma (obfd, osec) + offset,
|
||||
- memhunk, size) != 0)
|
||||
+ memhunk, size) != 0
|
||||
+ && (strcmp (gdbarch_bfd_arch_info (current_gdbarch)->arch_name,
|
||||
+ && (strcmp (gdbarch_bfd_arch_info (target_gdbarch)->arch_name,
|
||||
+ "ia64")
|
||||
+ || bfd_section_vma (obfd, osec) != 0))
|
||||
{
|
||||
warning (_("Memory read failed for corefile section, %s bytes at 0x%s."),
|
||||
plongest (size), paddr (bfd_section_vma (obfd, osec)));
|
||||
warning (_("Memory read failed for corefile section, %s bytes at %s."),
|
||||
plongest (size),
|
||||
|
@ -7,13 +7,13 @@
|
||||
(ia64_rse_skip_regs): Ditto.
|
||||
(ia64_linux_check_stack_region): New function.
|
||||
|
||||
Index: gdb-6.8.50.20090226/gdb/linux-nat.c
|
||||
Index: gdb-6.8.50.20090803/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090226.orig/gdb/linux-nat.c 2009-02-27 07:51:44.000000000 +0100
|
||||
+++ gdb-6.8.50.20090226/gdb/linux-nat.c 2009-02-28 07:19:05.000000000 +0100
|
||||
@@ -4386,15 +4386,38 @@ linux_xfer_partial (struct target_ops *o
|
||||
return linux_nat_xfer_osdata (ops, object, annex, readbuf, writebuf,
|
||||
offset, len);
|
||||
--- gdb-6.8.50.20090803.orig/gdb/linux-nat.c 2009-08-04 06:29:55.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/linux-nat.c 2009-08-04 06:30:53.000000000 +0200
|
||||
@@ -4495,15 +4495,38 @@ linux_xfer_partial (struct target_ops *o
|
||||
offset &= ((ULONGEST) 1 << addr_bit) - 1;
|
||||
}
|
||||
|
||||
-#ifndef NATIVE_XFER_UNWIND_TABLE
|
||||
- /* FIXME: For ia64, we cannot currently use linux_proc_xfer_memory
|
||||
@ -55,10 +55,10 @@ Index: gdb-6.8.50.20090226/gdb/linux-nat.c
|
||||
|
||||
return super_xfer_partial (ops, object, annex, readbuf, writebuf,
|
||||
offset, len);
|
||||
Index: gdb-6.8.50.20090226/gdb/ia64-linux-nat.c
|
||||
Index: gdb-6.8.50.20090803/gdb/ia64-linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090226.orig/gdb/ia64-linux-nat.c 2009-02-23 01:03:49.000000000 +0100
|
||||
+++ gdb-6.8.50.20090226/gdb/ia64-linux-nat.c 2009-02-28 07:18:10.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/ia64-linux-nat.c 2009-02-23 01:03:49.000000000 +0100
|
||||
+++ gdb-6.8.50.20090803/gdb/ia64-linux-nat.c 2009-08-04 06:30:53.000000000 +0200
|
||||
@@ -809,6 +809,64 @@ ia64_linux_xfer_partial (struct target_o
|
||||
|
||||
void _initialize_ia64_linux_nat (void);
|
||||
|
@ -24,11 +24,11 @@
|
||||
|
||||
Fix a compilation error on a typo.
|
||||
|
||||
Index: gdb-6.8.50.20081128/gdb/libunwind-frame.c
|
||||
Index: gdb-6.8.50.20090803/gdb/libunwind-frame.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081128.orig/gdb/libunwind-frame.c 2008-05-06 20:37:46.000000000 +0200
|
||||
+++ 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)
|
||||
--- gdb-6.8.50.20090803.orig/gdb/libunwind-frame.c 2009-01-03 06:57:52.000000000 +0100
|
||||
+++ gdb-6.8.50.20090803/gdb/libunwind-frame.c 2009-08-04 06:31:34.000000000 +0200
|
||||
@@ -62,6 +62,7 @@ static unw_word_t (*unw_find_dyn_list_p)
|
||||
struct libunwind_frame_cache
|
||||
{
|
||||
CORE_ADDR base;
|
||||
@ -36,7 +36,7 @@ Index: gdb-6.8.50.20081128/gdb/libunwind-frame.c
|
||||
CORE_ADDR func_addr;
|
||||
unw_cursor_t cursor;
|
||||
unw_addr_space_t as;
|
||||
@@ -133,6 +134,7 @@ libunwind_frame_cache (struct frame_info
|
||||
@@ -134,6 +135,7 @@ libunwind_frame_cache (struct frame_info
|
||||
unw_accessors_t *acc;
|
||||
unw_addr_space_t as;
|
||||
unw_word_t fp;
|
||||
@ -44,7 +44,7 @@ Index: gdb-6.8.50.20081128/gdb/libunwind-frame.c
|
||||
unw_regnum_t uw_sp_regnum;
|
||||
struct libunwind_frame_cache *cache;
|
||||
struct libunwind_descr *descr;
|
||||
@@ -174,14 +176,30 @@ libunwind_frame_cache (struct frame_info
|
||||
@@ -175,14 +177,30 @@ libunwind_frame_cache (struct frame_info
|
||||
: __LITTLE_ENDIAN);
|
||||
|
||||
unw_init_remote_p (&cache->cursor, as, this_frame);
|
||||
@ -77,7 +77,7 @@ Index: gdb-6.8.50.20081128/gdb/libunwind-frame.c
|
||||
ret = unw_get_reg_p (&cache->cursor, uw_sp_regnum, &fp);
|
||||
if (ret < 0)
|
||||
{
|
||||
@@ -189,6 +207,7 @@ libunwind_frame_cache (struct frame_info
|
||||
@@ -190,6 +208,7 @@ libunwind_frame_cache (struct frame_info
|
||||
error (_("Can't get libunwind sp register."));
|
||||
}
|
||||
|
||||
@ -85,7 +85,7 @@ Index: gdb-6.8.50.20081128/gdb/libunwind-frame.c
|
||||
cache->base = (CORE_ADDR)fp;
|
||||
cache->as = as;
|
||||
|
||||
@@ -376,6 +395,31 @@ libunwind_search_unwind_table (void *as,
|
||||
@@ -377,6 +396,31 @@ libunwind_search_unwind_table (void *as,
|
||||
di, pi, need_unwind_info, args);
|
||||
}
|
||||
|
||||
@ -117,10 +117,10 @@ Index: gdb-6.8.50.20081128/gdb/libunwind-frame.c
|
||||
/* Verify if we are in a sigtramp frame and we can use libunwind to unwind. */
|
||||
int
|
||||
libunwind_sigtramp_frame_sniffer (const struct frame_unwind *self,
|
||||
Index: gdb-6.8.50.20081128/gdb/libunwind-frame.h
|
||||
Index: gdb-6.8.50.20090803/gdb/libunwind-frame.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081128.orig/gdb/libunwind-frame.h 2008-05-06 20:37:46.000000000 +0200
|
||||
+++ gdb-6.8.50.20081128/gdb/libunwind-frame.h 2008-12-02 19:38:55.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/libunwind-frame.h 2009-01-03 06:57:52.000000000 +0100
|
||||
+++ gdb-6.8.50.20090803/gdb/libunwind-frame.h 2009-08-04 06:31:34.000000000 +0200
|
||||
@@ -52,6 +52,9 @@ void libunwind_frame_set_descr (struct g
|
||||
|
||||
void libunwind_frame_this_id (struct frame_info *this_frame, void **this_cache,
|
||||
@ -131,11 +131,11 @@ Index: gdb-6.8.50.20081128/gdb/libunwind-frame.h
|
||||
struct value *libunwind_frame_prev_register (struct frame_info *this_frame,
|
||||
void **this_cache, int regnum);
|
||||
void libunwind_frame_dealloc_cache (struct frame_info *self, void *cache);
|
||||
Index: gdb-6.8.50.20081128/gdb/ia64-tdep.c
|
||||
Index: gdb-6.8.50.20090803/gdb/ia64-tdep.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081128.orig/gdb/ia64-tdep.c 2008-12-02 19:04:32.000000000 +0100
|
||||
+++ gdb-6.8.50.20081128/gdb/ia64-tdep.c 2008-12-02 21:09:46.000000000 +0100
|
||||
@@ -2964,7 +2964,7 @@ ia64_libunwind_sigtramp_frame_this_id (s
|
||||
--- gdb-6.8.50.20090803.orig/gdb/ia64-tdep.c 2009-08-04 06:30:45.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/ia64-tdep.c 2009-08-04 06:31:34.000000000 +0200
|
||||
@@ -3023,7 +3023,7 @@ ia64_libunwind_sigtramp_frame_this_id (s
|
||||
struct frame_id id;
|
||||
CORE_ADDR prev_ip;
|
||||
|
||||
@ -144,9 +144,9 @@ Index: gdb-6.8.50.20081128/gdb/ia64-tdep.c
|
||||
if (frame_id_eq (id, null_frame_id))
|
||||
{
|
||||
(*this_id) = null_frame_id;
|
||||
@@ -2976,8 +2976,14 @@ ia64_libunwind_sigtramp_frame_this_id (s
|
||||
@@ -3035,8 +3035,14 @@ ia64_libunwind_sigtramp_frame_this_id (s
|
||||
get_frame_register (this_frame, IA64_BSP_REGNUM, buf);
|
||||
bsp = extract_unsigned_integer (buf, 8);
|
||||
bsp = extract_unsigned_integer (buf, 8, byte_order);
|
||||
|
||||
- /* For a sigtramp frame, we don't make the check for previous ip being 0. */
|
||||
- (*this_id) = frame_id_build_special (id.stack_addr, id.code_addr, bsp);
|
||||
|
@ -25,10 +25,10 @@
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.8.50.20090226/gdb/symfile-mem.c
|
||||
Index: gdb-6.8.50.20090803/gdb/symfile-mem.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090226.orig/gdb/symfile-mem.c 2009-02-21 17:14:49.000000000 +0100
|
||||
+++ gdb-6.8.50.20090226/gdb/symfile-mem.c 2009-02-28 07:22:09.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/symfile-mem.c 2009-08-03 16:03:00.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/symfile-mem.c 2009-08-03 16:03:17.000000000 +0200
|
||||
@@ -56,6 +56,14 @@
|
||||
#include "elf/common.h"
|
||||
|
||||
@ -53,11 +53,11 @@ Index: gdb-6.8.50.20090226/gdb/symfile-mem.c
|
||||
if (nbfd == NULL)
|
||||
error (_("Failed to read a valid object file image from memory."));
|
||||
|
||||
Index: gdb-6.8.50.20090226/gdb/target.c
|
||||
Index: gdb-6.8.50.20090803/gdb/target.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090226.orig/gdb/target.c 2009-02-27 00:04:32.000000000 +0100
|
||||
+++ gdb-6.8.50.20090226/gdb/target.c 2009-02-28 07:22:09.000000000 +0100
|
||||
@@ -57,7 +57,7 @@ static int nosymbol (char *, CORE_ADDR *
|
||||
--- gdb-6.8.50.20090803.orig/gdb/target.c 2009-08-03 16:03:00.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/target.c 2009-08-03 16:03:17.000000000 +0200
|
||||
@@ -59,7 +59,7 @@ static int nosymbol (char *, CORE_ADDR *
|
||||
|
||||
static void tcomplain (void) ATTR_NORETURN;
|
||||
|
||||
@ -66,16 +66,16 @@ Index: gdb-6.8.50.20090226/gdb/target.c
|
||||
|
||||
static int return_zero (void);
|
||||
|
||||
@@ -286,7 +286,7 @@ target_create_inferior (char *exec_file,
|
||||
@@ -452,7 +452,7 @@ target_terminal_inferior (void)
|
||||
(*current_target.to_terminal_inferior) ();
|
||||
}
|
||||
|
||||
|
||||
-static int
|
||||
+static LONGEST
|
||||
nomemory (CORE_ADDR memaddr, char *myaddr, int len, int write,
|
||||
struct target_ops *t)
|
||||
{
|
||||
@@ -507,7 +507,7 @@ update_current_target (void)
|
||||
@@ -670,7 +670,7 @@ update_current_target (void)
|
||||
(void (*) (struct regcache *))
|
||||
noprocess);
|
||||
de_fault (deprecated_xfer_memory,
|
||||
@ -84,25 +84,25 @@ Index: gdb-6.8.50.20090226/gdb/target.c
|
||||
nomemory);
|
||||
de_fault (to_files_info,
|
||||
(void (*) (struct target_ops *))
|
||||
@@ -1237,7 +1237,7 @@ target_xfer_partial (struct target_ops *
|
||||
@@ -1381,7 +1381,7 @@ target_xfer_partial (struct target_ops *
|
||||
it makes no progress, and then return how much was transferred). */
|
||||
|
||||
int
|
||||
-target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
|
||||
+target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, LONGEST len)
|
||||
{
|
||||
if (target_read (¤t_target, TARGET_OBJECT_MEMORY, NULL,
|
||||
myaddr, memaddr, len) == len)
|
||||
@@ -1247,7 +1247,7 @@ target_read_memory (CORE_ADDR memaddr, g
|
||||
/* Dispatch to the topmost target, not the flattened current_target.
|
||||
Memory accesses check target->to_has_(all_)memory, and the
|
||||
@@ -1394,7 +1394,7 @@ target_read_memory (CORE_ADDR memaddr, g
|
||||
}
|
||||
|
||||
int
|
||||
-target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, int len)
|
||||
+target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, LONGEST len)
|
||||
{
|
||||
if (target_write (¤t_target, TARGET_OBJECT_MEMORY, NULL,
|
||||
myaddr, memaddr, len) == len)
|
||||
@@ -2777,8 +2777,8 @@ debug_to_prepare_to_store (struct regcac
|
||||
/* Dispatch to the topmost target, not the flattened current_target.
|
||||
Memory accesses check target->to_has_(all_)memory, and the
|
||||
@@ -2861,8 +2861,8 @@ debug_to_prepare_to_store (struct regcac
|
||||
fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n");
|
||||
}
|
||||
|
||||
@ -113,22 +113,22 @@ Index: gdb-6.8.50.20090226/gdb/target.c
|
||||
int write, struct mem_attrib *attrib,
|
||||
struct target_ops *target)
|
||||
{
|
||||
@@ -2788,8 +2788,8 @@ deprecated_debug_xfer_memory (CORE_ADDR
|
||||
@@ -2872,8 +2872,8 @@ deprecated_debug_xfer_memory (CORE_ADDR
|
||||
attrib, target);
|
||||
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
- "target_xfer_memory (%s, xxx, %d, %s, xxx) = %d",
|
||||
- paddress (memaddr), len, write ? "write" : "read",
|
||||
- paddress (target_gdbarch, memaddr), len,
|
||||
+ "target_xfer_memory (%s, xxx, %ld, %s, xxx) = %d",
|
||||
+ paddress (memaddr), (long) len, write ? "write" : "read",
|
||||
retval);
|
||||
+ paddress (target_gdbarch, memaddr), (long) len,
|
||||
write ? "write" : "read", retval);
|
||||
|
||||
if (retval > 0)
|
||||
Index: gdb-6.8.50.20090226/gdb/target.h
|
||||
Index: gdb-6.8.50.20090803/gdb/target.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090226.orig/gdb/target.h 2009-02-27 00:04:32.000000000 +0100
|
||||
+++ gdb-6.8.50.20090226/gdb/target.h 2009-02-28 07:22:09.000000000 +0100
|
||||
@@ -376,10 +376,10 @@ struct target_ops
|
||||
--- gdb-6.8.50.20090803.orig/gdb/target.h 2009-08-03 16:03:00.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/target.h 2009-08-03 16:03:17.000000000 +0200
|
||||
@@ -363,10 +363,10 @@ struct target_ops
|
||||
NOTE: cagney/2004-10-01: This has been entirely superseeded by
|
||||
to_xfer_partial and inferior inheritance. */
|
||||
|
||||
@ -142,30 +142,24 @@ Index: gdb-6.8.50.20090226/gdb/target.h
|
||||
+ struct target_ops *target);
|
||||
|
||||
void (*to_files_info) (struct target_ops *);
|
||||
int (*to_insert_breakpoint) (struct bp_target_info *);
|
||||
@@ -679,13 +679,14 @@ extern DCACHE *target_dcache;
|
||||
int (*to_insert_breakpoint) (struct gdbarch *, struct bp_target_info *);
|
||||
@@ -675,10 +675,10 @@ extern DCACHE *target_dcache;
|
||||
|
||||
extern int target_read_string (CORE_ADDR, char **, int, int *);
|
||||
|
||||
-extern int target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len);
|
||||
+extern int target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr,
|
||||
+ LONGEST len);
|
||||
+extern int target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, LONGEST len);
|
||||
|
||||
extern int target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr,
|
||||
- int len);
|
||||
+ LONGEST len);
|
||||
|
||||
-extern int xfer_memory (CORE_ADDR, gdb_byte *, int, int,
|
||||
- struct mem_attrib *, struct target_ops *);
|
||||
+extern LONGEST xfer_memory (CORE_ADDR, gdb_byte *, LONGEST, int,
|
||||
+ struct mem_attrib *, struct target_ops *);
|
||||
|
||||
/* Fetches the target's memory map. If one is found it is sorted
|
||||
and returned, after some consistency checking. Otherwise, NULL
|
||||
Index: gdb-6.8.50.20090226/gdb/dcache.c
|
||||
Index: gdb-6.8.50.20090803/gdb/dcache.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090226.orig/gdb/dcache.c 2009-01-03 06:57:51.000000000 +0100
|
||||
+++ gdb-6.8.50.20090226/gdb/dcache.c 2009-02-28 07:22:09.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/dcache.c 2009-08-03 16:03:00.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/dcache.c 2009-08-03 16:03:17.000000000 +0200
|
||||
@@ -524,9 +524,9 @@ dcache_free (DCACHE *dcache)
|
||||
|
||||
This routine is indended to be called by remote_xfer_ functions. */
|
||||
@ -178,10 +172,10 @@ Index: gdb-6.8.50.20090226/gdb/dcache.c
|
||||
{
|
||||
int i;
|
||||
int (*xfunc) (DCACHE *dcache, CORE_ADDR addr, gdb_byte *ptr);
|
||||
Index: gdb-6.8.50.20090226/gdb/dcache.h
|
||||
Index: gdb-6.8.50.20090803/gdb/dcache.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090226.orig/gdb/dcache.h 2009-01-03 06:57:51.000000000 +0100
|
||||
+++ gdb-6.8.50.20090226/gdb/dcache.h 2009-02-28 07:22:09.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/dcache.h 2009-08-03 16:03:00.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/dcache.h 2009-08-03 16:03:17.000000000 +0200
|
||||
@@ -35,7 +35,7 @@ void dcache_free (DCACHE *);
|
||||
|
||||
/* Simple to call from <remote>_xfer_memory */
|
||||
@ -192,26 +186,24 @@ Index: gdb-6.8.50.20090226/gdb/dcache.h
|
||||
+ LONGEST len, int should_write);
|
||||
|
||||
#endif /* DCACHE_H */
|
||||
Index: gdb-6.8.50.20090226/gdb/exec.c
|
||||
Index: gdb-6.8.50.20090803/gdb/exec.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090226.orig/gdb/exec.c 2009-02-22 20:35:47.000000000 +0100
|
||||
+++ gdb-6.8.50.20090226/gdb/exec.c 2009-02-28 07:22:09.000000000 +0100
|
||||
@@ -464,8 +464,8 @@ map_vmap (bfd *abfd, bfd *arch)
|
||||
The same routine is used to handle both core and exec files;
|
||||
we just tail-call it with more arguments to select between them. */
|
||||
--- gdb-6.8.50.20090803.orig/gdb/exec.c 2009-08-03 16:03:00.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/exec.c 2009-08-03 16:03:17.000000000 +0200
|
||||
@@ -560,7 +560,7 @@ map_vmap (bfd *abfd, bfd *arch)
|
||||
}
|
||||
|
||||
|
||||
-int
|
||||
-xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write,
|
||||
+LONGEST
|
||||
+xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, LONGEST len, int write,
|
||||
struct mem_attrib *attrib, struct target_ops *target)
|
||||
{
|
||||
int res;
|
||||
Index: gdb-6.8.50.20090226/gdb/linux-nat.c
|
||||
section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
|
||||
ULONGEST offset, LONGEST len,
|
||||
struct target_section *sections,
|
||||
Index: gdb-6.8.50.20090803/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090226.orig/gdb/linux-nat.c 2009-02-28 07:22:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090226/gdb/linux-nat.c 2009-02-28 07:22:32.000000000 +0100
|
||||
@@ -4407,7 +4407,7 @@ linux_xfer_partial (struct target_ops *o
|
||||
--- gdb-6.8.50.20090803.orig/gdb/linux-nat.c 2009-08-03 16:03:00.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/linux-nat.c 2009-08-03 16:03:17.000000000 +0200
|
||||
@@ -4516,7 +4516,7 @@ linux_xfer_partial (struct target_ops *o
|
||||
#endif
|
||||
if (iterate_over_lwps (ia64_linux_check_stack_region, &range) != NULL)
|
||||
{ /* This region contains ia64 rse registers, we have to re-read. */
|
||||
@ -220,10 +212,10 @@ Index: gdb-6.8.50.20090226/gdb/linux-nat.c
|
||||
|
||||
/* Re-read register stack area. */
|
||||
xxfer = super_xfer_partial (ops, object, annex,
|
||||
Index: gdb-6.8.50.20090226/gdb/remote.c
|
||||
Index: gdb-6.8.50.20090803/gdb/remote.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090226.orig/gdb/remote.c 2009-02-25 03:14:22.000000000 +0100
|
||||
+++ gdb-6.8.50.20090226/gdb/remote.c 2009-02-28 07:22:09.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/remote.c 2009-08-03 16:03:00.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/remote.c 2009-08-03 16:03:17.000000000 +0200
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "gdb_string.h"
|
||||
#include <ctype.h>
|
||||
@ -232,7 +224,7 @@ Index: gdb-6.8.50.20090226/gdb/remote.c
|
||||
#include "inferior.h"
|
||||
#include "bfd.h"
|
||||
#include "symfile.h"
|
||||
@@ -5683,12 +5684,19 @@ handle_notification (char *buf, size_t l
|
||||
@@ -5785,12 +5786,19 @@ handle_notification (char *buf, size_t l
|
||||
if SHOULD_WRITE is nonzero. Returns length of data written or
|
||||
read; 0 for error. TARGET is unused. */
|
||||
|
||||
@ -254,7 +246,7 @@ Index: gdb-6.8.50.20090226/gdb/remote.c
|
||||
|
||||
set_general_thread (inferior_ptid);
|
||||
|
||||
@@ -5697,7 +5705,7 @@ remote_xfer_memory (CORE_ADDR mem_addr,
|
||||
@@ -5799,7 +5807,7 @@ remote_xfer_memory (CORE_ADDR mem_addr,
|
||||
else
|
||||
res = remote_read_bytes (mem_addr, buffer, mem_len);
|
||||
|
||||
@ -263,11 +255,11 @@ Index: gdb-6.8.50.20090226/gdb/remote.c
|
||||
}
|
||||
|
||||
/* Sends a packet with content determined by the printf format string
|
||||
Index: gdb-6.8.50.20090226/gdb/remote-sim.c
|
||||
Index: gdb-6.8.50.20090803/gdb/remote-sim.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090226.orig/gdb/remote-sim.c 2009-02-23 19:31:23.000000000 +0100
|
||||
+++ gdb-6.8.50.20090226/gdb/remote-sim.c 2009-02-28 07:22:09.000000000 +0100
|
||||
@@ -754,11 +754,14 @@ gdbsim_prepare_to_store (struct regcache
|
||||
--- gdb-6.8.50.20090803.orig/gdb/remote-sim.c 2009-08-03 16:03:00.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/remote-sim.c 2009-08-03 16:03:17.000000000 +0200
|
||||
@@ -752,11 +752,14 @@ gdbsim_prepare_to_store (struct regcache
|
||||
|
||||
Returns the number of bytes transferred. */
|
||||
|
||||
@ -284,33 +276,16 @@ Index: gdb-6.8.50.20090226/gdb/remote-sim.c
|
||||
/* If no program is running yet, then ignore the simulator for
|
||||
memory. Pass the request down to the next target, hopefully
|
||||
an exec file. */
|
||||
@@ -774,22 +777,22 @@ gdbsim_xfer_inferior_memory (CORE_ADDR m
|
||||
printf_filtered ("gdbsim_xfer_inferior_memory: myaddr 0x");
|
||||
gdb_print_host_address (myaddr, gdb_stdout);
|
||||
printf_filtered (", memaddr 0x%s, len %d, write %d\n",
|
||||
- paddr_nz (memaddr), len, write);
|
||||
+ paddr_nz (memaddr), xfer_len, write);
|
||||
if (remote_debug && write)
|
||||
- dump_mem (myaddr, len);
|
||||
+ dump_mem (myaddr, xfer_len);
|
||||
}
|
||||
Index: gdb-6.8.50.20090803/gdb/exec.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090803.orig/gdb/exec.h 2009-06-12 20:38:36.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/exec.h 2009-08-03 16:03:57.000000000 +0200
|
||||
@@ -56,7 +56,7 @@ extern int resize_section_table (struct
|
||||
|
||||
if (write)
|
||||
{
|
||||
- len = sim_write (gdbsim_desc, memaddr, myaddr, len);
|
||||
+ xfer_len = sim_write (gdbsim_desc, memaddr, myaddr, xfer_len);
|
||||
}
|
||||
else
|
||||
{
|
||||
- len = sim_read (gdbsim_desc, memaddr, myaddr, len);
|
||||
- if (remote_debug && len > 0)
|
||||
- dump_mem (myaddr, len);
|
||||
+ xfer_len = sim_read (gdbsim_desc, memaddr, myaddr, xfer_len);
|
||||
+ if (remote_debug && xfer_len > 0)
|
||||
+ dump_mem (myaddr, xfer_len);
|
||||
}
|
||||
- return len;
|
||||
+ return (LONGEST)xfer_len;
|
||||
}
|
||||
One, and only one, of readbuf or writebuf must be non-NULL. */
|
||||
|
||||
static void
|
||||
-extern int section_table_xfer_memory_partial (gdb_byte *, const gdb_byte *,
|
||||
+extern LONGEST section_table_xfer_memory_partial (gdb_byte *, const gdb_byte *,
|
||||
ULONGEST, LONGEST,
|
||||
struct target_section *,
|
||||
struct target_section *,
|
||||
|
@ -1,464 +0,0 @@
|
||||
[base]
|
||||
|
||||
2007-09-21 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* linespec.c (add_minsym_members): Support also the `$allocate' and
|
||||
`$delete' variants.
|
||||
|
||||
2007-10-05 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* linespec.c (add_minsym_members): Support also the `$allocate' and
|
||||
`$delete' variants.
|
||||
(decode_variable): Renamed to ...
|
||||
(decode_variable_1) ... here, its parameter NOT_FOUND_PTR and its
|
||||
exception throwing was moved to ...
|
||||
(decode_variable_not_found): ... a new function here.
|
||||
(decode_variable): New function.
|
||||
|
||||
2007-10-31 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
[ Remove decode_variable* for GDB-6.8+ as no longer needed. ]
|
||||
|
||||
Index: gdb-6.8.50.20081128/gdb/linespec.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081128.orig/gdb/linespec.c 2008-09-05 13:37:17.000000000 +0200
|
||||
+++ gdb-6.8.50.20081128/gdb/linespec.c 2008-12-04 01:43:36.000000000 +0100
|
||||
@@ -39,6 +39,7 @@
|
||||
#include "interps.h"
|
||||
#include "mi/mi-cmds.h"
|
||||
#include "target.h"
|
||||
+#include "gdb_assert.h"
|
||||
|
||||
/* We share this one with symtab.c, but it is not exported widely. */
|
||||
|
||||
@@ -78,7 +79,8 @@ static struct symtabs_and_lines find_met
|
||||
|
||||
static int collect_methods (char *copy, struct type *t,
|
||||
struct symbol *sym_class,
|
||||
- struct symbol **sym_arr);
|
||||
+ struct symbol **sym_arr,
|
||||
+ struct minimal_symbol **msym_arr);
|
||||
|
||||
static NORETURN void cplusplus_error (const char *name,
|
||||
const char *fmt, ...)
|
||||
@@ -87,11 +89,13 @@ static NORETURN void cplusplus_error (co
|
||||
static int total_number_of_methods (struct type *type);
|
||||
|
||||
static int find_methods (struct type *, char *,
|
||||
- enum language, struct symbol **);
|
||||
+ enum language, struct symbol **,
|
||||
+ struct minimal_symbol **);
|
||||
|
||||
static int add_matching_methods (int method_counter, struct type *t,
|
||||
enum language language,
|
||||
- struct symbol **sym_arr);
|
||||
+ struct symbol **sym_arr,
|
||||
+ struct minimal_symbol **msym_arr);
|
||||
|
||||
static int add_constructors (int method_counter, struct type *t,
|
||||
enum language language,
|
||||
@@ -107,6 +111,9 @@ static int is_objc_method_format (const
|
||||
static struct symtabs_and_lines decode_line_2 (struct symbol *[],
|
||||
int, int, char ***);
|
||||
|
||||
+static struct symtabs_and_lines decode_line_3 (struct minimal_symbol *[],
|
||||
+ int, int, char ***);
|
||||
+
|
||||
static struct symtab *symtab_from_filename (char **argptr,
|
||||
char *p, int is_quote_enclosed,
|
||||
int *not_found_ptr);
|
||||
@@ -196,13 +203,18 @@ total_number_of_methods (struct type *ty
|
||||
/* Recursive helper function for decode_line_1.
|
||||
Look for methods named NAME in type T.
|
||||
Return number of matches.
|
||||
- Put matches in SYM_ARR, which should have been allocated with
|
||||
+ Put symbol matches in SYM_ARR, which should have been allocated with
|
||||
a size of total_number_of_methods (T) * sizeof (struct symbol *).
|
||||
+ In a special case where we are looking for constructors, we may
|
||||
+ have to return minimal symbols in the array: MSYM_ARR. This occurs
|
||||
+ when the compiler does not generate mangled names for the constructor's
|
||||
+ debug info because there are multiple versions of the constructor
|
||||
+ (in-charge vs not-in-charge).
|
||||
Note that this function is g++ specific. */
|
||||
|
||||
static int
|
||||
find_methods (struct type *t, char *name, enum language language,
|
||||
- struct symbol **sym_arr)
|
||||
+ struct symbol **sym_arr, struct minimal_symbol **msym_arr)
|
||||
{
|
||||
int i1 = 0;
|
||||
int ibase;
|
||||
@@ -244,7 +256,7 @@ find_methods (struct type *t, char *name
|
||||
if (strcmp_iw (name, method_name) == 0)
|
||||
/* Find all the overloaded methods with that name. */
|
||||
i1 += add_matching_methods (method_counter, t, language,
|
||||
- sym_arr + i1);
|
||||
+ sym_arr + i1, msym_arr);
|
||||
else if (strncmp (class_name, name, name_len) == 0
|
||||
&& (class_name[name_len] == '\0'
|
||||
|| class_name[name_len] == '<'))
|
||||
@@ -267,21 +279,100 @@ find_methods (struct type *t, char *name
|
||||
if (i1 == 0)
|
||||
for (ibase = 0; ibase < TYPE_N_BASECLASSES (t); ibase++)
|
||||
i1 += find_methods (TYPE_BASECLASS (t, ibase), name,
|
||||
- language, sym_arr + i1);
|
||||
+ language, sym_arr + i1, msym_arr);
|
||||
|
||||
return i1;
|
||||
}
|
||||
|
||||
+static int
|
||||
+add_minsym_members (const char *class_name,
|
||||
+ const char *member_name,
|
||||
+ struct minimal_symbol **msym_arr)
|
||||
+{
|
||||
+ char *completion_name;
|
||||
+ char **list;
|
||||
+ int i;
|
||||
+ int comp_len;
|
||||
+ int counter = 0;
|
||||
+
|
||||
+ /* To find the member, we first cheat and use symbol completion.
|
||||
+ This will give us a list of all the member names including
|
||||
+ the function signature. */
|
||||
+ completion_name = xmalloc (strlen (class_name) +
|
||||
+ strlen (member_name) + 9);
|
||||
+ completion_name[0] = '\'';
|
||||
+ strcpy (completion_name+1, class_name);
|
||||
+ /* FIXME: make this the language class separator. */
|
||||
+ strcat (completion_name, "::");
|
||||
+ strcat (completion_name, member_name);
|
||||
+ strcat (completion_name, "(");
|
||||
+ list = make_symbol_completion_list (completion_name,
|
||||
+ completion_name+1);
|
||||
+
|
||||
+ /* Now that we have the list, we generate an array of their
|
||||
+ corresponding minimal symbols. */
|
||||
+ counter = 0;
|
||||
+ while (list && list[counter] != NULL)
|
||||
+ {
|
||||
+ msym_arr[counter] = lookup_minimal_symbol (list[counter], NULL, NULL);
|
||||
+ ++counter;
|
||||
+ }
|
||||
+
|
||||
+ xfree (list);
|
||||
+
|
||||
+ /* In the case of constructors, there may be in-charge vs not-in-charge
|
||||
+ constructors. Check for names with $base which indicates not-in-charge
|
||||
+ constructors. */
|
||||
+ comp_len = strlen (completion_name);
|
||||
+ strcpy (completion_name + comp_len - 1, "$base(");
|
||||
+ list = make_symbol_completion_list (completion_name,
|
||||
+ completion_name+1);
|
||||
+
|
||||
+ /* Again we have a list. Add their minimal symbols to the array. */
|
||||
+ i = 0;
|
||||
+ while (list && list[i] != NULL)
|
||||
+ {
|
||||
+ msym_arr[counter] = lookup_minimal_symbol (list[i++], NULL, NULL);
|
||||
+ ++counter;
|
||||
+ }
|
||||
+ xfree (list);
|
||||
+
|
||||
+ /* Target also the allocating/deleting variants. */
|
||||
+ if (member_name[0] == '~')
|
||||
+ strcpy (completion_name + comp_len - 1, "$delete(");
|
||||
+ else
|
||||
+ strcpy (completion_name + comp_len - 1, "$allocate(");
|
||||
+ list = make_symbol_completion_list (completion_name,
|
||||
+ completion_name+1);
|
||||
+
|
||||
+ /* Again we have a list. Add their minimal symbols to the array. */
|
||||
+ i = 0;
|
||||
+ while (list && list[i] != NULL)
|
||||
+ {
|
||||
+ msym_arr[counter] = lookup_minimal_symbol (list[i++], NULL, NULL);
|
||||
+ ++counter;
|
||||
+ }
|
||||
+ xfree (list);
|
||||
+
|
||||
+ xfree (completion_name);
|
||||
+
|
||||
+ return counter;
|
||||
+}
|
||||
+
|
||||
/* Add the symbols associated to methods of the class whose type is T
|
||||
and whose name matches the method indexed by METHOD_COUNTER in the
|
||||
array SYM_ARR. Return the number of methods added. */
|
||||
|
||||
static int
|
||||
add_matching_methods (int method_counter, struct type *t,
|
||||
- enum language language, struct symbol **sym_arr)
|
||||
+ enum language language, struct symbol **sym_arr,
|
||||
+ struct minimal_symbol **msym_arr)
|
||||
{
|
||||
int field_counter;
|
||||
int i1 = 0;
|
||||
+ int cons_index = 0;
|
||||
+ char *class_name = type_name_no_tag (t);
|
||||
+ char **list = NULL;
|
||||
|
||||
for (field_counter = TYPE_FN_FIELDLIST_LENGTH (t, method_counter) - 1;
|
||||
field_counter >= 0;
|
||||
@@ -306,6 +397,16 @@ add_matching_methods (int method_counter
|
||||
else
|
||||
phys_name = TYPE_FN_FIELD_PHYSNAME (f, field_counter);
|
||||
|
||||
+ /* Check for special case of looking for member that
|
||||
+ doesn't have a mangled name provided. This will happen
|
||||
+ when we have in-charge and not-in-charge constructors.
|
||||
+ Since we don't have a mangled name to work with, if we
|
||||
+ look for the symbol, we can only find the class itself.
|
||||
+ We can find the information we need in the minimal symbol
|
||||
+ table which has the full member name information we need. */
|
||||
+ if (strlen (phys_name) <= strlen (class_name))
|
||||
+ return add_minsym_members (class_name, phys_name, msym_arr);
|
||||
+
|
||||
/* Destructor is handled by caller, don't add it to
|
||||
the list. */
|
||||
if (is_destructor_name (phys_name) != 0)
|
||||
@@ -330,6 +431,9 @@ add_matching_methods (int method_counter
|
||||
}
|
||||
}
|
||||
|
||||
+ if (list)
|
||||
+ xfree (list);
|
||||
+
|
||||
return i1;
|
||||
}
|
||||
|
||||
@@ -630,6 +734,146 @@ See set/show multiple-symbol."));
|
||||
discard_cleanups (old_chain);
|
||||
return return_values;
|
||||
}
|
||||
+
|
||||
+/* Given a list of NELTS minimal symbols in MSYM_ARR, return a list of lines to
|
||||
+ operate on (ask user if necessary).
|
||||
+ If CANONICAL is non-NULL return a corresponding array of mangled names
|
||||
+ as canonical line specs there. */
|
||||
+
|
||||
+static struct symtabs_and_lines
|
||||
+decode_line_3 (struct minimal_symbol *msym_arr[],
|
||||
+ int nelts, int funfirstline,
|
||||
+ char ***canonical)
|
||||
+{
|
||||
+ struct symtabs_and_lines values, return_values;
|
||||
+ char *args, *arg1;
|
||||
+ int i;
|
||||
+ char *prompt;
|
||||
+ char *symname;
|
||||
+ struct cleanup *old_chain;
|
||||
+ char **canonical_arr = (char **) NULL;
|
||||
+
|
||||
+ values.sals = (struct symtab_and_line *)
|
||||
+ alloca (nelts * sizeof (struct symtab_and_line));
|
||||
+ return_values.sals = (struct symtab_and_line *)
|
||||
+ xmalloc (nelts * sizeof (struct symtab_and_line));
|
||||
+ old_chain = make_cleanup (xfree, return_values.sals);
|
||||
+
|
||||
+ if (canonical)
|
||||
+ {
|
||||
+ canonical_arr = (char **) xmalloc (nelts * sizeof (char *));
|
||||
+ make_cleanup (xfree, canonical_arr);
|
||||
+ memset (canonical_arr, 0, nelts * sizeof (char *));
|
||||
+ *canonical = canonical_arr;
|
||||
+ }
|
||||
+
|
||||
+ i = 0;
|
||||
+ printf_unfiltered ("[0] cancel\n[1] all\n");
|
||||
+ while (i < nelts)
|
||||
+ {
|
||||
+ init_sal (&return_values.sals[i]); /* Initialize to zeroes. */
|
||||
+ init_sal (&values.sals[i]);
|
||||
+ if (msym_arr[i])
|
||||
+ {
|
||||
+ struct symtabs_and_lines msal = minsym_found (funfirstline,
|
||||
+ msym_arr[i]);
|
||||
+ memcpy (&values.sals[i], &msal.sals[0],
|
||||
+ sizeof (struct symtab_and_line));
|
||||
+ if (values.sals[i].symtab)
|
||||
+ printf_unfiltered ("[%d] %s at %s:%d\n",
|
||||
+ (i + 2),
|
||||
+ SYMBOL_PRINT_NAME (msym_arr[i]),
|
||||
+ values.sals[i].symtab->filename,
|
||||
+ values.sals[i].line);
|
||||
+ else
|
||||
+ printf_unfiltered ("[%d] %s at ?FILE:%d [No symtab? Probably broken debug info...]\n",
|
||||
+ (i + 2),
|
||||
+ SYMBOL_PRINT_NAME (msym_arr[i]),
|
||||
+ values.sals[i].line);
|
||||
+
|
||||
+ }
|
||||
+ else
|
||||
+ printf_unfiltered ("?HERE\n");
|
||||
+ i++;
|
||||
+ }
|
||||
+
|
||||
+ prompt = getenv ("PS2");
|
||||
+ if (prompt == NULL)
|
||||
+ {
|
||||
+ prompt = "> ";
|
||||
+ }
|
||||
+ args = command_line_input (prompt, 0, "overload-choice");
|
||||
+
|
||||
+ if (args == 0 || *args == 0)
|
||||
+ error_no_arg ("one or more choice numbers");
|
||||
+
|
||||
+ i = 0;
|
||||
+ while (*args)
|
||||
+ {
|
||||
+ int num;
|
||||
+
|
||||
+ arg1 = args;
|
||||
+ while (*arg1 >= '0' && *arg1 <= '9')
|
||||
+ arg1++;
|
||||
+ if (*arg1 && *arg1 != ' ' && *arg1 != '\t')
|
||||
+ error ("Arguments must be choice numbers.");
|
||||
+
|
||||
+ num = atoi (args);
|
||||
+
|
||||
+ if (num == 0)
|
||||
+ error ("canceled");
|
||||
+ else if (num == 1)
|
||||
+ {
|
||||
+ if (canonical_arr)
|
||||
+ {
|
||||
+ for (i = 0; i < nelts; i++)
|
||||
+ {
|
||||
+ if (canonical_arr[i] == NULL)
|
||||
+ {
|
||||
+ symname = SYMBOL_LINKAGE_NAME (msym_arr[i]);
|
||||
+ canonical_arr[i] = savestring (symname, strlen (symname));
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ memcpy (return_values.sals, values.sals,
|
||||
+ (nelts * sizeof (struct symtab_and_line)));
|
||||
+ return_values.nelts = nelts;
|
||||
+ discard_cleanups (old_chain);
|
||||
+ return return_values;
|
||||
+ }
|
||||
+
|
||||
+ if (num >= nelts + 2)
|
||||
+ {
|
||||
+ printf_unfiltered ("No choice number %d.\n", num);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ num -= 2;
|
||||
+ if (values.sals[num].pc)
|
||||
+ {
|
||||
+ if (canonical_arr)
|
||||
+ {
|
||||
+ symname = SYMBOL_LINKAGE_NAME (msym_arr[num]);
|
||||
+ make_cleanup (xfree, symname);
|
||||
+ canonical_arr[i] = savestring (symname, strlen (symname));
|
||||
+ }
|
||||
+ return_values.sals[i++] = values.sals[num];
|
||||
+ values.sals[num].pc = 0;
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ printf_unfiltered ("duplicate request for %d ignored.\n", num);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ args = arg1;
|
||||
+ while (*args == ' ' || *args == '\t')
|
||||
+ args++;
|
||||
+ }
|
||||
+ return_values.nelts = i;
|
||||
+ discard_cleanups (old_chain);
|
||||
+ return return_values;
|
||||
+}
|
||||
|
||||
/* The parser of linespec itself. */
|
||||
|
||||
@@ -1438,35 +1682,47 @@ find_method (int funfirstline, char ***c
|
||||
struct symbol **sym_arr = alloca (total_number_of_methods (t)
|
||||
* sizeof (struct symbol *));
|
||||
|
||||
+ struct minimal_symbol **msym_arr = alloca (total_number_of_methods (t)
|
||||
+ * sizeof (struct minimal_symbol *));
|
||||
+
|
||||
+ msym_arr[0] = NULL;
|
||||
+
|
||||
/* Find all methods with a matching name, and put them in
|
||||
sym_arr. */
|
||||
|
||||
- i1 = collect_methods (copy, t, sym_class, sym_arr);
|
||||
+ i1 = collect_methods (copy, t, sym_class, sym_arr, msym_arr);
|
||||
|
||||
if (i1 == 1)
|
||||
{
|
||||
/* There is exactly one field with that name. */
|
||||
- sym = sym_arr[0];
|
||||
-
|
||||
- if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
|
||||
- {
|
||||
- values.sals = (struct symtab_and_line *)
|
||||
- xmalloc (sizeof (struct symtab_and_line));
|
||||
- values.nelts = 1;
|
||||
- values.sals[0] = find_function_start_sal (sym,
|
||||
- funfirstline);
|
||||
- }
|
||||
+ if (msym_arr[0] != NULL)
|
||||
+ return minsym_found (funfirstline, msym_arr[0]);
|
||||
else
|
||||
{
|
||||
- values.sals = NULL;
|
||||
- values.nelts = 0;
|
||||
+ sym = sym_arr[0];
|
||||
+
|
||||
+ if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
|
||||
+ {
|
||||
+ values.sals = (struct symtab_and_line *)
|
||||
+ xmalloc (sizeof (struct symtab_and_line));
|
||||
+ values.nelts = 1;
|
||||
+ values.sals[0] = find_function_start_sal (sym,
|
||||
+ funfirstline);
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ values.sals = NULL;
|
||||
+ values.nelts = 0;
|
||||
+ }
|
||||
+ return values;
|
||||
}
|
||||
- return values;
|
||||
}
|
||||
if (i1 > 0)
|
||||
{
|
||||
/* There is more than one field with that name
|
||||
(overloaded). Ask the user which one to use. */
|
||||
+ if (msym_arr[0] != NULL)
|
||||
+ return decode_line_3 (msym_arr, i1, funfirstline, canonical);
|
||||
return decode_line_2 (sym_arr, i1, funfirstline, canonical);
|
||||
}
|
||||
else
|
||||
@@ -1493,11 +1748,12 @@ find_method (int funfirstline, char ***c
|
||||
}
|
||||
|
||||
/* Find all methods named COPY in the class whose type is T, and put
|
||||
- them in SYM_ARR. Return the number of methods found. */
|
||||
+ them in SYM_ARR or MSYM_ARR. Return the number of methods found. */
|
||||
|
||||
static int
|
||||
collect_methods (char *copy, struct type *t,
|
||||
- struct symbol *sym_class, struct symbol **sym_arr)
|
||||
+ struct symbol *sym_class, struct symbol **sym_arr,
|
||||
+ struct minimal_symbol **msym_arr)
|
||||
{
|
||||
int i1 = 0; /* Counter for the symbol array. */
|
||||
|
||||
@@ -1518,7 +1774,7 @@ collect_methods (char *copy, struct type
|
||||
}
|
||||
}
|
||||
else
|
||||
- i1 = find_methods (t, copy, SYMBOL_LANGUAGE (sym_class), sym_arr);
|
||||
+ i1 = find_methods (t, copy, SYMBOL_LANGUAGE (sym_class), sym_arr, msym_arr);
|
||||
|
||||
return i1;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -6,11 +6,11 @@
|
||||
use to skip over first half of a GNU/Linux syscall and update
|
||||
"func_start".
|
||||
|
||||
Index: gdb-6.8/gdb/rs6000-tdep.c
|
||||
Index: gdb-6.8.50.20090802/gdb/rs6000-tdep.c
|
||||
===================================================================
|
||||
--- gdb-6.8.orig/gdb/rs6000-tdep.c 2008-02-20 15:34:43.000000000 +0100
|
||||
+++ gdb-6.8/gdb/rs6000-tdep.c 2008-07-14 10:25:29.000000000 +0200
|
||||
@@ -124,6 +124,7 @@ static const char *powerpc_vector_abi_st
|
||||
--- gdb-6.8.50.20090802.orig/gdb/rs6000-tdep.c 2009-07-31 17:23:20.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/rs6000-tdep.c 2009-08-03 09:52:39.000000000 +0200
|
||||
@@ -126,6 +126,7 @@ static const char *powerpc_vector_abi_st
|
||||
|
||||
struct rs6000_framedata
|
||||
{
|
||||
@ -18,7 +18,7 @@ Index: gdb-6.8/gdb/rs6000-tdep.c
|
||||
int offset; /* total size of frame --- the distance
|
||||
by which we decrement sp to allocate
|
||||
the frame */
|
||||
@@ -1262,7 +1263,6 @@ static CORE_ADDR
|
||||
@@ -1488,7 +1489,6 @@ static CORE_ADDR
|
||||
skip_prologue (struct gdbarch *gdbarch, CORE_ADDR pc, CORE_ADDR lim_pc,
|
||||
struct rs6000_framedata *fdata)
|
||||
{
|
||||
@ -26,7 +26,7 @@ Index: gdb-6.8/gdb/rs6000-tdep.c
|
||||
CORE_ADDR last_prologue_pc = pc;
|
||||
CORE_ADDR li_found_pc = 0;
|
||||
gdb_byte buf[4];
|
||||
@@ -1280,11 +1280,13 @@ skip_prologue (struct gdbarch *gdbarch,
|
||||
@@ -1506,12 +1506,14 @@ skip_prologue (struct gdbarch *gdbarch,
|
||||
int minimal_toc_loaded = 0;
|
||||
int prev_insn_was_prologue_insn = 1;
|
||||
int num_skip_non_prologue_insns = 0;
|
||||
@ -34,15 +34,16 @@ Index: gdb-6.8/gdb/rs6000-tdep.c
|
||||
int r0_contains_arg = 0;
|
||||
const struct bfd_arch_info *arch_info = gdbarch_bfd_arch_info (gdbarch);
|
||||
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
|
||||
|
||||
memset (fdata, 0, sizeof (struct rs6000_framedata));
|
||||
+ fdata->func_start = pc;
|
||||
fdata->saved_gpr = -1;
|
||||
fdata->saved_fpr = -1;
|
||||
fdata->saved_vr = -1;
|
||||
@@ -1313,6 +1315,55 @@ skip_prologue (struct gdbarch *gdbarch,
|
||||
@@ -1545,6 +1547,55 @@ skip_prologue (struct gdbarch *gdbarch,
|
||||
break;
|
||||
op = extract_unsigned_integer (buf, 4);
|
||||
op = extract_unsigned_integer (buf, 4, byte_order);
|
||||
|
||||
+ /* A PPC64 GNU/Linux system call function is split into two
|
||||
+ sub-functions: a non-threaded fast-path (__NAME_nocancel)
|
||||
@ -96,7 +97,7 @@ Index: gdb-6.8/gdb/rs6000-tdep.c
|
||||
if ((op & 0xfc1fffff) == 0x7c0802a6)
|
||||
{ /* mflr Rx */
|
||||
/* Since shared library / PIC code, which needs to get its
|
||||
@@ -1486,9 +1537,9 @@ skip_prologue (struct gdbarch *gdbarch,
|
||||
@@ -1726,9 +1777,9 @@ skip_prologue (struct gdbarch *gdbarch,
|
||||
we have no line table information or the line info tells
|
||||
us that the subroutine call is not part of the line
|
||||
associated with the prologue. */
|
||||
|
@ -8,11 +8,11 @@
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.7/gdb/solib-svr4.c
|
||||
Index: gdb-6.8.50.20090802/gdb/solib-svr4.c
|
||||
===================================================================
|
||||
--- gdb-6.7.orig/gdb/solib-svr4.c 2007-10-09 20:03:30.000000000 +0200
|
||||
+++ gdb-6.7/gdb/solib-svr4.c 2007-10-12 22:34:03.000000000 +0200
|
||||
@@ -1089,7 +1089,15 @@ enable_break (void)
|
||||
--- gdb-6.8.50.20090802.orig/gdb/solib-svr4.c 2009-08-03 10:03:36.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/solib-svr4.c 2009-08-03 10:51:15.000000000 +0200
|
||||
@@ -1431,7 +1431,15 @@ enable_break (struct svr4_info *info)
|
||||
{
|
||||
sym_addr = bfd_lookup_symbol (tmp_bfd, *bkpt_namep);
|
||||
if (sym_addr != 0)
|
||||
@ -20,7 +20,7 @@ Index: gdb-6.7/gdb/solib-svr4.c
|
||||
+ {
|
||||
+ /* The symbol might be a descriptor, convert to into the
|
||||
+ corresponding code address. */
|
||||
+ sym_addr = gdbarch_convert_from_func_ptr_addr (current_gdbarch,
|
||||
+ sym_addr = gdbarch_convert_from_func_ptr_addr (target_gdbarch,
|
||||
+ sym_addr,
|
||||
+ tmp_bfd_target);
|
||||
+ if (sym_addr != 0)
|
||||
|
@ -11,11 +11,11 @@
|
||||
|
||||
* gdb.texinfo (File Options): Document --readnever.
|
||||
|
||||
Index: gdb-6.8.50.20090302/gdb/doc/gdb.texinfo
|
||||
Index: gdb-6.8.50.20090802/gdb/doc/gdb.texinfo
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/doc/gdb.texinfo 2009-05-09 20:00:02.000000000 +0200
|
||||
+++ gdb-6.8.50.20090302/gdb/doc/gdb.texinfo 2009-05-09 20:00:06.000000000 +0200
|
||||
@@ -988,6 +988,12 @@ Read each symbol file's entire symbol ta
|
||||
--- gdb-6.8.50.20090802.orig/gdb/doc/gdb.texinfo 2009-08-03 09:50:57.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/doc/gdb.texinfo 2009-08-03 12:29:58.000000000 +0200
|
||||
@@ -991,6 +991,12 @@ Read each symbol file's entire symbol ta
|
||||
the default, which is to read it incrementally as it is needed.
|
||||
This makes startup slower, but makes future operations faster.
|
||||
|
||||
@ -28,11 +28,11 @@ Index: gdb-6.8.50.20090302/gdb/doc/gdb.texinfo
|
||||
@end table
|
||||
|
||||
@node Mode Options
|
||||
Index: gdb-6.8.50.20090302/gdb/main.c
|
||||
Index: gdb-6.8.50.20090802/gdb/main.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/main.c 2009-05-09 20:00:03.000000000 +0200
|
||||
+++ gdb-6.8.50.20090302/gdb/main.c 2009-05-09 20:00:06.000000000 +0200
|
||||
@@ -427,6 +427,7 @@ captured_main (void *data)
|
||||
--- gdb-6.8.50.20090802.orig/gdb/main.c 2009-08-03 12:29:03.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/main.c 2009-08-03 12:29:58.000000000 +0200
|
||||
@@ -382,6 +382,7 @@ captured_main (void *data)
|
||||
{"xdb", no_argument, &xdb_commands, 1},
|
||||
{"dbx", no_argument, &dbx_commands, 1},
|
||||
{"readnow", no_argument, &readnow_symbol_files, 1},
|
||||
@ -40,7 +40,7 @@ Index: gdb-6.8.50.20090302/gdb/main.c
|
||||
{"r", no_argument, &readnow_symbol_files, 1},
|
||||
{"quiet", no_argument, &quiet, 1},
|
||||
{"q", no_argument, &quiet, 1},
|
||||
@@ -1070,6 +1071,7 @@ Options:\n\n\
|
||||
@@ -1030,6 +1031,7 @@ Options:\n\n\
|
||||
fputs_unfiltered (_("\
|
||||
--quiet Do not print version number on startup.\n\
|
||||
--readnow Fully read symbol files on first access.\n\
|
||||
@ -48,11 +48,11 @@ Index: gdb-6.8.50.20090302/gdb/main.c
|
||||
"), stream);
|
||||
fputs_unfiltered (_("\
|
||||
--se=FILE Use FILE as symbol file and executable file.\n\
|
||||
Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
Index: gdb-6.8.50.20090802/gdb/symfile.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/symfile.c 2009-05-09 20:00:03.000000000 +0200
|
||||
+++ gdb-6.8.50.20090302/gdb/symfile.c 2009-05-09 20:00:06.000000000 +0200
|
||||
@@ -77,6 +77,7 @@ static void clear_symtab_users_cleanup (
|
||||
--- gdb-6.8.50.20090802.orig/gdb/symfile.c 2009-08-03 12:28:14.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/symfile.c 2009-08-03 12:29:58.000000000 +0200
|
||||
@@ -78,6 +78,7 @@ static void clear_symtab_users_cleanup (
|
||||
|
||||
/* Global variables owned by this file */
|
||||
int readnow_symbol_files; /* Read full symbols immediately */
|
||||
@ -60,32 +60,32 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
|
||||
/* External variables and functions referenced. */
|
||||
|
||||
Index: gdb-6.8.50.20090302/gdb/dwarf2read.c
|
||||
Index: gdb-6.8.50.20090802/gdb/dwarf2read.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/dwarf2read.c 2009-05-09 20:00:02.000000000 +0200
|
||||
+++ gdb-6.8.50.20090302/gdb/dwarf2read.c 2009-05-09 20:00:19.000000000 +0200
|
||||
@@ -50,6 +50,7 @@
|
||||
#include "c-lang.h"
|
||||
--- gdb-6.8.50.20090802.orig/gdb/dwarf2read.c 2009-08-03 09:50:57.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/dwarf2read.c 2009-08-03 12:31:01.000000000 +0200
|
||||
@@ -52,6 +52,7 @@
|
||||
#include "jv-lang.h"
|
||||
#include "typeprint.h"
|
||||
#include "block.h"
|
||||
#include "vec.h"
|
||||
+#include "top.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include "gdb_string.h"
|
||||
@@ -1187,7 +1188,8 @@ dwarf2_has_info (struct objfile *objfile
|
||||
dwarf_aranges_section = 0;
|
||||
|
||||
bfd_map_over_sections (objfile->obfd, dwarf2_locate_sections, &update_sizes);
|
||||
- return (dwarf_info_section != NULL && dwarf_abbrev_section != NULL);
|
||||
@@ -1225,7 +1226,8 @@ dwarf2_has_info (struct objfile *objfile
|
||||
|
||||
bfd_map_over_sections (objfile->obfd, dwarf2_locate_sections, NULL);
|
||||
}
|
||||
- return (dwarf2_per_objfile->info.asection != NULL
|
||||
+ return !readnever_symbol_files
|
||||
+ && dwarf_info_section != NULL && dwarf_abbrev_section != NULL;
|
||||
+ && (dwarf2_per_objfile->info.asection != NULL
|
||||
&& dwarf2_per_objfile->abbrev.asection != NULL);
|
||||
}
|
||||
|
||||
/* When loading sections, we can either look for ".<name>", or for
|
||||
Index: gdb-6.8.50.20090302/gdb/top.h
|
||||
Index: gdb-6.8.50.20090802/gdb/top.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/top.h 2009-01-03 06:57:53.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/top.h 2009-05-09 20:00:06.000000000 +0200
|
||||
--- gdb-6.8.50.20090802.orig/gdb/top.h 2009-01-03 06:57:53.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/top.h 2009-08-03 12:29:58.000000000 +0200
|
||||
@@ -59,6 +59,7 @@ extern void set_prompt (char *);
|
||||
|
||||
/* From random places. */
|
||||
|
@ -1,29 +0,0 @@
|
||||
2004-11-30 Jeff Johnston <jjohnstn@redhat.com>
|
||||
|
||||
* breakpoint.c (remove_breakpoints): Continue removing breakpoints
|
||||
even if an error occurs. Remove a failure code for the last failure
|
||||
only.
|
||||
|
||||
--- gdb+dejagnu-20040607/gdb/breakpoint.c.fix2 Tue Nov 30 18:01:33 2004
|
||||
+++ gdb+dejagnu-20040607/gdb/breakpoint.c Tue Nov 30 18:06:01 2004
|
||||
@@ -1297,6 +1297,7 @@ remove_breakpoints (void)
|
||||
{
|
||||
struct bp_location *b;
|
||||
int val;
|
||||
+ int return_val = 0;
|
||||
|
||||
ALL_BP_LOCATIONS (b)
|
||||
{
|
||||
@@ -1304,10 +1305,10 @@ remove_breakpoints (void)
|
||||
{
|
||||
val = remove_breakpoint (b, mark_uninserted);
|
||||
if (val != 0)
|
||||
- return val;
|
||||
+ return_val = val;
|
||||
}
|
||||
}
|
||||
- return 0;
|
||||
+ return return_val;
|
||||
}
|
||||
|
||||
int
|
@ -1,40 +1,40 @@
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/configure.ac
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/configure.ac
|
||||
===================================================================
|
||||
--- 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-6.8.50.20090802.orig/gdb/testsuite/configure.ac 2009-07-31 17:38:16.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/configure.ac 2009-08-03 11:10:45.000000000 +0200
|
||||
@@ -144,6 +144,6 @@ AC_OUTPUT([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.objc/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.pie/Makefile \
|
||||
gdb.python/Makefile \
|
||||
gdb.python/Makefile gdb.reverse/Makefile \
|
||||
gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile])
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/configure
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/configure
|
||||
===================================================================
|
||||
--- 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
|
||||
--- gdb-6.8.50.20090802.orig/gdb/testsuite/configure 2009-07-31 17:38:16.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/configure 2009-08-03 11:11:27.000000000 +0200
|
||||
@@ -3239,7 +3239,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.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.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.python/Makefile gdb.reverse/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.reverse/Makefile gdb.threads/Makefile gdb.trace/Makefile gdb.xml/Makefile"
|
||||
cat >confcache <<\_ACEOF
|
||||
# This file is a shell script that caches the results of configure
|
||||
# tests run on this system so they can be shared between configure
|
||||
@@ -3698,6 +3698,7 @@ do
|
||||
@@ -3813,6 +3813,7 @@ do
|
||||
"gdb.objc/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.objc/Makefile" ;;
|
||||
"gdb.opt/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.opt/Makefile" ;;
|
||||
"gdb.pascal/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.pascal/Makefile" ;;
|
||||
+ "gdb.pie/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.pie/Makefile" ;;
|
||||
"gdb.python/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.python/Makefile" ;;
|
||||
"gdb.reverse/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.reverse/Makefile" ;;
|
||||
"gdb.threads/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.threads/Makefile" ;;
|
||||
"gdb.trace/Makefile" ) CONFIG_FILES="$CONFIG_FILES gdb.trace/Makefile" ;;
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/attach.c
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/attach.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/attach.c 2008-12-09 17:02:55.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/attach.c 2009-08-03 11:10:12.000000000 +0200
|
||||
@@ -0,0 +1,20 @@
|
||||
+/* 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
|
||||
@ -56,10 +56,10 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/attach.c
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/attach2.c
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/attach2.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/attach2.c 2008-12-09 17:02:55.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/attach2.c 2009-08-03 11:10:12.000000000 +0200
|
||||
@@ -0,0 +1,24 @@
|
||||
+/* 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
|
||||
@ -85,10 +85,10 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/attach2.c
|
||||
+ }
|
||||
+ return (0);
|
||||
+}
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/break.c
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/break.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/break.c 2008-12-09 17:02:55.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/break.c 2009-08-03 11:10:12.000000000 +0200
|
||||
@@ -0,0 +1,146 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -236,10 +236,10 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/break.c
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/break1.c
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/break1.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/break1.c 2008-12-09 17:02:55.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/break1.c 2009-08-03 11:10:12.000000000 +0200
|
||||
@@ -0,0 +1,44 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -285,10 +285,10 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/break1.c
|
||||
+void marker3 (a, b) char *a, *b; {} /* set breakpoint 18 here */
|
||||
+void marker4 (d) long d; {} /* set breakpoint 13 here */
|
||||
+#endif
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/coremaker.c
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/coremaker.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/coremaker.c 2008-12-09 17:02:55.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/coremaker.c 2009-08-03 11:10:12.000000000 +0200
|
||||
@@ -0,0 +1,142 @@
|
||||
+/* Copyright 1992, 1993, 1994, 1995, 1996, 1999
|
||||
+ Free Software Foundation, Inc.
|
||||
@ -432,10 +432,10 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/coremaker.c
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/attach.exp
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/attach.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/attach.exp 2008-12-09 17:02:55.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/attach.exp 2009-08-03 11:10:12.000000000 +0200
|
||||
@@ -0,0 +1,432 @@
|
||||
+# Copyright 1997, 1999, 2002 Free Software Foundation, Inc.
|
||||
+
|
||||
@ -869,10 +869,10 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/attach.exp
|
||||
+do_call_attach_tests
|
||||
+
|
||||
+return 0
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/break.exp
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/break.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/break.exp 2008-12-09 17:24:34.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/break.exp 2009-08-03 11:10:12.000000000 +0200
|
||||
@@ -0,0 +1,977 @@
|
||||
+# Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999,
|
||||
+# 2000, 2002, 2003, 2004
|
||||
@ -1851,10 +1851,10 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/break.exp
|
||||
+ send_gdb "set args main\n"
|
||||
+ gdb_expect -re ".*$gdb_prompt $" {}
|
||||
+}
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/corefile.exp
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/corefile.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/corefile.exp 2008-12-09 17:02:55.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/corefile.exp 2009-08-03 11:10:12.000000000 +0200
|
||||
@@ -0,0 +1,243 @@
|
||||
+# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
|
||||
+# Free Software Foundation, Inc.
|
||||
@ -2099,10 +2099,10 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/corefile.exp
|
||||
+gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(\\).*" "up in corefile.exp (reinit)"
|
||||
+
|
||||
+gdb_test "core" "No core file now."
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/Makefile.in
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/Makefile.in
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.pie/Makefile.in 2008-12-09 17:02:55.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.pie/Makefile.in 2009-08-03 11:10:12.000000000 +0200
|
||||
@@ -0,0 +1,19 @@
|
||||
+VPATH = @srcdir@
|
||||
+srcdir = @srcdir@
|
||||
|
@ -42,7 +42,7 @@ FIXME: The testcase does not expects multiple watchpoints hits per one stop.
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.c 2006-07-12 01:54:29.000000000 -0300
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.threads/watchthreads-threaded.c 2006-07-12 01:54:29.000000000 -0300
|
||||
@@ -0,0 +1,66 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -113,7 +113,7 @@ Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.c
|
||||
Index: gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.threads/watchthreads2.exp 2006-07-12 01:54:29.000000000 -0300
|
||||
+++ gdb-6.5/gdb/testsuite/gdb.threads/watchthreads-threaded.exp 2006-07-12 01:54:29.000000000 -0300
|
||||
@@ -0,0 +1,133 @@
|
||||
+# This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
|
@ -1,197 +0,0 @@
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=181390
|
||||
|
||||
2006-09-28 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb/utils.c (paddress): Disable cutting of the printed addresses
|
||||
to the target's address bit size; user wants to see everything.
|
||||
* gdb/value.c (value_as_address1): Original `value_as_address'.
|
||||
(value_as_address): New `value_as_address' wrapper - cut memory address
|
||||
to the target's address bit size, bugreport by John Reiser.
|
||||
|
||||
2008-03-02 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Port to GDB-6.8pre.
|
||||
New testcase `gdb.arch/amd64-i386-address.exp'.
|
||||
|
||||
Index: gdb-6.7.50.20080227/gdb/utils.c
|
||||
===================================================================
|
||||
--- gdb-6.7.50.20080227.orig/gdb/utils.c 2008-03-02 14:28:44.000000000 +0100
|
||||
+++ gdb-6.7.50.20080227/gdb/utils.c 2008-03-02 14:35:09.000000000 +0100
|
||||
@@ -2540,6 +2540,14 @@ paddr_nz (CORE_ADDR addr)
|
||||
const char *
|
||||
paddress (CORE_ADDR addr)
|
||||
{
|
||||
+ /* Do not cut the address as the user should see all the information
|
||||
+ available. Otherwise 64-bit gdb debugging 32-bit inferior would
|
||||
+ report for `x/x 0xffffffffffffce70' error
|
||||
+ `Cannot access memory at 0xffffce70' while the error occured just
|
||||
+ because of the higher order bits 0xffffffff00000000 there.
|
||||
+ This specific error no longer occurs as the address is now cut
|
||||
+ during execution by `value_as_address'. */
|
||||
+#if 0
|
||||
/* Truncate address to the size of a target address, avoiding shifts
|
||||
larger or equal than the width of a CORE_ADDR. The local
|
||||
variable ADDR_BIT stops the compiler reporting a shift overflow
|
||||
@@ -2553,6 +2561,8 @@ paddress (CORE_ADDR addr)
|
||||
|
||||
if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
|
||||
addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
|
||||
+#endif
|
||||
+
|
||||
return hex_string (addr);
|
||||
}
|
||||
|
||||
Index: gdb-6.7.50.20080227/gdb/value.c
|
||||
===================================================================
|
||||
--- gdb-6.7.50.20080227.orig/gdb/value.c 2008-01-18 18:07:40.000000000 +0100
|
||||
+++ gdb-6.7.50.20080227/gdb/value.c 2008-03-02 14:36:38.000000000 +0100
|
||||
@@ -983,11 +983,9 @@ value_as_double (struct value *val)
|
||||
return foo;
|
||||
}
|
||||
|
||||
-/* Extract a value as a C pointer. Does not deallocate the value.
|
||||
- Note that val's type may not actually be a pointer; value_as_long
|
||||
- handles all the cases. */
|
||||
-CORE_ADDR
|
||||
-value_as_address (struct value *val)
|
||||
+/* See `value_as_address' below - core of value to C pointer extraction. */
|
||||
+static CORE_ADDR
|
||||
+value_as_address1 (struct value *val)
|
||||
{
|
||||
/* Assume a CORE_ADDR can fit in a LONGEST (for now). Not sure
|
||||
whether we want this to be true eventually. */
|
||||
@@ -1087,6 +1085,34 @@ value_as_address (struct value *val)
|
||||
return unpack_long (value_type (val), value_contents (val));
|
||||
#endif
|
||||
}
|
||||
+
|
||||
+/* Extract a value as a C pointer. Does not deallocate the value.
|
||||
+ Note that val's type may not actually be a pointer; value_as_long
|
||||
+ handles all the cases. */
|
||||
+CORE_ADDR
|
||||
+value_as_address (struct value *val)
|
||||
+{
|
||||
+ CORE_ADDR addr;
|
||||
+ int addr_bit;
|
||||
+
|
||||
+ addr = value_as_address1 (val);
|
||||
+
|
||||
+ /* Truncate address to the size of a target address, avoiding shifts
|
||||
+ larger or equal than the width of a CORE_ADDR. The local
|
||||
+ variable ADDR_BIT stops the compiler reporting a shift overflow
|
||||
+ when it won't occur. */
|
||||
+ /* NOTE: This assumes that the significant address information is
|
||||
+ kept in the least significant bits of ADDR - the upper bits were
|
||||
+ either zero or sign extended. Should ADDRESS_TO_POINTER() or
|
||||
+ some ADDRESS_TO_PRINTABLE() be used to do the conversion? */
|
||||
+
|
||||
+ addr_bit = gdbarch_addr_bit (current_gdbarch);
|
||||
+
|
||||
+ if (addr_bit < (sizeof (CORE_ADDR) * HOST_CHAR_BIT))
|
||||
+ addr &= ((CORE_ADDR) 1 << addr_bit) - 1;
|
||||
+
|
||||
+ return addr;
|
||||
+}
|
||||
|
||||
/* Unpack raw data (copied from debugee, target byte order) at VALADDR
|
||||
as a long, or as a double, assuming the raw data is described
|
||||
--- /dev/null 2008-03-01 10:30:54.797374318 +0100
|
||||
+++ gdb-6.7.50.20080227/gdb/testsuite/gdb.arch/amd64-i386-address.S 2008-03-02 12:47:06.000000000 +0100
|
||||
@@ -0,0 +1,32 @@
|
||||
+/* 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@gnu.org
|
||||
+
|
||||
+ This file is part of the gdb testsuite.
|
||||
+
|
||||
+ Test UNsigned extension of the 32-bit inferior address on a 64-bit host.
|
||||
+ This file is based on the work by John Reiser.
|
||||
+ This file was created by Jan Kratochvil <jan.kratochvil@redhat.com>.
|
||||
+ https://bugzilla.redhat.com/show_bug.cgi?id=181390 */
|
||||
+
|
||||
+_start: .globl _start
|
||||
+ nop
|
||||
+ int3
|
||||
+ movl %esp,%ebx
|
||||
+ int3 # examining memory from $ebx fails, from $esp succeeds
|
||||
+ nop
|
||||
+ nop
|
||||
--- /dev/null 2008-03-01 10:30:54.797374318 +0100
|
||||
+++ gdb-6.7.50.20080227/gdb/testsuite/gdb.arch/amd64-i386-address.exp 2008-03-02 12:57:11.000000000 +0100
|
||||
@@ -0,0 +1,62 @@
|
||||
+# 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@gnu.org
|
||||
+
|
||||
+# This file is part of the gdb testsuite.
|
||||
+
|
||||
+# Test UNsigned extension of the 32-bit inferior address on a 64-bit host.
|
||||
+# This file is based on the work by John Reiser.
|
||||
+# This file was created by Jan Kratochvil <jan.kratochvil@redhat.com>.
|
||||
+# https://bugzilla.redhat.com/show_bug.cgi?id=181390
|
||||
+
|
||||
+if {![istarget "x86_64-*-*"]} then {
|
||||
+ verbose "Skipping amd64->i386 adress test."
|
||||
+ return
|
||||
+}
|
||||
+
|
||||
+set testfile "amd64-i386-address"
|
||||
+set srcfile ${testfile}.S
|
||||
+set binfile ${objdir}/${subdir}/${testfile}
|
||||
+
|
||||
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug "additional_flags=-m32 -nostdlib"]] != "" } {
|
||||
+ untested amd64-i386-address.exp
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+# Get things started.
|
||||
+
|
||||
+gdb_exit
|
||||
+gdb_start
|
||||
+gdb_reinitialize_dir $srcdir/$subdir
|
||||
+gdb_load ${binfile}
|
||||
+
|
||||
+gdb_run_cmd
|
||||
+
|
||||
+set test "trap stop"
|
||||
+gdb_test_multiple "" $test {
|
||||
+ -re "Program received signal SIGTRAP,.*_start .*$gdb_prompt $" {
|
||||
+ pass $test
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+gdb_test "stepi" ".*_start .*int3.*"
|
||||
+
|
||||
+gdb_test "x/x \$esp" "0x\[0-9a-f\]*:\t0x0*1"
|
||||
+
|
||||
+# Failure case would be:
|
||||
+# 0xff8d7f00: Cannot access memory at address 0xff8d7f00
|
||||
+gdb_test "x/x \$ebx" "0x\[0-9a-f\]*:\t0x0*1"
|
@ -30,75 +30,55 @@ 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
|
||||
<81a8> DW_AT_MIPS_linkage_name: (indirect string, offset: 0x2808): *__GI___errno_location
|
||||
|
||||
Index: gdb-6.8.50.20090228/gdb/gdbtypes.c
|
||||
Index: gdb-6.8.50.20090802/gdb/gdbtypes.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090228.orig/gdb/gdbtypes.c 2009-03-02 01:01:15.000000000 +0100
|
||||
+++ gdb-6.8.50.20090228/gdb/gdbtypes.c 2009-03-02 01:01:53.000000000 +0100
|
||||
@@ -3633,6 +3633,8 @@ gdbtypes_post_init (struct gdbarch *gdba
|
||||
init_type (TYPE_CODE_INT,
|
||||
gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
|
||||
0, "int", OBJFILE_INTERNAL);
|
||||
+ builtin_type->builtin_int_ptr =
|
||||
+ make_pointer_type (builtin_type->builtin_int, NULL);
|
||||
builtin_type->builtin_unsigned_int =
|
||||
init_type (TYPE_CODE_INT,
|
||||
gdbarch_int_bit (gdbarch) / TARGET_CHAR_BIT,
|
||||
@@ -3742,6 +3744,12 @@ gdbtypes_post_init (struct gdbarch *gdba
|
||||
"<text variable, no debug info>", OBJFILE_INTERNAL);
|
||||
TYPE_TARGET_TYPE (builtin_type->nodebug_text_symbol) =
|
||||
builtin_type->builtin_int;
|
||||
+ builtin_type->nodebug_text_symbol_errno_location =
|
||||
+ init_type (TYPE_CODE_FUNC, 1, 0,
|
||||
+ "<text variable for __errno_location, no debug info>",
|
||||
+ OBJFILE_INTERNAL);
|
||||
+ TYPE_TARGET_TYPE (builtin_type->nodebug_text_symbol_errno_location) =
|
||||
+ builtin_type->builtin_int_ptr;
|
||||
builtin_type->nodebug_data_symbol =
|
||||
init_type (TYPE_CODE_INT,
|
||||
gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT, 0,
|
||||
Index: gdb-6.8.50.20090228/gdb/gdbtypes.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090228.orig/gdb/gdbtypes.h 2009-03-02 01:01:15.000000000 +0100
|
||||
+++ gdb-6.8.50.20090228/gdb/gdbtypes.h 2009-03-02 01:01:53.000000000 +0100
|
||||
@@ -1053,6 +1053,7 @@ struct builtin_type
|
||||
--- gdb-6.8.50.20090802.orig/gdb/gdbtypes.c 2009-08-03 09:50:57.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/gdbtypes.c 2009-08-03 15:42:51.000000000 +0200
|
||||
@@ -3769,6 +3769,9 @@ gdbtypes_post_init (struct gdbarch *gdba
|
||||
= arch_type (gdbarch, TYPE_CODE_INTERNAL_FUNCTION, 0,
|
||||
"<internal function>");
|
||||
|
||||
/* Types used for symbols with no debug information. */
|
||||
struct type *nodebug_text_symbol;
|
||||
+ struct type *nodebug_text_symbol_errno_location;
|
||||
struct type *nodebug_data_symbol;
|
||||
struct type *nodebug_unknown_symbol;
|
||||
struct type *nodebug_tls_symbol;
|
||||
@@ -1065,6 +1066,7 @@ struct builtin_type
|
||||
struct type *builtin_char;
|
||||
struct type *builtin_short;
|
||||
struct type *builtin_int;
|
||||
+ struct type *builtin_int_ptr;
|
||||
struct type *builtin_long;
|
||||
struct type *builtin_signed_char;
|
||||
struct type *builtin_unsigned_char;
|
||||
Index: gdb-6.8.50.20090228/gdb/parse.c
|
||||
+ builtin_type->nodebug_text_symbol_errno_location
|
||||
+ = lookup_function_type (lookup_pointer_type (builtin_type->builtin_int));
|
||||
+
|
||||
return builtin_type;
|
||||
}
|
||||
|
||||
Index: gdb-6.8.50.20090802/gdb/gdbtypes.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090228.orig/gdb/parse.c 2009-03-02 01:01:15.000000000 +0100
|
||||
+++ gdb-6.8.50.20090228/gdb/parse.c 2009-03-02 01:01:53.000000000 +0100
|
||||
@@ -508,7 +508,12 @@ write_exp_msymbol (struct minimal_symbol
|
||||
--- gdb-6.8.50.20090802.orig/gdb/gdbtypes.h 2009-08-03 09:50:57.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/gdbtypes.h 2009-08-03 15:40:02.000000000 +0200
|
||||
@@ -1128,6 +1128,8 @@ struct builtin_type
|
||||
|
||||
/* This type is used to represent a GDB internal function. */
|
||||
struct type *internal_fn;
|
||||
+
|
||||
+ struct type *nodebug_text_symbol_errno_location;
|
||||
};
|
||||
|
||||
/* Return the type table for the specified architecture. */
|
||||
Index: gdb-6.8.50.20090802/gdb/parse.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090802.orig/gdb/parse.c 2009-08-03 09:50:57.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/parse.c 2009-08-03 15:41:54.000000000 +0200
|
||||
@@ -510,7 +510,11 @@ write_exp_msymbol (struct minimal_symbol
|
||||
case mst_text:
|
||||
case mst_file_text:
|
||||
case mst_solib_trampoline:
|
||||
- write_exp_elt_type (builtin_type (gdbarch)->nodebug_text_symbol);
|
||||
- write_exp_elt_type (objfile_type (objfile)->nodebug_text_symbol);
|
||||
+ if (builtin_type (gdbarch)->nodebug_text_symbol_errno_location != NULL
|
||||
+ && strcmp (SYMBOL_LINKAGE_NAME (msymbol), "__errno_location") == 0)
|
||||
+ write_exp_elt_type (builtin_type (gdbarch)
|
||||
+ ->nodebug_text_symbol_errno_location);
|
||||
+ write_exp_elt_type (builtin_type (gdbarch)->nodebug_text_symbol_errno_location);
|
||||
+ else
|
||||
+ write_exp_elt_type (builtin_type (gdbarch)->nodebug_text_symbol);
|
||||
+ write_exp_elt_type (objfile_type (objfile)->nodebug_text_symbol);
|
||||
break;
|
||||
|
||||
case mst_data:
|
||||
Index: gdb-6.8.50.20090228/gdb/target.c
|
||||
Index: gdb-6.8.50.20090802/gdb/target.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090228.orig/gdb/target.c 2009-03-02 01:01:44.000000000 +0100
|
||||
+++ gdb-6.8.50.20090228/gdb/target.c 2009-03-02 01:01:53.000000000 +0100
|
||||
@@ -827,6 +827,25 @@ pop_all_targets (int quitting)
|
||||
--- gdb-6.8.50.20090802.orig/gdb/target.c 2009-08-03 12:38:47.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/target.c 2009-08-03 12:49:33.000000000 +0200
|
||||
@@ -933,6 +933,25 @@ pop_all_targets (int quitting)
|
||||
pop_all_targets_above (dummy_stratum, quitting);
|
||||
}
|
||||
|
||||
@ -124,7 +104,7 @@ Index: gdb-6.8.50.20090228/gdb/target.c
|
||||
/* Using the objfile specified in OBJFILE, find the address for the
|
||||
current thread's thread-local storage with offset OFFSET. */
|
||||
CORE_ADDR
|
||||
@@ -917,7 +936,28 @@ target_translate_tls_address (struct obj
|
||||
@@ -1023,7 +1042,28 @@ target_translate_tls_address (struct obj
|
||||
/* 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. */
|
||||
else
|
||||
@ -154,10 +134,10 @@ Index: gdb-6.8.50.20090228/gdb/target.c
|
||||
|
||||
return addr;
|
||||
}
|
||||
Index: gdb-6.8.50.20090228/gdb/testsuite/gdb.dwarf2/dw2-errno.c
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.dwarf2/dw2-errno.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20090228/gdb/testsuite/gdb.dwarf2/dw2-errno.c 2009-03-02 01:01:53.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.dwarf2/dw2-errno.c 2009-08-03 12:49:33.000000000 +0200
|
||||
@@ -0,0 +1,28 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -187,10 +167,10 @@ Index: gdb-6.8.50.20090228/gdb/testsuite/gdb.dwarf2/dw2-errno.c
|
||||
+
|
||||
+ return 0; /* breakpoint */
|
||||
+}
|
||||
Index: gdb-6.8.50.20090228/gdb/testsuite/gdb.dwarf2/dw2-errno.exp
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.dwarf2/dw2-errno.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20090228/gdb/testsuite/gdb.dwarf2/dw2-errno.exp 2009-03-02 01:01:53.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.dwarf2/dw2-errno.exp 2009-08-03 12:49:33.000000000 +0200
|
||||
@@ -0,0 +1,67 @@
|
||||
+# Copyright 2007 Free Software Foundation, Inc.
|
||||
+
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: gdb-6.5/gdb/symfile.c
|
||||
Index: gdb-6.8.50.20090802/gdb/symfile.c
|
||||
===================================================================
|
||||
--- gdb-6.5.orig/gdb/symfile.c 2006-08-24 02:56:02.000000000 -0300
|
||||
+++ gdb-6.5/gdb/symfile.c 2006-08-24 02:56:36.000000000 -0300
|
||||
@@ -3739,6 +3739,12 @@ symfile_dummy_outputs (bfd *abfd, asecti
|
||||
--- gdb-6.8.50.20090802.orig/gdb/symfile.c 2009-08-03 12:29:58.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/symfile.c 2009-08-03 12:40:58.000000000 +0200
|
||||
@@ -4012,6 +4012,12 @@ symfile_dummy_outputs (bfd *abfd, asecti
|
||||
bfd_byte *
|
||||
symfile_relocate_debug_section (bfd *abfd, asection *sectp, bfd_byte *buf)
|
||||
{
|
||||
@ -12,6 +12,6 @@ Index: gdb-6.5/gdb/symfile.c
|
||||
+ if ((abfd->flags & EXEC_P) != 0)
|
||||
+ return NULL;
|
||||
+
|
||||
/* We're only interested in debugging sections with relocation
|
||||
/* We're only interested in sections with relocation
|
||||
information. */
|
||||
if ((sectp->flags & SEC_RELOC) == 0)
|
||||
|
@ -23,11 +23,11 @@ instead.
|
||||
|
||||
Port to GDB-6.7.
|
||||
|
||||
Index: gdb-6.8.50.20081128/gdb/amd64-linux-tdep.c
|
||||
Index: gdb-6.8.50.20090802/gdb/amd64-linux-tdep.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081128.orig/gdb/amd64-linux-tdep.c 2008-12-08 10:56:17.000000000 +0100
|
||||
+++ 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
|
||||
--- gdb-6.8.50.20090802.orig/gdb/amd64-linux-tdep.c 2009-07-02 19:25:52.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/amd64-linux-tdep.c 2009-08-03 15:50:08.000000000 +0200
|
||||
@@ -238,6 +238,80 @@ amd64_linux_register_reggroup_p (struct
|
||||
|
||||
/* Set the program counter for process PTID to PC. */
|
||||
|
||||
@ -108,7 +108,7 @@ Index: gdb-6.8.50.20081128/gdb/amd64-linux-tdep.c
|
||||
static void
|
||||
amd64_linux_write_pc (struct regcache *regcache, CORE_ADDR pc)
|
||||
{
|
||||
@@ -272,6 +346,8 @@ amd64_linux_init_abi (struct gdbarch_inf
|
||||
@@ -276,6 +350,8 @@ amd64_linux_init_abi (struct gdbarch_inf
|
||||
tdep->sc_reg_offset = amd64_linux_sc_reg_offset;
|
||||
tdep->sc_num_regs = ARRAY_SIZE (amd64_linux_sc_reg_offset);
|
||||
|
||||
@ -117,11 +117,11 @@ Index: gdb-6.8.50.20081128/gdb/amd64-linux-tdep.c
|
||||
/* GNU/Linux uses SVR4-style shared libraries. */
|
||||
set_solib_svr4_fetch_link_map_offsets
|
||||
(gdbarch, svr4_lp64_fetch_link_map_offsets);
|
||||
Index: gdb-6.8.50.20081128/gdb/amd64-tdep.c
|
||||
Index: gdb-6.8.50.20090802/gdb/amd64-tdep.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081128.orig/gdb/amd64-tdep.c 2008-12-08 10:56:17.000000000 +0100
|
||||
+++ gdb-6.8.50.20081128/gdb/amd64-tdep.c 2008-12-08 21:05:12.000000000 +0100
|
||||
@@ -1044,11 +1044,16 @@ amd64_frame_this_id (struct frame_info *
|
||||
--- gdb-6.8.50.20090802.orig/gdb/amd64-tdep.c 2009-07-02 19:25:52.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/amd64-tdep.c 2009-08-03 15:50:08.000000000 +0200
|
||||
@@ -1736,11 +1736,16 @@ amd64_frame_this_id (struct frame_info *
|
||||
{
|
||||
struct amd64_frame_cache *cache =
|
||||
amd64_frame_cache (this_frame, this_cache);
|
||||
@ -138,11 +138,11 @@ Index: gdb-6.8.50.20081128/gdb/amd64-tdep.c
|
||||
(*this_id) = frame_id_build (cache->base + 16, cache->pc);
|
||||
}
|
||||
|
||||
Index: gdb-6.8.50.20081128/gdb/i386-tdep.c
|
||||
Index: gdb-6.8.50.20090802/gdb/i386-tdep.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081128.orig/gdb/i386-tdep.c 2008-12-08 10:56:17.000000000 +0100
|
||||
+++ gdb-6.8.50.20081128/gdb/i386-tdep.c 2008-12-08 11:00:43.000000000 +0100
|
||||
@@ -2698,6 +2698,9 @@ i386_gdbarch_init (struct gdbarch_info i
|
||||
--- gdb-6.8.50.20090802.orig/gdb/i386-tdep.c 2009-07-12 19:46:21.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/i386-tdep.c 2009-08-03 15:50:08.000000000 +0200
|
||||
@@ -5307,6 +5307,9 @@ i386_gdbarch_init (struct gdbarch_info i
|
||||
tdep->sc_pc_offset = -1;
|
||||
tdep->sc_sp_offset = -1;
|
||||
|
||||
@ -152,24 +152,24 @@ Index: gdb-6.8.50.20081128/gdb/i386-tdep.c
|
||||
/* The format used for `long double' on almost all i386 targets is
|
||||
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
|
||||
Index: gdb-6.8.50.20081128/gdb/i386-tdep.h
|
||||
Index: gdb-6.8.50.20090802/gdb/i386-tdep.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081128.orig/gdb/i386-tdep.h 2008-12-08 10:56:17.000000000 +0100
|
||||
+++ gdb-6.8.50.20081128/gdb/i386-tdep.h 2008-12-08 21:07:47.000000000 +0100
|
||||
@@ -106,6 +106,9 @@ struct gdbarch_tdep
|
||||
/* ISA-specific data types. */
|
||||
struct type *i386_mmx_type;
|
||||
struct type *i386_sse_type;
|
||||
--- gdb-6.8.50.20090802.orig/gdb/i386-tdep.h 2009-07-02 19:25:54.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/i386-tdep.h 2009-08-03 15:50:29.000000000 +0200
|
||||
@@ -115,6 +115,9 @@ struct gdbarch_tdep
|
||||
int (*i386_intx80_record) (struct regcache *regcache);
|
||||
/* Parse sysenter args. */
|
||||
int (*i386_sysenter_record) (struct regcache *regcache);
|
||||
+
|
||||
+ /* Detect OS dependent outermost frames; such as `clone'. */
|
||||
+ int (*outermost_frame_p) (struct frame_info *this_frame);
|
||||
};
|
||||
|
||||
/* Floating-point registers. */
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/bt-clone-stop.c
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.threads/bt-clone-stop.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/bt-clone-stop.c 2008-12-08 11:00:43.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.threads/bt-clone-stop.c 2009-08-03 15:50:08.000000000 +0200
|
||||
@@ -0,0 +1,39 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -210,10 +210,10 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/bt-clone-stop.c
|
||||
+ for (;;)
|
||||
+ pause();
|
||||
+}
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/bt-clone-stop.exp
|
||||
Index: gdb-6.8.50.20090802/gdb/testsuite/gdb.threads/bt-clone-stop.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.threads/bt-clone-stop.exp 2008-12-08 11:00:43.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/testsuite/gdb.threads/bt-clone-stop.exp 2009-08-03 15:50:08.000000000 +0200
|
||||
@@ -0,0 +1,61 @@
|
||||
+# Copyright 2006 Free Software Foundation, Inc.
|
||||
+
|
||||
|
@ -1,11 +1,11 @@
|
||||
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=218379
|
||||
|
||||
|
||||
Index: gdb-6.8/gdb/symtab.c
|
||||
Index: gdb-6.8.50.20090803/gdb/symtab.c
|
||||
===================================================================
|
||||
--- gdb-6.8.orig/gdb/symtab.c 2008-02-05 23:17:40.000000000 +0100
|
||||
+++ gdb-6.8/gdb/symtab.c 2008-07-14 10:27:32.000000000 +0200
|
||||
@@ -2132,6 +2132,13 @@ find_pc_sect_line (CORE_ADDR pc, struct
|
||||
--- gdb-6.8.50.20090803.orig/gdb/symtab.c 2009-08-03 16:09:36.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/symtab.c 2009-08-03 16:13:13.000000000 +0200
|
||||
@@ -2261,6 +2261,13 @@ find_pc_sect_line (CORE_ADDR pc, struct
|
||||
/* See above comment about why warning is commented out */
|
||||
/* warning ("In stub for %s; unable to find real function/line info", SYMBOL_LINKAGE_NAME (msymbol)) */ ;
|
||||
/* fall through */
|
||||
@ -14,7 +14,7 @@ Index: gdb-6.8/gdb/symtab.c
|
||||
+ Avoid `find_pc_sect_line'<->`find_pc_line' infinite loop.
|
||||
+ Red Hat Bug 218379. */
|
||||
+ else if (SYMBOL_VALUE (mfunsym) == pc)
|
||||
+ warning ("In stub for %s (0x%s); interlocked, please submit the binary to http://bugzilla.redhat.com", SYMBOL_LINKAGE_NAME (msymbol), paddr (pc));
|
||||
+ warning ("In stub for %s (0x%s); interlocked, please submit the binary to http://bugzilla.redhat.com", SYMBOL_LINKAGE_NAME (msymbol), paddress (target_gdbarch, pc));
|
||||
+ /* fall through */
|
||||
else
|
||||
return find_pc_line (SYMBOL_VALUE_ADDRESS (mfunsym), 0);
|
||||
|
@ -23,21 +23,21 @@
|
||||
|
||||
Port to GDB-6.8pre.
|
||||
|
||||
Index: gdb-6.8.50.20081214/gdb/amd64-linux-nat.c
|
||||
Index: gdb-6.8.50.20090802/gdb/amd64-linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081214.orig/gdb/amd64-linux-nat.c 2008-12-14 21:17:01.000000000 +0100
|
||||
+++ gdb-6.8.50.20081214/gdb/amd64-linux-nat.c 2008-12-14 21:24:19.000000000 +0100
|
||||
@@ -50,6 +50,9 @@
|
||||
#include "amd64-tdep.h"
|
||||
--- gdb-6.8.50.20090802.orig/gdb/amd64-linux-nat.c 2009-06-17 20:44:23.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/amd64-linux-nat.c 2009-08-03 15:49:33.000000000 +0200
|
||||
@@ -51,6 +51,9 @@
|
||||
#include "i386-linux-tdep.h"
|
||||
#include "amd64-nat.h"
|
||||
#include "i386-nat.h"
|
||||
+#include "i387-tdep.h"
|
||||
+#include "elf-bfd.h"
|
||||
+#include "gdb_procfs32.h"
|
||||
|
||||
/* Mapping between the general-purpose registers in GNU/Linux x86-64
|
||||
`struct user' format and GDB's register cache layout. */
|
||||
@@ -84,6 +87,35 @@ static int amd64_linux_gregset64_reg_off
|
||||
@@ -85,6 +88,35 @@ static int amd64_linux_gregset64_reg_off
|
||||
GNU/Linux i386 registers are all 32-bit, but since we're
|
||||
little-endian we get away with that. */
|
||||
|
||||
@ -73,7 +73,7 @@ Index: gdb-6.8.50.20081214/gdb/amd64-linux-nat.c
|
||||
/* From <sys/reg.h> on GNU/Linux i386. */
|
||||
static int amd64_linux_gregset32_reg_offset[] =
|
||||
{
|
||||
@@ -102,6 +134,96 @@ static int amd64_linux_gregset32_reg_off
|
||||
@@ -103,6 +135,96 @@ static int amd64_linux_gregset32_reg_off
|
||||
};
|
||||
|
||||
|
||||
@ -84,7 +84,7 @@ Index: gdb-6.8.50.20081214/gdb/amd64-linux-nat.c
|
||||
+amd64_linux_elfcore_write_prpsinfo (bfd *abfd, char *buf, int *bufsiz,
|
||||
+ const char *fname, const char *psargs)
|
||||
+{
|
||||
+ if (gdbarch_ptr_bit(current_gdbarch) == 32)
|
||||
+ if (gdbarch_ptr_bit (target_gdbarch) == 32)
|
||||
+ {
|
||||
+ int note_type;
|
||||
+ char *note_name = "CORE";
|
||||
@ -118,7 +118,7 @@ Index: gdb-6.8.50.20081214/gdb/amd64-linux-nat.c
|
||||
+amd64_linux_elfcore_write_prstatus (bfd *abfd, char *buf, int *bufsiz,
|
||||
+ long pid, int cursig, const void *gregs)
|
||||
+{
|
||||
+ if (gdbarch_ptr_bit(current_gdbarch) == 32)
|
||||
+ if (gdbarch_ptr_bit (target_gdbarch) == 32)
|
||||
+ {
|
||||
+ char *note_name = "CORE";
|
||||
+ struct elf_prstatus32 prstat;
|
||||
@ -151,7 +151,7 @@ Index: gdb-6.8.50.20081214/gdb/amd64-linux-nat.c
|
||||
+ int *bufsiz, const void *fpregs, int size,
|
||||
+ struct regcache *regcache)
|
||||
+{
|
||||
+ if (gdbarch_ptr_bit(current_gdbarch) == 32)
|
||||
+ if (gdbarch_ptr_bit (target_gdbarch) == 32)
|
||||
+ {
|
||||
+ char *note_name = "CORE";
|
||||
+ elf_fpregset32_t fpregs32;
|
||||
@ -170,7 +170,7 @@ Index: gdb-6.8.50.20081214/gdb/amd64-linux-nat.c
|
||||
/* Transfering the general-purpose registers between GDB, inferiors
|
||||
and core files. */
|
||||
|
||||
@@ -431,6 +553,11 @@ _initialize_amd64_linux_nat (void)
|
||||
@@ -682,6 +804,11 @@ _initialize_amd64_linux_nat (void)
|
||||
t->to_fetch_registers = amd64_linux_fetch_inferior_registers;
|
||||
t->to_store_registers = amd64_linux_store_inferior_registers;
|
||||
|
||||
@ -182,11 +182,11 @@ Index: gdb-6.8.50.20081214/gdb/amd64-linux-nat.c
|
||||
/* Register the target. */
|
||||
linux_nat_add_target (t);
|
||||
linux_nat_set_new_thread (t, amd64_linux_new_thread);
|
||||
Index: gdb-6.8.50.20081214/gdb/config.in
|
||||
Index: gdb-6.8.50.20090802/gdb/config.in
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081214.orig/gdb/config.in 2008-12-14 21:17:01.000000000 +0100
|
||||
+++ gdb-6.8.50.20081214/gdb/config.in 2008-12-14 21:34:50.000000000 +0100
|
||||
@@ -136,6 +136,9 @@
|
||||
--- gdb-6.8.50.20090802.orig/gdb/config.in 2009-08-03 09:50:57.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/config.in 2009-08-03 15:48:31.000000000 +0200
|
||||
@@ -146,6 +146,9 @@
|
||||
/* Define to 1 if you have the <elf_hp.h> header file. */
|
||||
#undef HAVE_ELF_HP_H
|
||||
|
||||
@ -196,7 +196,7 @@ Index: gdb-6.8.50.20081214/gdb/config.in
|
||||
/* Define to 1 if your system has the etext variable. */
|
||||
#undef HAVE_ETEXT
|
||||
|
||||
@@ -465,6 +468,9 @@
|
||||
@@ -487,6 +490,9 @@
|
||||
/* Define to 1 if you have the <sys/poll.h> header file. */
|
||||
#undef HAVE_SYS_POLL_H
|
||||
|
||||
@ -206,7 +206,7 @@ Index: gdb-6.8.50.20081214/gdb/config.in
|
||||
/* Define to 1 if you have the <sys/procfs.h> header file. */
|
||||
#undef HAVE_SYS_PROCFS_H
|
||||
|
||||
@@ -492,6 +498,9 @@
|
||||
@@ -514,6 +520,9 @@
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
@ -216,11 +216,11 @@ Index: gdb-6.8.50.20081214/gdb/config.in
|
||||
/* Define to 1 if you have the <sys/user.h> header file. */
|
||||
#undef HAVE_SYS_USER_H
|
||||
|
||||
Index: gdb-6.8.50.20081214/gdb/configure
|
||||
Index: gdb-6.8.50.20090802/gdb/configure
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081214.orig/gdb/configure 2008-12-14 21:17:01.000000000 +0100
|
||||
+++ gdb-6.8.50.20081214/gdb/configure 2008-12-14 21:33:30.000000000 +0100
|
||||
@@ -12026,6 +12026,268 @@ _ACEOF
|
||||
--- gdb-6.8.50.20090802.orig/gdb/configure 2009-08-03 09:50:57.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/configure 2009-08-03 15:48:31.000000000 +0200
|
||||
@@ -12545,6 +12545,268 @@ _ACEOF
|
||||
|
||||
fi
|
||||
|
||||
@ -489,11 +489,11 @@ Index: gdb-6.8.50.20081214/gdb/configure
|
||||
# elf_hp.h is for HP/UX 64-bit shared library support.
|
||||
# FIXME: kettenis/20030102: In most cases we include these (ctype.h, time.h)
|
||||
# unconditionally, so what's the point in checking these?
|
||||
Index: gdb-6.8.50.20081214/gdb/configure.ac
|
||||
Index: gdb-6.8.50.20090802/gdb/configure.ac
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081214.orig/gdb/configure.ac 2008-12-14 21:17:01.000000000 +0100
|
||||
+++ gdb-6.8.50.20081214/gdb/configure.ac 2008-12-14 21:32:35.000000000 +0100
|
||||
@@ -686,6 +686,11 @@ AC_SUBST(PYTHON_CFLAGS)
|
||||
--- gdb-6.8.50.20090802.orig/gdb/configure.ac 2009-08-03 09:50:57.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/configure.ac 2009-08-03 15:48:31.000000000 +0200
|
||||
@@ -744,6 +744,11 @@ AC_SUBST(PYTHON_CFLAGS)
|
||||
AC_HEADER_DIRENT
|
||||
AC_HEADER_STAT
|
||||
AC_HEADER_STDC
|
||||
@ -505,11 +505,11 @@ Index: gdb-6.8.50.20081214/gdb/configure.ac
|
||||
# elf_hp.h is for HP/UX 64-bit shared library support.
|
||||
# FIXME: kettenis/20030102: In most cases we include these (ctype.h, time.h)
|
||||
# unconditionally, so what's the point in checking these?
|
||||
Index: gdb-6.8.50.20081214/gdb/gcore.c
|
||||
Index: gdb-6.8.50.20090802/gdb/gcore.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081214.orig/gdb/gcore.c 2008-12-14 21:17:01.000000000 +0100
|
||||
+++ gdb-6.8.50.20081214/gdb/gcore.c 2008-12-14 21:17:10.000000000 +0100
|
||||
@@ -320,6 +320,11 @@ gcore_create_callback (CORE_ADDR vaddr,
|
||||
--- gdb-6.8.50.20090802.orig/gdb/gcore.c 2009-08-03 12:28:56.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/gcore.c 2009-08-03 15:48:31.000000000 +0200
|
||||
@@ -324,6 +324,11 @@ gcore_create_callback (CORE_ADDR vaddr,
|
||||
asection *osec;
|
||||
flagword flags = SEC_ALLOC | SEC_HAS_CONTENTS | SEC_LOAD;
|
||||
|
||||
@ -521,10 +521,10 @@ Index: gdb-6.8.50.20081214/gdb/gcore.c
|
||||
/* If the memory segment has no permissions set, ignore it, otherwise
|
||||
when we later try to access it for read/write, we'll get an error
|
||||
or jam the kernel. */
|
||||
Index: gdb-6.8.50.20081214/gdb/gdb_procfs32.h
|
||||
Index: gdb-6.8.50.20090802/gdb/gdb_procfs32.h
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20081214/gdb/gdb_procfs32.h 2008-12-14 21:32:56.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/gdb_procfs32.h 2009-08-03 15:48:31.000000000 +0200
|
||||
@@ -0,0 +1,128 @@
|
||||
+#ifdef HAVE_SYS_PROCFS32_H
|
||||
+#include <sys/procfs32.h>
|
||||
@ -654,10 +654,10 @@ Index: gdb-6.8.50.20081214/gdb/gdb_procfs32.h
|
||||
+#endif /* _SYS_PROCFS32_H */
|
||||
+
|
||||
+#endif /* HAVE_SYS_PROCFS32_H */
|
||||
Index: gdb-6.8.50.20081214/gdb/gdb_user32.h
|
||||
Index: gdb-6.8.50.20090802/gdb/gdb_user32.h
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20081214/gdb/gdb_user32.h 2008-12-14 21:17:10.000000000 +0100
|
||||
+++ gdb-6.8.50.20090802/gdb/gdb_user32.h 2009-08-03 15:48:31.000000000 +0200
|
||||
@@ -0,0 +1,108 @@
|
||||
+#ifdef HAVE_SYS_USER32_H
|
||||
+#include <sys/user32.h>
|
||||
@ -767,11 +767,11 @@ Index: gdb-6.8.50.20081214/gdb/gdb_user32.h
|
||||
+#endif /* _SYS_USER32_H */
|
||||
+
|
||||
+#endif /* HAVE_SYS_USER32_H */
|
||||
Index: gdb-6.8.50.20081214/gdb/linux-nat.c
|
||||
Index: gdb-6.8.50.20090802/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081214.orig/gdb/linux-nat.c 2008-12-14 21:17:01.000000000 +0100
|
||||
+++ gdb-6.8.50.20081214/gdb/linux-nat.c 2008-12-14 21:24:20.000000000 +0100
|
||||
@@ -213,6 +213,21 @@ static LONGEST (*super_xfer_partial) (st
|
||||
--- gdb-6.8.50.20090802.orig/gdb/linux-nat.c 2009-08-03 12:31:26.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/linux-nat.c 2009-08-03 15:48:31.000000000 +0200
|
||||
@@ -219,6 +219,21 @@ static LONGEST (*super_xfer_partial) (st
|
||||
const gdb_byte *,
|
||||
ULONGEST, LONGEST);
|
||||
|
||||
@ -793,7 +793,7 @@ Index: gdb-6.8.50.20081214/gdb/linux-nat.c
|
||||
static int debug_linux_nat;
|
||||
static void
|
||||
show_debug_linux_nat (struct ui_file *file, int from_tty,
|
||||
@@ -3473,7 +3488,7 @@ linux_nat_do_thread_registers (bfd *obfd
|
||||
@@ -3586,7 +3601,7 @@ linux_nat_do_thread_registers (bfd *obfd
|
||||
else
|
||||
fill_gregset (regcache, &gregs, -1);
|
||||
|
||||
@ -802,7 +802,7 @@ Index: gdb-6.8.50.20081214/gdb/linux-nat.c
|
||||
note_data,
|
||||
note_size,
|
||||
lwp,
|
||||
@@ -3523,10 +3538,10 @@ linux_nat_do_thread_registers (bfd *obfd
|
||||
@@ -3636,10 +3651,10 @@ linux_nat_do_thread_registers (bfd *obfd
|
||||
else
|
||||
fill_fpregset (regcache, &fpregs, -1);
|
||||
|
||||
@ -815,7 +815,7 @@ Index: gdb-6.8.50.20081214/gdb/linux-nat.c
|
||||
}
|
||||
|
||||
return note_data;
|
||||
@@ -3595,9 +3610,9 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||
@@ -3822,9 +3837,9 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||
psargs_end - string_end);
|
||||
}
|
||||
}
|
||||
@ -828,11 +828,11 @@ Index: gdb-6.8.50.20081214/gdb/linux-nat.c
|
||||
}
|
||||
|
||||
/* Dump information for threads. */
|
||||
Index: gdb-6.8.50.20081214/gdb/linux-nat.h
|
||||
Index: gdb-6.8.50.20090802/gdb/linux-nat.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081214.orig/gdb/linux-nat.h 2008-12-14 21:17:01.000000000 +0100
|
||||
+++ gdb-6.8.50.20081214/gdb/linux-nat.h 2008-12-14 21:24:11.000000000 +0100
|
||||
@@ -134,3 +134,12 @@ void linux_nat_switch_fork (ptid_t new_p
|
||||
--- gdb-6.8.50.20090802.orig/gdb/linux-nat.h 2009-08-03 10:52:00.000000000 +0200
|
||||
+++ gdb-6.8.50.20090802/gdb/linux-nat.h 2009-08-03 15:48:31.000000000 +0200
|
||||
@@ -144,3 +144,12 @@ void linux_nat_switch_fork (ptid_t new_p
|
||||
|
||||
/* Return the saved siginfo associated with PTID. */
|
||||
struct siginfo *linux_nat_get_siginfo (ptid_t ptid);
|
||||
|
@ -1,7 +1,7 @@
|
||||
Index: gdb-6.8.50.20090302/gdb/event-top.c
|
||||
Index: gdb-6.8.50.20090803/gdb/event-top.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/event-top.c 2009-03-07 17:13:33.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/event-top.c 2009-03-07 17:25:06.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/event-top.c 2009-08-03 16:17:10.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/event-top.c 2009-08-03 16:17:59.000000000 +0200
|
||||
@@ -33,6 +33,7 @@
|
||||
#include "cli/cli-script.h" /* for reset_command_nest_depth */
|
||||
#include "main.h"
|
||||
@ -28,11 +28,11 @@ Index: gdb-6.8.50.20090302/gdb/event-top.c
|
||||
/* Each interpreter has its own rules on displaying the command
|
||||
prompt. */
|
||||
if (!current_interp_display_prompt_p ())
|
||||
Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
Index: gdb-6.8.50.20090803/gdb/symfile.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/symfile.c 2009-03-07 17:22:21.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/symfile.c 2009-03-07 17:26:47.000000000 +0100
|
||||
@@ -55,6 +55,7 @@
|
||||
--- gdb-6.8.50.20090803.orig/gdb/symfile.c 2009-08-03 16:17:10.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/symfile.c 2009-08-03 16:17:59.000000000 +0200
|
||||
@@ -56,6 +56,7 @@
|
||||
#include "solib.h"
|
||||
#include "remote.h"
|
||||
#include "libbfd.h"
|
||||
@ -40,7 +40,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
@@ -63,6 +64,7 @@
|
||||
@@ -64,6 +65,7 @@
|
||||
#include <ctype.h>
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
@ -48,7 +48,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
|
||||
|
||||
int (*deprecated_ui_load_progress_hook) (const char *section, unsigned long num);
|
||||
@@ -1684,8 +1686,352 @@ build_id_to_filename (struct build_id *b
|
||||
@@ -1692,8 +1694,352 @@ build_id_to_filename (struct build_id *b
|
||||
return retval;
|
||||
}
|
||||
|
||||
@ -402,7 +402,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
avoidance. */
|
||||
|
||||
struct missing_filepair
|
||||
@@ -1739,11 +2085,17 @@ missing_filepair_change (void)
|
||||
@@ -1747,11 +2093,17 @@ missing_filepair_change (void)
|
||||
/* All their memory came just from missing_filepair_OBSTACK. */
|
||||
missing_filepair_hash = NULL;
|
||||
}
|
||||
@ -420,7 +420,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
missing_filepair_change ();
|
||||
}
|
||||
|
||||
@@ -1802,14 +2154,33 @@ debug_print_missing (const char *binary,
|
||||
@@ -1818,14 +2170,33 @@ debug_print_missing (const char *binary,
|
||||
|
||||
*slot = missing_filepair;
|
||||
|
||||
@ -461,11 +461,11 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
}
|
||||
|
||||
static char *
|
||||
Index: gdb-6.8.50.20090302/gdb/symfile.h
|
||||
Index: gdb-6.8.50.20090803/gdb/symfile.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/symfile.h 2009-03-07 17:13:33.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/symfile.h 2009-03-07 17:25:06.000000000 +0100
|
||||
@@ -378,6 +378,7 @@ extern struct build_id *build_id_addr_ge
|
||||
--- gdb-6.8.50.20090803.orig/gdb/symfile.h 2009-08-03 16:17:10.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/symfile.h 2009-08-03 16:17:59.000000000 +0200
|
||||
@@ -394,6 +394,7 @@ extern struct build_id *build_id_addr_ge
|
||||
extern char *build_id_to_filename (struct build_id *build_id,
|
||||
char **link_return, int add_debug_suffix);
|
||||
extern void debug_print_missing (const char *binary, const char *debug);
|
||||
@ -473,11 +473,11 @@ Index: gdb-6.8.50.20090302/gdb/symfile.h
|
||||
|
||||
/* From dwarf2read.c */
|
||||
|
||||
Index: gdb-6.8.50.20090302/gdb/testsuite/lib/gdb.exp
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/lib/gdb.exp
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/testsuite/lib/gdb.exp 2009-03-07 17:13:33.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/testsuite/lib/gdb.exp 2009-03-07 17:25:06.000000000 +0100
|
||||
@@ -1230,7 +1230,7 @@ proc default_gdb_start { } {
|
||||
--- gdb-6.8.50.20090803.orig/gdb/testsuite/lib/gdb.exp 2009-08-03 16:17:10.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/lib/gdb.exp 2009-08-03 16:17:59.000000000 +0200
|
||||
@@ -1248,7 +1248,7 @@ proc default_gdb_start { } {
|
||||
warning "Couldn't set the width to 0."
|
||||
}
|
||||
}
|
||||
@ -486,8 +486,10 @@ Index: gdb-6.8.50.20090302/gdb/testsuite/lib/gdb.exp
|
||||
send_gdb "set build-id-verbose 0\n"
|
||||
gdb_expect 10 {
|
||||
-re "$gdb_prompt $" {
|
||||
--- ./gdb/testsuite/lib/mi-support.exp 2009-03-22 16:37:58.000000000 +0100
|
||||
+++ ./gdb/testsuite/lib/mi-support.exp 2009-03-22 16:37:12.000000000 +0100
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/lib/mi-support.exp
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090803.orig/gdb/testsuite/lib/mi-support.exp 2009-08-03 16:17:10.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/lib/mi-support.exp 2009-08-03 16:17:59.000000000 +0200
|
||||
@@ -221,7 +221,7 @@ proc default_mi_gdb_start { args } {
|
||||
}
|
||||
}
|
||||
@ -497,10 +499,10 @@ Index: gdb-6.8.50.20090302/gdb/testsuite/lib/gdb.exp
|
||||
send_gdb "190-gdb-set build-id-verbose 0\n"
|
||||
gdb_expect 10 {
|
||||
-re ".*190-gdb-set build-id-verbose 0\r\n190\\\^done\r\n$mi_gdb_prompt$" {
|
||||
Index: gdb-6.8.50.20090302/gdb/tui/tui-interp.c
|
||||
Index: gdb-6.8.50.20090803/gdb/tui/tui-interp.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/tui/tui-interp.c 2009-03-07 17:13:33.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/tui/tui-interp.c 2009-03-07 17:25:06.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/tui/tui-interp.c 2009-08-03 16:17:10.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/tui/tui-interp.c 2009-08-03 16:17:59.000000000 +0200
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "tui/tui.h"
|
||||
#include "tui/tui-io.h"
|
||||
@ -518,10 +520,10 @@ Index: gdb-6.8.50.20090302/gdb/tui/tui-interp.c
|
||||
/* 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 the first prompt. */
|
||||
Index: gdb-6.8.50.20090302/gdb/aclocal.m4
|
||||
Index: gdb-6.8.50.20090803/gdb/aclocal.m4
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/aclocal.m4 2009-03-07 17:13:33.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/aclocal.m4 2009-03-07 17:25:06.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/aclocal.m4 2009-08-03 16:17:10.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/aclocal.m4 2009-08-03 16:19:22.000000000 +0200
|
||||
@@ -11,6 +11,162 @@
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
@ -685,47 +687,11 @@ Index: gdb-6.8.50.20090302/gdb/aclocal.m4
|
||||
# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||
#
|
||||
# This file is free software; the Free Software Foundation
|
||||
@@ -468,6 +624,27 @@ AC_DEFUN([AM_PROG_INSTALL_SH],
|
||||
install_sh=${install_sh-"$am_aux_dir/install-sh"}
|
||||
AC_SUBST(install_sh)])
|
||||
|
||||
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
|
||||
+#
|
||||
+# This file is free software; the Free Software Foundation
|
||||
+# gives unlimited permission to copy and/or distribute it,
|
||||
+# with or without modifications, as long as this notice is preserved.
|
||||
+
|
||||
+# serial 2
|
||||
+
|
||||
+# Check whether the underlying file-system supports filenames
|
||||
+# with a leading dot. For instance MS-DOS doesn't.
|
||||
+AC_DEFUN([AM_SET_LEADING_DOT],
|
||||
+[rm -rf .tst 2>/dev/null
|
||||
+mkdir .tst 2>/dev/null
|
||||
+if test -d .tst; then
|
||||
+ am__leading_dot=.
|
||||
+else
|
||||
+ am__leading_dot=_
|
||||
+fi
|
||||
+rmdir .tst 2>/dev/null
|
||||
+AC_SUBST([am__leading_dot])])
|
||||
+
|
||||
# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
|
||||
# From Jim Meyering
|
||||
|
||||
@@ -868,7 +1045,4 @@ m4_include([gnulib/m4/onceonly_2_57.m4])
|
||||
m4_include([gnulib/m4/stdint.m4])
|
||||
m4_include([gnulib/m4/string_h.m4])
|
||||
m4_include([gnulib/m4/wchar.m4])
|
||||
-m4_include([../config/extensions.m4])
|
||||
-m4_include([../config/lead-dot.m4])
|
||||
-m4_include([../config/proginstall.m4])
|
||||
m4_include([acinclude.m4])
|
||||
Index: gdb-6.8.50.20090302/gdb/config.in
|
||||
Index: gdb-6.8.50.20090803/gdb/config.in
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/config.in 2009-03-07 17:13:33.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/config.in 2009-03-07 17:25:06.000000000 +0100
|
||||
@@ -38,6 +38,9 @@
|
||||
--- gdb-6.8.50.20090803.orig/gdb/config.in 2009-08-03 16:17:10.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/config.in 2009-08-03 16:17:59.000000000 +0200
|
||||
@@ -39,6 +39,9 @@
|
||||
/* Define to BFD's default target vector. */
|
||||
#undef DEFAULT_BFD_VEC
|
||||
|
||||
@ -735,7 +701,7 @@ Index: gdb-6.8.50.20090302/gdb/config.in
|
||||
/* Define to 1 if translation of program messages to the user's native
|
||||
language is requested. */
|
||||
#undef ENABLE_NLS
|
||||
@@ -211,6 +214,9 @@
|
||||
@@ -218,6 +221,9 @@
|
||||
/* Define if Python 2.6 is being used. */
|
||||
#undef HAVE_LIBPYTHON2_6
|
||||
|
||||
@ -745,16 +711,16 @@ Index: gdb-6.8.50.20090302/gdb/config.in
|
||||
/* Define if libunwind library is being used. */
|
||||
#undef HAVE_LIBUNWIND
|
||||
|
||||
Index: gdb-6.8.50.20090302/gdb/configure
|
||||
Index: gdb-6.8.50.20090803/gdb/configure
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/configure 2009-03-07 17:13:33.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/configure 2009-03-07 17:25:06.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/configure 2009-08-03 16:17:10.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/configure 2009-08-03 16:20:09.000000000 +0200
|
||||
@@ -314,7 +314,7 @@ ac_subdirs_all="$ac_subdirs_all doc test
|
||||
ac_subdirs_all="$ac_subdirs_all gdbtk"
|
||||
ac_subdirs_all="$ac_subdirs_all multi-ice"
|
||||
ac_subdirs_all="$ac_subdirs_all gdbserver"
|
||||
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP RANLIB ac_ct_RANLIB build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os am__leading_dot DEPDIR CCDEPMODE MAKE GMAKE_TRUE GMAKE_FALSE SET_MAKE USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT localedir GL_COND_LIBTOOL_TRUE GL_COND_LIBTOOL_FALSE GNULIB_MEMMEM GNULIB_MEMPCPY GNULIB_MEMRCHR GNULIB_STPCPY GNULIB_STPNCPY GNULIB_STRCHRNUL GNULIB_STRDUP GNULIB_STRNDUP GNULIB_STRNLEN GNULIB_STRPBRK GNULIB_STRSEP GNULIB_STRSTR GNULIB_STRCASESTR GNULIB_STRTOK_R GNULIB_MBSLEN GNULIB_MBSNLEN GNULIB_MBSCHR GNULIB_MBSRCHR GNULIB_MBSSTR GNULIB_MBSCASECMP GNULIB_MBSNCASECMP GNULIB_MBSPCASECMP GNULIB_MBSCASESTR GNULIB_MBSCSPN GNULIB_MBSPBRK GNULIB_MBSSPN GNULIB_MBSSEP GNULIB_MBSTOK_R GNULIB_STRERROR GNULIB_STRSIGNAL HAVE_DECL_MEMMEM HAVE_MEMPCPY HAVE_DECL_MEMRCHR HAVE_STPCPY HAVE_STPNCPY HAVE_STRCHRNUL HAVE_DECL_STRDUP HAVE_STRNDUP HAVE_DECL_STRNDUP HAVE_DECL_STRNLEN HAVE_STRPBRK HAVE_STRSEP HAVE_STRCASESTR HAVE_DECL_STRTOK_R HAVE_DECL_STRERROR HAVE_DECL_STRSIGNAL REPLACE_STRERROR REPLACE_STRSIGNAL REPLACE_MEMMEM REPLACE_STRCASESTR REPLACE_STRSTR HAVE_LONG_LONG_INT HAVE_UNSIGNED_LONG_LONG_INT HAVE_INTTYPES_H HAVE_SYS_TYPES_H INCLUDE_NEXT NEXT_STDINT_H HAVE_STDINT_H HAVE_SYS_INTTYPES_H HAVE_SYS_BITYPES_H BITSIZEOF_PTRDIFF_T BITSIZEOF_SIG_ATOMIC_T BITSIZEOF_SIZE_T BITSIZEOF_WCHAR_T BITSIZEOF_WINT_T HAVE_SIGNED_SIG_ATOMIC_T HAVE_SIGNED_WCHAR_T HAVE_SIGNED_WINT_T PTRDIFF_T_SUFFIX SIG_ATOMIC_T_SUFFIX SIZE_T_SUFFIX WCHAR_T_SUFFIX WINT_T_SUFFIX STDINT_H NEXT_STRING_H GNULIB_WCWIDTH HAVE_DECL_WCWIDTH REPLACE_WCWIDTH WCHAR_H HAVE_WCHAR_H NEXT_WCHAR_H LIBGNU_LIBDEPS LIBGNU_LTLIBDEPS GNULIB_STDINT_H PACKAGE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK AMTAR am__tar am__untar am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH am__fastdepCC_TRUE am__fastdepCC_FALSE GDB_DATADIR_PATH pythondir subdirs TARGET_OBS PKGVERSION REPORT_BUGS_TO REPORT_BUGS_TEXI LN_S YACC AR ac_ct_AR DLLTOOL ac_ct_DLLTOOL WINDRES ac_ct_WINDRES MIG ac_ct_MIG LIBICONV LIBICONV_INCLUDE LIBICONV_LIBDIR READLINE READLINE_DEPS READLINE_CFLAGS HAVE_LIBEXPAT LIBEXPAT LTLIBEXPAT PYTHON_CFLAGS ALLOCA CONFIG_LDFLAGS TARGET_SYSTEM_ROOT TARGET_SYSTEM_ROOT_DEFINE WARN_CFLAGS WERROR_CFLAGS SER_HARDWIRE WIN32LIBS LIBGUI GUI_CFLAGS_X WIN32LDAPP TCL_VERSION TCL_PATCH_LEVEL TCL_BIN_DIR TCL_SRC_DIR TCL_LIB_FILE TCL_LIB_FLAG TCL_LIB_SPEC TCL_STUB_LIB_FILE TCL_STUB_LIB_FLAG TCL_STUB_LIB_SPEC TCL_INCLUDE TCL_LIBRARY TCL_DEPS TK_VERSION TK_BIN_DIR TK_SRC_DIR TK_LIB_FILE TK_LIB_FLAG TK_LIB_SPEC TK_STUB_LIB_FILE TK_STUB_LIB_FLAG TK_STUB_LIB_SPEC TK_INCLUDE TK_LIBRARY TK_DEPS TK_XINCLUDES X_CFLAGS X_LDFLAGS X_LIBS GDBTKLIBS GDBTK_CFLAGS GDBTK_SRC_DIR SIM SIM_OBS ENABLE_CFLAGS PROFILE_CFLAGS CONFIG_OBS CONFIG_DEPS CONFIG_SRCS CONFIG_ALL CONFIG_CLEAN CONFIG_INSTALL CONFIG_UNINSTALL target_subdir frags nm_h LIBOBJS LTLIBOBJS gl_LIBOBJS gl_LTLIBOBJS gltests_LIBOBJS gltests_LTLIBOBJS'
|
||||
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP RANLIB ac_ct_RANLIB build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os am__leading_dot DEPDIR CCDEPMODE MAKE GMAKE_TRUE GMAKE_FALSE SET_MAKE USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT localedir GL_COND_LIBTOOL_TRUE GL_COND_LIBTOOL_FALSE GNULIB_MEMMEM GNULIB_MEMPCPY GNULIB_MEMRCHR GNULIB_STPCPY GNULIB_STPNCPY GNULIB_STRCHRNUL GNULIB_STRDUP GNULIB_STRNDUP GNULIB_STRNLEN GNULIB_STRPBRK GNULIB_STRSEP GNULIB_STRSTR GNULIB_STRCASESTR GNULIB_STRTOK_R GNULIB_MBSLEN GNULIB_MBSNLEN GNULIB_MBSCHR GNULIB_MBSRCHR GNULIB_MBSSTR GNULIB_MBSCASECMP GNULIB_MBSNCASECMP GNULIB_MBSPCASECMP GNULIB_MBSCASESTR GNULIB_MBSCSPN GNULIB_MBSPBRK GNULIB_MBSSPN GNULIB_MBSSEP GNULIB_MBSTOK_R GNULIB_STRERROR GNULIB_STRSIGNAL HAVE_DECL_MEMMEM HAVE_MEMPCPY HAVE_DECL_MEMRCHR HAVE_STPCPY HAVE_STPNCPY HAVE_STRCHRNUL HAVE_DECL_STRDUP HAVE_STRNDUP HAVE_DECL_STRNDUP HAVE_DECL_STRNLEN HAVE_STRPBRK HAVE_STRSEP HAVE_STRCASESTR HAVE_DECL_STRTOK_R HAVE_DECL_STRERROR HAVE_DECL_STRSIGNAL REPLACE_STRERROR REPLACE_STRSIGNAL REPLACE_MEMMEM REPLACE_STRCASESTR REPLACE_STRSTR HAVE_LONG_LONG_INT HAVE_UNSIGNED_LONG_LONG_INT HAVE_INTTYPES_H HAVE_SYS_TYPES_H INCLUDE_NEXT NEXT_STDINT_H HAVE_STDINT_H HAVE_SYS_INTTYPES_H HAVE_SYS_BITYPES_H BITSIZEOF_PTRDIFF_T BITSIZEOF_SIG_ATOMIC_T BITSIZEOF_SIZE_T BITSIZEOF_WCHAR_T BITSIZEOF_WINT_T HAVE_SIGNED_SIG_ATOMIC_T HAVE_SIGNED_WCHAR_T HAVE_SIGNED_WINT_T PTRDIFF_T_SUFFIX SIG_ATOMIC_T_SUFFIX SIZE_T_SUFFIX WCHAR_T_SUFFIX WINT_T_SUFFIX STDINT_H NEXT_STRING_H GNULIB_WCWIDTH HAVE_DECL_WCWIDTH REPLACE_WCWIDTH WCHAR_H HAVE_WCHAR_H NEXT_WCHAR_H LIBGNU_LIBDEPS LIBGNU_LTLIBDEPS GNULIB_STDINT_H PACKAGE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK AMTAR am__tar am__untar am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH am__fastdepCC_TRUE am__fastdepCC_FALSE GDB_DATADIR_PATH pythondir PKG_CONFIG ac_pt_PKG_CONFIG RPM_CFLAGS RPM_LIBS subdirs TARGET_OBS PKGVERSION REPORT_BUGS_TO REPORT_BUGS_TEXI LN_S YACC AR ac_ct_AR DLLTOOL ac_ct_DLLTOOL WINDRES ac_ct_WINDRES MIG ac_ct_MIG LIBICONV LIBICONV_INCLUDE LIBICONV_LIBDIR READLINE READLINE_DEPS READLINE_CFLAGS HAVE_LIBEXPAT LIBEXPAT LTLIBEXPAT PYTHON_CFLAGS ALLOCA CONFIG_LDFLAGS TARGET_SYSTEM_ROOT TARGET_SYSTEM_ROOT_DEFINE WARN_CFLAGS WERROR_CFLAGS SER_HARDWIRE WIN32LIBS LIBGUI GUI_CFLAGS_X WIN32LDAPP TCL_VERSION TCL_PATCH_LEVEL TCL_BIN_DIR TCL_SRC_DIR TCL_LIB_FILE TCL_LIB_FLAG TCL_LIB_SPEC TCL_STUB_LIB_FILE TCL_STUB_LIB_FLAG TCL_STUB_LIB_SPEC TCL_INCLUDE TCL_LIBRARY TCL_DEPS TK_VERSION TK_BIN_DIR TK_SRC_DIR TK_LIB_FILE TK_LIB_FLAG TK_LIB_SPEC TK_STUB_LIB_FILE TK_STUB_LIB_FLAG TK_STUB_LIB_SPEC TK_INCLUDE TK_LIBRARY TK_DEPS TK_XINCLUDES X_CFLAGS X_LDFLAGS X_LIBS GDBTKLIBS GDBTK_CFLAGS GDBTK_SRC_DIR SIM SIM_OBS ENABLE_CFLAGS PROFILE_CFLAGS CONFIG_OBS CONFIG_DEPS CONFIG_SRCS CONFIG_ALL CONFIG_CLEAN CONFIG_INSTALL CONFIG_UNINSTALL target_subdir frags nm_h LIBOBJS LTLIBOBJS gl_LIBOBJS gl_LTLIBOBJS gltests_LIBOBJS gltests_LTLIBOBJS'
|
||||
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP RANLIB ac_ct_RANLIB build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os am__leading_dot DEPDIR CCDEPMODE MAKE GMAKE_TRUE GMAKE_FALSE SET_MAKE USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT localedir GL_COND_LIBTOOL_TRUE GL_COND_LIBTOOL_FALSE GNULIB_MEMMEM GNULIB_MEMPCPY GNULIB_MEMRCHR GNULIB_STPCPY GNULIB_STPNCPY GNULIB_STRCHRNUL GNULIB_STRDUP GNULIB_STRNDUP GNULIB_STRNLEN GNULIB_STRPBRK GNULIB_STRSEP GNULIB_STRSTR GNULIB_STRCASESTR GNULIB_STRTOK_R GNULIB_MBSLEN GNULIB_MBSNLEN GNULIB_MBSCHR GNULIB_MBSRCHR GNULIB_MBSSTR GNULIB_MBSCASECMP GNULIB_MBSNCASECMP GNULIB_MBSPCASECMP GNULIB_MBSCASESTR GNULIB_MBSCSPN GNULIB_MBSPBRK GNULIB_MBSSPN GNULIB_MBSSEP GNULIB_MBSTOK_R GNULIB_STRERROR GNULIB_STRSIGNAL HAVE_DECL_MEMMEM HAVE_MEMPCPY HAVE_DECL_MEMRCHR HAVE_STPCPY HAVE_STPNCPY HAVE_STRCHRNUL HAVE_DECL_STRDUP HAVE_STRNDUP HAVE_DECL_STRNDUP HAVE_DECL_STRNLEN HAVE_STRPBRK HAVE_STRSEP HAVE_STRCASESTR HAVE_DECL_STRTOK_R HAVE_DECL_STRERROR HAVE_DECL_STRSIGNAL REPLACE_STRERROR REPLACE_STRSIGNAL REPLACE_MEMMEM REPLACE_STRCASESTR REPLACE_STRSTR HAVE_LONG_LONG_INT HAVE_UNSIGNED_LONG_LONG_INT HAVE_INTTYPES_H HAVE_SYS_TYPES_H INCLUDE_NEXT NEXT_STDINT_H HAVE_STDINT_H HAVE_SYS_INTTYPES_H HAVE_SYS_BITYPES_H BITSIZEOF_PTRDIFF_T BITSIZEOF_SIG_ATOMIC_T BITSIZEOF_SIZE_T BITSIZEOF_WCHAR_T BITSIZEOF_WINT_T HAVE_SIGNED_SIG_ATOMIC_T HAVE_SIGNED_WCHAR_T HAVE_SIGNED_WINT_T PTRDIFF_T_SUFFIX SIG_ATOMIC_T_SUFFIX SIZE_T_SUFFIX WCHAR_T_SUFFIX WINT_T_SUFFIX STDINT_H NEXT_STRING_H GNULIB_WCWIDTH HAVE_DECL_WCWIDTH REPLACE_WCWIDTH WCHAR_H HAVE_WCHAR_H NEXT_WCHAR_H LIBGNU_LIBDEPS LIBGNU_LTLIBDEPS GNULIB_STDINT_H PACKAGE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK AMTAR am__tar am__untar am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH am__fastdepCC_TRUE am__fastdepCC_FALSE DEBUGDIR GDB_DATADIR GDB_DATADIR_PATH pythondir subdirs TARGET_OBS PKGVERSION REPORT_BUGS_TO REPORT_BUGS_TEXI LN_S YACC AR ac_ct_AR DLLTOOL ac_ct_DLLTOOL WINDRES ac_ct_WINDRES MIG ac_ct_MIG READLINE READLINE_DEPS READLINE_CFLAGS HAVE_LIBEXPAT LIBEXPAT LTLIBEXPAT PYTHON_CFLAGS ALLOCA CONFIG_LDFLAGS TARGET_SYSTEM_ROOT TARGET_SYSTEM_ROOT_DEFINE SYSTEM_GDBINIT WARN_CFLAGS WERROR_CFLAGS SER_HARDWIRE WIN32LIBS LIBGUI GUI_CFLAGS_X WIN32LDAPP TCL_VERSION TCL_PATCH_LEVEL TCL_BIN_DIR TCL_SRC_DIR TCL_LIB_FILE TCL_LIB_FLAG TCL_LIB_SPEC TCL_STUB_LIB_FILE TCL_STUB_LIB_FLAG TCL_STUB_LIB_SPEC TCL_INCLUDE TCL_LIBRARY TCL_DEPS TK_VERSION TK_BIN_DIR TK_SRC_DIR TK_LIB_FILE TK_LIB_FLAG TK_LIB_SPEC TK_STUB_LIB_FILE TK_STUB_LIB_FLAG TK_STUB_LIB_SPEC TK_INCLUDE TK_LIBRARY TK_DEPS TK_XINCLUDES X_CFLAGS X_LDFLAGS X_LIBS GDBTKLIBS GDBTK_CFLAGS GDBTK_SRC_DIR SIM SIM_OBS ENABLE_CFLAGS PROFILE_CFLAGS CONFIG_OBS CONFIG_DEPS CONFIG_SRCS CONFIG_ALL CONFIG_CLEAN CONFIG_INSTALL CONFIG_UNINSTALL target_subdir frags GDB_NM_FILE datarootdir docdir htmldir pdfdir LIBOBJS LTLIBOBJS gl_LIBOBJS gl_LTLIBOBJS gltests_LIBOBJS gltests_LTLIBOBJS'
|
||||
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP RANLIB ac_ct_RANLIB build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os am__leading_dot DEPDIR CCDEPMODE MAKE GMAKE_TRUE GMAKE_FALSE SET_MAKE USE_NLS LIBINTL LIBINTL_DEP INCINTL XGETTEXT GMSGFMT POSUB CATALOGS DATADIRNAME INSTOBJEXT GENCAT CATOBJEXT localedir GL_COND_LIBTOOL_TRUE GL_COND_LIBTOOL_FALSE GNULIB_MEMMEM GNULIB_MEMPCPY GNULIB_MEMRCHR GNULIB_STPCPY GNULIB_STPNCPY GNULIB_STRCHRNUL GNULIB_STRDUP GNULIB_STRNDUP GNULIB_STRNLEN GNULIB_STRPBRK GNULIB_STRSEP GNULIB_STRSTR GNULIB_STRCASESTR GNULIB_STRTOK_R GNULIB_MBSLEN GNULIB_MBSNLEN GNULIB_MBSCHR GNULIB_MBSRCHR GNULIB_MBSSTR GNULIB_MBSCASECMP GNULIB_MBSNCASECMP GNULIB_MBSPCASECMP GNULIB_MBSCASESTR GNULIB_MBSCSPN GNULIB_MBSPBRK GNULIB_MBSSPN GNULIB_MBSSEP GNULIB_MBSTOK_R GNULIB_STRERROR GNULIB_STRSIGNAL HAVE_DECL_MEMMEM HAVE_MEMPCPY HAVE_DECL_MEMRCHR HAVE_STPCPY HAVE_STPNCPY HAVE_STRCHRNUL HAVE_DECL_STRDUP HAVE_STRNDUP HAVE_DECL_STRNDUP HAVE_DECL_STRNLEN HAVE_STRPBRK HAVE_STRSEP HAVE_STRCASESTR HAVE_DECL_STRTOK_R HAVE_DECL_STRERROR HAVE_DECL_STRSIGNAL REPLACE_STRERROR REPLACE_STRSIGNAL REPLACE_MEMMEM REPLACE_STRCASESTR REPLACE_STRSTR HAVE_LONG_LONG_INT HAVE_UNSIGNED_LONG_LONG_INT HAVE_INTTYPES_H HAVE_SYS_TYPES_H INCLUDE_NEXT NEXT_STDINT_H HAVE_STDINT_H HAVE_SYS_INTTYPES_H HAVE_SYS_BITYPES_H BITSIZEOF_PTRDIFF_T BITSIZEOF_SIG_ATOMIC_T BITSIZEOF_SIZE_T BITSIZEOF_WCHAR_T BITSIZEOF_WINT_T HAVE_SIGNED_SIG_ATOMIC_T HAVE_SIGNED_WCHAR_T HAVE_SIGNED_WINT_T PTRDIFF_T_SUFFIX SIG_ATOMIC_T_SUFFIX SIZE_T_SUFFIX WCHAR_T_SUFFIX WINT_T_SUFFIX STDINT_H NEXT_STRING_H GNULIB_WCWIDTH HAVE_DECL_WCWIDTH REPLACE_WCWIDTH WCHAR_H HAVE_WCHAR_H NEXT_WCHAR_H LIBGNU_LIBDEPS LIBGNU_LTLIBDEPS GNULIB_STDINT_H PACKAGE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK AMTAR am__tar am__untar am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH am__fastdepCC_TRUE am__fastdepCC_FALSE DEBUGDIR GDB_DATADIR GDB_DATADIR_PATH pythondir PKG_CONFIG ac_pt_PKG_CONFIG RPM_CFLAGS RPM_LIBS subdirs TARGET_OBS PKGVERSION REPORT_BUGS_TO REPORT_BUGS_TEXI LN_S YACC AR ac_ct_AR DLLTOOL ac_ct_DLLTOOL WINDRES ac_ct_WINDRES MIG ac_ct_MIG READLINE READLINE_DEPS READLINE_CFLAGS HAVE_LIBEXPAT LIBEXPAT LTLIBEXPAT PYTHON_CFLAGS ALLOCA CONFIG_LDFLAGS TARGET_SYSTEM_ROOT TARGET_SYSTEM_ROOT_DEFINE SYSTEM_GDBINIT WARN_CFLAGS WERROR_CFLAGS SER_HARDWIRE WIN32LIBS LIBGUI GUI_CFLAGS_X WIN32LDAPP TCL_VERSION TCL_PATCH_LEVEL TCL_BIN_DIR TCL_SRC_DIR TCL_LIB_FILE TCL_LIB_FLAG TCL_LIB_SPEC TCL_STUB_LIB_FILE TCL_STUB_LIB_FLAG TCL_STUB_LIB_SPEC TCL_INCLUDE TCL_LIBRARY TCL_DEPS TK_VERSION TK_BIN_DIR TK_SRC_DIR TK_LIB_FILE TK_LIB_FLAG TK_LIB_SPEC TK_STUB_LIB_FILE TK_STUB_LIB_FLAG TK_STUB_LIB_SPEC TK_INCLUDE TK_LIBRARY TK_DEPS TK_XINCLUDES X_CFLAGS X_LDFLAGS X_LIBS GDBTKLIBS GDBTK_CFLAGS GDBTK_SRC_DIR SIM SIM_OBS ENABLE_CFLAGS PROFILE_CFLAGS CONFIG_OBS CONFIG_DEPS CONFIG_SRCS CONFIG_ALL CONFIG_CLEAN CONFIG_INSTALL CONFIG_UNINSTALL target_subdir frags GDB_NM_FILE datarootdir docdir htmldir pdfdir LIBOBJS LTLIBOBJS gl_LIBOBJS gl_LTLIBOBJS gltests_LIBOBJS gltests_LTLIBOBJS'
|
||||
ac_subst_files='host_makefile_frag'
|
||||
ac_pwd=`pwd`
|
||||
|
||||
@ -777,16 +743,16 @@ Index: gdb-6.8.50.20090302/gdb/configure
|
||||
|
||||
#
|
||||
# Report the --help message.
|
||||
@@ -886,6 +898,8 @@ Optional Packages:
|
||||
@@ -895,6 +907,8 @@ Optional Packages:
|
||||
[DATADIR/gdb]
|
||||
--with-pythondir install Python data files in this path
|
||||
[DATADIR/gdb/python]
|
||||
+ --with-rpm query rpm database for missing debuginfos
|
||||
+ [yes/no,], [def.], [auto=librpm.so]
|
||||
--with-libunwind Use libunwind frame unwinding support
|
||||
--with-pkgversion=PKG Use PKG in the version string in place of "GDB"
|
||||
--with-bugurl=URL Direct users to URL to report a bug
|
||||
@@ -913,6 +927,9 @@ Some influential environment variables:
|
||||
--with-libunwind use libunwind frame unwinding support
|
||||
--with-curses use the curses library instead of the termcap
|
||||
library
|
||||
@@ -932,6 +946,9 @@ Some influential environment variables:
|
||||
CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have
|
||||
headers in a nonstandard directory <include dir>
|
||||
CPP C preprocessor
|
||||
@ -796,56 +762,7 @@ Index: gdb-6.8.50.20090302/gdb/configure
|
||||
|
||||
Use these variables to override the choices made by `configure' or to help
|
||||
it to find libraries and programs with nonstandard names/locations.
|
||||
@@ -6556,7 +6573,6 @@ am__api_version="1.9"
|
||||
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
|
||||
# OS/2's system install, which has a completely different semantic
|
||||
# ./install, which can be erroneously created by make from ./install.sh.
|
||||
-# Reject install programs that cannot install multiple files.
|
||||
echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
|
||||
echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
|
||||
if test -z "$INSTALL"; then
|
||||
@@ -6590,18 +6606,8 @@ case $as_dir/ in
|
||||
# program-specific install script used by HP pwplus--don't use.
|
||||
:
|
||||
else
|
||||
- rm -rf conftest.one conftest.two conftest.dir
|
||||
- echo one > conftest.one
|
||||
- echo two > conftest.two
|
||||
- mkdir conftest.dir
|
||||
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
|
||||
- test -s conftest.one && test -s conftest.two &&
|
||||
- test -s conftest.dir/conftest.one &&
|
||||
- test -s conftest.dir/conftest.two
|
||||
- then
|
||||
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
|
||||
- break 3
|
||||
- fi
|
||||
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
|
||||
+ break 3
|
||||
fi
|
||||
fi
|
||||
done
|
||||
@@ -6610,16 +6616,15 @@ case $as_dir/ in
|
||||
esac
|
||||
done
|
||||
|
||||
-rm -rf conftest.one conftest.two conftest.dir
|
||||
|
||||
fi
|
||||
if test "${ac_cv_path_install+set}" = set; then
|
||||
INSTALL=$ac_cv_path_install
|
||||
else
|
||||
- # As a last resort, use the slow shell script. Don't cache a
|
||||
- # value for INSTALL within a source directory, because that will
|
||||
+ # As a last resort, use the slow shell script. We don't cache a
|
||||
+ # path for INSTALL within a source directory, because that will
|
||||
# break other packages using the cache if that directory is
|
||||
- # removed, or if the value is a relative name.
|
||||
+ # removed, or if the path is relative.
|
||||
INSTALL=$ac_install_sh
|
||||
fi
|
||||
fi
|
||||
@@ -7202,6 +7207,559 @@ _ACEOF
|
||||
@@ -7290,6 +7307,559 @@ _ACEOF
|
||||
fi
|
||||
|
||||
|
||||
@ -1405,57 +1322,8 @@ Index: gdb-6.8.50.20090302/gdb/configure
|
||||
|
||||
|
||||
|
||||
@@ -8623,7 +9181,6 @@ done
|
||||
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
|
||||
# OS/2's system install, which has a completely different semantic
|
||||
# ./install, which can be erroneously created by make from ./install.sh.
|
||||
-# Reject install programs that cannot install multiple files.
|
||||
echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
|
||||
echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
|
||||
if test -z "$INSTALL"; then
|
||||
@@ -8657,18 +9214,8 @@ case $as_dir/ in
|
||||
# program-specific install script used by HP pwplus--don't use.
|
||||
:
|
||||
else
|
||||
- rm -rf conftest.one conftest.two conftest.dir
|
||||
- echo one > conftest.one
|
||||
- echo two > conftest.two
|
||||
- mkdir conftest.dir
|
||||
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
|
||||
- test -s conftest.one && test -s conftest.two &&
|
||||
- test -s conftest.dir/conftest.one &&
|
||||
- test -s conftest.dir/conftest.two
|
||||
- then
|
||||
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
|
||||
- break 3
|
||||
- fi
|
||||
+ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
|
||||
+ break 3
|
||||
fi
|
||||
fi
|
||||
done
|
||||
@@ -8677,16 +9224,15 @@ case $as_dir/ in
|
||||
esac
|
||||
done
|
||||
|
||||
-rm -rf conftest.one conftest.two conftest.dir
|
||||
|
||||
fi
|
||||
if test "${ac_cv_path_install+set}" = set; then
|
||||
INSTALL=$ac_cv_path_install
|
||||
else
|
||||
- # As a last resort, use the slow shell script. Don't cache a
|
||||
- # value for INSTALL within a source directory, because that will
|
||||
+ # As a last resort, use the slow shell script. We don't cache a
|
||||
+ # path for INSTALL within a source directory, because that will
|
||||
# break other packages using the cache if that directory is
|
||||
- # removed, or if the value is a relative name.
|
||||
+ # removed, or if the path is relative.
|
||||
INSTALL=$ac_install_sh
|
||||
fi
|
||||
fi
|
||||
@@ -22270,6 +22816,10 @@ s,@am__fastdepCC_TRUE@,$am__fastdepCC_TR
|
||||
s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
|
||||
@@ -22513,6 +23083,10 @@ s,@DEBUGDIR@,$DEBUGDIR,;t t
|
||||
s,@GDB_DATADIR@,$GDB_DATADIR,;t t
|
||||
s,@GDB_DATADIR_PATH@,$GDB_DATADIR_PATH,;t t
|
||||
s,@pythondir@,$pythondir,;t t
|
||||
+s,@PKG_CONFIG@,$PKG_CONFIG,;t t
|
||||
@ -1465,11 +1333,11 @@ Index: gdb-6.8.50.20090302/gdb/configure
|
||||
s,@subdirs@,$subdirs,;t t
|
||||
s,@TARGET_OBS@,$TARGET_OBS,;t t
|
||||
s,@PKGVERSION@,$PKGVERSION,;t t
|
||||
Index: gdb-6.8.50.20090302/gdb/configure.ac
|
||||
Index: gdb-6.8.50.20090803/gdb/configure.ac
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/configure.ac 2009-03-07 17:13:33.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/configure.ac 2009-03-07 17:25:06.000000000 +0100
|
||||
@@ -162,6 +162,199 @@ else
|
||||
--- gdb-6.8.50.20090803.orig/gdb/configure.ac 2009-08-03 16:17:10.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/configure.ac 2009-08-03 16:17:59.000000000 +0200
|
||||
@@ -153,6 +153,199 @@ else
|
||||
fi
|
||||
AC_SUBST(pythondir)
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
Index: gdb-6.8.50.20090302/gdb/corelow.c
|
||||
Index: gdb-6.8.50.20090803/gdb/corelow.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/corelow.c 2009-02-23 01:03:48.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/corelow.c 2009-03-07 17:04:57.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/corelow.c 2009-07-31 17:25:21.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/corelow.c 2009-08-04 06:32:12.000000000 +0200
|
||||
@@ -45,6 +45,10 @@
|
||||
#include "exceptions.h"
|
||||
#include "solib.h"
|
||||
@ -13,7 +13,7 @@ Index: gdb-6.8.50.20090302/gdb/corelow.c
|
||||
|
||||
|
||||
#ifndef O_LARGEFILE
|
||||
@@ -267,6 +271,50 @@ add_to_thread_list (bfd *abfd, asection
|
||||
@@ -273,6 +277,50 @@ add_to_thread_list (bfd *abfd, asection
|
||||
inferior_ptid = ptid; /* Yes, make it current */
|
||||
}
|
||||
|
||||
@ -64,7 +64,7 @@ Index: gdb-6.8.50.20090302/gdb/corelow.c
|
||||
/* This routine opens and sets up the core file bfd. */
|
||||
|
||||
static void
|
||||
@@ -363,6 +417,12 @@ core_open (char *filename, int from_tty)
|
||||
@@ -371,6 +419,12 @@ core_open (char *filename, int from_tty)
|
||||
push_target (&core_ops);
|
||||
discard_cleanups (old_chain);
|
||||
|
||||
@ -77,7 +77,7 @@ Index: gdb-6.8.50.20090302/gdb/corelow.c
|
||||
add_inferior_silent (corelow_pid);
|
||||
|
||||
/* Do this before acknowledging the inferior, so if
|
||||
@@ -751,4 +811,11 @@ _initialize_corelow (void)
|
||||
@@ -878,4 +932,11 @@ _initialize_corelow (void)
|
||||
init_core_ops ();
|
||||
|
||||
add_target (&core_ops);
|
||||
@ -89,11 +89,11 @@ Index: gdb-6.8.50.20090302/gdb/corelow.c
|
||||
+ NULL, NULL, NULL,
|
||||
+ &setlist, &showlist);
|
||||
}
|
||||
Index: gdb-6.8.50.20090302/gdb/doc/gdb.texinfo
|
||||
Index: gdb-6.8.50.20090803/gdb/doc/gdb.texinfo
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/doc/gdb.texinfo 2009-03-07 17:04:56.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/doc/gdb.texinfo 2009-03-07 17:04:57.000000000 +0100
|
||||
@@ -13294,6 +13294,27 @@ information files.
|
||||
--- gdb-6.8.50.20090803.orig/gdb/doc/gdb.texinfo 2009-08-04 06:31:59.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/doc/gdb.texinfo 2009-08-04 06:32:12.000000000 +0200
|
||||
@@ -13733,6 +13733,27 @@ information files.
|
||||
|
||||
@end table
|
||||
|
||||
@ -121,11 +121,11 @@ Index: gdb-6.8.50.20090302/gdb/doc/gdb.texinfo
|
||||
@cindex @code{.gnu_debuglink} sections
|
||||
@cindex debug link sections
|
||||
A debug link is a special section of the executable file named
|
||||
Index: gdb-6.8.50.20090302/gdb/solib-svr4.c
|
||||
Index: gdb-6.8.50.20090803/gdb/solib-svr4.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/solib-svr4.c 2009-03-07 17:04:52.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/solib-svr4.c 2009-03-07 17:04:57.000000000 +0100
|
||||
@@ -1000,9 +1000,33 @@ svr4_current_sos (void)
|
||||
--- gdb-6.8.50.20090803.orig/gdb/solib-svr4.c 2009-08-04 06:29:47.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/solib-svr4.c 2009-08-04 06:32:12.000000000 +0200
|
||||
@@ -1101,9 +1101,33 @@ svr4_current_sos (void)
|
||||
safe_strerror (errcode));
|
||||
else
|
||||
{
|
||||
@ -162,11 +162,11 @@ Index: gdb-6.8.50.20090302/gdb/solib-svr4.c
|
||||
}
|
||||
xfree (buffer);
|
||||
|
||||
Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
Index: gdb-6.8.50.20090803/gdb/symfile.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/symfile.c 2009-03-07 17:04:53.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/symfile.c 2009-03-07 17:22:21.000000000 +0100
|
||||
@@ -54,6 +54,7 @@
|
||||
--- gdb-6.8.50.20090803.orig/gdb/symfile.c 2009-08-04 06:31:58.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/symfile.c 2009-08-04 06:32:12.000000000 +0200
|
||||
@@ -55,6 +55,7 @@
|
||||
#include "elf-bfd.h"
|
||||
#include "solib.h"
|
||||
#include "remote.h"
|
||||
@ -174,8 +174,8 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
@@ -1185,16 +1186,65 @@ symbol_file_clear (int from_tty)
|
||||
printf_unfiltered (_("No symbol file now.\n"));
|
||||
@@ -1193,16 +1194,65 @@ symbol_file_clear (int from_tty)
|
||||
printf_unfiltered (_("No symbol file now.\n"));
|
||||
}
|
||||
|
||||
+/* Locate NT_GNU_BUILD_ID and return its matching debug filename.
|
||||
@ -242,7 +242,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
{
|
||||
struct build_id *retval;
|
||||
|
||||
@@ -1210,6 +1260,348 @@ build_id_bfd_get (bfd *abfd)
|
||||
@@ -1218,6 +1268,348 @@ build_id_bfd_get (bfd *abfd)
|
||||
return retval;
|
||||
}
|
||||
|
||||
@ -591,7 +591,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
/* Return if FILENAME has NT_GNU_BUILD_ID matching the CHECK value. */
|
||||
|
||||
static int
|
||||
@@ -1227,7 +1619,7 @@ build_id_verify (const char *filename, s
|
||||
@@ -1235,7 +1627,7 @@ build_id_verify (const char *filename, s
|
||||
if (abfd == NULL)
|
||||
return 0;
|
||||
|
||||
@ -600,7 +600,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
|
||||
if (found == NULL)
|
||||
warning (_("File \"%s\" has no build-id, file skipped"), filename);
|
||||
@@ -1246,8 +1638,9 @@ build_id_verify (const char *filename, s
|
||||
@@ -1254,8 +1646,9 @@ build_id_verify (const char *filename, s
|
||||
return retval;
|
||||
}
|
||||
|
||||
@ -612,7 +612,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
{
|
||||
char *link, *s, *retval = NULL;
|
||||
gdb_byte *data = build_id->data;
|
||||
@@ -1255,7 +1648,9 @@ build_id_to_debug_filename (struct build
|
||||
@@ -1263,7 +1656,9 @@ build_id_to_debug_filename (struct build
|
||||
|
||||
/* DEBUG_FILE_DIRECTORY/.build-id/ab/cdef */
|
||||
link = xmalloc (strlen (debug_file_directory) + (sizeof "/.build-id/" - 1) + 1
|
||||
@ -623,7 +623,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
s = link + sprintf (link, "%s/.build-id/", debug_file_directory);
|
||||
if (size > 0)
|
||||
{
|
||||
@@ -1266,12 +1661,14 @@ build_id_to_debug_filename (struct build
|
||||
@@ -1274,12 +1669,14 @@ build_id_to_debug_filename (struct build
|
||||
*s++ = '/';
|
||||
while (size-- > 0)
|
||||
s += sprintf (s, "%02x", (unsigned) *data++);
|
||||
@ -640,7 +640,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
|
||||
if (retval != NULL && !build_id_verify (retval, build_id))
|
||||
{
|
||||
@@ -1279,9 +1676,150 @@ build_id_to_debug_filename (struct build
|
||||
@@ -1287,9 +1684,150 @@ build_id_to_debug_filename (struct build
|
||||
retval = NULL;
|
||||
}
|
||||
|
||||
@ -791,7 +791,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
static char *
|
||||
get_debug_link_info (struct objfile *objfile, unsigned long *crc32_out)
|
||||
{
|
||||
@@ -1364,32 +1894,36 @@ static char *
|
||||
@@ -1372,32 +1910,36 @@ static char *
|
||||
find_separate_debug_file (struct objfile *objfile)
|
||||
{
|
||||
asection *sect;
|
||||
@ -836,7 +836,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
}
|
||||
|
||||
basename = get_debug_link_info (objfile, &crc32);
|
||||
@@ -1397,7 +1931,7 @@ find_separate_debug_file (struct objfile
|
||||
@@ -1405,7 +1947,7 @@ find_separate_debug_file (struct objfile
|
||||
if (basename == NULL)
|
||||
/* There's no separate debug info, hence there's no way we could
|
||||
load it => no warning. */
|
||||
@ -845,7 +845,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
|
||||
dir = xstrdup (objfile->name);
|
||||
|
||||
@@ -1413,23 +1947,19 @@ find_separate_debug_file (struct objfile
|
||||
@@ -1421,23 +1963,19 @@ find_separate_debug_file (struct objfile
|
||||
gdb_assert (i >= 0 && IS_DIR_SEPARATOR (dir[i]));
|
||||
dir[i+1] = '\0';
|
||||
|
||||
@ -876,7 +876,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
|
||||
/* Then try in the subdirectory named DEBUG_SUBDIRECTORY. */
|
||||
strcpy (debugfile, dir);
|
||||
@@ -1438,11 +1968,7 @@ find_separate_debug_file (struct objfile
|
||||
@@ -1446,11 +1984,7 @@ find_separate_debug_file (struct objfile
|
||||
strcat (debugfile, basename);
|
||||
|
||||
if (separate_debug_file_exists (debugfile, crc32, objfile->name))
|
||||
@ -889,7 +889,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
|
||||
/* Then try in the global debugfile directory. */
|
||||
strcpy (debugfile, debug_file_directory);
|
||||
@@ -1451,11 +1977,7 @@ find_separate_debug_file (struct objfile
|
||||
@@ -1459,11 +1993,7 @@ find_separate_debug_file (struct objfile
|
||||
strcat (debugfile, basename);
|
||||
|
||||
if (separate_debug_file_exists (debugfile, crc32, objfile->name))
|
||||
@ -902,7 +902,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
|
||||
/* If the file is in the sysroot, try using its base path in the
|
||||
global debugfile directory. */
|
||||
@@ -1470,20 +1992,18 @@ find_separate_debug_file (struct objfile
|
||||
@@ -1478,20 +2008,18 @@ find_separate_debug_file (struct objfile
|
||||
strcat (debugfile, basename);
|
||||
|
||||
if (separate_debug_file_exists (debugfile, crc32, objfile->name))
|
||||
@ -931,7 +931,7 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
}
|
||||
|
||||
|
||||
@@ -4216,4 +4736,16 @@ Show printing of symbol loading messages
|
||||
@@ -4243,4 +4771,16 @@ Show printing of symbol loading messages
|
||||
NULL,
|
||||
NULL,
|
||||
&setprintlist, &showprintlist);
|
||||
@ -948,11 +948,11 @@ Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
+
|
||||
+ observer_attach_executable_changed (debug_print_executable_changed);
|
||||
}
|
||||
Index: gdb-6.8.50.20090302/gdb/symfile.h
|
||||
Index: gdb-6.8.50.20090803/gdb/symfile.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/symfile.h 2009-03-07 17:04:52.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/symfile.h 2009-03-07 17:13:33.000000000 +0100
|
||||
@@ -372,6 +372,13 @@ extern int symfile_map_offsets_to_segmen
|
||||
--- gdb-6.8.50.20090803.orig/gdb/symfile.h 2009-08-04 06:29:47.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/symfile.h 2009-08-04 06:32:12.000000000 +0200
|
||||
@@ -388,6 +388,13 @@ extern int symfile_map_offsets_to_segmen
|
||||
struct symfile_segment_data *get_symfile_segment_data (bfd *abfd);
|
||||
void free_symfile_segment_data (struct symfile_segment_data *data);
|
||||
|
||||
@ -966,11 +966,11 @@ Index: gdb-6.8.50.20090302/gdb/symfile.h
|
||||
/* From dwarf2read.c */
|
||||
|
||||
extern int dwarf2_has_info (struct objfile *);
|
||||
Index: gdb-6.8.50.20090302/gdb/testsuite/lib/gdb.exp
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/lib/gdb.exp
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/testsuite/lib/gdb.exp 2009-03-07 17:04:52.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/testsuite/lib/gdb.exp 2009-03-07 17:13:33.000000000 +0100
|
||||
@@ -1230,6 +1230,16 @@ proc default_gdb_start { } {
|
||||
--- gdb-6.8.50.20090803.orig/gdb/testsuite/lib/gdb.exp 2009-08-04 06:29:47.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/lib/gdb.exp 2009-08-04 06:32:12.000000000 +0200
|
||||
@@ -1248,6 +1248,16 @@ proc default_gdb_start { } {
|
||||
warning "Couldn't set the width to 0."
|
||||
}
|
||||
}
|
||||
@ -987,8 +987,10 @@ Index: gdb-6.8.50.20090302/gdb/testsuite/lib/gdb.exp
|
||||
return 0;
|
||||
}
|
||||
|
||||
--- ./gdb/testsuite/lib/mi-support.exp 2009-03-21 21:09:09.000000000 +0100
|
||||
+++ ./gdb/testsuite/lib/mi-support.exp 2009-03-22 16:37:58.000000000 +0100
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/lib/mi-support.exp
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090803.orig/gdb/testsuite/lib/mi-support.exp 2009-08-04 06:29:47.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/lib/mi-support.exp 2009-08-04 06:32:12.000000000 +0200
|
||||
@@ -221,6 +221,16 @@ proc default_mi_gdb_start { args } {
|
||||
}
|
||||
}
|
||||
|
@ -28,12 +28,12 @@ http://sourceware.org/ml/gdb-patches/2008-01/msg00042.html
|
||||
* s390-nat.c (s390_fix_watch_points): Fix its compilation failure
|
||||
- rename it to S390_FIX_WATCH_POINTS_LIST.
|
||||
|
||||
Index: gdb-6.8.50.20090209/gdb/amd64-linux-nat.c
|
||||
Index: gdb-6.8.50.20090803/gdb/amd64-linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/amd64-linux-nat.c 2009-02-09 16:02:27.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/amd64-linux-nat.c 2009-02-09 16:03:30.000000000 +0100
|
||||
@@ -408,25 +408,43 @@ amd64_linux_dr_set (ptid_t ptid, int reg
|
||||
void
|
||||
--- gdb-6.8.50.20090803.orig/gdb/amd64-linux-nat.c 2009-08-04 07:17:19.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/amd64-linux-nat.c 2009-08-04 07:17:58.000000000 +0200
|
||||
@@ -411,25 +411,43 @@ amd64_linux_dr_set (ptid_t ptid, int reg
|
||||
static void
|
||||
amd64_linux_dr_set_control (unsigned long control)
|
||||
{
|
||||
- struct lwp_info *lp;
|
||||
@ -58,7 +58,7 @@ Index: gdb-6.8.50.20090209/gdb/amd64-linux-nat.c
|
||||
+ }
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
amd64_linux_dr_set_addr (int regnum, CORE_ADDR addr)
|
||||
{
|
||||
- struct lwp_info *lp;
|
||||
@ -85,8 +85,8 @@ Index: gdb-6.8.50.20090209/gdb/amd64-linux-nat.c
|
||||
+ }
|
||||
}
|
||||
|
||||
void
|
||||
@@ -451,6 +469,41 @@ amd64_linux_new_thread (ptid_t ptid)
|
||||
static void
|
||||
@@ -454,6 +472,42 @@ amd64_linux_new_thread (ptid_t ptid)
|
||||
|
||||
amd64_linux_dr_set (ptid, DR_CONTROL, amd64_linux_dr[DR_CONTROL]);
|
||||
}
|
||||
@ -108,7 +108,7 @@ Index: gdb-6.8.50.20090209/gdb/amd64-linux-nat.c
|
||||
+ /* FOLLOW-FORK-MODE CHILD runs later the CHILD with no restrictions. */
|
||||
+ amd64_linux_detach_breakpoints_pid = 0;
|
||||
+
|
||||
+ return i386_remove_watchpoint (addr, len, type);
|
||||
+ return target_remove_watchpoint (addr, len, type);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
@ -116,6 +116,7 @@ Index: gdb-6.8.50.20090209/gdb/amd64-linux-nat.c
|
||||
+{
|
||||
+ struct cleanup *old_chain = save_inferior_ptid ();
|
||||
+ int i;
|
||||
+ extern void i386_detach_breakpoints (int detached_pid);
|
||||
+
|
||||
+ amd64_linux_detach_breakpoints_pid = detached_pid;
|
||||
+ /* Depend on `!is_lwp (inferior_ptid)' for the I386_* macros. */
|
||||
@ -128,7 +129,7 @@ Index: gdb-6.8.50.20090209/gdb/amd64-linux-nat.c
|
||||
|
||||
|
||||
/* This function is called by libthread_db as part of its handling of
|
||||
@@ -755,6 +808,42 @@ amd64_linux_siginfo_fixup (struct siginf
|
||||
@@ -767,6 +821,42 @@ amd64_linux_siginfo_fixup (struct siginf
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -171,7 +172,7 @@ Index: gdb-6.8.50.20090209/gdb/amd64-linux-nat.c
|
||||
/* Provide a prototype to silence -Wmissing-prototypes. */
|
||||
void _initialize_amd64_linux_nat (void);
|
||||
|
||||
@@ -791,6 +880,9 @@ _initialize_amd64_linux_nat (void)
|
||||
@@ -809,6 +899,9 @@ _initialize_amd64_linux_nat (void)
|
||||
linux_elfcore_write_prstatus = amd64_linux_elfcore_write_prstatus;
|
||||
linux_elfcore_write_prfpreg = amd64_linux_elfcore_write_prfpreg;
|
||||
|
||||
@ -181,24 +182,11 @@ Index: gdb-6.8.50.20090209/gdb/amd64-linux-nat.c
|
||||
/* Register the target. */
|
||||
linux_nat_add_target (t);
|
||||
linux_nat_set_new_thread (t, amd64_linux_new_thread);
|
||||
Index: gdb-6.8.50.20090209/gdb/config/i386/nm-i386.h
|
||||
Index: gdb-6.8.50.20090803/gdb/i386-linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/config/i386/nm-i386.h 2009-01-03 06:57:54.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/config/i386/nm-i386.h 2009-02-09 16:02:42.000000000 +0100
|
||||
@@ -120,6 +120,8 @@ extern int i386_stopped_by_watchpoint (v
|
||||
|
||||
#endif /* I386_WATCHPOINTS_IN_TARGET_VECTOR */
|
||||
|
||||
+extern void i386_detach_breakpoints (int detached_pid);
|
||||
+
|
||||
#endif /* I386_USE_GENERIC_WATCHPOINTS */
|
||||
|
||||
#endif /* NM_I386_H */
|
||||
Index: gdb-6.8.50.20090209/gdb/i386-linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/i386-linux-nat.c 2009-01-03 06:57:51.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/i386-linux-nat.c 2009-02-09 16:02:42.000000000 +0100
|
||||
@@ -634,21 +634,42 @@ i386_linux_dr_set_control (unsigned long
|
||||
--- gdb-6.8.50.20090803.orig/gdb/i386-linux-nat.c 2009-08-04 07:17:19.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/i386-linux-nat.c 2009-08-04 07:26:43.000000000 +0200
|
||||
@@ -637,21 +637,42 @@ i386_linux_dr_set_control (unsigned long
|
||||
ptid_t ptid;
|
||||
|
||||
i386_linux_dr[DR_CONTROL] = control;
|
||||
@ -220,7 +208,7 @@ Index: gdb-6.8.50.20090209/gdb/i386-linux-nat.c
|
||||
+ }
|
||||
}
|
||||
|
||||
void
|
||||
static void
|
||||
i386_linux_dr_set_addr (int regnum, CORE_ADDR addr)
|
||||
{
|
||||
- struct lwp_info *lp;
|
||||
@ -247,8 +235,8 @@ Index: gdb-6.8.50.20090209/gdb/i386-linux-nat.c
|
||||
+ }
|
||||
}
|
||||
|
||||
void
|
||||
@@ -673,6 +694,41 @@ i386_linux_new_thread (ptid_t ptid)
|
||||
static void
|
||||
@@ -676,6 +697,42 @@ i386_linux_new_thread (ptid_t ptid)
|
||||
|
||||
i386_linux_dr_set (ptid, DR_CONTROL, i386_linux_dr[DR_CONTROL]);
|
||||
}
|
||||
@ -270,7 +258,7 @@ Index: gdb-6.8.50.20090209/gdb/i386-linux-nat.c
|
||||
+ /* FOLLOW-FORK-MODE CHILD runs later the CHILD with no restrictions. */
|
||||
+ i386_linux_detach_breakpoints_pid = 0;
|
||||
+
|
||||
+ return i386_remove_watchpoint (addr, len, type);
|
||||
+ return target_remove_watchpoint (addr, len, type);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
@ -278,6 +266,7 @@ Index: gdb-6.8.50.20090209/gdb/i386-linux-nat.c
|
||||
+{
|
||||
+ struct cleanup *old_chain = save_inferior_ptid ();
|
||||
+ int i;
|
||||
+ extern void i386_detach_breakpoints (int detached_pid);
|
||||
+
|
||||
+ i386_linux_detach_breakpoints_pid = detached_pid;
|
||||
+ /* Depend on `!is_lwp (inferior_ptid)' for the I386_* macros. */
|
||||
@ -290,7 +279,7 @@ Index: gdb-6.8.50.20090209/gdb/i386-linux-nat.c
|
||||
|
||||
|
||||
/* Called by libthread_db. Returns a pointer to the thread local
|
||||
@@ -812,6 +868,40 @@ i386_linux_child_post_startup_inferior (
|
||||
@@ -818,6 +875,40 @@ i386_linux_child_post_startup_inferior (
|
||||
super_post_startup_inferior (ptid);
|
||||
}
|
||||
|
||||
@ -331,7 +320,7 @@ Index: gdb-6.8.50.20090209/gdb/i386-linux-nat.c
|
||||
void
|
||||
_initialize_i386_linux_nat (void)
|
||||
{
|
||||
@@ -833,6 +923,9 @@ _initialize_i386_linux_nat (void)
|
||||
@@ -845,6 +936,9 @@ _initialize_i386_linux_nat (void)
|
||||
t->to_fetch_registers = i386_linux_fetch_inferior_registers;
|
||||
t->to_store_registers = i386_linux_store_inferior_registers;
|
||||
|
||||
@ -341,11 +330,11 @@ Index: gdb-6.8.50.20090209/gdb/i386-linux-nat.c
|
||||
/* Register the target. */
|
||||
linux_nat_add_target (t);
|
||||
linux_nat_set_new_thread (t, i386_linux_new_thread);
|
||||
Index: gdb-6.8.50.20090209/gdb/i386-nat.c
|
||||
Index: gdb-6.8.50.20090803/gdb/i386-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/i386-nat.c 2009-01-03 06:57:51.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/i386-nat.c 2009-02-09 16:02:42.000000000 +0100
|
||||
@@ -546,6 +546,17 @@ i386_remove_watchpoint (CORE_ADDR addr,
|
||||
--- gdb-6.8.50.20090803.orig/gdb/i386-nat.c 2009-08-04 07:17:19.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/i386-nat.c 2009-08-04 07:17:58.000000000 +0200
|
||||
@@ -520,6 +520,18 @@ i386_remove_watchpoint (CORE_ADDR addr,
|
||||
return retval;
|
||||
}
|
||||
|
||||
@ -355,18 +344,19 @@ Index: gdb-6.8.50.20090209/gdb/i386-nat.c
|
||||
+ int i;
|
||||
+
|
||||
+ /* Do not touch any DR_MIRROR or DR_CONTROL_MIRROR mirrors here. */
|
||||
+ I386_DR_LOW_SET_CONTROL (0);
|
||||
+ ALL_DEBUG_REGISTERS(i)
|
||||
+ I386_DR_LOW_RESET_ADDR (i);
|
||||
+ i386_dr_low.set_control (0);
|
||||
+ if (i386_dr_low.reset_addr)
|
||||
+ ALL_DEBUG_REGISTERS(i)
|
||||
+ i386_dr_low.reset_addr (i);
|
||||
+}
|
||||
+
|
||||
/* Return non-zero if we can watch a memory region that starts at
|
||||
address ADDR and whose length is LEN bytes. */
|
||||
|
||||
Index: gdb-6.8.50.20090209/gdb/ia64-linux-nat.c
|
||||
Index: gdb-6.8.50.20090803/gdb/ia64-linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/ia64-linux-nat.c 2009-02-09 15:48:43.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/ia64-linux-nat.c 2009-02-09 16:02:42.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/ia64-linux-nat.c 2009-08-04 07:17:19.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/ia64-linux-nat.c 2009-08-04 07:17:58.000000000 +0200
|
||||
@@ -583,6 +583,12 @@ ia64_linux_insert_watchpoint (CORE_ADDR
|
||||
return 0;
|
||||
}
|
||||
@ -415,7 +405,7 @@ Index: gdb-6.8.50.20090209/gdb/ia64-linux-nat.c
|
||||
ia64_linux_new_thread (ptid_t ptid)
|
||||
{
|
||||
int i, any;
|
||||
@@ -805,6 +832,40 @@ ia64_linux_xfer_partial (struct target_o
|
||||
@@ -807,6 +834,40 @@ ia64_linux_xfer_partial (struct target_o
|
||||
offset, len);
|
||||
}
|
||||
|
||||
@ -456,7 +446,7 @@ Index: gdb-6.8.50.20090209/gdb/ia64-linux-nat.c
|
||||
void _initialize_ia64_linux_nat (void);
|
||||
|
||||
/*
|
||||
@@ -899,6 +960,9 @@ _initialize_ia64_linux_nat (void)
|
||||
@@ -901,6 +962,9 @@ _initialize_ia64_linux_nat (void)
|
||||
t->to_insert_watchpoint = ia64_linux_insert_watchpoint;
|
||||
t->to_remove_watchpoint = ia64_linux_remove_watchpoint;
|
||||
|
||||
@ -466,11 +456,11 @@ Index: gdb-6.8.50.20090209/gdb/ia64-linux-nat.c
|
||||
/* Register the target. */
|
||||
linux_nat_add_target (t);
|
||||
linux_nat_set_new_thread (t, ia64_linux_new_thread);
|
||||
Index: gdb-6.8.50.20090209/gdb/ppc-linux-nat.c
|
||||
Index: gdb-6.8.50.20090803/gdb/ppc-linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/ppc-linux-nat.c 2009-01-03 06:57:52.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/ppc-linux-nat.c 2009-02-09 16:02:42.000000000 +0100
|
||||
@@ -1118,6 +1118,12 @@ ppc_linux_insert_watchpoint (CORE_ADDR a
|
||||
--- gdb-6.8.50.20090803.orig/gdb/ppc-linux-nat.c 2009-08-04 07:17:19.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/ppc-linux-nat.c 2009-08-04 07:17:58.000000000 +0200
|
||||
@@ -1377,6 +1377,12 @@ ppc_linux_insert_watchpoint (CORE_ADDR a
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -483,7 +473,7 @@ Index: gdb-6.8.50.20090209/gdb/ppc-linux-nat.c
|
||||
static int
|
||||
ppc_linux_remove_watchpoint (CORE_ADDR addr, int len, int rw)
|
||||
{
|
||||
@@ -1125,6 +1131,11 @@ ppc_linux_remove_watchpoint (CORE_ADDR a
|
||||
@@ -1384,6 +1390,11 @@ ppc_linux_remove_watchpoint (CORE_ADDR a
|
||||
ptid_t ptid;
|
||||
long dabr_value = 0;
|
||||
|
||||
@ -495,7 +485,7 @@ Index: gdb-6.8.50.20090209/gdb/ppc-linux-nat.c
|
||||
saved_dabr_value = 0;
|
||||
ALL_LWPS (lp, ptid)
|
||||
if (ptrace (PTRACE_SET_DEBUGREG, TIDGET (ptid), 0, saved_dabr_value) < 0)
|
||||
@@ -1138,6 +1149,15 @@ ppc_linux_new_thread (ptid_t ptid)
|
||||
@@ -1397,6 +1408,15 @@ ppc_linux_new_thread (ptid_t ptid)
|
||||
ptrace (PTRACE_SET_DEBUGREG, TIDGET (ptid), 0, saved_dabr_value);
|
||||
}
|
||||
|
||||
@ -511,7 +501,7 @@ Index: gdb-6.8.50.20090209/gdb/ppc-linux-nat.c
|
||||
static int
|
||||
ppc_linux_stopped_data_address (struct target_ops *target, CORE_ADDR *addr_p)
|
||||
{
|
||||
@@ -1318,6 +1338,40 @@ ppc_linux_read_description (struct targe
|
||||
@@ -1629,6 +1649,40 @@ ppc_linux_read_description (struct targe
|
||||
return isa205? tdesc_powerpc_isa205_32l : tdesc_powerpc_32l;
|
||||
}
|
||||
|
||||
@ -552,9 +542,9 @@ Index: gdb-6.8.50.20090209/gdb/ppc-linux-nat.c
|
||||
void _initialize_ppc_linux_nat (void);
|
||||
|
||||
void
|
||||
@@ -1343,6 +1397,9 @@ _initialize_ppc_linux_nat (void)
|
||||
|
||||
@@ -1655,6 +1709,9 @@ _initialize_ppc_linux_nat (void)
|
||||
t->to_read_description = ppc_linux_read_description;
|
||||
t->to_auxv_parse = ppc_linux_auxv_parse;
|
||||
|
||||
+ ppc_linux_super_follow_fork = t->to_follow_fork;
|
||||
+ t->to_follow_fork = ppc_linux_follow_fork;
|
||||
@ -562,11 +552,11 @@ Index: gdb-6.8.50.20090209/gdb/ppc-linux-nat.c
|
||||
/* Register the target. */
|
||||
linux_nat_add_target (t);
|
||||
linux_nat_set_new_thread (t, ppc_linux_new_thread);
|
||||
Index: gdb-6.8.50.20090209/gdb/s390-nat.c
|
||||
Index: gdb-6.8.50.20090803/gdb/s390-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/s390-nat.c 2007-11-07 07:36:57.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/s390-nat.c 2009-02-09 16:02:42.000000000 +0100
|
||||
@@ -283,21 +283,15 @@ s390_stopped_by_watchpoint (void)
|
||||
--- gdb-6.8.50.20090803.orig/gdb/s390-nat.c 2009-08-04 07:17:19.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/s390-nat.c 2009-08-04 07:17:58.000000000 +0200
|
||||
@@ -285,21 +285,15 @@ s390_stopped_by_watchpoint (void)
|
||||
}
|
||||
|
||||
static void
|
||||
@ -590,7 +580,7 @@ Index: gdb-6.8.50.20090209/gdb/s390-nat.c
|
||||
{
|
||||
watch_lo_addr = min (watch_lo_addr, area->lo_addr);
|
||||
watch_hi_addr = max (watch_hi_addr, area->hi_addr);
|
||||
@@ -309,7 +303,7 @@ s390_fix_watch_points (ptid_t ptid)
|
||||
@@ -311,7 +305,7 @@ s390_fix_watch_points (ptid_t ptid)
|
||||
if (ptrace (PTRACE_PEEKUSR_AREA, tid, &parea) < 0)
|
||||
perror_with_name (_("Couldn't retrieve watchpoint status"));
|
||||
|
||||
@ -599,7 +589,7 @@ Index: gdb-6.8.50.20090209/gdb/s390-nat.c
|
||||
{
|
||||
per_info.control_regs.bits.em_storage_alteration = 1;
|
||||
per_info.control_regs.bits.storage_alt_space_ctl = 1;
|
||||
@@ -326,6 +320,18 @@ s390_fix_watch_points (ptid_t ptid)
|
||||
@@ -328,6 +322,18 @@ s390_fix_watch_points (ptid_t ptid)
|
||||
perror_with_name (_("Couldn't modify watchpoint status"));
|
||||
}
|
||||
|
||||
@ -618,7 +608,7 @@ Index: gdb-6.8.50.20090209/gdb/s390-nat.c
|
||||
static int
|
||||
s390_insert_watchpoint (CORE_ADDR addr, int len, int type)
|
||||
{
|
||||
@@ -347,6 +353,12 @@ s390_insert_watchpoint (CORE_ADDR addr,
|
||||
@@ -349,6 +355,12 @@ s390_insert_watchpoint (CORE_ADDR addr,
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -631,7 +621,7 @@ Index: gdb-6.8.50.20090209/gdb/s390-nat.c
|
||||
static int
|
||||
s390_remove_watchpoint (CORE_ADDR addr, int len, int type)
|
||||
{
|
||||
@@ -354,6 +366,11 @@ s390_remove_watchpoint (CORE_ADDR addr,
|
||||
@@ -356,6 +368,11 @@ s390_remove_watchpoint (CORE_ADDR addr,
|
||||
ptid_t ptid;
|
||||
struct watch_area *area, **parea;
|
||||
|
||||
@ -643,7 +633,7 @@ Index: gdb-6.8.50.20090209/gdb/s390-nat.c
|
||||
for (parea = &watch_base; *parea; parea = &(*parea)->next)
|
||||
if ((*parea)->lo_addr == addr
|
||||
&& (*parea)->hi_addr == addr + len - 1)
|
||||
@@ -361,8 +378,10 @@ s390_remove_watchpoint (CORE_ADDR addr,
|
||||
@@ -363,8 +380,10 @@ s390_remove_watchpoint (CORE_ADDR addr,
|
||||
|
||||
if (!*parea)
|
||||
{
|
||||
@ -654,7 +644,7 @@ Index: gdb-6.8.50.20090209/gdb/s390-nat.c
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -375,6 +394,15 @@ s390_remove_watchpoint (CORE_ADDR addr,
|
||||
@@ -377,6 +396,15 @@ s390_remove_watchpoint (CORE_ADDR addr,
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -670,7 +660,7 @@ Index: gdb-6.8.50.20090209/gdb/s390-nat.c
|
||||
static int
|
||||
s390_can_use_hw_breakpoint (int type, int cnt, int othertype)
|
||||
{
|
||||
@@ -387,6 +415,39 @@ s390_region_ok_for_hw_watchpoint (CORE_A
|
||||
@@ -389,6 +417,39 @@ s390_region_ok_for_hw_watchpoint (CORE_A
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -710,7 +700,7 @@ Index: gdb-6.8.50.20090209/gdb/s390-nat.c
|
||||
|
||||
void _initialize_s390_nat (void);
|
||||
|
||||
@@ -410,6 +471,9 @@ _initialize_s390_nat (void)
|
||||
@@ -412,6 +473,9 @@ _initialize_s390_nat (void)
|
||||
t->to_insert_watchpoint = s390_insert_watchpoint;
|
||||
t->to_remove_watchpoint = s390_remove_watchpoint;
|
||||
|
||||
@ -720,10 +710,10 @@ Index: gdb-6.8.50.20090209/gdb/s390-nat.c
|
||||
/* Register the target. */
|
||||
linux_nat_add_target (t);
|
||||
linux_nat_set_new_thread (t, s390_fix_watch_points);
|
||||
Index: gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/watchpoint-fork-forkoff.c
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.threads/watchpoint-fork-forkoff.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/watchpoint-fork-forkoff.c 2009-02-09 16:02:42.000000000 +0100
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.threads/watchpoint-fork-forkoff.c 2009-08-04 07:17:58.000000000 +0200
|
||||
@@ -0,0 +1,172 @@
|
||||
+/* Test case for forgotten hw-watchpoints after fork()-off of a process.
|
||||
+
|
||||
@ -897,10 +887,10 @@ Index: gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/watchpoint-fork-forkoff.c
|
||||
+#else
|
||||
+# error "!FOLLOW_PARENT && !FOLLOW_CHILD"
|
||||
+#endif
|
||||
Index: gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c 2009-02-09 16:02:42.000000000 +0100
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c 2009-08-04 07:17:58.000000000 +0200
|
||||
@@ -0,0 +1,154 @@
|
||||
+/* Test case for forgotten hw-watchpoints after fork()-off of a process.
|
||||
+
|
||||
@ -1056,10 +1046,10 @@ Index: gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/watchpoint-fork-mt.c
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
Index: gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/watchpoint-fork.c
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.threads/watchpoint-fork.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/watchpoint-fork.c 2009-02-09 16:02:42.000000000 +0100
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.threads/watchpoint-fork.c 2009-08-04 07:17:58.000000000 +0200
|
||||
@@ -0,0 +1,56 @@
|
||||
+/* Test case for forgotten hw-watchpoints after fork()-off of a process.
|
||||
+
|
||||
@ -1117,10 +1107,10 @@ Index: gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/watchpoint-fork.c
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
Index: gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/watchpoint-fork.exp
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.threads/watchpoint-fork.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/watchpoint-fork.exp 2009-02-09 16:02:42.000000000 +0100
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.threads/watchpoint-fork.exp 2009-08-04 07:17:58.000000000 +0200
|
||||
@@ -0,0 +1,140 @@
|
||||
+# Copyright 2008 Free Software Foundation, Inc.
|
||||
+
|
||||
@ -1262,11 +1252,11 @@ Index: gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/watchpoint-fork.exp
|
||||
+if {[istarget "*-*-linux*"]} {
|
||||
+ test child FOLLOW_CHILD
|
||||
+}
|
||||
Index: gdb-6.8.50.20090209/gdb/doc/gdb.texinfo
|
||||
Index: gdb-6.8.50.20090803/gdb/doc/gdb.texinfo
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/doc/gdb.texinfo 2009-02-09 16:02:35.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/doc/gdb.texinfo 2009-02-09 16:02:42.000000000 +0100
|
||||
@@ -3588,6 +3588,14 @@ confident that no other thread can becom
|
||||
--- gdb-6.8.50.20090803.orig/gdb/doc/gdb.texinfo 2009-08-04 07:17:19.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/doc/gdb.texinfo 2009-08-04 07:17:58.000000000 +0200
|
||||
@@ -3625,6 +3625,14 @@ confident that no other thread can becom
|
||||
software watchpoints as usual. However, @value{GDBN} may not notice
|
||||
when a non-current thread's activity changes the expression. (Hardware
|
||||
watchpoints, in contrast, watch an expression in all threads.)
|
||||
@ -1281,15 +1271,14 @@ Index: gdb-6.8.50.20090209/gdb/doc/gdb.texinfo
|
||||
@end quotation
|
||||
|
||||
@xref{set remote hardware-watchpoint-limit}.
|
||||
Index: gdb-6.8.50.20090209/gdb/config/i386/nm-linux.h
|
||||
Index: gdb-6.8.50.20090803/gdb/config/i386/nm-linux.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/config/i386/nm-linux.h 2009-01-03 06:57:54.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/config/i386/nm-linux.h 2009-02-09 16:02:42.000000000 +0100
|
||||
@@ -46,6 +46,16 @@ extern void i386_linux_dr_reset_addr (in
|
||||
extern unsigned long i386_linux_dr_get_status (void);
|
||||
#define I386_DR_LOW_GET_STATUS() \
|
||||
i386_linux_dr_get_status ()
|
||||
+
|
||||
--- gdb-6.8.50.20090803.orig/gdb/config/i386/nm-linux.h 2009-08-04 07:17:19.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/config/i386/nm-linux.h 2009-08-04 07:17:58.000000000 +0200
|
||||
@@ -29,4 +29,14 @@
|
||||
#define FILL_FPXREGSET
|
||||
#endif
|
||||
|
||||
+/* Remove a watchpoint that watched the memory region which starts at
|
||||
+ * address ADDR, whose length is LEN bytes, and for accesses of the
|
||||
+ * type TYPE. Return 0 on success, -1 on failure. */
|
||||
@ -1299,13 +1288,12 @@ Index: gdb-6.8.50.20090209/gdb/config/i386/nm-linux.h
|
||||
+ insertion/removal to support threads. */
|
||||
+#define target_remove_watchpoint(addr, len, type) \
|
||||
+ i386_linux_remove_watchpoint (addr, len, type)
|
||||
|
||||
|
||||
#ifdef HAVE_PTRACE_GETFPXREGS
|
||||
Index: gdb-6.8.50.20090209/gdb/config/i386/nm-linux64.h
|
||||
+
|
||||
#endif /* nm-linux.h */
|
||||
Index: gdb-6.8.50.20090803/gdb/config/i386/nm-linux64.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/config/i386/nm-linux64.h 2009-01-03 06:57:54.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/config/i386/nm-linux64.h 2009-02-09 16:02:42.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/config/i386/nm-linux64.h 2009-08-04 07:17:19.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/config/i386/nm-linux64.h 2009-08-04 07:17:58.000000000 +0200
|
||||
@@ -51,4 +51,14 @@ extern unsigned long amd64_linux_dr_get_
|
||||
#define I386_DR_LOW_GET_STATUS() \
|
||||
amd64_linux_dr_get_status ()
|
||||
@ -1321,12 +1309,15 @@ Index: gdb-6.8.50.20090209/gdb/config/i386/nm-linux64.h
|
||||
+ amd64_linux_remove_watchpoint (addr, len, type)
|
||||
+
|
||||
#endif /* nm-linux64.h */
|
||||
Index: gdb-6.8.50.20090209/gdb/target.h
|
||||
Index: gdb-6.8.50.20090803/gdb/target.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/target.h 2009-02-09 15:49:25.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/target.h 2009-02-09 16:02:42.000000000 +0100
|
||||
@@ -1113,7 +1113,9 @@ extern char *normal_pid_to_str (ptid_t p
|
||||
#ifndef target_insert_watchpoint
|
||||
--- gdb-6.8.50.20090803.orig/gdb/target.h 2009-08-04 07:17:19.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/target.h 2009-08-04 07:35:13.000000000 +0200
|
||||
@@ -1114,11 +1114,15 @@ extern char *normal_pid_to_str (ptid_t p
|
||||
for write, 1 for read, and 2 for read/write accesses. Returns 0 for
|
||||
success, non-zero for failure. */
|
||||
|
||||
+#ifndef target_insert_watchpoint
|
||||
#define target_insert_watchpoint(addr, len, type) \
|
||||
(*current_target.to_insert_watchpoint) (addr, len, type)
|
||||
+#endif
|
||||
@ -1334,4 +1325,7 @@ Index: gdb-6.8.50.20090209/gdb/target.h
|
||||
+#ifndef target_remove_watchpoint
|
||||
#define target_remove_watchpoint(addr, len, type) \
|
||||
(*current_target.to_remove_watchpoint) (addr, len, type)
|
||||
#endif
|
||||
+#endif
|
||||
|
||||
#define target_insert_hw_breakpoint(gdbarch, bp_tgt) \
|
||||
(*current_target.to_insert_hw_breakpoint) (gdbarch, bp_tgt)
|
||||
|
@ -21,11 +21,11 @@
|
||||
|
||||
Port to GDB-6.8pre.
|
||||
|
||||
Index: gdb-6.8.50.20081209/gdb/inferior.h
|
||||
Index: gdb-6.8.50.20090803/gdb/inferior.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081209.orig/gdb/inferior.h 2008-11-20 01:35:23.000000000 +0100
|
||||
+++ gdb-6.8.50.20081209/gdb/inferior.h 2008-12-10 01:22:23.000000000 +0100
|
||||
@@ -168,7 +168,15 @@ extern void reopen_exec_file (void);
|
||||
--- gdb-6.8.50.20090803.orig/gdb/inferior.h 2009-06-28 02:20:22.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/inferior.h 2009-08-03 17:19:56.000000000 +0200
|
||||
@@ -181,7 +181,15 @@ extern void reopen_exec_file (void);
|
||||
/* The `resume' routine should only be called in special circumstances.
|
||||
Normally, use `proceed', which handles a lot of bookkeeping. */
|
||||
|
||||
@ -42,20 +42,20 @@ Index: gdb-6.8.50.20081209/gdb/inferior.h
|
||||
|
||||
/* From misc files */
|
||||
|
||||
Index: gdb-6.8.50.20081209/gdb/infrun.c
|
||||
Index: gdb-6.8.50.20090803/gdb/infrun.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081209.orig/gdb/infrun.c 2008-12-02 20:20:23.000000000 +0100
|
||||
+++ gdb-6.8.50.20081209/gdb/infrun.c 2008-12-10 01:23:46.000000000 +0100
|
||||
@@ -73,7 +73,7 @@ static int follow_fork (void);
|
||||
--- gdb-6.8.50.20090803.orig/gdb/infrun.c 2009-07-31 01:01:27.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/infrun.c 2009-08-03 21:39:28.000000000 +0200
|
||||
@@ -74,7 +74,7 @@ static int follow_fork (void);
|
||||
static void set_schedlock_func (char *args, int from_tty,
|
||||
struct cmd_list_element *c);
|
||||
|
||||
-static int currently_stepping (struct thread_info *tp);
|
||||
+static enum resume_step currently_stepping (struct thread_info *tp);
|
||||
|
||||
static int currently_stepping_callback (struct thread_info *tp, void *data);
|
||||
|
||||
@@ -961,7 +961,7 @@ set_schedlock_func (char *args, int from
|
||||
static int currently_stepping_or_nexting_callback (struct thread_info *tp,
|
||||
void *data);
|
||||
@@ -1137,7 +1137,7 @@ maybe_software_singlestep (struct gdbarc
|
||||
STEP nonzero if we should step (zero to continue instead).
|
||||
SIG is the signal to give the inferior (zero for none). */
|
||||
void
|
||||
@ -64,7 +64,7 @@ Index: gdb-6.8.50.20081209/gdb/infrun.c
|
||||
{
|
||||
int should_resume = 1;
|
||||
struct cleanup *old_cleanups = make_cleanup (resume_cleanups, 0);
|
||||
@@ -975,10 +975,12 @@ resume (int step, enum target_signal sig
|
||||
@@ -1149,10 +1149,12 @@ resume (int step, enum target_signal sig
|
||||
QUIT;
|
||||
|
||||
if (debug_infrun)
|
||||
@ -81,7 +81,7 @@ Index: gdb-6.8.50.20081209/gdb/infrun.c
|
||||
|
||||
/* Some targets (e.g. Solaris x86) have a kernel bug when stepping
|
||||
over an instruction that causes a page fault without triggering
|
||||
@@ -1127,9 +1129,10 @@ a command like `return' or `jump' to con
|
||||
@@ -1271,9 +1273,10 @@ a command like `return' or `jump' to con
|
||||
individually. */
|
||||
resume_ptid = inferior_ptid;
|
||||
}
|
||||
@ -94,16 +94,16 @@ Index: gdb-6.8.50.20081209/gdb/infrun.c
|
||||
{
|
||||
/* User-settable 'scheduler' mode requires solo thread resume. */
|
||||
resume_ptid = inferior_ptid;
|
||||
@@ -1302,7 +1305,7 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||
struct gdbarch *gdbarch = get_regcache_arch (regcache);
|
||||
@@ -1474,7 +1477,7 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||
struct gdbarch *gdbarch;
|
||||
struct thread_info *tp;
|
||||
CORE_ADDR pc = regcache_read_pc (regcache);
|
||||
CORE_ADDR pc;
|
||||
- int oneproc = 0;
|
||||
+ enum resume_step resume_step = RESUME_STEP_CONTINUE;
|
||||
|
||||
if (step > 0)
|
||||
step_start_function = find_pc_function (pc);
|
||||
@@ -1322,13 +1325,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||
/* If we're stopped at a fork/vfork, follow the branch set by the
|
||||
"set follow-fork-mode" command; otherwise, we'll just proceed
|
||||
@@ -1508,13 +1511,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||
actually be executing the breakpoint insn anyway.
|
||||
We'll be (un-)executing the previous instruction. */
|
||||
|
||||
@ -119,7 +119,7 @@ Index: gdb-6.8.50.20081209/gdb/infrun.c
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1359,13 +1362,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||
@@ -1545,13 +1548,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||
is required it returns TRUE and sets the current thread to
|
||||
the old thread. */
|
||||
if (prepare_to_proceed (step))
|
||||
@ -135,7 +135,7 @@ Index: gdb-6.8.50.20081209/gdb/infrun.c
|
||||
{
|
||||
tp->trap_expected = 1;
|
||||
/* If displaced stepping is enabled, we can step over the
|
||||
@@ -1451,8 +1454,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||
@@ -1637,8 +1640,13 @@ proceed (CORE_ADDR addr, enum target_sig
|
||||
/* Reset to normal state. */
|
||||
init_infwait_state ();
|
||||
|
||||
@ -150,16 +150,21 @@ Index: gdb-6.8.50.20081209/gdb/infrun.c
|
||||
|
||||
/* Wait for it to stop (if not standalone)
|
||||
and in any case decode why it stopped, and act accordingly. */
|
||||
@@ -3690,10 +3698,16 @@ currently_stepping_callback (struct thre
|
||||
return tp != data && currently_stepping_thread (tp);
|
||||
}
|
||||
@@ -4171,13 +4179,18 @@ infrun: not switching back to stepped th
|
||||
|
||||
/* Is thread TP in the middle of single-stepping? */
|
||||
|
||||
-static int
|
||||
+static enum resume_step
|
||||
currently_stepping (struct thread_info *tp)
|
||||
{
|
||||
- return currently_stepping_thread (tp) || bpstat_should_step ();
|
||||
+ if (currently_stepping_thread (tp))
|
||||
- return ((tp->step_range_end && tp->step_resume_breakpoint == NULL)
|
||||
- || tp->trap_expected
|
||||
- || tp->stepping_through_solib_after_catch
|
||||
- || bpstat_should_step ());
|
||||
+ if ((tp->step_range_end && tp->step_resume_breakpoint == NULL)
|
||||
+ || tp->trap_expected
|
||||
+ || tp->stepping_through_solib_after_catch)
|
||||
+ return RESUME_STEP_USER;
|
||||
+
|
||||
+ if (bpstat_should_step ())
|
||||
@ -168,12 +173,12 @@ Index: gdb-6.8.50.20081209/gdb/infrun.c
|
||||
+ return RESUME_STEP_CONTINUE;
|
||||
}
|
||||
|
||||
/* Inferior has stepped into a subroutine call with source code that
|
||||
Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||
/* Returns true if any thread *but* the one passed in "data" is in the
|
||||
Index: gdb-6.8.50.20090803/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081209.orig/gdb/linux-nat.c 2008-12-02 08:57:36.000000000 +0100
|
||||
+++ gdb-6.8.50.20081209/gdb/linux-nat.c 2008-12-10 01:22:23.000000000 +0100
|
||||
@@ -2343,7 +2343,10 @@ count_events_callback (struct lwp_info *
|
||||
--- gdb-6.8.50.20090803.orig/gdb/linux-nat.c 2009-07-31 17:25:21.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/linux-nat.c 2009-08-03 21:39:10.000000000 +0200
|
||||
@@ -2351,7 +2351,10 @@ count_events_callback (struct lwp_info *
|
||||
static int
|
||||
select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
|
||||
{
|
||||
@ -185,10 +190,10 @@ Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
Index: gdb-6.8.50.20081209/gdb/linux-nat.h
|
||||
Index: gdb-6.8.50.20090803/gdb/linux-nat.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081209.orig/gdb/linux-nat.h 2008-07-27 23:12:40.000000000 +0200
|
||||
+++ gdb-6.8.50.20081209/gdb/linux-nat.h 2008-12-10 01:22:23.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/linux-nat.h 2009-05-18 19:11:25.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/linux-nat.h 2009-08-03 21:39:09.000000000 +0200
|
||||
@@ -55,8 +55,8 @@ struct lwp_info
|
||||
/* If non-zero, a pending wait status. */
|
||||
int status;
|
||||
|
@ -1,61 +0,0 @@
|
||||
Index: gdb-6.8.50.20090226/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090226.orig/gdb/linux-nat.c 2009-02-27 00:04:35.000000000 +0100
|
||||
+++ gdb-6.8.50.20090226/gdb/linux-nat.c 2009-02-27 07:51:44.000000000 +0100
|
||||
@@ -1790,15 +1790,17 @@ resume_set_callback (struct lwp_info *lp
|
||||
|
||||
static void
|
||||
linux_nat_resume (struct target_ops *ops,
|
||||
- ptid_t ptid, int step, enum target_signal signo)
|
||||
+ ptid_t ptid, int step_int, enum target_signal signo)
|
||||
{
|
||||
struct lwp_info *lp;
|
||||
int resume_all;
|
||||
+ enum resume_step step = step_int;
|
||||
|
||||
if (debug_linux_nat)
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"LLR: Preparing to %s %s, %s, inferior_ptid %s\n",
|
||||
- step ? "step" : "resume",
|
||||
+ (step == RESUME_STEP_NEEDED
|
||||
+ ? "needed" : (step ? "step" : "resume")),
|
||||
target_pid_to_str (ptid),
|
||||
signo ? strsignal (signo) : "0",
|
||||
target_pid_to_str (inferior_ptid));
|
||||
@@ -2740,6 +2742,9 @@ linux_nat_filter_event (int lwpid, int s
|
||||
/* Check if the thread has exited. */
|
||||
if ((WIFEXITED (status) || WIFSIGNALED (status)) && num_lwps > 1)
|
||||
{
|
||||
+ enum resume_step step = lp->step;
|
||||
+ pid_t pid = GET_PID (lp->ptid);
|
||||
+
|
||||
/* If this is the main thread, we must stop all threads and
|
||||
verify if they are still alive. This is because in the nptl
|
||||
thread model, there is no signal issued for exiting LWPs
|
||||
@@ -2763,6 +2768,26 @@ linux_nat_filter_event (int lwpid, int s
|
||||
|
||||
exit_lwp (lp);
|
||||
|
||||
+ if (step == RESUME_STEP_USER)
|
||||
+ {
|
||||
+ /* Now stop the closest LWP's ... */
|
||||
+ lp = find_lwp_pid (pid_to_ptid (pid));
|
||||
+ if (!lp)
|
||||
+ lp = lwp_list;
|
||||
+ gdb_assert (lp != NULL);
|
||||
+ errno = 0;
|
||||
+ ptrace (PTRACE_CONT, GET_LWP (lp->ptid), 0,
|
||||
+ (void *) (unsigned long) SIGSTOP);
|
||||
+ if (debug_linux_nat)
|
||||
+ fprintf_unfiltered (gdb_stdlog,
|
||||
+ "PTRACE_CONT %s, 0, 0 (%s)\n",
|
||||
+ target_pid_to_str (lp->ptid),
|
||||
+ errno ? safe_strerror (errno)
|
||||
+ : "OK");
|
||||
+ /* Avoid the silent `delayed SIGSTOP' handling. */
|
||||
+ lp->signalled = 0;
|
||||
+ }
|
||||
+
|
||||
/* If there is at least one more LWP, then the exit signal was
|
||||
not the end of the debugged application and should be
|
||||
ignored. */
|
@ -116,93 +116,3 @@ frames-invalid can happen asynchronously.
|
||||
"array partial with expressions" 4 "intarray2\[3\]"
|
||||
|
||||
gdb_test "print intarray2\[2\] == 0" " = 1" "element 2 not changed, == 4"
|
||||
--- gdb-6.8.50.20090209/gdb/testsuite/gdb.base/annota1.exp-orig 2009-02-09 16:31:11.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/testsuite/gdb.base/annota1.exp 2009-02-09 21:27:38.000000000 +0100
|
||||
@@ -286,7 +286,7 @@ if [target_info exists gdb,nosignals] {
|
||||
} else {
|
||||
send_gdb "signal SIGUSR1\n"
|
||||
gdb_expect {
|
||||
- -re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n${escapedsrcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" \
|
||||
+ -re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\r\n(\r\n\032\032frames-invalid\r\n)*\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n${escapedsrcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" \
|
||||
{ pass "send SIGUSR1" }
|
||||
-re "\r\n\032\032post-prompt\r\nContinuing with signal SIGUSR1.\r\n\r\n\032\032starting\r\n\r\n\032\032frames-invalid\r\n\r\n\032\032breakpoint 2\r\n\r\nBreakpoint 2, \r\n\032\032frame-begin 0 $hex\r\n\r\n\032\032frame-function-name\r\nhandle_USR1\r\n\032\032frame-args\r\n \\(\r\n\032\032arg-begin\r\nsig\r\n\032\032arg-name-end\r\n=\r\n\032\032arg-value -\r\n$decimal\r\n\032\032arg-end\r\n\\)\r\n\032\032frame-source-begin\r\n at \r\n\032\032frame-source-file\r\n.*${srcfile}\r\n\032\032frame-source-file-end\r\n:\r\n\032\032frame-source-line\r\n.*\r\n\032\032frame-source-end\r\n\r\n\r\n\032\032source.*annota1.c:.*:.*:beg:$hex\r\n\r\n\032\032frame-end\r\n\r\n\032\032stopped\r\n$gdb_prompt$" \
|
||||
{ setup_xfail "*-*-*" 1270
|
||||
--- ./gdb/testsuite/gdb.base/auxv.exp 2009-02-11 00:54:54.000000000 +0100
|
||||
+++ ./gdb/testsuite/gdb.base/auxv.exp 2009-02-11 00:51:30.000000000 +0100
|
||||
@@ -78,8 +78,10 @@ proc fetch_auxv {test} {
|
||||
|
||||
set auxv_lines {}
|
||||
set bad -1
|
||||
+ # Former trailing `\[\r\n\]+' may eat just \r leaving \n in the buffer
|
||||
+ # corrupting the next matches.
|
||||
if {[gdb_test_multiple "info auxv" $test {
|
||||
- -re "info auxv\[\r\n\]+" {
|
||||
+ -re "info auxv\r\n" {
|
||||
exp_continue
|
||||
}
|
||||
-ex "The program has no auxiliary information now" {
|
||||
@@ -94,20 +96,20 @@ proc fetch_auxv {test} {
|
||||
set bad 1
|
||||
exp_continue
|
||||
}
|
||||
- -re "^\[0-9\]+\[ \t\]+(AT_\[^ \t\]+)\[^\r\n\]+\[\r\n\]+" {
|
||||
+ -re "^\[0-9\]+\[ \t\]+(AT_\[^ \t\]+)\[^\r\n\]+\r\n" {
|
||||
lappend auxv_lines $expect_out(0,string)
|
||||
exp_continue
|
||||
}
|
||||
- -re "^\[0-9\]+\[ \t\]+\\?\\?\\?\[^\r\n\]+\[\r\n\]+" {
|
||||
+ -re "^\[0-9\]+\[ \t\]+\\?\\?\\?\[^\r\n\]+\r\n" {
|
||||
warning "Unrecognized tag value: $expect_out(0,string)"
|
||||
set bad 1
|
||||
lappend auxv_lines $expect_out(0,string)
|
||||
exp_continue
|
||||
}
|
||||
- -re ".*$gdb_prompt $" {
|
||||
+ -re "$gdb_prompt $" {
|
||||
incr bad
|
||||
}
|
||||
- -re "^\[^\r\n\]+\[\r\n\]+" {
|
||||
+ -re "^\[^\r\n\]+\r\n" {
|
||||
if {!$bad} {
|
||||
warning "Unrecognized output: $expect_out(0,string)"
|
||||
set bad 1
|
||||
--- ./gdb/testsuite/gdb.base/callfuncs.exp 2009-01-03 06:58:03.000000000 +0100
|
||||
+++ ./gdb/testsuite/gdb.base/callfuncs.exp 2009-02-11 00:51:42.000000000 +0100
|
||||
@@ -249,15 +249,17 @@ proc fetch_all_registers {test} {
|
||||
|
||||
set all_registers_lines {}
|
||||
set bad -1
|
||||
+ # Former trailing `\[\r\n\]+' may eat just \r leaving \n in the buffer
|
||||
+ # corrupting the next matches.
|
||||
if {[gdb_test_multiple "info all-registers" $test {
|
||||
- -re "info all-registers\[\r\n\]+" {
|
||||
+ -re "info all-registers\r\n" {
|
||||
exp_continue
|
||||
}
|
||||
-ex "The program has no registers now" {
|
||||
set bad 1
|
||||
exp_continue
|
||||
}
|
||||
- -re "^bspstore\[ \t\]+\[^\r\n\]+\[\r\n\]+" {
|
||||
+ -re "^bspstore\[ \t\]+\[^\r\n\]+\r\n" {
|
||||
if [istarget "ia64-*-*"] {
|
||||
# Filter out bspstore which is specially tied to bsp,
|
||||
# giving spurious differences.
|
||||
@@ -266,14 +268,14 @@ proc fetch_all_registers {test} {
|
||||
}
|
||||
exp_continue
|
||||
}
|
||||
- -re "^\[^ \t\]+\[ \t\]+\[^\r\n\]+\[\r\n\]+" {
|
||||
+ -re "^\[^ \t\]+\[ \t\]+\[^\r\n\]+\r\n" {
|
||||
lappend all_registers_lines $expect_out(0,string)
|
||||
exp_continue
|
||||
}
|
||||
- -re ".*$gdb_prompt $" {
|
||||
+ -re "$gdb_prompt $" {
|
||||
incr bad
|
||||
}
|
||||
- -re "^\[^\r\n\]+\[\r\n\]+" {
|
||||
+ -re "^\[^\r\n\]+\r\n" {
|
||||
if {!$bad} {
|
||||
warning "Unrecognized output: $expect_out(0,string)"
|
||||
set bad 1
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: gdb-6.8.50.20090209/gdb/linux-nat.c
|
||||
Index: gdb-6.8.50.20090803/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/linux-nat.c 2009-02-09 16:12:23.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/linux-nat.c 2009-02-09 16:15:30.000000000 +0100
|
||||
@@ -204,6 +204,9 @@ blocked. */
|
||||
--- gdb-6.8.50.20090803.orig/gdb/linux-nat.c 2009-08-03 17:24:03.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/linux-nat.c 2009-08-03 17:27:23.000000000 +0200
|
||||
@@ -202,6 +202,9 @@ blocked. */
|
||||
static struct target_ops *linux_ops;
|
||||
static struct target_ops linux_ops_saved;
|
||||
|
||||
@ -12,10 +12,10 @@ Index: gdb-6.8.50.20090209/gdb/linux-nat.c
|
||||
/* The method to call, if any, when a new thread is attached. */
|
||||
static void (*linux_nat_new_thread) (ptid_t);
|
||||
|
||||
@@ -902,7 +905,14 @@ linux_child_follow_fork (struct target_o
|
||||
fork_save_infrun_state (fp, 0);
|
||||
@@ -790,7 +793,14 @@ linux_child_follow_fork (struct target_o
|
||||
linux_parent_pid = parent_pid;
|
||||
}
|
||||
else
|
||||
else if (detach_fork)
|
||||
- target_detach (NULL, 0);
|
||||
+ {
|
||||
+ /* We should check PID_WAS_STOPPED and detach it stopped accordingly.
|
||||
@ -27,8 +27,8 @@ Index: gdb-6.8.50.20090209/gdb/linux-nat.c
|
||||
+ }
|
||||
|
||||
inferior_ptid = ptid_build (child_pid, child_pid, 0);
|
||||
|
||||
@@ -1229,6 +1239,7 @@ linux_nat_post_attach_wait (ptid_t ptid,
|
||||
add_thread (inferior_ptid);
|
||||
@@ -1231,6 +1241,7 @@ linux_nat_post_attach_wait (ptid_t ptid,
|
||||
if (debug_linux_nat)
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"LNPAW: Attaching to a stopped process\n");
|
||||
@ -36,7 +36,7 @@ Index: gdb-6.8.50.20090209/gdb/linux-nat.c
|
||||
|
||||
/* The process is definitely stopped. It is in a job control
|
||||
stop, unless the kernel predates the TASK_STOPPED /
|
||||
@@ -1561,6 +1572,9 @@ GPT: lwp %s had signal %s, but it is in
|
||||
@@ -1512,6 +1523,9 @@ GPT: lwp %s had signal %s, but it is in
|
||||
*status = lp->status;
|
||||
}
|
||||
|
||||
@ -46,7 +46,7 @@ Index: gdb-6.8.50.20090209/gdb/linux-nat.c
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1671,6 +1685,8 @@ linux_nat_detach (struct target_ops *ops
|
||||
@@ -1621,6 +1635,8 @@ linux_nat_detach (struct target_ops *ops
|
||||
}
|
||||
else
|
||||
linux_ops->to_detach (ops, args, from_tty);
|
||||
@ -55,7 +55,7 @@ Index: gdb-6.8.50.20090209/gdb/linux-nat.c
|
||||
}
|
||||
|
||||
/* Resume LP. */
|
||||
@@ -1825,6 +1841,14 @@ linux_nat_resume (ptid_t ptid, int step_
|
||||
@@ -1774,6 +1790,14 @@ linux_nat_resume (struct target_ops *ops
|
||||
resume_callback. */
|
||||
lp->stopped = 0;
|
||||
|
||||
@ -67,10 +67,10 @@ Index: gdb-6.8.50.20090209/gdb/linux-nat.c
|
||||
+ if (!step && lp && pid_was_stopped == GET_PID (lp->ptid))
|
||||
+ pid_was_stopped = 0;
|
||||
+
|
||||
if (resume_all)
|
||||
iterate_over_lwps (resume_callback, NULL);
|
||||
if (resume_many)
|
||||
iterate_over_lwps (ptid, resume_callback, NULL);
|
||||
|
||||
@@ -3316,6 +3340,8 @@ linux_nat_mourn_inferior (struct target_
|
||||
@@ -3322,6 +3346,8 @@ linux_nat_mourn_inferior (struct target_
|
||||
there are other viable forks to debug. Delete the exiting
|
||||
one and context-switch to the first available. */
|
||||
linux_fork_mourn_inferior ();
|
||||
@ -79,10 +79,10 @@ Index: gdb-6.8.50.20090209/gdb/linux-nat.c
|
||||
}
|
||||
|
||||
/* Convert a native/host siginfo object, into/from the siginfo in the
|
||||
Index: gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/attach-stopped.exp
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.threads/attach-stopped.exp
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/testsuite/gdb.threads/attach-stopped.exp 2009-01-03 06:58:07.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/attach-stopped.exp 2009-02-09 16:12:41.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/testsuite/gdb.threads/attach-stopped.exp 2009-01-03 06:58:07.000000000 +0100
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.threads/attach-stopped.exp 2009-08-03 17:26:22.000000000 +0200
|
||||
@@ -62,7 +62,65 @@ proc corefunc { threadtype } {
|
||||
gdb_reinitialize_dir $srcdir/$subdir
|
||||
gdb_load ${binfile}
|
||||
@ -150,10 +150,10 @@ Index: gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/attach-stopped.exp
|
||||
|
||||
set test "$threadtype: attach2 to stopped, after setting file"
|
||||
gdb_test_multiple "attach $testpid" "$test" {
|
||||
Index: gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/attachstop-mt.exp
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.threads/attachstop-mt.exp
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/testsuite/gdb.threads/attachstop-mt.exp 2009-01-03 06:58:07.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/testsuite/gdb.threads/attachstop-mt.exp 2009-02-09 16:12:41.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/testsuite/gdb.threads/attachstop-mt.exp 2009-01-03 06:58:07.000000000 +0100
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.threads/attachstop-mt.exp 2009-08-03 17:26:22.000000000 +0200
|
||||
@@ -176,12 +176,23 @@ gdb_test "bt" ".*sleep.*(func|main).*" "
|
||||
# Exit and detach the process.
|
||||
gdb_exit
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: gdb-6.8.50.20081209/bfd/elf-bfd.h
|
||||
Index: gdb-6.8.50.20090803/bfd/elf-bfd.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081209.orig/bfd/elf-bfd.h 2008-12-03 15:50:57.000000000 +0100
|
||||
+++ 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
|
||||
--- gdb-6.8.50.20090803.orig/bfd/elf-bfd.h 2009-07-23 15:00:20.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/bfd/elf-bfd.h 2009-08-03 17:21:25.000000000 +0200
|
||||
@@ -2115,7 +2115,7 @@ extern Elf_Internal_Phdr * _bfd_elf_find
|
||||
extern char *elfcore_write_note
|
||||
(bfd *, char *, int *, const char *, int, const void *, int);
|
||||
extern char *elfcore_write_prpsinfo
|
||||
@ -11,11 +11,11 @@ Index: gdb-6.8.50.20081209/bfd/elf-bfd.h
|
||||
extern char *elfcore_write_prstatus
|
||||
(bfd *, char *, int *, long, int, const void *);
|
||||
extern char * elfcore_write_pstatus
|
||||
Index: gdb-6.8.50.20081209/bfd/elf.c
|
||||
Index: gdb-6.8.50.20090803/bfd/elf.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081209.orig/bfd/elf.c 2008-12-03 15:50:57.000000000 +0100
|
||||
+++ gdb-6.8.50.20081209/bfd/elf.c 2008-12-10 01:35:08.000000000 +0100
|
||||
@@ -8345,6 +8345,7 @@ char *
|
||||
--- gdb-6.8.50.20090803.orig/bfd/elf.c 2009-07-23 15:00:20.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/bfd/elf.c 2009-08-03 17:23:13.000000000 +0200
|
||||
@@ -8381,6 +8381,7 @@ char *
|
||||
elfcore_write_prpsinfo (bfd *abfd,
|
||||
char *buf,
|
||||
int *bufsiz,
|
||||
@ -23,7 +23,7 @@ Index: gdb-6.8.50.20081209/bfd/elf.c
|
||||
const char *fname,
|
||||
const char *psargs)
|
||||
{
|
||||
@@ -8371,9 +8372,15 @@ elfcore_write_prpsinfo (bfd *abfd,
|
||||
@@ -8407,9 +8408,15 @@ elfcore_write_prpsinfo (bfd *abfd,
|
||||
int note_type = NT_PRPSINFO;
|
||||
#endif
|
||||
|
||||
@ -42,7 +42,7 @@ Index: gdb-6.8.50.20081209/bfd/elf.c
|
||||
return elfcore_write_note (abfd, buf, bufsiz,
|
||||
note_name, note_type, &data, sizeof (data));
|
||||
}
|
||||
@@ -8388,9 +8395,15 @@ elfcore_write_prpsinfo (bfd *abfd,
|
||||
@@ -8424,9 +8431,15 @@ elfcore_write_prpsinfo (bfd *abfd,
|
||||
int note_type = NT_PRPSINFO;
|
||||
#endif
|
||||
|
||||
@ -61,19 +61,19 @@ Index: gdb-6.8.50.20081209/bfd/elf.c
|
||||
return elfcore_write_note (abfd, buf, bufsiz,
|
||||
note_name, note_type, &data, sizeof (data));
|
||||
}
|
||||
Index: gdb-6.8.50.20081209/gdb/amd64-linux-nat.c
|
||||
Index: gdb-6.8.50.20090803/gdb/amd64-linux-nat.c
|
||||
===================================================================
|
||||
--- 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
|
||||
--- gdb-6.8.50.20090803.orig/gdb/amd64-linux-nat.c 2009-08-03 17:19:57.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/amd64-linux-nat.c 2009-08-03 17:21:25.000000000 +0200
|
||||
@@ -140,6 +140,7 @@ static int amd64_linux_gregset32_reg_off
|
||||
|
||||
static char *
|
||||
amd64_linux_elfcore_write_prpsinfo (bfd *abfd, char *buf, int *bufsiz,
|
||||
+ void *info,
|
||||
const char *fname, const char *psargs)
|
||||
{
|
||||
if (gdbarch_ptr_bit(current_gdbarch) == 32)
|
||||
@@ -148,14 +149,20 @@ amd64_linux_elfcore_write_prpsinfo (bfd
|
||||
if (gdbarch_ptr_bit (target_gdbarch) == 32)
|
||||
@@ -149,14 +150,20 @@ amd64_linux_elfcore_write_prpsinfo (bfd
|
||||
struct elf_prpsinfo32 data;
|
||||
note_type = NT_PRPSINFO;
|
||||
|
||||
@ -98,11 +98,11 @@ Index: gdb-6.8.50.20081209/gdb/amd64-linux-nat.c
|
||||
}
|
||||
|
||||
static void
|
||||
Index: gdb-6.8.50.20081209/gdb/fbsd-nat.c
|
||||
Index: gdb-6.8.50.20090803/gdb/fbsd-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081209.orig/gdb/fbsd-nat.c 2008-10-28 16:22:12.000000000 +0100
|
||||
+++ 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
|
||||
--- gdb-6.8.50.20090803.orig/gdb/fbsd-nat.c 2009-07-02 19:21:06.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/fbsd-nat.c 2009-08-03 17:21:25.000000000 +0200
|
||||
@@ -211,6 +211,7 @@ fbsd_make_corefile_notes (bfd *obfd, int
|
||||
psargs = reconcat (psargs, psargs, " ", get_inferior_args (), NULL);
|
||||
|
||||
note_data = elfcore_write_prpsinfo (obfd, note_data, note_size,
|
||||
@ -110,19 +110,19 @@ Index: gdb-6.8.50.20081209/gdb/fbsd-nat.c
|
||||
fname, psargs);
|
||||
}
|
||||
|
||||
Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||
Index: gdb-6.8.50.20090803/gdb/linux-nat.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081209.orig/gdb/linux-nat.c 2008-12-10 01:28:14.000000000 +0100
|
||||
+++ gdb-6.8.50.20081209/gdb/linux-nat.c 2008-12-10 01:35:25.000000000 +0100
|
||||
@@ -53,6 +53,7 @@
|
||||
#include <sys/types.h>
|
||||
#include "gdb_dirent.h"
|
||||
--- gdb-6.8.50.20090803.orig/gdb/linux-nat.c 2009-08-03 17:19:56.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/linux-nat.c 2009-08-03 17:24:03.000000000 +0200
|
||||
@@ -55,6 +55,7 @@
|
||||
#include "xml-support.h"
|
||||
#include "terminal.h"
|
||||
#include <sys/vfs.h>
|
||||
+#include "gdb_procfs32.h" /* for struct elf_prpsinfo32 */
|
||||
|
||||
#ifdef HAVE_PERSONALITY
|
||||
# include <sys/personality.h>
|
||||
@@ -216,7 +217,7 @@ static LONGEST (*super_xfer_partial) (st
|
||||
#ifndef SPUFS_MAGIC
|
||||
#define SPUFS_MAGIC 0x23c9b64e
|
||||
@@ -222,7 +223,7 @@ static LONGEST (*super_xfer_partial) (st
|
||||
/* This functions make elfcore note sections.
|
||||
They may get overriden by code adjusting data for multi-target builds. */
|
||||
char *(*linux_elfcore_write_prpsinfo)
|
||||
@ -131,8 +131,8 @@ Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||
char *(*linux_elfcore_write_prstatus)
|
||||
(bfd *, char *, int *, long, int, const void *) = elfcore_write_prstatus;
|
||||
static char *
|
||||
@@ -3614,6 +3615,159 @@ linux_nat_corefile_thread_callback (stru
|
||||
return 0;
|
||||
@@ -3840,6 +3841,159 @@ linux_spu_make_corefile_notes (bfd *obfd
|
||||
return args.note_data;
|
||||
}
|
||||
|
||||
+/* Should be always true for Linux */
|
||||
@ -242,7 +242,7 @@ Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||
+
|
||||
+#if ULONG_MAX > 0xffffffffU
|
||||
+ /* We skip this code on 32-bit gdb. */
|
||||
+ if (gdbarch_ptr_bit (current_gdbarch) == 64)
|
||||
+ if (gdbarch_ptr_bit (target_gdbarch) == 64)
|
||||
+ {
|
||||
+ struct elf_prpsinfo *info = xzalloc (sizeof (*info));
|
||||
+
|
||||
@ -263,7 +263,7 @@ Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||
+ return info;
|
||||
+ }
|
||||
+#endif
|
||||
+ if (gdbarch_ptr_bit (current_gdbarch) == 32)
|
||||
+ if (gdbarch_ptr_bit (target_gdbarch) == 32)
|
||||
+ {
|
||||
+ struct elf_prpsinfo32 *info = xzalloc (sizeof (*info));
|
||||
+
|
||||
@ -291,7 +291,7 @@ Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||
/* Fills the "to_make_corefile_note" target vector. Builds the note
|
||||
section for a corefile, and returns it in a malloc buffer. */
|
||||
|
||||
@@ -3633,8 +3787,14 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||
@@ -3860,8 +4014,14 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||
|
||||
if (get_exec_file (0))
|
||||
{
|
||||
@ -306,7 +306,7 @@ Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||
if (get_inferior_args ())
|
||||
{
|
||||
char *string_end;
|
||||
@@ -3650,9 +3810,15 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||
@@ -3877,9 +4037,15 @@ linux_nat_make_corefile_notes (bfd *obfd
|
||||
psargs_end - string_end);
|
||||
}
|
||||
}
|
||||
@ -324,11 +324,11 @@ Index: gdb-6.8.50.20081209/gdb/linux-nat.c
|
||||
}
|
||||
|
||||
/* Dump information for threads. */
|
||||
Index: gdb-6.8.50.20081209/gdb/linux-nat.h
|
||||
Index: gdb-6.8.50.20090803/gdb/linux-nat.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081209.orig/gdb/linux-nat.h 2008-12-10 01:27:33.000000000 +0100
|
||||
+++ 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
|
||||
--- gdb-6.8.50.20090803.orig/gdb/linux-nat.h 2009-08-03 17:19:56.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/linux-nat.h 2009-08-03 17:21:25.000000000 +0200
|
||||
@@ -148,7 +148,7 @@ struct siginfo *linux_nat_get_siginfo (p
|
||||
/* These functions make elfcore note sections.
|
||||
They may get overriden by code adjusting data for multi-target builds. */
|
||||
extern char *(*linux_elfcore_write_prpsinfo)
|
||||
@ -337,11 +337,11 @@ Index: gdb-6.8.50.20081209/gdb/linux-nat.h
|
||||
extern char *(*linux_elfcore_write_prstatus)
|
||||
(bfd *, char *, int *, long, int, const void *);
|
||||
extern char *(*linux_elfcore_write_prfpreg)
|
||||
Index: gdb-6.8.50.20081209/gdb/procfs.c
|
||||
Index: gdb-6.8.50.20090803/gdb/procfs.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20081209.orig/gdb/procfs.c 2008-11-09 12:27:17.000000000 +0100
|
||||
+++ 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
|
||||
--- gdb-6.8.50.20090803.orig/gdb/procfs.c 2009-08-01 02:02:04.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/procfs.c 2009-08-03 17:21:25.000000000 +0200
|
||||
@@ -6147,6 +6147,7 @@ procfs_make_note_section (bfd *obfd, int
|
||||
note_data = (char *) elfcore_write_prpsinfo (obfd,
|
||||
note_data,
|
||||
note_size,
|
||||
|
@ -1,8 +1,9 @@
|
||||
diff -d -urpN src.0/gdb/valops.c src.1/gdb/valops.c
|
||||
--- src.0/gdb/valops.c 2008-07-27 04:00:03.000000000 +0200
|
||||
+++ src.1/gdb/valops.c 2008-07-31 15:17:42.000000000 +0200
|
||||
@@ -813,10 +813,18 @@ value_assign (struct value *toval, struc
|
||||
struct frame_info *frame;
|
||||
Index: gdb-6.8.50.20090803/gdb/valops.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090803.orig/gdb/valops.c 2009-08-04 06:30:45.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/valops.c 2009-08-04 06:33:05.000000000 +0200
|
||||
@@ -926,10 +926,18 @@ value_assign (struct value *toval, struc
|
||||
struct gdbarch *gdbarch;
|
||||
int value_reg;
|
||||
|
||||
- /* Figure out which frame this is in currently. */
|
||||
@ -21,4 +22,4 @@ diff -d -urpN src.0/gdb/valops.c src.1/gdb/valops.c
|
||||
+ /* Probably never happens. */
|
||||
if (!frame)
|
||||
error (_("Value being assigned to is no longer active."));
|
||||
|
||||
|
||||
|
@ -5,9 +5,10 @@ gdb/
|
||||
* config.in: Regenerate.
|
||||
* configure: Regenerate.
|
||||
|
||||
diff -up -rup gdb-orig/configure.ac gdb/configure.ac
|
||||
--- ./gdb-orig/configure.ac 2009-03-02 23:39:01.000000000 +0100
|
||||
+++ ./gdb/configure.ac 2009-03-02 23:40:46.000000000 +0100
|
||||
Index: gdb-6.8.50.20090803/gdb/configure.ac
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090803.orig/gdb/configure.ac 2009-08-04 06:32:39.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/configure.ac 2009-08-04 06:33:51.000000000 +0200
|
||||
@@ -30,6 +30,7 @@ AC_GNU_SOURCE
|
||||
AC_AIX
|
||||
AC_ISC_POSIX
|
||||
@ -16,10 +17,11 @@ diff -up -rup gdb-orig/configure.ac gdb/configure.ac
|
||||
AM_PROG_CC_STDC
|
||||
|
||||
AC_CONFIG_AUX_DIR(..)
|
||||
diff -up -rup gdb-orig/config.in gdb/config.in
|
||||
--- ./gdb-orig/config.in 2009-03-02 23:39:01.000000000 +0100
|
||||
+++ ./gdb/config.in 2009-03-02 23:40:53.000000000 +0100
|
||||
@@ -725,6 +725,9 @@
|
||||
Index: gdb-6.8.50.20090803/gdb/config.in
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090803.orig/gdb/config.in 2009-08-04 06:32:39.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/config.in 2009-08-04 06:33:51.000000000 +0200
|
||||
@@ -744,6 +744,9 @@
|
||||
# undef _ALL_SOURCE
|
||||
#endif
|
||||
|
||||
@ -29,7 +31,7 @@ diff -up -rup gdb-orig/config.in gdb/config.in
|
||||
/* Enable GNU extensions on systems that have them. */
|
||||
#ifndef _GNU_SOURCE
|
||||
# undef _GNU_SOURCE
|
||||
@@ -734,6 +737,9 @@
|
||||
@@ -753,6 +756,9 @@
|
||||
<sys/proc.h> problem on IRIX 5. */
|
||||
#undef _KMEMUSER
|
||||
|
||||
@ -39,18 +41,19 @@ diff -up -rup gdb-orig/config.in gdb/config.in
|
||||
/* Define to 1 if on MINIX. */
|
||||
#undef _MINIX
|
||||
|
||||
diff -up -rup gdb-orig/configure gdb/configure
|
||||
--- ./gdb-orig/configure 2009-03-02 23:39:01.000000000 +0100
|
||||
+++ ./gdb/configure 2009-03-02 23:40:49.000000000 +0100
|
||||
@@ -862,6 +862,7 @@ Optional Features:
|
||||
Index: gdb-6.8.50.20090803/gdb/configure
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090803.orig/gdb/configure 2009-08-04 06:32:39.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/configure 2009-08-04 06:33:51.000000000 +0200
|
||||
@@ -874,6 +874,7 @@ Optional Features:
|
||||
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
|
||||
--enable-maintainer-mode enable make rules and dependencies not useful
|
||||
(and sometimes confusing) to the casual installer
|
||||
+ --disable-largefile omit support for large files
|
||||
--disable-dependency-tracking speeds up one-time build
|
||||
--enable-dependency-tracking do not reject slow dependency extractors
|
||||
--enable-targets alternative target configurations
|
||||
@@ -3313,6 +3314,370 @@ _ACEOF
|
||||
--enable-targets=TARGETS
|
||||
@@ -3347,6 +3348,370 @@ _ACEOF
|
||||
|
||||
|
||||
|
||||
|
@ -1,10 +1,10 @@
|
||||
Fix resolving of variables at locations lists in prelinked libs (BZ 466901).
|
||||
|
||||
Index: gdb-6.8.50.20081128/gdb/dwarf2loc.c
|
||||
Index: gdb-6.8.50.20090803/gdb/dwarf2loc.c
|
||||
===================================================================
|
||||
--- 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_
|
||||
--- gdb-6.8.50.20090803.orig/gdb/dwarf2loc.c 2009-08-04 06:29:47.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/dwarf2loc.c 2009-08-04 06:33:35.000000000 +0200
|
||||
@@ -56,7 +56,9 @@ find_location_expression (struct dwarf2_
|
||||
CORE_ADDR low, high;
|
||||
gdb_byte *loc_ptr, *buf_end;
|
||||
int length;
|
||||
@ -13,12 +13,12 @@ Index: gdb-6.8.50.20081128/gdb/dwarf2loc.c
|
||||
+ struct objfile *objfile = objfile1->separate_debug_objfile
|
||||
+ ? objfile1->separate_debug_objfile : objfile1;
|
||||
struct gdbarch *gdbarch = get_objfile_arch (objfile);
|
||||
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
|
||||
unsigned int addr_size = dwarf2_per_cu_addr_size (baton->per_cu);
|
||||
CORE_ADDR base_mask = ~(~(CORE_ADDR)1 << (addr_size * 8 - 1));
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp 2008-12-08 18:00:43.000000000 +0100
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp 2009-08-04 06:33:35.000000000 +0200
|
||||
@@ -0,0 +1,102 @@
|
||||
+# Copyright 2008 Free Software Foundation, Inc.
|
||||
+
|
||||
@ -122,10 +122,10 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp
|
||||
+
|
||||
+# `abort' can get expressed as `*__GI_abort'.
|
||||
+gdb_test "bt full" "in \[^ \]*abort \\(.*in func \\(.*\r\n\[\t \]+i = -?\[0-9\].*in main \\(.*" "Backtrace after abort()"
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c
|
||||
===================================================================
|
||||
--- /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
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c 2009-08-04 06:33:35.000000000 +0200
|
||||
@@ -0,0 +1,26 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
@ -153,10 +153,10 @@ Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c
|
||||
+ func ();
|
||||
+ return 0;
|
||||
+}
|
||||
Index: gdb-6.8.50.20081128/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-func.S
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-func.S
|
||||
===================================================================
|
||||
--- /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
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-func.S 2009-08-04 06:33:35.000000000 +0200
|
||||
@@ -0,0 +1,328 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
|
@ -18,11 +18,11 @@
|
||||
gdb.base/watchpoint.c (global_ptr_ptr): New variable.
|
||||
(func4): New testing code for GLOBAL_PTR_PTR.
|
||||
|
||||
Index: gdb-6.8.50.20090209/gdb/breakpoint.c
|
||||
Index: gdb-6.8.50.20090803/gdb/breakpoint.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/breakpoint.c 2009-02-09 15:39:01.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/breakpoint.c 2009-02-09 16:04:10.000000000 +0100
|
||||
@@ -769,7 +769,15 @@ is_hardware_watchpoint (struct breakpoin
|
||||
--- gdb-6.8.50.20090803.orig/gdb/breakpoint.c 2009-08-04 06:29:47.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/breakpoint.c 2009-08-04 06:32:50.000000000 +0200
|
||||
@@ -823,7 +823,15 @@ is_hardware_watchpoint (struct breakpoin
|
||||
If VAL_CHAIN is non-NULL, *VAL_CHAIN will be released from the
|
||||
value chain. The caller must free the values individually. If
|
||||
VAL_CHAIN is NULL, all generated values will be left on the value
|
||||
@ -39,16 +39,16 @@ Index: gdb-6.8.50.20090209/gdb/breakpoint.c
|
||||
|
||||
static void
|
||||
fetch_watchpoint_value (struct expression *exp, struct value **valp,
|
||||
@@ -5862,7 +5870,7 @@ watch_command_1 (char *arg, int accessfl
|
||||
@@ -6301,7 +6309,7 @@ watch_command_1 (char *arg, int accessfl
|
||||
struct symtab_and_line sal;
|
||||
struct expression *exp;
|
||||
struct block *exp_valid_block;
|
||||
- struct value *val, *mark;
|
||||
+ struct value *val, *mark, *val_chain;
|
||||
struct frame_info *frame;
|
||||
struct frame_info *prev_frame = NULL;
|
||||
char *exp_start = NULL;
|
||||
@@ -5954,6 +5962,27 @@ watch_command_1 (char *arg, int accessfl
|
||||
char *exp_end = NULL;
|
||||
@@ -6392,6 +6400,27 @@ watch_command_1 (char *arg, int accessfl
|
||||
exp_valid_block = innermost_block;
|
||||
mark = value_mark ();
|
||||
fetch_watchpoint_value (exp, &val, NULL, NULL);
|
||||
@ -76,11 +76,11 @@ Index: gdb-6.8.50.20090209/gdb/breakpoint.c
|
||||
if (val != NULL)
|
||||
release_value (val);
|
||||
|
||||
Index: gdb-6.8.50.20090209/gdb/gdbtypes.h
|
||||
Index: gdb-6.8.50.20090803/gdb/gdbtypes.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/gdbtypes.h 2009-02-09 15:51:57.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/gdbtypes.h 2009-02-09 16:04:10.000000000 +0100
|
||||
@@ -70,7 +70,22 @@ enum type_code
|
||||
--- gdb-6.8.50.20090803.orig/gdb/gdbtypes.h 2009-08-04 06:31:58.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/gdbtypes.h 2009-08-04 06:32:50.000000000 +0200
|
||||
@@ -71,7 +71,22 @@ enum type_code
|
||||
TYPE_CODE_UNION, /* C union or Pascal variant part */
|
||||
TYPE_CODE_ENUM, /* Enumeration type */
|
||||
TYPE_CODE_FLAGS, /* Bit flags type */
|
||||
@ -104,11 +104,11 @@ Index: gdb-6.8.50.20090209/gdb/gdbtypes.h
|
||||
TYPE_CODE_INT, /* Integer type */
|
||||
|
||||
/* Floating type. This is *NOT* a complex type. Beware, there are parts
|
||||
Index: gdb-6.8.50.20090209/gdb/doc/gdb.texinfo
|
||||
Index: gdb-6.8.50.20090803/gdb/doc/gdb.texinfo
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/doc/gdb.texinfo 2009-02-09 16:02:42.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/doc/gdb.texinfo 2009-02-09 16:04:10.000000000 +0100
|
||||
@@ -3480,6 +3480,18 @@ This command prints a list of watchpoint
|
||||
--- gdb-6.8.50.20090803.orig/gdb/doc/gdb.texinfo 2009-08-04 06:32:39.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/doc/gdb.texinfo 2009-08-04 06:32:50.000000000 +0200
|
||||
@@ -3517,6 +3517,18 @@ This command prints a list of watchpoint
|
||||
it is the same as @code{info break} (@pxref{Set Breaks}).
|
||||
@end table
|
||||
|
||||
@ -127,10 +127,10 @@ Index: gdb-6.8.50.20090209/gdb/doc/gdb.texinfo
|
||||
@value{GDBN} sets a @dfn{hardware watchpoint} if possible. Hardware
|
||||
watchpoints execute very quickly, and the debugger reports a change in
|
||||
value at the exact instruction where the change occurs. If @value{GDBN}
|
||||
Index: gdb-6.8.50.20090209/gdb/testsuite/gdb.base/watchpoint.c
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.base/watchpoint.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/testsuite/gdb.base/watchpoint.c 2008-03-03 14:24:12.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/testsuite/gdb.base/watchpoint.c 2009-02-09 16:04:10.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/testsuite/gdb.base/watchpoint.c 2008-03-03 14:24:12.000000000 +0100
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.base/watchpoint.c 2009-08-04 06:32:50.000000000 +0200
|
||||
@@ -40,6 +40,7 @@ struct foo struct1, struct2, *ptr1, *ptr
|
||||
int doread = 0;
|
||||
|
||||
@ -150,10 +150,10 @@ Index: gdb-6.8.50.20090209/gdb/testsuite/gdb.base/watchpoint.c
|
||||
}
|
||||
|
||||
int main ()
|
||||
Index: gdb-6.8.50.20090209/gdb/testsuite/gdb.base/watchpoint.exp
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.base/watchpoint.exp
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090209.orig/gdb/testsuite/gdb.base/watchpoint.exp 2009-01-03 06:58:03.000000000 +0100
|
||||
+++ gdb-6.8.50.20090209/gdb/testsuite/gdb.base/watchpoint.exp 2009-02-09 16:05:03.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/testsuite/gdb.base/watchpoint.exp 2009-01-03 06:58:03.000000000 +0100
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.base/watchpoint.exp 2009-08-04 06:32:50.000000000 +0200
|
||||
@@ -641,7 +641,21 @@ proc test_watchpoint_and_breakpoint {} {
|
||||
}
|
||||
}
|
||||
|
@ -1,73 +0,0 @@
|
||||
--- ./gdb/linespec.c 2008-08-27 00:27:33.000000000 +0200
|
||||
+++ ./gdb/linespec.c 2008-08-27 00:53:16.000000000 +0200
|
||||
@@ -284,6 +284,15 @@ find_methods (struct type *t, char *name
|
||||
}
|
||||
|
||||
static int
|
||||
+add_minsym_members_compar (const void *ap, const void *bp)
|
||||
+{
|
||||
+ const char *a = *(const char **) ap;
|
||||
+ const char *b = *(const char **) bp;
|
||||
+
|
||||
+ return strcmp (a, b);
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
add_minsym_members (const char *class_name,
|
||||
const char *member_name,
|
||||
struct minimal_symbol **msym_arr)
|
||||
@@ -293,6 +302,7 @@ add_minsym_members (const char *class_na
|
||||
int i;
|
||||
int comp_len;
|
||||
int counter = 0;
|
||||
+ int src_i, dst_i;
|
||||
|
||||
/* To find the member, we first cheat and use symbol completion.
|
||||
This will give us a list of all the member names including
|
||||
@@ -307,6 +317,28 @@ add_minsym_members (const char *class_na
|
||||
strcat (completion_name, "(");
|
||||
list = make_symbol_completion_list (completion_name,
|
||||
completion_name+1);
|
||||
+ if (list == NULL || list[0] == NULL)
|
||||
+ {
|
||||
+ xfree (completion_name);
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ /* Make the list entries unique - Multi-PC breakpoints are already resolved
|
||||
+ by GDB-6.8+. */
|
||||
+ counter = 0;
|
||||
+ while (list && list[counter] != NULL)
|
||||
+ counter++;
|
||||
+ qsort (list, counter, sizeof (*list), add_minsym_members_compar);
|
||||
+ src_i = dst_i = 0;
|
||||
+ while (src_i + 1 < counter)
|
||||
+ {
|
||||
+ if (strcmp (list[src_i], list[src_i + 1]) != 0)
|
||||
+ list[dst_i++] = list[src_i];
|
||||
+ src_i++;
|
||||
+ }
|
||||
+ list[dst_i++] = list[src_i++];
|
||||
+ gdb_assert (list[src_i] == NULL);
|
||||
+ list[dst_i] = 0;
|
||||
|
||||
/* Now that we have the list, we generate an array of their
|
||||
corresponding minimal symbols. */
|
||||
@@ -319,6 +351,8 @@ add_minsym_members (const char *class_na
|
||||
|
||||
xfree (list);
|
||||
|
||||
+#if 0 /* Multi-PC breakpoints are already resolved by GDB-6.8+. */
|
||||
+
|
||||
/* In the case of constructors, there may be in-charge vs not-in-charge
|
||||
constructors. Check for names with $base which indicates not-in-charge
|
||||
constructors. */
|
||||
@@ -353,6 +387,8 @@ add_minsym_members (const char *class_na
|
||||
}
|
||||
xfree (list);
|
||||
|
||||
+#endif /* Multi-PC breakpoints are already resolved by GDB-6.8+. */
|
||||
+
|
||||
xfree (completion_name);
|
||||
|
||||
return counter;
|
@ -1,8 +1,8 @@
|
||||
Index: gdb-6.8.50.20090302/gdb/dwarf2read.c
|
||||
Index: gdb-6.8.50.20090803/gdb/dwarf2read.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/dwarf2read.c 2009-05-09 20:04:27.000000000 +0200
|
||||
+++ gdb-6.8.50.20090302/gdb/dwarf2read.c 2009-05-09 20:04:56.000000000 +0200
|
||||
@@ -2029,6 +2029,7 @@ scan_partial_symbols (struct partial_die
|
||||
--- gdb-6.8.50.20090803.orig/gdb/dwarf2read.c 2009-08-04 06:32:58.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/dwarf2read.c 2009-08-04 06:33:18.000000000 +0200
|
||||
@@ -2459,6 +2459,7 @@ scan_partial_symbols (struct partial_die
|
||||
add_partial_subprogram (pdi, lowpc, highpc, need_pc, cu);
|
||||
break;
|
||||
case DW_TAG_variable:
|
||||
@ -10,7 +10,7 @@ Index: gdb-6.8.50.20090302/gdb/dwarf2read.c
|
||||
case DW_TAG_typedef:
|
||||
case DW_TAG_union_type:
|
||||
if (!pdi->is_declaration)
|
||||
@@ -2244,6 +2245,7 @@ add_partial_symbol (struct partial_die_i
|
||||
@@ -2654,6 +2655,7 @@ add_partial_symbol (struct partial_die_i
|
||||
}
|
||||
break;
|
||||
case DW_TAG_variable:
|
||||
@ -18,7 +18,7 @@ Index: gdb-6.8.50.20090302/gdb/dwarf2read.c
|
||||
if (pdi->is_external)
|
||||
{
|
||||
/* Global Variable.
|
||||
@@ -4272,7 +4274,8 @@ dwarf2_add_field (struct field_info *fip
|
||||
@@ -4790,7 +4792,8 @@ dwarf2_add_field (struct field_info *fip
|
||||
fip->non_public_fields = 1;
|
||||
}
|
||||
}
|
||||
@ -28,7 +28,7 @@ Index: gdb-6.8.50.20090302/gdb/dwarf2read.c
|
||||
{
|
||||
/* C++ static member. */
|
||||
|
||||
@@ -4762,7 +4765,8 @@ read_structure_type (struct die_info *di
|
||||
@@ -5297,7 +5300,8 @@ read_structure_type (struct die_info *di
|
||||
while (child_die && child_die->tag)
|
||||
{
|
||||
if (child_die->tag == DW_TAG_member
|
||||
@ -38,7 +38,7 @@ Index: gdb-6.8.50.20090302/gdb/dwarf2read.c
|
||||
{
|
||||
/* NOTE: carlton/2002-11-05: A C++ static data member
|
||||
should be a DW_TAG_member that is a declaration, but
|
||||
@@ -4881,6 +4885,7 @@ process_structure_scope (struct die_info
|
||||
@@ -5416,6 +5420,7 @@ process_structure_scope (struct die_info
|
||||
{
|
||||
if (child_die->tag == DW_TAG_member
|
||||
|| child_die->tag == DW_TAG_variable
|
||||
@ -46,15 +46,15 @@ Index: gdb-6.8.50.20090302/gdb/dwarf2read.c
|
||||
|| child_die->tag == DW_TAG_inheritance)
|
||||
{
|
||||
/* Do nothing. */
|
||||
@@ -6656,6 +6661,7 @@ load_partial_dies (bfd *abfd, gdb_byte *
|
||||
@@ -6926,6 +6931,7 @@ load_partial_dies (bfd *abfd, gdb_byte *
|
||||
&& abbrev->tag != DW_TAG_subprogram
|
||||
&& abbrev->tag != DW_TAG_lexical_block
|
||||
&& abbrev->tag != DW_TAG_variable
|
||||
+ && abbrev->tag != DW_TAG_constant
|
||||
&& abbrev->tag != DW_TAG_namespace
|
||||
&& abbrev->tag != DW_TAG_module
|
||||
&& abbrev->tag != DW_TAG_member)
|
||||
@@ -6764,6 +6770,7 @@ load_partial_dies (bfd *abfd, gdb_byte *
|
||||
{
|
||||
@@ -7033,6 +7039,7 @@ load_partial_dies (bfd *abfd, gdb_byte *
|
||||
if (load_all
|
||||
|| abbrev->tag == DW_TAG_subprogram
|
||||
|| abbrev->tag == DW_TAG_variable
|
||||
@ -62,7 +62,7 @@ Index: gdb-6.8.50.20090302/gdb/dwarf2read.c
|
||||
|| abbrev->tag == DW_TAG_namespace
|
||||
|| part_die->is_declaration)
|
||||
{
|
||||
@@ -8549,6 +8556,11 @@ new_symbol (struct die_info *die, struct
|
||||
@@ -8840,6 +8847,11 @@ new_symbol (struct die_info *die, struct
|
||||
/* Do not add the symbol to any lists. It will be found via
|
||||
BLOCK_FUNCTION from the blockvector. */
|
||||
break;
|
||||
|
@ -5,10 +5,10 @@ causing: FAIL: gdb.base/unwindonsignal.exp: unwindonsignal, stack unwound
|
||||
resume() -> target_resume() move of clear_inline_frame_state() is for:
|
||||
gdb.mi/mi-nsmoribund.exp
|
||||
|
||||
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-bt.c
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.opt/inline-bt.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/testsuite/gdb.opt/inline-bt.c 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-bt.c 2009-03-25 22:34:02.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/testsuite/gdb.opt/inline-bt.c 2009-06-28 02:20:24.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.opt/inline-bt.c 2009-08-03 16:57:40.000000000 +0200
|
||||
@@ -13,10 +13,16 @@
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
@ -28,42 +28,10 @@ Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-bt.c
|
||||
|
||||
inline int func1(void)
|
||||
{
|
||||
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-bt.exp
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.opt/inline-cmds.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/testsuite/gdb.opt/inline-bt.exp 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-bt.exp 2009-03-25 22:34:02.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.20090302/gdb/testsuite/gdb.opt/inline-cmds.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/testsuite/gdb.opt/inline-cmds.c 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-cmds.c 2009-03-25 22:34:02.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/testsuite/gdb.opt/inline-cmds.c 2009-06-28 02:20:24.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.opt/inline-cmds.c 2009-08-03 16:57:40.000000000 +0200
|
||||
@@ -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/>. */
|
||||
@ -86,49 +54,11 @@ Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-cmds.c
|
||||
inline int func1(void)
|
||||
{
|
||||
bar ();
|
||||
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-cmds.exp
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.opt/inline-cmds.exp
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/testsuite/gdb.opt/inline-cmds.exp 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-cmds.exp 2009-03-25 22:34:02.000000000 +0100
|
||||
@@ -45,28 +45,28 @@ 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)"
|
||||
+gdb_test "continue" "set breakpoint 1 here.*" "continue to bar (1)"
|
||||
gdb_test "backtrace" "#0 bar.*#1 .*func1.*#2 .*main.*" \
|
||||
"backtrace from bar (1)"
|
||||
gdb_test "up" "#1 .*func1.*" "up from bar (1)"
|
||||
-gdb_test "info frame" ".*inlined into frame.*" "func1 inlined (1)"
|
||||
+gdb_test "info frame" "inlined into frame.*" "func1 inlined (1)"
|
||||
|
||||
-gdb_test "continue" ".*set breakpoint 1 here.*" "continue to bar (2)"
|
||||
+gdb_test "continue" "set breakpoint 1 here.*" "continue to bar (2)"
|
||||
gdb_test "backtrace" "#0 bar.*#1 .*func1.*#2 .*func2.*#3 .*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 "info frame" "inlined into frame.*" "func1 inlined (2)"
|
||||
gdb_test "up" "#2 .*func2.*" "up from func1 (2)"
|
||||
-gdb_test "info frame" ".*inlined into frame.*" "func2 inlined (2)"
|
||||
+gdb_test "info frame" "inlined into frame.*" "func2 inlined (2)"
|
||||
|
||||
-gdb_test "continue" ".*set breakpoint 2 here.*" "continue to marker"
|
||||
+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.
|
||||
@@ -201,7 +201,7 @@ set line3 [gdb_get_line_number "set brea
|
||||
--- gdb-6.8.50.20090803.orig/gdb/testsuite/gdb.opt/inline-cmds.exp 2009-06-28 02:20:24.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.opt/inline-cmds.exp 2009-08-03 16:57:40.000000000 +0200
|
||||
@@ -230,7 +230,7 @@ set line3 [gdb_get_line_number "set brea
|
||||
gdb_breakpoint $line3
|
||||
gdb_continue_to_breakpoint "consecutive func1"
|
||||
|
||||
@ -137,7 +67,7 @@ Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-cmds.exp
|
||||
set msg "next to second func1"
|
||||
gdb_test_multiple "next" $msg {
|
||||
-re ".*func1 .*second call.*$gdb_prompt $" {
|
||||
@@ -224,16 +224,16 @@ set line4 [gdb_get_line_number "set brea
|
||||
@@ -253,16 +253,16 @@ set line4 [gdb_get_line_number "set brea
|
||||
gdb_breakpoint $line4
|
||||
gdb_continue_to_breakpoint "func1 then func3"
|
||||
|
||||
@ -158,7 +88,7 @@ Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-cmds.exp
|
||||
gdb_test "finish" "func1 \\\(\\\);" "finish from marker to func1"
|
||||
|
||||
gdb_test "step" "bar \\\(\\\);" "step into func1 for finish"
|
||||
@@ -268,12 +268,12 @@ gdb_test "step" "noinline \\\(\\\) at .*
|
||||
@@ -297,12 +297,12 @@ gdb_test "step" "noinline \\\(\\\) at .*
|
||||
gdb_test "bt" "#0 noinline.*#1 .*outer_inline1.*#2 .*outer_inline2.*#3 main.*" "backtrace at noinline from outer_inline1"
|
||||
gdb_test "step" "inlined_fn \\\(\\\) at .*" "enter inlined_fn from noinline"
|
||||
gdb_test "bt" "#0 inlined_fn.*#1 noinline.*#2 .*outer_inline1.*#3 .*outer_inline2.*#4 main.*" "backtrace at inlined_fn from noinline"
|
||||
@ -180,10 +110,10 @@ Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-cmds.exp
|
||||
+gdb_test "info frame" "inlined into frame.*" "outer_inline2 inlined"
|
||||
+gdb_test "fini" "" "up from outer_inline2"
|
||||
+gdb_test "info frame" " in main \[^\n\]*\n source language.*" "main not inlined"
|
||||
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-locals.c
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.opt/inline-locals.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/testsuite/gdb.opt/inline-locals.c 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-locals.c 2009-03-25 22:34:02.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/testsuite/gdb.opt/inline-locals.c 2009-06-28 02:20:24.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.opt/inline-locals.c 2009-08-03 16:57:40.000000000 +0200
|
||||
@@ -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/>. */
|
||||
@ -203,21 +133,10 @@ Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-locals.c
|
||||
|
||||
inline int func1(int arg1)
|
||||
{
|
||||
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-locals.exp
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.opt/inline-locals.exp
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/testsuite/gdb.opt/inline-locals.exp 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-locals.exp 2009-03-25 22:34:02.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)"
|
||||
|
||||
--- gdb-6.8.50.20090803.orig/gdb/testsuite/gdb.opt/inline-locals.exp 2009-06-30 17:50:27.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.opt/inline-locals.exp 2009-08-03 16:57:40.000000000 +0200
|
||||
@@ -77,6 +77,9 @@ if { ! $no_frames } {
|
||||
|
||||
# Make sure that locals on the stack are found. This is an array to
|
||||
@ -236,11 +155,11 @@ Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-locals.exp
|
||||
+ setup_kfail *-*-* "gcc/debug.optimization"
|
||||
+}
|
||||
gdb_test "print array\[0\]" "\\\$$decimal = 184" "print local (3)"
|
||||
Index: gdb-6.8.50.20090302/gdb/frame.c
|
||||
Index: gdb-6.8.50.20090803/gdb/frame.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/frame.c 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/frame.c 2009-03-25 22:34:02.000000000 +0100
|
||||
@@ -269,7 +269,7 @@ fprint_frame (struct ui_file *file, stru
|
||||
--- gdb-6.8.50.20090803.orig/gdb/frame.c 2009-08-03 15:56:08.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/frame.c 2009-08-03 16:57:40.000000000 +0200
|
||||
@@ -276,7 +276,7 @@ fprint_frame (struct ui_file *file, stru
|
||||
static struct frame_info *
|
||||
skip_inlined_frames (struct frame_info *frame)
|
||||
{
|
||||
@ -249,7 +168,7 @@ Index: gdb-6.8.50.20090302/gdb/frame.c
|
||||
frame = get_prev_frame (frame);
|
||||
|
||||
return frame;
|
||||
@@ -1670,6 +1670,7 @@ get_frame_address_in_block (struct frame
|
||||
@@ -1715,6 +1715,7 @@ get_frame_address_in_block (struct frame
|
||||
{
|
||||
/* A draft address. */
|
||||
CORE_ADDR pc = get_frame_pc (this_frame);
|
||||
@ -257,7 +176,7 @@ Index: gdb-6.8.50.20090302/gdb/frame.c
|
||||
|
||||
struct frame_info *next_frame = this_frame->next;
|
||||
|
||||
@@ -1712,6 +1713,9 @@ get_frame_address_in_block (struct frame
|
||||
@@ -1757,6 +1758,9 @@ get_frame_address_in_block (struct frame
|
||||
while in an inlined function, then the code address of the
|
||||
"calling" normal function should not be adjusted either. */
|
||||
|
||||
@ -267,7 +186,7 @@ Index: gdb-6.8.50.20090302/gdb/frame.c
|
||||
while (get_frame_type (next_frame) == INLINE_FRAME)
|
||||
next_frame = next_frame->next;
|
||||
|
||||
@@ -1743,7 +1747,7 @@ find_frame_sal (struct frame_info *frame
|
||||
@@ -1788,7 +1792,7 @@ find_frame_sal (struct frame_info *frame
|
||||
sym = inline_skipped_symbol (inferior_ptid);
|
||||
|
||||
init_sal (sal);
|
||||
@ -276,19 +195,19 @@ Index: gdb-6.8.50.20090302/gdb/frame.c
|
||||
{
|
||||
sal->symtab = SYMBOL_SYMTAB (sym);
|
||||
sal->line = SYMBOL_LINE (sym);
|
||||
Index: gdb-6.8.50.20090302/gdb/breakpoint.c
|
||||
Index: gdb-6.8.50.20090803/gdb/breakpoint.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/breakpoint.c 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/breakpoint.c 2009-03-25 22:34:02.000000000 +0100
|
||||
@@ -57,6 +57,7 @@
|
||||
#include "top.h"
|
||||
--- gdb-6.8.50.20090803.orig/gdb/breakpoint.c 2009-08-03 16:56:10.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/breakpoint.c 2009-08-03 17:19:24.000000000 +0200
|
||||
@@ -60,6 +60,7 @@
|
||||
#include "wrapper.h"
|
||||
#include "valprint.h"
|
||||
#include "parser-defs.h"
|
||||
+#include "inline-frame.h"
|
||||
|
||||
#include "mi/mi-common.h"
|
||||
|
||||
@@ -2902,10 +2903,24 @@ bpstat_check_breakpoint_conditions (bpst
|
||||
/* readline include files */
|
||||
#include "readline/readline.h"
|
||||
@@ -3065,10 +3066,24 @@ bpstat_check_breakpoint_conditions (bpst
|
||||
const struct bp_location *bl = bs->breakpoint_at;
|
||||
struct breakpoint *b = bl->owner;
|
||||
|
||||
@ -317,7 +236,7 @@ Index: gdb-6.8.50.20090302/gdb/breakpoint.c
|
||||
{
|
||||
int value_is_zero = 0;
|
||||
|
||||
@@ -3044,6 +3059,12 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
@@ -3215,6 +3230,12 @@ bpstat_stop_status (CORE_ADDR bp_addr, p
|
||||
bs->print = 0;
|
||||
}
|
||||
bs->commands = copy_command_lines (bs->commands);
|
||||
@ -330,7 +249,7 @@ Index: gdb-6.8.50.20090302/gdb/breakpoint.c
|
||||
}
|
||||
|
||||
/* Print nothing for this entry if we dont stop or if we dont print. */
|
||||
@@ -5169,9 +5190,9 @@ set_momentary_breakpoint (struct symtab_
|
||||
@@ -5164,9 +5185,9 @@ set_momentary_breakpoint (struct gdbarch
|
||||
{
|
||||
struct breakpoint *b;
|
||||
|
||||
@ -341,13 +260,13 @@ Index: gdb-6.8.50.20090302/gdb/breakpoint.c
|
||||
+ shortcut the case of returning _from_ an inline frame we still may be
|
||||
+ returning from non-inlined frame _to_ an inlined frame. */
|
||||
|
||||
b = set_raw_breakpoint (sal, type);
|
||||
b = set_raw_breakpoint (gdbarch, sal, type);
|
||||
b->enable_state = bp_enabled;
|
||||
Index: gdb-6.8.50.20090302/gdb/inline-frame.c
|
||||
Index: gdb-6.8.50.20090803/gdb/inline-frame.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/inline-frame.c 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/inline-frame.c 2009-03-25 22:34:02.000000000 +0100
|
||||
@@ -183,6 +183,12 @@ inline_frame_sniffer (const struct frame
|
||||
--- gdb-6.8.50.20090803.orig/gdb/inline-frame.c 2009-06-28 02:20:22.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/inline-frame.c 2009-08-03 16:57:40.000000000 +0200
|
||||
@@ -195,6 +195,12 @@ inline_frame_sniffer (const struct frame
|
||||
if (frame_block == NULL)
|
||||
return 0;
|
||||
|
||||
@ -360,7 +279,7 @@ Index: gdb-6.8.50.20090302/gdb/inline-frame.c
|
||||
/* Calculate DEPTH, the number of inlined functions at this
|
||||
location. */
|
||||
depth = 0;
|
||||
@@ -192,6 +198,10 @@ inline_frame_sniffer (const struct frame
|
||||
@@ -204,6 +210,10 @@ inline_frame_sniffer (const struct frame
|
||||
if (block_inlined_p (cur_block))
|
||||
depth++;
|
||||
|
||||
@ -371,7 +290,7 @@ Index: gdb-6.8.50.20090302/gdb/inline-frame.c
|
||||
cur_block = BLOCK_SUPERBLOCK (cur_block);
|
||||
}
|
||||
|
||||
@@ -275,7 +285,6 @@ skip_inline_frames (ptid_t ptid)
|
||||
@@ -287,7 +297,6 @@ skip_inline_frames (ptid_t ptid)
|
||||
{
|
||||
CORE_ADDR this_pc;
|
||||
struct block *frame_block, *cur_block;
|
||||
@ -379,7 +298,7 @@ Index: gdb-6.8.50.20090302/gdb/inline-frame.c
|
||||
int skip_count = 0;
|
||||
struct inline_state *state;
|
||||
|
||||
@@ -296,10 +305,7 @@ skip_inline_frames (ptid_t ptid)
|
||||
@@ -308,10 +317,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))
|
||||
@ -391,7 +310,7 @@ Index: gdb-6.8.50.20090302/gdb/inline-frame.c
|
||||
else
|
||||
break;
|
||||
}
|
||||
@@ -311,7 +317,6 @@ skip_inline_frames (ptid_t ptid)
|
||||
@@ -323,7 +329,6 @@ skip_inline_frames (ptid_t ptid)
|
||||
state = allocate_inline_frame_state (ptid);
|
||||
state->skipped_frames = skip_count;
|
||||
state->saved_pc = this_pc;
|
||||
@ -399,7 +318,7 @@ Index: gdb-6.8.50.20090302/gdb/inline-frame.c
|
||||
|
||||
if (skip_count != 0)
|
||||
reinit_frame_cache ();
|
||||
@@ -329,6 +334,23 @@ step_into_inline_frame (ptid_t ptid)
|
||||
@@ -341,6 +346,23 @@ step_into_inline_frame (ptid_t ptid)
|
||||
reinit_frame_cache ();
|
||||
}
|
||||
|
||||
@ -423,10 +342,10 @@ Index: gdb-6.8.50.20090302/gdb/inline-frame.c
|
||||
/* Return the number of hidden functions inlined into the current
|
||||
frame. */
|
||||
|
||||
Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-markers.c
|
||||
Index: gdb-6.8.50.20090803/gdb/testsuite/gdb.opt/inline-markers.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/testsuite/gdb.opt/inline-markers.c 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-markers.c 2009-03-25 22:34:02.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/testsuite/gdb.opt/inline-markers.c 2009-06-28 02:20:24.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/testsuite/gdb.opt/inline-markers.c 2009-08-03 16:57:40.000000000 +0200
|
||||
@@ -15,11 +15,6 @@
|
||||
|
||||
extern int x, y;
|
||||
@ -439,11 +358,11 @@ Index: gdb-6.8.50.20090302/gdb/testsuite/gdb.opt/inline-markers.c
|
||||
void marker(void)
|
||||
{
|
||||
x += y; /* set breakpoint 2 here */
|
||||
Index: gdb-6.8.50.20090302/gdb/gdbthread.h
|
||||
Index: gdb-6.8.50.20090803/gdb/gdbthread.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/gdbthread.h 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/gdbthread.h 2009-03-25 22:34:02.000000000 +0100
|
||||
@@ -180,6 +180,12 @@ struct thread_info
|
||||
--- gdb-6.8.50.20090803.orig/gdb/gdbthread.h 2009-08-03 15:55:53.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/gdbthread.h 2009-08-03 16:57:40.000000000 +0200
|
||||
@@ -187,6 +187,12 @@ struct thread_info
|
||||
|
||||
/* Private data used by the target vector implementation. */
|
||||
struct private_thread_info *private;
|
||||
@ -456,11 +375,11 @@ Index: gdb-6.8.50.20090302/gdb/gdbthread.h
|
||||
};
|
||||
|
||||
/* Create an empty thread list, or empty the existing one. */
|
||||
Index: gdb-6.8.50.20090302/gdb/infcmd.c
|
||||
Index: gdb-6.8.50.20090803/gdb/infcmd.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/infcmd.c 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/infcmd.c 2009-03-25 22:34:02.000000000 +0100
|
||||
@@ -1391,11 +1391,11 @@ finish_command_continuation (void *arg)
|
||||
--- gdb-6.8.50.20090803.orig/gdb/infcmd.c 2009-07-02 23:57:27.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/infcmd.c 2009-08-03 17:17:24.000000000 +0200
|
||||
@@ -1408,11 +1408,11 @@ finish_command_continuation (void *arg)
|
||||
struct type *value_type;
|
||||
|
||||
value_type = TYPE_TARGET_TYPE (SYMBOL_TYPE (a->function));
|
||||
@ -474,7 +393,7 @@ Index: gdb-6.8.50.20090302/gdb/infcmd.c
|
||||
print_return_value (SYMBOL_TYPE (a->function), value_type);
|
||||
}
|
||||
|
||||
@@ -1499,6 +1499,16 @@ finish_forward (struct symbol *function,
|
||||
@@ -1514,6 +1514,16 @@ finish_forward (struct symbol *function,
|
||||
|
||||
old_chain = make_cleanup_delete_breakpoint (breakpoint);
|
||||
|
||||
@ -489,9 +408,9 @@ Index: gdb-6.8.50.20090302/gdb/infcmd.c
|
||||
+ tp->current_pc_is_notcurrent = 1;
|
||||
+
|
||||
tp->proceed_to_finish = 1; /* We want stop_registers, please... */
|
||||
make_cleanup_restore_integer (&suppress_stop_observer);
|
||||
suppress_stop_observer = 1;
|
||||
@@ -1522,7 +1532,9 @@ finish_forward (struct symbol *function,
|
||||
proceed ((CORE_ADDR) -1, TARGET_SIGNAL_DEFAULT, 0);
|
||||
|
||||
@@ -1535,7 +1545,9 @@ finish_forward (struct symbol *function,
|
||||
static void
|
||||
finish_command (char *arg, int from_tty)
|
||||
{
|
||||
@ -502,7 +421,7 @@ Index: gdb-6.8.50.20090302/gdb/infcmd.c
|
||||
struct symbol *function;
|
||||
|
||||
int async_exec = 0;
|
||||
@@ -1553,46 +1565,63 @@ finish_command (char *arg, int from_tty)
|
||||
@@ -1566,45 +1578,63 @@ finish_command (char *arg, int from_tty)
|
||||
if (!target_has_execution)
|
||||
error (_("The program is not running."));
|
||||
|
||||
@ -523,16 +442,15 @@ Index: gdb-6.8.50.20090302/gdb/infcmd.c
|
||||
- == INLINE_FRAME)
|
||||
+ if (get_frame_type (current_frame) == INLINE_FRAME)
|
||||
{
|
||||
struct thread_info *tp = inferior_thread ();
|
||||
-
|
||||
- /* Claim we are stepping in the calling frame. An empty step
|
||||
- range means that we will stop once we aren't in a function
|
||||
- called by that frame. We don't use the magic "1" value for
|
||||
- step_range_end, because then infrun will think this is nexti,
|
||||
- and not step over the rest of this inlined function call. */
|
||||
struct thread_info *tp = inferior_thread ();
|
||||
struct symtab_and_line empty_sal;
|
||||
- init_sal (&empty_sal);
|
||||
- set_step_info (tp, frame, empty_sal);
|
||||
- set_step_info (frame, empty_sal);
|
||||
- tp->step_range_start = tp->step_range_end = get_frame_pc (frame);
|
||||
- tp->step_over_calls = STEP_OVER_ALL;
|
||||
+ struct block *frame_block;
|
||||
@ -544,8 +462,8 @@ Index: gdb-6.8.50.20090302/gdb/infcmd.c
|
||||
printf_filtered (_("Run till exit from "));
|
||||
- print_stack_frame (get_selected_frame (NULL), 1, LOCATION);
|
||||
+ print_stack_frame (current_frame, 1, LOCATION);
|
||||
}
|
||||
|
||||
+ }
|
||||
+
|
||||
+ /* Even just a single stepi would get us out of the caller function PC
|
||||
+ range. */
|
||||
+
|
||||
@ -561,15 +479,15 @@ Index: gdb-6.8.50.20090302/gdb/infcmd.c
|
||||
+ tp->current_pc_is_notcurrent = 1;
|
||||
+ normal_stop ();
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
}
|
||||
|
||||
+ /* Claim we are stepping in the calling frame. An empty step
|
||||
+ range means that we will stop once we aren't in a function
|
||||
+ called by that frame. We don't use the magic "1" value for
|
||||
+ step_range_end, because then infrun will think this is nexti,
|
||||
+ and not step over the rest of this inlined function call. */
|
||||
+ init_sal (&empty_sal);
|
||||
+ set_step_info (tp, prev_frame, empty_sal);
|
||||
+ set_step_info (prev_frame, empty_sal);
|
||||
+ tp->step_range_start = tp->step_range_end = get_frame_pc (prev_frame);
|
||||
+ tp->step_over_calls = STEP_OVER_ALL;
|
||||
+
|
||||
@ -584,7 +502,7 @@ Index: gdb-6.8.50.20090302/gdb/infcmd.c
|
||||
|
||||
/* Print info on the selected frame, including level number but not
|
||||
source. */
|
||||
@@ -1606,10 +1635,14 @@ finish_command (char *arg, int from_tty)
|
||||
@@ -1618,10 +1648,14 @@ finish_command (char *arg, int from_tty)
|
||||
print_stack_frame (get_selected_frame (NULL), 1, LOCATION);
|
||||
}
|
||||
|
||||
@ -600,41 +518,11 @@ Index: gdb-6.8.50.20090302/gdb/infcmd.c
|
||||
}
|
||||
|
||||
|
||||
Index: gdb-6.8.50.20090302/gdb/infrun.c
|
||||
Index: gdb-6.8.50.20090803/gdb/target.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/infrun.c 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/infrun.c 2009-03-25 22:34:02.000000000 +0100
|
||||
@@ -1152,8 +1152,6 @@ a command like `return' or `jump' to con
|
||||
step = 0;
|
||||
}
|
||||
|
||||
- clear_inline_frame_state (resume_ptid);
|
||||
-
|
||||
if (debug_displaced
|
||||
&& use_displaced_stepping (gdbarch)
|
||||
&& tp->trap_expected)
|
||||
@@ -1205,6 +1203,8 @@ clear_proceed_status_thread (struct thre
|
||||
|
||||
/* Discard any remaining commands or status from previous stop. */
|
||||
bpstat_clear (&tp->stop_bpstat);
|
||||
+
|
||||
+ tp->current_pc_is_notcurrent = 0;
|
||||
}
|
||||
|
||||
static int
|
||||
Index: gdb-6.8.50.20090302/gdb/target.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/target.c 2009-03-25 22:26:51.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/target.c 2009-03-25 22:34:02.000000000 +0100
|
||||
@@ -41,6 +41,7 @@
|
||||
#include "target-descriptions.h"
|
||||
#include "gdbthread.h"
|
||||
#include "solib.h"
|
||||
+#include "inline-frame.h"
|
||||
|
||||
static void target_info (char *, int);
|
||||
|
||||
@@ -1925,6 +1926,7 @@ target_resume (ptid_t ptid, int step, en
|
||||
--- gdb-6.8.50.20090803.orig/gdb/target.c 2009-08-03 16:04:15.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/target.c 2009-08-03 16:57:40.000000000 +0200
|
||||
@@ -2079,6 +2079,7 @@ target_resume (ptid_t ptid, int step, en
|
||||
{
|
||||
struct target_ops *t;
|
||||
|
||||
@ -642,10 +530,10 @@ Index: gdb-6.8.50.20090302/gdb/target.c
|
||||
dcache_invalidate (target_dcache);
|
||||
|
||||
for (t = current_target.beneath; t != NULL; t = t->beneath)
|
||||
Index: gdb-6.8.50.20090302/gdb/inline-frame.h
|
||||
Index: gdb-6.8.50.20090803/gdb/inline-frame.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/inline-frame.h 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/inline-frame.h 2009-03-25 22:34:02.000000000 +0100
|
||||
--- gdb-6.8.50.20090803.orig/gdb/inline-frame.h 2009-06-28 02:20:22.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/inline-frame.h 2009-08-03 16:57:40.000000000 +0200
|
||||
@@ -43,6 +43,10 @@ void clear_inline_frame_state (ptid_t pt
|
||||
|
||||
void step_into_inline_frame (ptid_t ptid);
|
||||
@ -657,41 +545,19 @@ Index: gdb-6.8.50.20090302/gdb/inline-frame.h
|
||||
/* Return the number of hidden functions inlined into the current
|
||||
frame. */
|
||||
|
||||
Index: gdb-6.8.50.20090302/gdb/infcall.c
|
||||
Index: gdb-6.8.50.20090803/gdb/dwarf2read.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/infcall.c 2009-03-25 22:33:02.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/infcall.c 2009-03-25 22:34:02.000000000 +0100
|
||||
@@ -898,8 +898,15 @@ The program being debugged exited while
|
||||
|
||||
if (unwind_on_signal_p)
|
||||
{
|
||||
- /* The user wants the context restored. Calling error will
|
||||
- run inf_status_cleanup, which does all the work. */
|
||||
+ /* The user wants the context restored. */
|
||||
+
|
||||
+ /* We must get back to the frame we were before the
|
||||
+ dummy call. */
|
||||
+ dummy_frame_pop (dummy_id);
|
||||
+
|
||||
+ /* We also need to restore inferior status to that before the
|
||||
+ dummy call. */
|
||||
+ restore_inferior_status (inf_status);
|
||||
|
||||
/* FIXME: Insert a bunch of wrap_here; name can be very
|
||||
long if it's a C++ name with arguments and stuff. */
|
||||
Index: gdb-6.8.50.20090302/gdb/dwarf2read.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/dwarf2read.c 2009-03-25 22:33:44.000000000 +0100
|
||||
+++ gdb-6.8.50.20090302/gdb/dwarf2read.c 2009-03-25 22:34:11.000000000 +0100
|
||||
@@ -3471,6 +3471,7 @@ read_func_scope (struct die_info *die, s
|
||||
unsigned die_children;
|
||||
struct attribute *call_line, *call_file;
|
||||
--- gdb-6.8.50.20090803.orig/gdb/dwarf2read.c 2009-08-03 16:56:10.000000000 +0200
|
||||
+++ gdb-6.8.50.20090803/gdb/dwarf2read.c 2009-08-03 16:57:40.000000000 +0200
|
||||
@@ -4107,6 +4107,7 @@ read_func_scope (struct die_info *die, s
|
||||
struct block *block;
|
||||
unsigned die_children = 0;
|
||||
int inlined_func = (die->tag == DW_TAG_inlined_subroutine);
|
||||
+ struct type *type;
|
||||
|
||||
if (inlined_func)
|
||||
{
|
||||
@@ -3513,7 +3514,10 @@ read_func_scope (struct die_info *die, s
|
||||
@@ -4148,7 +4149,10 @@ read_func_scope (struct die_info *die, s
|
||||
add_to_cu_func_list (name, lowpc, highpc, cu);
|
||||
|
||||
new = push_context (0, lowpc);
|
||||
@ -703,11 +569,3 @@ Index: gdb-6.8.50.20090302/gdb/dwarf2read.c
|
||||
|
||||
/* If there is a location expression for DW_AT_frame_base, record
|
||||
it. */
|
||||
@@ -8751,6 +8755,7 @@ read_type_die (struct die_info *die, str
|
||||
break;
|
||||
case DW_TAG_subprogram:
|
||||
case DW_TAG_subroutine_type:
|
||||
+ case DW_TAG_inlined_subroutine:
|
||||
this_type = read_subroutine_type (die, cu);
|
||||
break;
|
||||
case DW_TAG_array_type:
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,747 +0,0 @@
|
||||
http://sourceware.org/ml/gdb-cvs/2009-06/msg00076.html
|
||||
|
||||
gdb/
|
||||
2009-06-15 Phil Muldoon <pmuldoon@redhat.com>
|
||||
|
||||
* infcall.c (show_unwind_on_terminating_exception_p): New
|
||||
function.
|
||||
(call_function_by_hand): Create breakpoint and clean-up call for
|
||||
std::terminate.breakpoint. Add unwind_on_terminating_exception_p
|
||||
gate. Pop frame on breakpoint hit.
|
||||
(_initialize_infcall): Add add_setshow_boolean_cmd for
|
||||
unwind-on-terminating-exception.
|
||||
|
||||
gdb/doc/
|
||||
2009-06-15 Phil Muldoon <pmuldoon@redhat.com>
|
||||
|
||||
* doc/gdb.texinfo (Calling): Document
|
||||
set-unwind-on-terminating-exception usage.
|
||||
|
||||
gdb/testsuite/
|
||||
2009-06-15 Phil Muldoon <pmuldoon@redhat.com>
|
||||
|
||||
* gdb.cp/gdb2495.cc: New file.
|
||||
* gdb.cp/gdb2495.exp: New file.
|
||||
|
||||
--- src/gdb/infcall.c 2009/05/28 00:53:51 1.114
|
||||
+++ src/gdb/infcall.c 2009/06/15 12:11:36 1.115
|
||||
@@ -98,6 +98,30 @@
|
||||
value);
|
||||
}
|
||||
|
||||
+/* This boolean tells what gdb should do if a std::terminate call is
|
||||
+ made while in a function called from gdb (call dummy).
|
||||
+ As the confines of a single dummy stack prohibit out-of-frame
|
||||
+ handlers from handling a raised exception, and as out-of-frame
|
||||
+ handlers are common in C++, this can lead to no handler being found
|
||||
+ by the unwinder, and a std::terminate call. This is a false positive.
|
||||
+ If set, gdb unwinds the stack and restores the context to what it
|
||||
+ was before the call.
|
||||
+
|
||||
+ The default is to unwind the frame if a std::terminate call is
|
||||
+ made. */
|
||||
+
|
||||
+static int unwind_on_terminating_exception_p = 1;
|
||||
+
|
||||
+static void
|
||||
+show_unwind_on_terminating_exception_p (struct ui_file *file, int from_tty,
|
||||
+ struct cmd_list_element *c,
|
||||
+ const char *value)
|
||||
+
|
||||
+{
|
||||
+ fprintf_filtered (file, _("\
|
||||
+Unwind stack if a C++ exception is unhandled while in a call dummy is %s.\n"),
|
||||
+ value);
|
||||
+}
|
||||
|
||||
/* Perform the standard coercions that are specified
|
||||
for arguments to be passed to C or Ada functions.
|
||||
@@ -416,6 +440,8 @@
|
||||
struct cleanup *args_cleanup;
|
||||
struct frame_info *frame;
|
||||
struct gdbarch *gdbarch;
|
||||
+ struct breakpoint *terminate_bp = NULL;
|
||||
+ struct minimal_symbol *tm;
|
||||
ptid_t call_thread_ptid;
|
||||
struct gdb_exception e;
|
||||
const char *name;
|
||||
@@ -716,6 +742,27 @@
|
||||
bpt->disposition = disp_del;
|
||||
}
|
||||
|
||||
+ /* Create a breakpoint in std::terminate.
|
||||
+ If a C++ exception is raised in the dummy-frame, and the
|
||||
+ exception handler is (normally, and expected to be) out-of-frame,
|
||||
+ the default C++ handler will (wrongly) be called in an inferior
|
||||
+ function call. This is wrong, as an exception can be normally
|
||||
+ and legally handled out-of-frame. The confines of the dummy frame
|
||||
+ prevent the unwinder from finding the correct handler (or any
|
||||
+ handler, unless it is in-frame). The default handler calls
|
||||
+ std::terminate. This will kill the inferior. Assert that
|
||||
+ terminate should never be called in an inferior function
|
||||
+ call. Place a momentary breakpoint in the std::terminate function
|
||||
+ and if triggered in the call, rewind. */
|
||||
+ if (unwind_on_terminating_exception_p)
|
||||
+ {
|
||||
+ struct minimal_symbol *tm = lookup_minimal_symbol ("std::terminate()",
|
||||
+ NULL, NULL);
|
||||
+ if (tm != NULL)
|
||||
+ terminate_bp = set_momentary_breakpoint_at_pc
|
||||
+ (SYMBOL_VALUE_ADDRESS (tm), bp_breakpoint);
|
||||
+ }
|
||||
+
|
||||
/* Everything's ready, push all the info needed to restore the
|
||||
caller (and identify the dummy-frame) onto the dummy-frame
|
||||
stack. */
|
||||
@@ -726,6 +773,10 @@
|
||||
or discard it. */
|
||||
discard_cleanups (inf_status_cleanup);
|
||||
|
||||
+ /* Register a clean-up for unwind_on_terminating_exception_breakpoint. */
|
||||
+ if (terminate_bp)
|
||||
+ make_cleanup_delete_breakpoint (terminate_bp);
|
||||
+
|
||||
/* - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP - SNIP -
|
||||
If you're looking to implement asynchronous dummy-frames, then
|
||||
just below is the place to chop this function in two.. */
|
||||
@@ -881,6 +932,38 @@
|
||||
|
||||
if (!stop_stack_dummy)
|
||||
{
|
||||
+
|
||||
+ /* Check if unwind on terminating exception behaviour is on. */
|
||||
+ if (unwind_on_terminating_exception_p)
|
||||
+ {
|
||||
+ /* Check that the breakpoint is our special std::terminate
|
||||
+ breakpoint. If it is, we do not want to kill the inferior
|
||||
+ in an inferior function call. Rewind, and warn the
|
||||
+ user. */
|
||||
+
|
||||
+ if (terminate_bp != NULL
|
||||
+ && (inferior_thread()->stop_bpstat->breakpoint_at->address
|
||||
+ == terminate_bp->loc->address))
|
||||
+ {
|
||||
+ /* We must get back to the frame we were before the
|
||||
+ dummy call. */
|
||||
+ dummy_frame_pop (dummy_id);
|
||||
+
|
||||
+ /* We also need to restore inferior status to that before the
|
||||
+ dummy call. */
|
||||
+ restore_inferior_status (inf_status);
|
||||
+
|
||||
+ error (_("\
|
||||
+The program being debugged entered a std::terminate call, most likely\n\
|
||||
+caused by an unhandled C++ exception. GDB blocked this call in order\n\
|
||||
+to prevent the program from being terminated, and has restored the\n\
|
||||
+context to its original state before the call.\n\
|
||||
+To change this behaviour use \"set unwind-on-terminating-exception off\".\n\
|
||||
+Evaluation of the expression containing the function (%s)\n\
|
||||
+will be abandoned."),
|
||||
+ name);
|
||||
+ }
|
||||
+ }
|
||||
/* We hit a breakpoint inside the FUNCTION.
|
||||
Keep the dummy frame, the user may want to examine its state.
|
||||
Discard inferior status, we're not at the same point
|
||||
@@ -989,4 +1072,19 @@
|
||||
NULL,
|
||||
show_unwind_on_signal_p,
|
||||
&setlist, &showlist);
|
||||
+
|
||||
+ add_setshow_boolean_cmd ("unwind-on-terminating-exception", no_class,
|
||||
+ &unwind_on_terminating_exception_p, _("\
|
||||
+Set unwinding of stack if std::terminate is called while in call dummy."), _("\
|
||||
+Show unwinding of stack if std::terminate() is called while in a call dummy."), _("\
|
||||
+The unwind on terminating exception flag lets the user determine\n\
|
||||
+what gdb should do if a std::terminate() call is made from the\n\
|
||||
+default exception handler. If set, gdb unwinds the stack and restores\n\
|
||||
+the context to what it was before the call. If unset, gdb allows the\n\
|
||||
+std::terminate call to proceed.\n\
|
||||
+The default is to unwind the frame."),
|
||||
+ NULL,
|
||||
+ show_unwind_on_terminating_exception_p,
|
||||
+ &setlist, &showlist);
|
||||
+
|
||||
}
|
||||
--- src/gdb/doc/gdb.texinfo 2009/06/11 11:57:46 1.599
|
||||
+++ src/gdb/doc/gdb.texinfo 2009/06/15 12:11:36 1.600
|
||||
@@ -12895,6 +12895,16 @@
|
||||
the function, or if you passed it incorrect arguments). What happens
|
||||
in that case is controlled by the @code{set unwindonsignal} command.
|
||||
|
||||
+Similarly, with a C@t{++} program it is possible for the function you
|
||||
+call via the @code{print} or @code{call} command to generate an
|
||||
+exception that is not handled due to the constraints of the dummy
|
||||
+frame. In this case, any exception that is raised in the frame, but has
|
||||
+an out-of-frame exception handler will not be found. GDB builds a
|
||||
+dummy-frame for the inferior function call, and the unwinder cannot
|
||||
+seek for exception handlers outside of this dummy-frame. What happens
|
||||
+in that case is controlled by the
|
||||
+@code{set unwind-on-terminating-exception} command.
|
||||
+
|
||||
@table @code
|
||||
@item set unwindonsignal
|
||||
@kindex set unwindonsignal
|
||||
@@ -12911,6 +12921,23 @@
|
||||
@kindex show unwindonsignal
|
||||
Show the current setting of stack unwinding in the functions called by
|
||||
@value{GDBN}.
|
||||
+
|
||||
+@item set unwind-on-terminating-exception
|
||||
+@kindex set unwind-on-terminating-exception
|
||||
+@cindex unwind stack in called functions with unhandled exceptions
|
||||
+@cindex call dummy stack unwinding on unhandled exception.
|
||||
+Set unwinding of the stack if a C@t{++} exception is raised, but left
|
||||
+unhandled while in a function that @value{GDBN} called in the program being
|
||||
+debugged. If set to on (the default), @value{GDBN} unwinds the stack
|
||||
+it created for the call and restores the context to what it was before
|
||||
+the call. If set to off, @value{GDBN} the exception is delivered to
|
||||
+the default C@t{++} exception handler and the inferior terminated.
|
||||
+
|
||||
+@item show unwind-on-terminating-exception
|
||||
+@kindex show unwind-on-terminating-exception
|
||||
+Show the current setting of stack unwinding in the functions called by
|
||||
+@value{GDBN}.
|
||||
+
|
||||
@end table
|
||||
|
||||
@cindex weak alias functions
|
||||
--- src/gdb/testsuite/gdb.cp/gdb2495.cc
|
||||
+++ src/gdb/testsuite/gdb.cp/gdb2495.cc 2009-06-16 12:49:45.874202000 +0000
|
||||
@@ -0,0 +1,89 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
+ Copyright 2009 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/>.
|
||||
+ */
|
||||
+
|
||||
+#include <iostream>
|
||||
+#include <signal.h>
|
||||
+
|
||||
+using namespace std;
|
||||
+
|
||||
+class SimpleException
|
||||
+{
|
||||
+
|
||||
+public:
|
||||
+
|
||||
+ void raise_signal (int dummy)
|
||||
+ {
|
||||
+ if (dummy > 0)
|
||||
+ raise(SIGABRT);
|
||||
+ }
|
||||
+
|
||||
+ int no_throw_function ()
|
||||
+ {
|
||||
+ return 1;
|
||||
+ }
|
||||
+
|
||||
+ void throw_function ()
|
||||
+ {
|
||||
+ throw 1;
|
||||
+ }
|
||||
+
|
||||
+ int throw_function_with_handler ()
|
||||
+ {
|
||||
+ try
|
||||
+ {
|
||||
+ throw 1;
|
||||
+ }
|
||||
+ catch (...)
|
||||
+ {
|
||||
+ cout << "Handled" << endl;
|
||||
+ }
|
||||
+
|
||||
+ return 2;
|
||||
+ }
|
||||
+
|
||||
+ void call_throw_function_no_handler ()
|
||||
+ {
|
||||
+ throw_function ();
|
||||
+ }
|
||||
+
|
||||
+ void call_throw_function_handler ()
|
||||
+ {
|
||||
+ throw_function_with_handler ();
|
||||
+ }
|
||||
+};
|
||||
+SimpleException exceptions;
|
||||
+
|
||||
+int
|
||||
+main()
|
||||
+{
|
||||
+ /* Have to call these functions so GCC does not optimize them
|
||||
+ away. */
|
||||
+ exceptions.raise_signal (-1);
|
||||
+ exceptions.no_throw_function ();
|
||||
+ exceptions.throw_function_with_handler ();
|
||||
+ exceptions.call_throw_function_handler ();
|
||||
+ try
|
||||
+ {
|
||||
+ exceptions.throw_function ();
|
||||
+ exceptions.call_throw_function_no_handler ();
|
||||
+ }
|
||||
+ catch (...)
|
||||
+ {
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
--- src/gdb/testsuite/gdb.cp/gdb2495.exp
|
||||
+++ src/gdb/testsuite/gdb.cp/gdb2495.exp 2009-06-16 12:49:46.889492000 +0000
|
||||
@@ -0,0 +1,157 @@
|
||||
+# Copyright 2009 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/>.
|
||||
+
|
||||
+
|
||||
+# In gdb inferior function calls, if a C++ exception is raised in the
|
||||
+# dummy-frame, and the exception handler is (normally, and expected to
|
||||
+# be) out-of-frame, the default C++ handler will (wrongly) be called
|
||||
+# in an inferior function call.
|
||||
+# This is incorrect as an exception can normally and legally be handled
|
||||
+# out-of-frame. The confines of the dummy frame prevent the unwinder
|
||||
+# from finding the correct handler (or any handler, unless it is
|
||||
+# in-frame). The default handler calls std::terminate. This will kill
|
||||
+# the inferior. Assert that terminate should never be called in an
|
||||
+# inferior function call. These tests test the functionality around
|
||||
+# unwinding that sequence and also tests the flag behaviour gating this
|
||||
+# functionality.
|
||||
+
|
||||
+# This test is largely based of gdb.base/callfuncs.exp.
|
||||
+
|
||||
+if $tracelevel then {
|
||||
+ strace $tracelevel
|
||||
+}
|
||||
+
|
||||
+if { [skip_cplus_tests] } { continue }
|
||||
+
|
||||
+set prms_id 2495
|
||||
+set bug_id 0
|
||||
+
|
||||
+set testfile "gdb2495"
|
||||
+set srcfile ${testfile}.cc
|
||||
+set binfile $objdir/$subdir/$testfile
|
||||
+
|
||||
+# Create and source the file that provides information about the compiler
|
||||
+# used to compile the test case.
|
||||
+if [get_compiler_info ${binfile} "c++"] {
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
|
||||
+ untested gdb2495.exp
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+# Some targets can't do function calls, so don't even bother with this
|
||||
+# test.
|
||||
+if [target_info exists gdb,cannot_call_functions] {
|
||||
+ setup_xfail "*-*-*" 2416
|
||||
+ fail "This target can not call functions"
|
||||
+ continue
|
||||
+}
|
||||
+
|
||||
+gdb_exit
|
||||
+gdb_start
|
||||
+gdb_reinitialize_dir $srcdir/$subdir
|
||||
+gdb_load ${binfile}
|
||||
+
|
||||
+if ![runto_main] then {
|
||||
+ perror "couldn't run to main"
|
||||
+ continue
|
||||
+}
|
||||
+
|
||||
+# See http://sourceware.org/gdb/bugs/2495
|
||||
+
|
||||
+# Test normal baseline behaviour. Call a function that
|
||||
+# does not raise an exception.
|
||||
+gdb_test "p exceptions.no_throw_function()" " = 1"
|
||||
+# And one that does but handles it in-frame.
|
||||
+gdb_test "p exceptions.throw_function_with_handler()" " = 2"
|
||||
+# Both should return normally.
|
||||
+
|
||||
+# Test basic unwind. Call a function that raises an exception but
|
||||
+# does not handle it. It should be rewound.
|
||||
+gdb_test "p exceptions.throw_function()" \
|
||||
+ "The program being debugged entered a std::terminate call, .*" \
|
||||
+ "Call a function that raises an exception without a handler."
|
||||
+
|
||||
+# Make sure that after rewinding we are back at the call parent.
|
||||
+gdb_test "bt" \
|
||||
+ "#0 main.*" \
|
||||
+ "bt after returning from a popped frame"
|
||||
+
|
||||
+# Make sure the only breakpoint is the one set via the runto_main
|
||||
+# call and that the std::terminate breakpoint has evaporated and
|
||||
+# cleaned-up.
|
||||
+gdb_test "info breakpoints" \
|
||||
+ "gdb.cp/gdb2495\.cc.*"
|
||||
+
|
||||
+# Turn off this new behaviour.
|
||||
+gdb_test_multiple "set unwind-on-terminating-exception off" \
|
||||
+ "Turn unwind-on-terminating-exception off" {
|
||||
+ -re "$gdb_prompt $" {pass "set unwinn-on-terminating-exception off"}
|
||||
+ timeout {fail "(timeout) set unwind-on-terminating-exception off"}
|
||||
+}
|
||||
+
|
||||
+# Check that it is turned off.
|
||||
+gdb_test "show unwind-on-terminating-exception" \
|
||||
+ "exception is unhandled while in a call dummy is off.*" \
|
||||
+ "Turn off unwind on terminating exception flag"
|
||||
+
|
||||
+# Check that the old behaviour is restored.
|
||||
+gdb_test "p exceptions.throw_function()" \
|
||||
+ "The program being debugged was signaled while in a function called .*" \
|
||||
+ "Call a function that raises an exception with unwinding off.."
|
||||
+
|
||||
+# Restart the inferior back at main.
|
||||
+if ![runto_main] then {
|
||||
+ perror "couldn't run to main"
|
||||
+ continue
|
||||
+}
|
||||
+
|
||||
+
|
||||
+# Check to see if the new behaviour alters the unwind signal
|
||||
+# behaviour; it should not. Test both on and off states.
|
||||
+
|
||||
+# Turn on unwind on signal behaviour.
|
||||
+gdb_test_multiple "set unwindonsignal on" "Turn unwindonsignal on" {
|
||||
+ -re "$gdb_prompt $" {pass "set unwindonsignal on"}
|
||||
+ timeout {fail "(timeout) set unwindonsignal on"}
|
||||
+}
|
||||
+
|
||||
+# Check that it is turned on.
|
||||
+gdb_test "show unwindonsignal" \
|
||||
+ "signal is received while in a call dummy is on.*" \
|
||||
+ "Turn on unwind on signal"
|
||||
+
|
||||
+# Check to see if new behaviour interferes with
|
||||
+# normal signal handling in inferior function calls.
|
||||
+gdb_test "p exceptions.raise_signal(1)" \
|
||||
+ "To change this behavior use \"set unwindonsignal off\".*"
|
||||
+
|
||||
+# And reverse - turn off again.
|
||||
+gdb_test_multiple "set unwindonsignal off" "Turn unwindonsignal off" {
|
||||
+ -re "$gdb_prompt $" {pass "set unwindonsignal off"}
|
||||
+ timeout {fail "(timeout) set unwindonsignal off"}
|
||||
+}
|
||||
+
|
||||
+# Check that it is actually turned off.
|
||||
+gdb_test "show unwindonsignal" \
|
||||
+ "signal is received while in a call dummy is off.*" \
|
||||
+ "Turn off unwind on signal"
|
||||
+
|
||||
+# Check to see if new behaviour interferes with
|
||||
+# normal signal handling in inferior function calls.
|
||||
+gdb_test "p exceptions.raise_signal(1)" \
|
||||
+ "To change this behavior use \"set unwindonsignal on\".*"
|
||||
--- src/gdb/testsuite/gdb.cp/Makefile.in 2009/02/03 01:09:01 1.5
|
||||
+++ src/gdb/testsuite/gdb.cp/Makefile.in 2009/06/15 12:11:37 1.6
|
||||
@@ -4,7 +4,7 @@
|
||||
EXECUTABLES = ambiguous annota2 anon-union cplusfuncs cttiadd \
|
||||
derivation inherit local member-ptr method misc \
|
||||
overload ovldbreak ref-typ ref-typ2 templates userdef virtfunc namespace \
|
||||
- ref-types ref-params method2 pr9594
|
||||
+ ref-types ref-params method2 pr9594 gdb2495
|
||||
|
||||
all info install-info dvi install uninstall installcheck check:
|
||||
@echo "Nothing to be done for $@..."
|
||||
|
||||
|
||||
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=471819
|
||||
|
||||
http://sourceware.org/ml/gdb-patches/2009-06/msg00837.html
|
||||
http://sourceware.org/ml/gdb-cvs/2009-06/msg00194.html
|
||||
|
||||
gdb/
|
||||
2009-06-29 Pedro Alves <pedro@codesourcery.com>
|
||||
|
||||
* infrun.c (handle_inferior_event): Context switch to the new
|
||||
thread when resuming for a new_thread_event.
|
||||
|
||||
http://sourceware.org/ml/gdb-patches/2009-06/msg00841.html
|
||||
http://sourceware.org/ml/gdb-cvs/2009-06/msg00195.html
|
||||
|
||||
gdb/testsuite/
|
||||
2009-06-29 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.threads/current-lwp-dead.exp, gdb.threads/current-lwp-dead.c: New.
|
||||
|
||||
--- src/gdb/infrun.c 2009/06/28 00:20:22 1.396
|
||||
+++ src/gdb/infrun.c 2009/06/29 18:27:23 1.397
|
||||
@@ -2746,6 +2746,8 @@
|
||||
in either the OS or the native code). Therefore we need to
|
||||
continue all threads in order to make progress. */
|
||||
|
||||
+ if (!ptid_equal (ecs->ptid, inferior_ptid))
|
||||
+ context_switch (ecs->ptid);
|
||||
target_resume (RESUME_ALL, 0, TARGET_SIGNAL_0);
|
||||
prepare_to_wait (ecs);
|
||||
return;
|
||||
--- src/gdb/testsuite/gdb.threads/current-lwp-dead.c
|
||||
+++ src/gdb/testsuite/gdb.threads/current-lwp-dead.c 2009-06-29 18:59:59.860807000 +0000
|
||||
@@ -0,0 +1,75 @@
|
||||
+/* This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
+ Copyright 2009 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/>.
|
||||
+
|
||||
+ Do not use threads as we need to exploit a bug in LWP code masked by the
|
||||
+ threads code otherwise.
|
||||
+
|
||||
+ INFERIOR_PTID must point to exited LWP. Here we use the initial LWP as it
|
||||
+ is automatically INFERIOR_PTID for GDB.
|
||||
+
|
||||
+ Finally we need to call target_resume (RESUME_ALL, ...) which we invoke by
|
||||
+ NEW_THREAD_EVENT (called from the new LWP as initial LWP is exited now). */
|
||||
+
|
||||
+#define _GNU_SOURCE
|
||||
+#include <sched.h>
|
||||
+#include <assert.h>
|
||||
+#include <unistd.h>
|
||||
+#include <stdlib.h>
|
||||
+
|
||||
+#define STACK_SIZE 0x1000
|
||||
+
|
||||
+static int
|
||||
+fn_return (void *unused)
|
||||
+{
|
||||
+ return 0; /* at-fn_return */
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+fn (void *unused)
|
||||
+{
|
||||
+ int i;
|
||||
+ unsigned char *stack;
|
||||
+ int new_pid;
|
||||
+
|
||||
+ i = sleep (1);
|
||||
+ assert (i == 0);
|
||||
+
|
||||
+ stack = malloc (STACK_SIZE);
|
||||
+ assert (stack != NULL);
|
||||
+
|
||||
+ new_pid = clone (fn_return, stack + STACK_SIZE, CLONE_FILES | CLONE_VM, NULL,
|
||||
+ NULL, NULL, NULL);
|
||||
+ assert (new_pid > 0);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+int
|
||||
+main (int argc, char **argv)
|
||||
+{
|
||||
+ unsigned char *stack;
|
||||
+ int new_pid;
|
||||
+
|
||||
+ stack = malloc (STACK_SIZE);
|
||||
+ assert (stack != NULL);
|
||||
+
|
||||
+ new_pid = clone (fn, stack + STACK_SIZE, CLONE_FILES | CLONE_VM, NULL, NULL,
|
||||
+ NULL, NULL);
|
||||
+ assert (new_pid > 0);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
--- src/gdb/testsuite/gdb.threads/current-lwp-dead.exp
|
||||
+++ src/gdb/testsuite/gdb.threads/current-lwp-dead.exp 2009-06-29 19:00:01.014652000 +0000
|
||||
@@ -0,0 +1,31 @@
|
||||
+# This testcase is part of GDB, the GNU debugger.
|
||||
+
|
||||
+# Copyright 2009 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@gnu.org
|
||||
+
|
||||
+if { [prepare_for_testing current-lwp-dead.exp current-lwp-dead] } {
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+if {[runto_main] <= 0} {
|
||||
+ untested current-lwp-dead.exp
|
||||
+ return -1
|
||||
+}
|
||||
+
|
||||
+gdb_breakpoint "fn_return"
|
||||
+gdb_continue_to_breakpoint "fn_return" ".*at-fn_return.*"
|
||||
|
||||
|
||||
|
||||
[patch] testsuite: Fix multiple runs in parallel on a single host
|
||||
|
||||
http://sourceware.org/ml/gdb-patches/2009-07/msg00008.html
|
||||
http://sourceware.org/ml/gdb-cvs/2009-07/msg00051.html
|
||||
|
||||
2009-07-06 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* lib/gdbserver-support.exp (gdbserver_start): Loop spawning
|
||||
gdbserver increasing $portnum if "Can't bind address" has been seen.
|
||||
|
||||
--- src/gdb/testsuite/lib/gdbserver-support.exp 2009/01/03 05:58:08 1.14
|
||||
+++ src/gdb/testsuite/lib/gdbserver-support.exp 2009/07/06 18:51:10 1.15
|
||||
@@ -209,26 +209,39 @@
|
||||
|
||||
set gdbserver [find_gdbserver]
|
||||
|
||||
- # Export the host:port pair.
|
||||
- set gdbport $debughost$portnum
|
||||
-
|
||||
- # Fire off the debug agent.
|
||||
- set gdbserver_command "$gdbserver"
|
||||
- if { $options != "" } {
|
||||
- append gdbserver_command " $options"
|
||||
- }
|
||||
- append gdbserver_command " :$portnum"
|
||||
- if { $arguments != "" } {
|
||||
- append gdbserver_command " $arguments"
|
||||
- }
|
||||
+ # Loop till we find a free port.
|
||||
+ while 1 {
|
||||
+ # Export the host:port pair.
|
||||
+ set gdbport $debughost$portnum
|
||||
+
|
||||
+ # Fire off the debug agent.
|
||||
+ set gdbserver_command "$gdbserver"
|
||||
+ if { $options != "" } {
|
||||
+ append gdbserver_command " $options"
|
||||
+ }
|
||||
+ append gdbserver_command " :$portnum"
|
||||
+ if { $arguments != "" } {
|
||||
+ append gdbserver_command " $arguments"
|
||||
+ }
|
||||
|
||||
- set server_spawn_id [remote_spawn target $gdbserver_command]
|
||||
+ set server_spawn_id [remote_spawn target $gdbserver_command]
|
||||
|
||||
- # Wait for the server to open its TCP socket, so that GDB can connect.
|
||||
- expect {
|
||||
- -i $server_spawn_id
|
||||
- -notransfer
|
||||
- -re "Listening on" { }
|
||||
+ # Wait for the server to open its TCP socket, so that GDB can connect.
|
||||
+ expect {
|
||||
+ -i $server_spawn_id
|
||||
+ -notransfer
|
||||
+ -re "Listening on" { }
|
||||
+ -re "Can't bind address: Address already in use\\.\r\n" {
|
||||
+ verbose -log "Port $portnum is already in use."
|
||||
+ if ![target_info exists gdb,socketport] {
|
||||
+ # Bump the port number to avoid the conflict.
|
||||
+ wait -i $expect_out(spawn_id)
|
||||
+ incr portnum
|
||||
+ continue
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ break
|
||||
}
|
||||
|
||||
# We can't just call close, because if gdbserver is local then that means
|
||||
|
||||
|
||||
|
||||
http://sourceware.org/ml/gdb-cvs/2009-06/msg00203.html
|
||||
|
||||
2009-06-30 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Remove racy FAILs relying just on the timeouts.
|
||||
* gdb.base/setshow.exp (set annotate 2, show annotate (2))
|
||||
(annotation_level 2): Remove racy FAILs.
|
||||
|
||||
--- src/gdb/testsuite/gdb.base/setshow.exp 2009/01/03 05:58:03 1.10
|
||||
+++ src/gdb/testsuite/gdb.base/setshow.exp 2009/06/30 18:28:12 1.11
|
||||
@@ -60,7 +60,6 @@
|
||||
gdb_expect {
|
||||
-re ".*\032\032pre-prompt.*$gdb_prompt .*\032\032prompt.*$" \
|
||||
{ pass "set annotate 2" }
|
||||
- -re ".*$gdb_prompt $" { fail "set annotate 2" }
|
||||
timeout { fail "(timeout) set annotate 2" }
|
||||
}
|
||||
|
||||
@@ -68,7 +67,6 @@
|
||||
gdb_expect {
|
||||
-re ".*\032\032post-prompt.*Annotation_level is 2..*\032\032pre-prompt.*$gdb_prompt .*\032\032prompt.*$" \
|
||||
{ pass "show annotate (2)" }
|
||||
- -re ".*$gdb_prompt $" { fail "show annotate (2)" }
|
||||
timeout { fail "(timeout) show annotate (2)" }
|
||||
}
|
||||
|
||||
@@ -77,7 +75,6 @@
|
||||
gdb_expect {
|
||||
-re ".*\032\032post-prompt.*Line 1 of .* is at address .* but contains no code.*:1:0:beg:0x.*\032\032pre-prompt.*$gdb_prompt .*\032\032prompt.*$" \
|
||||
{ pass "annotation_level 2" }
|
||||
- -re ".*$gdb_prompt $" { fail "annotation_level 2" }
|
||||
timeout { fail "(timeout) annotation_level 2" }
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
http://sourceware.org/ml/gdb-cvs/2009-06/msg00204.html
|
||||
|
||||
2009-06-30 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* lib/mi-support.exp (mi_check_thread_states): Permit any output before
|
||||
the expected result record.
|
||||
|
||||
--- src/gdb/testsuite/lib/mi-support.exp 2009/05/28 01:09:20 1.84
|
||||
+++ src/gdb/testsuite/lib/mi-support.exp 2009/06/30 20:23:05 1.85
|
||||
@@ -1808,7 +1808,7 @@
|
||||
proc mi_check_thread_states { xstates test } {
|
||||
global expect_out
|
||||
set states [mi_reverse_list $xstates]
|
||||
- set pattern "\\^done,threads=\\\["
|
||||
+ set pattern ".*\\^done,threads=\\\["
|
||||
foreach s $states {
|
||||
set pattern "${pattern}(.*)state=\"$s\""
|
||||
}
|
@ -1,167 +0,0 @@
|
||||
http://sourceware.org/ml/gdb-patches/2009-06/msg00191.html
|
||||
|
||||
GCC developers would like to change GCC to emit DW_OP_call_frame_cfa,
|
||||
as this would reduce the size of the generated debuginfo.
|
||||
|
||||
A prerequisite to this is that GDB understand this. So, this patch
|
||||
implements this feature. This is PR 10224.
|
||||
|
||||
I'm interested in feedback on this. I am not sure whether the
|
||||
implementation of dwarf2_frame_cfa is ok.
|
||||
|
||||
No test case since at some point GCC will start generating this
|
||||
(perhaps optionally -- but I feel certain we'll do it by default in
|
||||
Fedora), and since it therefore seemed like a lot of work for little
|
||||
payoff.
|
||||
|
||||
Tom
|
||||
|
||||
2009-06-08 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
PR gdb/10224:
|
||||
* dwarf2loc.c: Include dwarf2-frame.h.
|
||||
(dwarf_expr_frame_cfa): New function.
|
||||
(dwarf2_evaluate_loc_desc): Initialize new field.
|
||||
(needs_frame_frame_cfa): New function.
|
||||
(dwarf2_loc_desc_needs_frame): Initialize new field.
|
||||
* dwarf2expr.h (struct dwarf_expr_context) <get_frame_cfa>: New
|
||||
field.
|
||||
* dwarf2expr.c (execute_stack_op) <DW_OP_call_frame_cfa>: New
|
||||
case.
|
||||
* dwarf2-frame.h (dwarf2_frame_cfa): Declare.
|
||||
* dwarf2-frame.c (no_get_frame_cfa): New function.
|
||||
(execute_stack_op): Initialize new field.
|
||||
(dwarf2_frame_cfa): New function.
|
||||
|
||||
[ Backported for Fedora Rawhide. ]
|
||||
|
||||
--- ./gdb/dwarf2-frame.c 2009-06-12 11:12:51.000000000 +0200
|
||||
+++ ./gdb/dwarf2-frame.c 2009-06-12 11:13:30.000000000 +0200
|
||||
@@ -306,6 +306,13 @@ no_get_frame_base (void *baton, gdb_byte
|
||||
}
|
||||
|
||||
static CORE_ADDR
|
||||
+no_get_frame_cfa (void *baton)
|
||||
+{
|
||||
+ internal_error (__FILE__, __LINE__,
|
||||
+ _("Support for DW_OP_call_frame_cfa is unimplemented"));
|
||||
+}
|
||||
+
|
||||
+static CORE_ADDR
|
||||
no_get_tls_address (void *baton, CORE_ADDR offset)
|
||||
{
|
||||
internal_error (__FILE__, __LINE__,
|
||||
@@ -356,6 +363,7 @@ execute_stack_op (gdb_byte *exp, ULONGES
|
||||
ctx->read_reg = read_reg;
|
||||
ctx->read_mem = read_mem;
|
||||
ctx->get_frame_base = no_get_frame_base;
|
||||
+ ctx->get_frame_cfa = no_get_frame_cfa;
|
||||
ctx->get_tls_address = no_get_tls_address;
|
||||
|
||||
dwarf_expr_push (ctx, initial);
|
||||
@@ -1221,6 +1229,13 @@ dwarf2_frame_base_address (struct frame_
|
||||
return cache->cfa;
|
||||
}
|
||||
|
||||
+CORE_ADDR
|
||||
+dwarf2_frame_cfa (struct frame_info *this_frame)
|
||||
+{
|
||||
+ void *cache = NULL;
|
||||
+ return dwarf2_frame_base_address (this_frame, &cache);
|
||||
+}
|
||||
+
|
||||
static const struct frame_base dwarf2_frame_base =
|
||||
{
|
||||
&dwarf2_frame_unwind,
|
||||
--- ./gdb/dwarf2-frame.h 2009-01-03 06:57:51.000000000 +0100
|
||||
+++ ./gdb/dwarf2-frame.h 2009-06-12 11:13:30.000000000 +0200
|
||||
@@ -118,4 +118,8 @@ extern const struct frame_base *
|
||||
|
||||
void dwarf2_frame_build_info (struct objfile *objfile);
|
||||
|
||||
+/* Compute the DWARF CFA for a frame. */
|
||||
+
|
||||
+CORE_ADDR dwarf2_frame_cfa (struct frame_info *this_frame);
|
||||
+
|
||||
#endif /* dwarf2-frame.h */
|
||||
--- ./gdb/dwarf2expr.c 2009-06-12 11:12:51.000000000 +0200
|
||||
+++ ./gdb/dwarf2expr.c 2009-06-12 11:13:44.000000000 +0200
|
||||
@@ -697,6 +697,10 @@ execute_stack_op (struct dwarf_expr_cont
|
||||
}
|
||||
break;
|
||||
|
||||
+ case DW_OP_call_frame_cfa:
|
||||
+ result = (ctx->get_frame_cfa) (ctx->baton);
|
||||
+ break;
|
||||
+
|
||||
case DW_OP_GNU_push_tls_address:
|
||||
/* Variable is at a constant offset in the thread-local
|
||||
storage block into the objfile for the current thread and
|
||||
--- ./gdb/dwarf2expr.h 2009-06-12 11:12:51.000000000 +0200
|
||||
+++ ./gdb/dwarf2expr.h 2009-06-12 11:15:36.000000000 +0200
|
||||
@@ -55,6 +55,9 @@ struct dwarf_expr_context
|
||||
expression evaluation is complete. */
|
||||
void (*get_frame_base) (void *baton, gdb_byte **start, size_t *length);
|
||||
|
||||
+ /* Return the CFA for the frame. */
|
||||
+ CORE_ADDR (*get_frame_cfa) (void *baton);
|
||||
+
|
||||
/* Return the thread-local storage address for
|
||||
DW_OP_GNU_push_tls_address. */
|
||||
CORE_ADDR (*get_tls_address) (void *baton, CORE_ADDR offset);
|
||||
--- ./gdb/dwarf2loc.c 2009-06-12 11:12:55.000000000 +0200
|
||||
+++ ./gdb/dwarf2loc.c 2009-06-12 11:15:07.000000000 +0200
|
||||
@@ -32,6 +32,7 @@
|
||||
#include "objfiles.h"
|
||||
#include "exceptions.h"
|
||||
#include "block.h"
|
||||
+#include "dwarf2-frame.h"
|
||||
|
||||
#include "elf/dwarf2.h"
|
||||
#include "dwarf2expr.h"
|
||||
@@ -200,6 +201,13 @@ dwarf_expr_frame_base (void *baton, gdb_
|
||||
SYMBOL_PRINT_NAME (framefunc));
|
||||
}
|
||||
|
||||
+static CORE_ADDR
|
||||
+dwarf_expr_frame_cfa (void *baton)
|
||||
+{
|
||||
+ struct dwarf_expr_baton *debaton = (struct dwarf_expr_baton *) baton;
|
||||
+ return dwarf2_frame_cfa (debaton->frame);
|
||||
+}
|
||||
+
|
||||
/* Using the objfile specified in BATON, find the address for the
|
||||
current thread's thread-local storage with offset OFFSET. */
|
||||
static CORE_ADDR
|
||||
@@ -286,6 +294,7 @@ dwarf_expr_prep_ctx (struct frame_info *
|
||||
ctx->read_reg = dwarf_expr_read_reg;
|
||||
ctx->read_mem = dwarf_expr_read_mem;
|
||||
ctx->get_frame_base = dwarf_expr_frame_base;
|
||||
+ ctx->get_frame_cfa = dwarf_expr_frame_cfa;
|
||||
ctx->get_tls_address = dwarf_expr_tls_address;
|
||||
ctx->get_object_address = dwarf_expr_object_address;
|
||||
|
||||
@@ -439,6 +448,15 @@ needs_frame_frame_base (void *baton, gdb
|
||||
nf_baton->needs_frame = 1;
|
||||
}
|
||||
|
||||
+/* CFA accesses require a frame. */
|
||||
+static CORE_ADDR
|
||||
+needs_frame_frame_cfa (void *baton)
|
||||
+{
|
||||
+ struct needs_frame_baton *nf_baton = baton;
|
||||
+ nf_baton->needs_frame = 1;
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
/* Thread-local accesses do require a frame. */
|
||||
static CORE_ADDR
|
||||
needs_frame_tls_address (void *baton, CORE_ADDR offset)
|
||||
@@ -468,6 +486,7 @@ dwarf2_loc_desc_needs_frame (gdb_byte *d
|
||||
ctx->read_reg = needs_frame_read_reg;
|
||||
ctx->read_mem = needs_frame_read_mem;
|
||||
ctx->get_frame_base = needs_frame_frame_base;
|
||||
+ ctx->get_frame_cfa = needs_frame_frame_cfa;
|
||||
ctx->get_tls_address = needs_frame_tls_address;
|
||||
|
||||
dwarf_expr_eval (ctx, data, size);
|
42616
gdb-archer.patch
42616
gdb-archer.patch
File diff suppressed because it is too large
Load Diff
@ -1,76 +0,0 @@
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=507267
|
||||
|
||||
--- gdb-6.8.50.20090302/gdb/buildsym.c-orig 2009-06-22 15:20:39.000000000 +0200
|
||||
+++ gdb-6.8.50.20090302/gdb/buildsym.c 2009-06-22 17:50:54.000000000 +0200
|
||||
@@ -900,6 +900,19 @@ watch_main_source_file_lossage (void)
|
||||
}
|
||||
}
|
||||
|
||||
+/* Helper function for qsort. Parametes are `struct block *' pointers,
|
||||
+ function sorts them in descending order by their BLOCK_START. */
|
||||
+
|
||||
+static int
|
||||
+block_compar (const void *ap, const void *bp)
|
||||
+{
|
||||
+ const struct block *a = *(const struct block **) ap;
|
||||
+ const struct block *b = *(const struct block **) bp;
|
||||
+
|
||||
+ return (BLOCK_START (b) > BLOCK_START (a))
|
||||
+ - (BLOCK_START (b) < BLOCK_START (a));
|
||||
+}
|
||||
+
|
||||
/* Finish the symbol definitions for one main source file, close off
|
||||
all the lexical contexts for that file (creating struct block's for
|
||||
them), then make the struct symtab for that file and put it in the
|
||||
@@ -953,32 +966,28 @@ end_symtab (CORE_ADDR end_addr, struct o
|
||||
OBJF_REORDERED is true, then sort the pending blocks. */
|
||||
if ((objfile->flags & OBJF_REORDERED) && pending_blocks)
|
||||
{
|
||||
- /* FIXME! Remove this horrid bubble sort and use merge sort!!! */
|
||||
- int swapped;
|
||||
- do
|
||||
- {
|
||||
- struct pending_block *pb, *pbnext;
|
||||
+ unsigned count = 0;
|
||||
+ struct pending_block *pb;
|
||||
+ struct block **barray, **bp;
|
||||
+ struct cleanup *back_to;
|
||||
|
||||
- pb = pending_blocks;
|
||||
- pbnext = pb->next;
|
||||
- swapped = 0;
|
||||
+ for (pb = pending_blocks; pb != NULL; pb = pb->next)
|
||||
+ count++;
|
||||
|
||||
- while (pbnext)
|
||||
- {
|
||||
- /* swap blocks if unordered! */
|
||||
+ barray = xmalloc (sizeof (*barray) * count);
|
||||
+ back_to = make_cleanup (xfree, barray);
|
||||
|
||||
- if (BLOCK_START (pb->block) < BLOCK_START (pbnext->block))
|
||||
- {
|
||||
- struct block *tmp = pb->block;
|
||||
- pb->block = pbnext->block;
|
||||
- pbnext->block = tmp;
|
||||
- swapped = 1;
|
||||
- }
|
||||
- pb = pbnext;
|
||||
- pbnext = pbnext->next;
|
||||
- }
|
||||
- }
|
||||
- while (swapped);
|
||||
+ bp = barray;
|
||||
+ for (pb = pending_blocks; pb != NULL; pb = pb->next)
|
||||
+ *bp++ = pb->block;
|
||||
+
|
||||
+ qsort (barray, count, sizeof (*barray), block_compar);
|
||||
+
|
||||
+ bp = barray;
|
||||
+ for (pb = pending_blocks; pb != NULL; pb = pb->next)
|
||||
+ pb->block = *bp++;
|
||||
+
|
||||
+ do_cleanups (back_to);
|
||||
}
|
||||
|
||||
/* Cleanup any undefined types that have been left hanging around
|
@ -1,110 +0,0 @@
|
||||
http://sourceware.org/ml/gdb-patches/2009-04/msg00284.html
|
||||
http://sourceware.org/ml/gdb-cvs/2009-04/msg00077.html
|
||||
http://sourceware.org/ml/archer/2009-q2/msg00049.html
|
||||
|
||||
gdb/
|
||||
2009-04-14 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* c-lang.c (c_get_string): Fix xfree crash on a failed string read.
|
||||
|
||||
gdb/testsuite/
|
||||
2009-04-14 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.python/python-prettyprint.c: Include <string.h>.
|
||||
(struct nullstr): New.
|
||||
(main): New variable `nullstr'. Clear it.
|
||||
* gdb.python/python-prettyprint.exp (run_lang_tests): Test `nullstr'.
|
||||
* gdb.python/python-prettyprint.py (class pp_nullstr): New.
|
||||
(register_pretty_printers): Register `pp_nullstr'.
|
||||
|
||||
--- src/gdb/c-lang.c 2009/03/21 00:46:17 1.63
|
||||
+++ src/gdb/c-lang.c 2009/04/14 21:54:33 1.64
|
||||
@@ -657,7 +657,7 @@
|
||||
buffer, length);
|
||||
if (err)
|
||||
{
|
||||
- xfree (buffer);
|
||||
+ xfree (*buffer);
|
||||
error (_("Error reading string from inferior: %s"),
|
||||
safe_strerror (err));
|
||||
}
|
||||
diff --git a/gdb/testsuite/gdb.python/python-prettyprint.c b/gdb/testsuite/gdb.python/python-prettyprint.c
|
||||
index 399be23..0d9110d 100644
|
||||
--- a/gdb/testsuite/gdb.python/python-prettyprint.c
|
||||
+++ b/gdb/testsuite/gdb.python/python-prettyprint.c
|
||||
@@ -15,6 +15,8 @@
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
+#include <string.h>
|
||||
+
|
||||
struct s
|
||||
{
|
||||
int a;
|
||||
@@ -143,6 +145,11 @@ void do_nothing(void)
|
||||
c = 23; /* Another MI breakpoint */
|
||||
}
|
||||
|
||||
+struct nullstr
|
||||
+{
|
||||
+ char *s;
|
||||
+};
|
||||
+
|
||||
int
|
||||
main ()
|
||||
{
|
||||
@@ -151,10 +158,13 @@ main ()
|
||||
string x = make_string ("this is x");
|
||||
zzz_type c = make_container ("container");
|
||||
const struct string_repr cstring = { { "const string" } };
|
||||
+ /* Clearing by being `static' could invoke an other GDB C++ bug. */
|
||||
+ struct nullstr nullstr;
|
||||
|
||||
init_ss(&ss, 1, 2);
|
||||
init_ss(ssa+0, 3, 4);
|
||||
init_ss(ssa+1, 5, 6);
|
||||
+ memset (&nullstr, 0, sizeof nullstr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
S cps;
|
||||
diff --git a/gdb/testsuite/gdb.python/python-prettyprint.exp b/gdb/testsuite/gdb.python/python-prettyprint.exp
|
||||
index f83b1cd..907dcfd 100644
|
||||
--- a/gdb/testsuite/gdb.python/python-prettyprint.exp
|
||||
+++ b/gdb/testsuite/gdb.python/python-prettyprint.exp
|
||||
@@ -85,6 +85,8 @@ proc run_lang_tests {lang} {
|
||||
|
||||
gdb_test "print c" " = container $hex \"container\" with 2 elements = {$nl *.0. = 23,$nl *.1. = 72$nl}"
|
||||
|
||||
+ gdb_test "print nullstr" "RuntimeError: Error reading string from inferior.*"
|
||||
+
|
||||
gdb_test "continue" "Program exited normally\."
|
||||
}
|
||||
|
||||
diff --git a/gdb/testsuite/gdb.python/python-prettyprint.py b/gdb/testsuite/gdb.python/python-prettyprint.py
|
||||
index a53e412..82e5331 100644
|
||||
--- a/gdb/testsuite/gdb.python/python-prettyprint.py
|
||||
+++ b/gdb/testsuite/gdb.python/python-prettyprint.py
|
||||
@@ -92,6 +92,13 @@ class pp_vbase1:
|
||||
def to_string (self):
|
||||
return "pp class name: " + self.val.type.tag
|
||||
|
||||
+class pp_nullstr:
|
||||
+ def __init__(self, val):
|
||||
+ self.val = val
|
||||
+
|
||||
+ def to_string(self):
|
||||
+ return self.val['s'].string(gdb.parameter('target-charset'))
|
||||
+
|
||||
def lookup_function (val):
|
||||
"Look-up and return a pretty-printer that can print val."
|
||||
|
||||
@@ -135,6 +142,9 @@ def register_pretty_printers ():
|
||||
|
||||
pretty_printers_dict[re.compile ('^VirtualTest$')] = pp_multiple_virtual
|
||||
pretty_printers_dict[re.compile ('^Vbase1$')] = pp_vbase1
|
||||
+
|
||||
+ pretty_printers_dict[re.compile ('^struct nullstr$')] = pp_nullstr
|
||||
+ pretty_printers_dict[re.compile ('^nullstr$')] = pp_nullstr
|
||||
|
||||
# Note that we purposely omit the typedef names here.
|
||||
# Printer lookup is based on canonical name.
|
@ -1,44 +0,0 @@
|
||||
http://sourceware.org/ml/gdb-patches/2009-04/msg00356.html
|
||||
http://sourceware.org/ml/gdb-cvs/2009-04/msg00081.html
|
||||
|
||||
gdb/
|
||||
2009-04-15 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* c-lang.c (evaluate_subexp_c): Correctly handle EVAL_SKIP.
|
||||
|
||||
gdb/testsuite/
|
||||
2009-04-15 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* gdb.base/charset.exp: Add regression test.
|
||||
|
||||
--- src/gdb/c-lang.c 2009/04/14 21:54:33 1.64
|
||||
+++ src/gdb/c-lang.c 2009/04/15 21:55:04 1.65
|
||||
@@ -941,7 +941,15 @@
|
||||
*pos += 2;
|
||||
|
||||
if (noside == EVAL_SKIP)
|
||||
- return NULL;
|
||||
+ {
|
||||
+ /* Return a dummy value of the appropriate type. */
|
||||
+ if ((dest_type & C_CHAR) != 0)
|
||||
+ result = allocate_value (type);
|
||||
+ else
|
||||
+ result = value_typed_string ("", 0, type);
|
||||
+ do_cleanups (cleanup);
|
||||
+ return result;
|
||||
+ }
|
||||
|
||||
if ((dest_type & C_CHAR) != 0)
|
||||
{
|
||||
--- src/gdb/testsuite/gdb.base/charset.exp 2009/03/25 19:25:49 1.13
|
||||
+++ src/gdb/testsuite/gdb.base/charset.exp 2009/04/15 21:55:04 1.14
|
||||
@@ -604,4 +604,9 @@
|
||||
test_combination u UCS-2 U UCS-4
|
||||
}
|
||||
|
||||
+# Regression test for a cleanup bug in the charset code.
|
||||
+gdb_test "print 'a' == 'a' || 'b' == 'b'" \
|
||||
+ ".* = 1" \
|
||||
+ "EVAL_SKIP cleanup handling regression test"
|
||||
+
|
||||
gdb_exit
|
@ -1,328 +0,0 @@
|
||||
Re: [patch] [4/5] Types reference counting [varobj-validation]
|
||||
http://sourceware.org/ml/gdb-patches/2009-04/msg00610.html
|
||||
|
||||
gdb/
|
||||
2009-04-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
Split varobj_invalidate into a two-phased operation.
|
||||
* objfiles.c: Include varobj.h
|
||||
(free_objfile): Call varobj_invalidate.
|
||||
* parser-defs.h (exp_uses_objfile): New prototype.
|
||||
* printcmd.c (display_uses_objfile): Move the EXP checking part to ...
|
||||
* parse.c (exp_uses_objfile): ... a new function here.
|
||||
* symfile.c (new_symfile_objfile): Call varobj_revalidate.
|
||||
(reread_symbols): Call varobj_invalidate and varobj_revalidate.
|
||||
(clear_symtab_users): No longer call varobj_invalidate.
|
||||
* varobj.c: New includes objfiles.h and parser-defs.h.
|
||||
(varobj_invalidate): New parameter `objfile', comment it.
|
||||
New variable `var'. Invalidate any varobj related to `objfile'.
|
||||
Remove unconditional invalidation of local varobjs. Move global
|
||||
varobjs revalidation to ...
|
||||
(varobj_revalidate): ... a new function.
|
||||
* varobj.h (varobj_invalidate): Update the prototype.
|
||||
(varobj_revalidate): New prototype.
|
||||
|
||||
[ Cut the printcmd.c simplification/change. ]
|
||||
|
||||
Index: gdb-6.8.50.20090302/gdb/objfiles.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/objfiles.c 2009-05-10 21:36:30.000000000 +0200
|
||||
+++ gdb-6.8.50.20090302/gdb/objfiles.c 2009-05-10 21:36:42.000000000 +0200
|
||||
@@ -50,6 +50,7 @@
|
||||
#include "addrmap.h"
|
||||
#include "arch-utils.h"
|
||||
#include "exec.h"
|
||||
+#include "varobj.h"
|
||||
|
||||
/* Prototypes for local functions */
|
||||
|
||||
@@ -409,6 +410,7 @@ free_objfile (struct objfile *objfile)
|
||||
/* Remove any references to this objfile in the global value
|
||||
lists. */
|
||||
preserve_values (objfile);
|
||||
+ varobj_invalidate (objfile);
|
||||
|
||||
/* First do any symbol file specific actions required when we are
|
||||
finished with a particular symbol file. Note that if the objfile
|
||||
Index: gdb-6.8.50.20090302/gdb/parse.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/parse.c 2009-05-10 21:36:29.000000000 +0200
|
||||
+++ gdb-6.8.50.20090302/gdb/parse.c 2009-05-10 21:36:42.000000000 +0200
|
||||
@@ -1373,6 +1373,45 @@ parser_fprintf (FILE *x, const char *y,
|
||||
va_end (args);
|
||||
}
|
||||
|
||||
+/* Return 1 if EXP uses OBJFILE (and will become dangling when OBJFILE
|
||||
+ is unloaded), otherwise return 0. */
|
||||
+
|
||||
+int
|
||||
+exp_uses_objfile (struct expression *exp, struct objfile *objfile)
|
||||
+{
|
||||
+ int endpos;
|
||||
+ const union exp_element *const elts = exp->elts;
|
||||
+
|
||||
+ for (endpos = exp->nelts; endpos > 0; )
|
||||
+ {
|
||||
+ int i, args, oplen = 0;
|
||||
+
|
||||
+ exp->language_defn->la_exp_desc->operator_length (exp, endpos,
|
||||
+ &oplen, &args);
|
||||
+ gdb_assert (oplen > 0);
|
||||
+
|
||||
+ i = endpos - oplen;
|
||||
+ if (elts[i].opcode == OP_VAR_VALUE)
|
||||
+ {
|
||||
+ const struct block *const block = elts[i + 1].block;
|
||||
+ const struct symbol *const symbol = elts[i + 2].symbol;
|
||||
+ const struct obj_section *const section =
|
||||
+ SYMBOL_OBJ_SECTION (symbol);
|
||||
+
|
||||
+ /* Check objfile where is placed the code touching the variable. */
|
||||
+ if (matching_objfiles (block_objfile (block), objfile))
|
||||
+ return 1;
|
||||
+
|
||||
+ /* Check objfile where the variable itself is placed. */
|
||||
+ if (section && section->objfile == objfile)
|
||||
+ return 1;
|
||||
+ }
|
||||
+ endpos -= oplen;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
void
|
||||
_initialize_parse (void)
|
||||
{
|
||||
Index: gdb-6.8.50.20090302/gdb/parser-defs.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/parser-defs.h 2009-05-10 21:36:27.000000000 +0200
|
||||
+++ gdb-6.8.50.20090302/gdb/parser-defs.h 2009-05-10 21:36:42.000000000 +0200
|
||||
@@ -299,4 +299,6 @@ extern void print_subexp_standard (struc
|
||||
|
||||
extern void parser_fprintf (FILE *, const char *, ...) ATTR_FORMAT (printf, 2 ,3);
|
||||
|
||||
+extern int exp_uses_objfile (struct expression *exp, struct objfile *objfile);
|
||||
+
|
||||
#endif /* PARSER_DEFS_H */
|
||||
Index: gdb-6.8.50.20090302/gdb/symfile.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/symfile.c 2009-05-10 21:36:29.000000000 +0200
|
||||
+++ gdb-6.8.50.20090302/gdb/symfile.c 2009-05-10 21:37:51.000000000 +0200
|
||||
@@ -931,6 +931,8 @@ new_symfile_objfile (struct objfile *obj
|
||||
|
||||
/* We're done reading the symbol file; finish off complaints. */
|
||||
clear_complaints (&symfile_complaints, 0, verbo);
|
||||
+
|
||||
+ varobj_revalidate ();
|
||||
}
|
||||
|
||||
/* A helper function which returns true if OBJFILE has any debug
|
||||
@@ -3261,6 +3263,7 @@ reread_symbols (void)
|
||||
/* Remove any references to this objfile in the global
|
||||
value lists. */
|
||||
preserve_values (objfile);
|
||||
+ varobj_invalidate (objfile);
|
||||
|
||||
/* Nuke all the state that we will re-read. Much of the following
|
||||
code which sets things to NULL really is necessary to tell
|
||||
@@ -3359,6 +3362,7 @@ reread_symbols (void)
|
||||
frameless. */
|
||||
|
||||
reinit_frame_cache ();
|
||||
+ varobj_revalidate ();
|
||||
|
||||
/* Discard cleanups as symbol reading was successful. */
|
||||
discard_cleanups (old_cleanups);
|
||||
@@ -3739,10 +3743,6 @@ clear_symtab_users (void)
|
||||
between expressions and which ought to be reset each time. */
|
||||
expression_context_block = NULL;
|
||||
innermost_block = NULL;
|
||||
-
|
||||
- /* Varobj may refer to old symbols, perform a cleanup. */
|
||||
- varobj_invalidate ();
|
||||
-
|
||||
}
|
||||
|
||||
static void
|
||||
Index: gdb-6.8.50.20090302/gdb/varobj.c
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/varobj.c 2009-05-10 21:36:27.000000000 +0200
|
||||
+++ gdb-6.8.50.20090302/gdb/varobj.c 2009-05-10 21:40:55.000000000 +0200
|
||||
@@ -26,6 +26,8 @@
|
||||
#include "gdbcmd.h"
|
||||
#include "block.h"
|
||||
#include "valprint.h"
|
||||
+#include "objfiles.h"
|
||||
+#include "parser-defs.h"
|
||||
|
||||
#include "gdb_assert.h"
|
||||
#include "gdb_string.h"
|
||||
@@ -3272,48 +3274,117 @@ When non-zero, varobj debugging is enabl
|
||||
&setlist, &showlist);
|
||||
}
|
||||
|
||||
-/* Invalidate the varobjs that are tied to locals and re-create the ones that
|
||||
- are defined on globals.
|
||||
+/* Invalidate the varobjs that are tied to the specified OBJFILE. Call this
|
||||
+ function before you start removing OBJFILE.
|
||||
+
|
||||
+ Call varobj_revalidate after the OBJFILEs updates get finished.
|
||||
+
|
||||
Invalidated varobjs will be always printed in_scope="invalid". */
|
||||
+
|
||||
void
|
||||
-varobj_invalidate (void)
|
||||
+varobj_invalidate (struct objfile *objfile)
|
||||
{
|
||||
struct varobj **all_rootvarobj;
|
||||
struct varobj **varp;
|
||||
|
||||
if (varobj_list (&all_rootvarobj) > 0)
|
||||
- {
|
||||
- varp = all_rootvarobj;
|
||||
- while (*varp != NULL)
|
||||
- {
|
||||
- /* Floating varobjs are reparsed on each stop, so we don't care if
|
||||
- the presently parsed expression refers to something that's gone. */
|
||||
- if ((*varp)->root->floating)
|
||||
- continue;
|
||||
-
|
||||
- /* global var must be re-evaluated. */
|
||||
- if ((*varp)->root->valid_block == NULL)
|
||||
- {
|
||||
- struct varobj *tmp_var;
|
||||
-
|
||||
- /* Try to create a varobj with same expression. If we succeed replace
|
||||
- the old varobj, otherwise invalidate it. */
|
||||
- tmp_var = varobj_create (NULL, (*varp)->name, (CORE_ADDR) 0, USE_CURRENT_FRAME);
|
||||
- if (tmp_var != NULL)
|
||||
- {
|
||||
- tmp_var->obj_name = xstrdup ((*varp)->obj_name);
|
||||
- varobj_delete (*varp, NULL, 0);
|
||||
- install_variable (tmp_var);
|
||||
- }
|
||||
- else
|
||||
- (*varp)->root->is_valid = 0;
|
||||
- }
|
||||
- else /* locals must be invalidated. */
|
||||
- (*varp)->root->is_valid = 0;
|
||||
+ {
|
||||
+ varp = all_rootvarobj;
|
||||
+ while (*varp != NULL)
|
||||
+ {
|
||||
+ struct varobj *var = *varp;
|
||||
|
||||
- varp++;
|
||||
- }
|
||||
- }
|
||||
+ /* Floating varobjs are reparsed on each stop, so we don't care if
|
||||
+ the presently parsed expression refers to something that's gone.
|
||||
+ */
|
||||
+ if (var->root->floating)
|
||||
+ continue;
|
||||
+
|
||||
+ if (var->root->is_valid
|
||||
+ && matching_objfiles (block_objfile (var->root->valid_block),
|
||||
+ objfile))
|
||||
+ var->root->is_valid = 0;
|
||||
+
|
||||
+ if (var->root->is_valid
|
||||
+ && exp_uses_objfile (var->root->exp, objfile))
|
||||
+ {
|
||||
+ var->root->is_valid = 0;
|
||||
+
|
||||
+ /* No one touches EXP for !IS_VALID varobj. */
|
||||
+ xfree (var->root->exp);
|
||||
+ var->root->exp = NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (var->type && TYPE_OBJFILE (var->type) == objfile)
|
||||
+ {
|
||||
+ if (!var->root->valid_block)
|
||||
+ var->root->is_valid = 0;
|
||||
+ else
|
||||
+ gdb_assert (!var->root->is_valid);
|
||||
+
|
||||
+ var->type = NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (var->value
|
||||
+ && TYPE_OBJFILE (value_type (var->value)) == objfile)
|
||||
+ {
|
||||
+ if (!var->root->valid_block)
|
||||
+ var->root->is_valid = 0;
|
||||
+ else
|
||||
+ gdb_assert (!var->root->is_valid);
|
||||
+
|
||||
+ value_free (var->value);
|
||||
+ var->value = NULL;
|
||||
+ }
|
||||
+
|
||||
+ varp++;
|
||||
+ }
|
||||
+ }
|
||||
+ xfree (all_rootvarobj);
|
||||
+}
|
||||
+
|
||||
+/* Recreate any global varobjs possibly previously invalidated. If the
|
||||
+ expressions are no longer evaluatable set/keep the varobj invalid. */
|
||||
+
|
||||
+void
|
||||
+varobj_revalidate (void)
|
||||
+{
|
||||
+ struct varobj **all_rootvarobj;
|
||||
+ struct varobj **varp;
|
||||
+
|
||||
+ if (varobj_list (&all_rootvarobj) > 0)
|
||||
+ {
|
||||
+ varp = all_rootvarobj;
|
||||
+ while (*varp != NULL)
|
||||
+ {
|
||||
+ struct varobj *var = *varp;
|
||||
+
|
||||
+ /* Floating varobjs are reparsed on each stop, so we don't care if
|
||||
+ the presently parsed expression refers to something that's gone.
|
||||
+ */
|
||||
+ if (var->root->floating)
|
||||
+ continue;
|
||||
+
|
||||
+ /* global var must be re-evaluated. */
|
||||
+ if (var->root->valid_block == NULL)
|
||||
+ {
|
||||
+ struct varobj *tmp_var;
|
||||
+
|
||||
+ /* Try to create a varobj with same expression. If we succeed
|
||||
+ replace the old varobj, otherwise invalidate it. */
|
||||
+ tmp_var = varobj_create (NULL, var->name, 0, USE_CURRENT_FRAME);
|
||||
+ if (tmp_var != NULL)
|
||||
+ {
|
||||
+ tmp_var->obj_name = xstrdup (var->obj_name);
|
||||
+ varobj_delete (var, NULL, 0);
|
||||
+ install_variable (tmp_var);
|
||||
+ }
|
||||
+ else
|
||||
+ var->root->is_valid = 0;
|
||||
+ }
|
||||
+
|
||||
+ varp++;
|
||||
+ }
|
||||
+ }
|
||||
xfree (all_rootvarobj);
|
||||
- return;
|
||||
}
|
||||
Index: gdb-6.8.50.20090302/gdb/varobj.h
|
||||
===================================================================
|
||||
--- gdb-6.8.50.20090302.orig/gdb/varobj.h 2009-05-10 21:36:27.000000000 +0200
|
||||
+++ gdb-6.8.50.20090302/gdb/varobj.h 2009-05-10 21:36:42.000000000 +0200
|
||||
@@ -148,7 +148,9 @@ extern int varobj_list (struct varobj **
|
||||
extern VEC(varobj_update_result) *varobj_update (struct varobj **varp,
|
||||
int explicit);
|
||||
|
||||
-extern void varobj_invalidate (void);
|
||||
+extern void varobj_invalidate (struct objfile *objfile);
|
||||
+
|
||||
+extern void varobj_revalidate (void);
|
||||
|
||||
extern int varobj_editable_p (struct varobj *var);
|
||||
|
@ -1,86 +0,0 @@
|
||||
Re: [patch] Make a function for block->objfile lookups
|
||||
http://sourceware.org/ml/gdb-patches/2009-04/msg00609.html
|
||||
|
||||
gdb/
|
||||
2009-04-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* block.c (block_objfile): New function.
|
||||
* block.h (block_objfile): New prototype.
|
||||
* objfiles.c (matching_objfiles): New function.
|
||||
* objfiles.h (matching_objfiles): New prototype.
|
||||
* printcmd.c: Remove include solib.h.
|
||||
(display_uses_solib_p): Rename to ...
|
||||
(display_uses_objfile): ... a new function name. Change the SOLIB
|
||||
parameter to OBJFILE parameter. Use now a matching_objfiles call.
|
||||
(clear_dangling_display_expressions): Update the caller.
|
||||
|
||||
[ Cut the printcmd.c simplification/change. ]
|
||||
|
||||
--- ./gdb/block.c 3 Jan 2009 05:57:50 -0000 1.18
|
||||
+++ ./gdb/block.c 22 Apr 2009 19:51:40 -0000
|
||||
@@ -309,3 +309,21 @@ allocate_block (struct obstack *obstack)
|
||||
|
||||
return bl;
|
||||
}
|
||||
+
|
||||
+/* Return OBJFILE in which BLOCK is located or NULL if we cannot find it for
|
||||
+ whatever reason. */
|
||||
+
|
||||
+struct objfile *
|
||||
+block_objfile (const struct block *block)
|
||||
+{
|
||||
+ struct symbol *func;
|
||||
+
|
||||
+ if (block == NULL)
|
||||
+ return NULL;
|
||||
+
|
||||
+ func = block_linkage_function (block);
|
||||
+ if (func == NULL)
|
||||
+ return NULL;
|
||||
+
|
||||
+ return SYMBOL_SYMTAB (func)->objfile;
|
||||
+}
|
||||
--- ./gdb/block.h 3 Jan 2009 05:57:50 -0000 1.19
|
||||
+++ ./gdb/block.h 22 Apr 2009 19:51:40 -0000
|
||||
@@ -164,4 +164,6 @@ extern const struct block *block_global_
|
||||
|
||||
extern struct block *allocate_block (struct obstack *obstack);
|
||||
|
||||
+extern struct objfile *block_objfile (const struct block *block);
|
||||
+
|
||||
#endif /* BLOCK_H */
|
||||
--- ./gdb/objfiles.c 11 Mar 2009 20:26:02 -0000 1.82
|
||||
+++ ./gdb/objfiles.c 22 Apr 2009 19:51:40 -0000
|
||||
@@ -891,3 +891,21 @@ objfile_data (struct objfile *objfile, c
|
||||
gdb_assert (data->index < objfile->num_data);
|
||||
return objfile->data[data->index];
|
||||
}
|
||||
+
|
||||
+/* Return non-zero if A and B point to the same OBJFILE, ignoring any binary
|
||||
+ vs. debuginfo variants of the pointers. If either A or B is NULL return
|
||||
+ zero as not a match. */
|
||||
+
|
||||
+int
|
||||
+matching_objfiles (struct objfile *a, struct objfile *b)
|
||||
+{
|
||||
+ if (a == NULL || b == NULL)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (a->separate_debug_objfile_backlink)
|
||||
+ a = a->separate_debug_objfile_backlink;
|
||||
+ if (b->separate_debug_objfile_backlink)
|
||||
+ b = b->separate_debug_objfile_backlink;
|
||||
+
|
||||
+ return a == b;
|
||||
+}
|
||||
--- ./gdb/objfiles.h 15 Jan 2009 16:35:22 -0000 1.59
|
||||
+++ ./gdb/objfiles.h 22 Apr 2009 19:51:40 -0000
|
||||
@@ -497,6 +497,8 @@ extern struct obj_section *find_pc_secti
|
||||
|
||||
extern int in_plt_section (CORE_ADDR, char *);
|
||||
|
||||
+extern int matching_objfiles (struct objfile *a, struct objfile *b);
|
||||
+
|
||||
/* Keep a registry of per-objfile data-pointers required by other GDB
|
||||
modules. */
|
||||
|
60
gdb.spec
60
gdb.spec
@ -10,11 +10,11 @@ Name: gdb%{?_with_debug:-debug}
|
||||
# Set version to contents of gdb/version.in.
|
||||
# NOTE: the FSF gdb versions are numbered N.M for official releases, like 6.3
|
||||
# and, since January 2005, X.Y.Z.date for daily snapshots, like 6.3.50.20050112 # (daily snapshot from mailine), or 6.3.0.20040112 (head of the release branch).
|
||||
Version: 6.8.50.20090302
|
||||
Version: 6.8.50.20090803
|
||||
|
||||
# The release always contains a leading reserved number, start it at 1.
|
||||
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
|
||||
Release: 42%{?_with_upstream:.upstream}%{?dist}
|
||||
Release: 1%{?_with_upstream:.upstream}%{?dist}
|
||||
|
||||
License: GPLv3+
|
||||
Group: Development/Debuggers
|
||||
@ -82,12 +82,6 @@ Patch112: gdb-6.6-scheduler_locking-step-sw-watchpoints2.patch
|
||||
# Make upstream `set scheduler-locking step' as default.
|
||||
Patch260: gdb-6.6-scheduler_locking-step-is-default.patch
|
||||
|
||||
# Fix to display base constructors from list and breakpoint commands
|
||||
Patch116: gdb-6.3-linespec-20041213.patch
|
||||
|
||||
# Continue removing breakpoints even when failure occurs.
|
||||
Patch117: gdb-6.3-removebp-20041130.patch
|
||||
|
||||
# Add a wrapper script to GDB that implements pstack using the
|
||||
# --readnever option.
|
||||
Patch118: gdb-6.3-gstack-20050411.patch
|
||||
@ -102,9 +96,8 @@ Patch125: gdb-6.3-test-self-20050110.patch
|
||||
# Fix for non-threaded watchpoints.
|
||||
Patch128: gdb-6.3-nonthreaded-wp-20050117.patch
|
||||
|
||||
# Fix to support multiple destructors just like multiple constructors
|
||||
# Test support of multiple destructors just like multiple constructors
|
||||
Patch133: gdb-6.3-test-dtorfix-20050121.patch
|
||||
Patch134: gdb-6.3-dtorfix-20050121.patch
|
||||
|
||||
# Fix to support executable moving
|
||||
Patch136: gdb-6.3-test-movedir-20050125.patch
|
||||
@ -116,7 +109,6 @@ Patch136: gdb-6.3-test-movedir-20050125.patch
|
||||
Patch140: gdb-6.3-gcore-thread-20050204.patch
|
||||
|
||||
# Stop while intentionally stepping and the thread exit is met.
|
||||
Patch141: gdb-6.6-step-thread-exit.patch
|
||||
Patch259: gdb-6.3-step-thread-exit-20050211-test.patch
|
||||
|
||||
# Prevent gdb from being pushed into background
|
||||
@ -193,9 +185,6 @@ Patch196: gdb-6.5-sharedlibrary-path.patch
|
||||
# FIXME: It could be autodetected.
|
||||
Patch199: gdb-6.5-bz190810-gdbserver-arch-advice.patch
|
||||
|
||||
# Fix dereferencing registers for 32bit inferiors on 64bit hosts (BZ 181390).
|
||||
Patch200: gdb-6.5-bz181390-memory-address-width.patch
|
||||
|
||||
# Fix `gcore' command for 32bit inferiors on 64bit hosts.
|
||||
Patch201: gdb-6.5-gcore-i386-on-amd64.patch
|
||||
|
||||
@ -228,8 +217,8 @@ Patch229: gdb-6.3-bz140532-ppc-unwinding-test.patch
|
||||
# Testcase for exec() from threaded program (BZ 202689).
|
||||
Patch231: gdb-6.3-bz202689-exec-from-pthread-test.patch
|
||||
|
||||
# Backported post gdb-6.8.50.20090302 snapshot fixups.
|
||||
Patch232: gdb-6.8.50.20090302-upstream.patch
|
||||
# Backported post gdb-6.8.50.20090803 snapshot fixups.
|
||||
#Patch232: gdb-6.8.50.20090803-upstream.patch
|
||||
|
||||
# Testcase for PPC Power6/DFP instructions disassembly (BZ 230000).
|
||||
Patch234: gdb-6.6-bz230000-power6-disassembly-test.patch
|
||||
@ -340,7 +329,6 @@ Patch324: gdb-6.8-glibc-headers-compat.patch
|
||||
Patch326: gdb-6.8-tui-singlebinary.patch
|
||||
|
||||
# Support transparent debugging of inlined functions for an optimized code.
|
||||
Patch327: gdb-6.8-inlining.patch
|
||||
Patch350: gdb-6.8-inlining-addon.patch
|
||||
Patch328: gdb-6.8-inlining-by-name.patch
|
||||
|
||||
@ -356,9 +344,6 @@ Patch331: gdb-6.8-quit-never-aborts.patch
|
||||
# Support DW_TAG_constant for Fortran in recent Fedora/RH GCCs.
|
||||
Patch332: gdb-6.8-fortran-tag-constant.patch
|
||||
|
||||
# bare names of constructors and destructors should be unique for GDB-6.8+.
|
||||
Patch334: gdb-6.8-ctors-dtors-unique.patch
|
||||
|
||||
# Fix attaching to stopped processes and/or pending signals.
|
||||
Patch337: gdb-6.8-attach-signalled-detach-stopped.patch
|
||||
|
||||
@ -376,22 +361,6 @@ Patch349: gdb-archer.patch
|
||||
Patch352: gdb-6.8-bz457187-largefile.patch
|
||||
Patch360: gdb-6.8-bz457187-largefile-test.patch
|
||||
|
||||
# Fix crash on pretty-printer reading uninitialized std::string (BZ 495781).
|
||||
Patch357: gdb-c_get_string-xfree.patch
|
||||
|
||||
# Fix crash in the charset support.
|
||||
Patch359: gdb-charset-crash.patch
|
||||
|
||||
# Fix crashes due to (missing) varobj revalidation, for VLA (for BZ 377541).
|
||||
Patch369: gdb-varobj-revalidate-prep.patch
|
||||
Patch370: gdb-varobj-revalidate-core.patch
|
||||
|
||||
# Implement DW_OP_call_frame_cfa (for recent GCC).
|
||||
Patch373: gdb-DW_OP_call_frame_cfa.patch
|
||||
|
||||
# Accelerate sorting blocks on reading a file (found on WebKit) (BZ 507267).
|
||||
Patch374: gdb-bz507267-block-sort-fast.patch
|
||||
|
||||
# Fix compatibility of --with-system-readline and readline-6.0+.
|
||||
Patch375: gdb-readline-6.0.patch
|
||||
|
||||
@ -481,7 +450,7 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
|
||||
|
||||
%if 0%{!?_with_upstream:1}
|
||||
|
||||
%patch232 -p1
|
||||
#patch232 -p1
|
||||
%patch349 -p1
|
||||
%patch1 -p1
|
||||
%patch3 -p1
|
||||
@ -491,17 +460,13 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
|
||||
%patch106 -p1
|
||||
%patch111 -p1
|
||||
%patch112 -p1
|
||||
%patch116 -p1
|
||||
%patch117 -p1
|
||||
%patch118 -p1
|
||||
%patch122 -p1
|
||||
%patch125 -p1
|
||||
%patch128 -p1
|
||||
%patch133 -p1
|
||||
%patch134 -p1
|
||||
%patch136 -p1
|
||||
%patch140 -p1
|
||||
%patch141 -p1
|
||||
%patch259 -p1
|
||||
%patch142 -p1
|
||||
%patch145 -p1
|
||||
@ -527,7 +492,6 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
|
||||
%patch195 -p1
|
||||
%patch196 -p1
|
||||
%patch199 -p1
|
||||
%patch200 -p1
|
||||
%patch201 -p1
|
||||
%patch208 -p1
|
||||
%patch209 -p1
|
||||
@ -578,25 +542,17 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
|
||||
%patch322 -p1
|
||||
%patch324 -p1
|
||||
%patch326 -p1
|
||||
%patch327 -p1
|
||||
%patch350 -p1
|
||||
%patch328 -p1
|
||||
%patch329 -p1
|
||||
%patch330 -p1
|
||||
%patch331 -p1
|
||||
%patch332 -p1
|
||||
%patch334 -p1
|
||||
%patch337 -p1
|
||||
%patch343 -p1
|
||||
%patch348 -p1
|
||||
%patch352 -p1
|
||||
%patch357 -p1
|
||||
%patch359 -p1
|
||||
%patch360 -p1
|
||||
%patch369 -p1
|
||||
%patch370 -p1
|
||||
%patch373 -p1
|
||||
%patch374 -p1
|
||||
%patch375 -p1
|
||||
%patch124 -p1
|
||||
|
||||
@ -886,6 +842,10 @@ fi
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Tue Aug 4 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090803-1
|
||||
- Upgrade to the FSF GDB gdb-6.8.50 snapshot: 6.8.50.20090803
|
||||
- archer-jankratochvil-fedora12 commit: 0222cb1f4ddd1eda32965e464cb60b1e44e110b2
|
||||
|
||||
* Fri Jul 31 2009 Jan Kratochvil <jan.kratochvil@redhat.com> - 6.8.50.20090302-42
|
||||
- Release bump only.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user