- Upgrade to the FSF GDB gdb-6.8.50 snapshot: 6.8.50.20090803

- archer-jankratochvil-fedora12 commit:
    0222cb1f4ddd1eda32965e464cb60b1e44e110b2
This commit is contained in:
Jan Kratochvil 2009-08-04 05:37:29 +00:00
parent 6ca358b064
commit e5611bfae3
48 changed files with 11115 additions and 39738 deletions

View File

@ -1 +1 @@
gdb-6.8.50.20090302.tar.bz2
gdb-6.8.50.20090803.tar.bz2

View File

@ -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;

View File

@ -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

View File

@ -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
+

View File

@ -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),

View File

@ -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);

View File

@ -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);

View File

@ -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 (&current_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 (&current_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 *,

View File

@ -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

View File

@ -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. */

View File

@ -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)

View File

@ -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. */

View File

@ -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

View File

@ -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@

View File

@ -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.
+

View File

@ -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"

View File

@ -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.
+

View File

@ -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)

View File

@ -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.
+

View File

@ -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);

View File

@ -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);

View File

@ -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)

View File

@ -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 } {
}
}

View File

@ -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)

View File

@ -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;

View File

@ -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. */

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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."));

View File

@ -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

View File

@ -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.
+

View File

@ -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 {} {
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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\""
}

View File

@ -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);

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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);

View File

@ -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. */

View File

@ -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.

View File

@ -1 +1 @@
a8eae0d4ef955ebcecfc7511af31070a gdb-6.8.50.20090302.tar.bz2
f120526b72a3dfd29e9f06a562e34aa1 gdb-6.8.50.20090803.tar.bz2