- Rebase to FSF GDB 7.2.50.20101117 (which is a 7.3 pre-release).

This commit is contained in:
Jan Kratochvil 2010-11-17 03:58:16 +01:00
parent 1bcf9b6604
commit e00e5eae57
49 changed files with 2090 additions and 13418 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
gdb-7.2.tar.bz2
gdb-7.2.50.20101117.tar.bz2

View File

@ -1,11 +1,11 @@
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=231832
Index: gdb-6.8/gdb/symmisc.c
Index: gdb-7.2.50.20101116/gdb/symmisc.c
===================================================================
--- gdb-6.8.orig/gdb/symmisc.c 2008-03-17 16:06:24.000000000 +0100
+++ gdb-6.8/gdb/symmisc.c 2008-07-14 10:27:50.000000000 +0200
@@ -230,8 +230,8 @@ print_objfile_statistics (void)
--- gdb-7.2.50.20101116.orig/gdb/symmisc.c 2010-11-16 07:53:59.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/symmisc.c 2010-11-16 08:03:08.000000000 +0100
@@ -186,8 +186,8 @@ print_objfile_statistics (void)
if (OBJSTAT (objfile, sz_strtab) > 0)
printf_filtered (_(" Space used by a.out string tables: %d\n"),
OBJSTAT (objfile, sz_strtab));
@ -14,12 +14,12 @@ Index: gdb-6.8/gdb/symmisc.c
+ printf_filtered (_(" Total memory used for objfile obstack: %ld\n"),
+ (long) obstack_memory_used (&objfile->objfile_obstack));
printf_filtered (_(" Total memory used for psymbol cache: %d\n"),
bcache_memory_used (objfile->psymbol_cache));
printf_filtered (_(" Total memory used for macro cache: %d\n"),
Index: gdb-6.8/include/obstack.h
bcache_memory_used (psymbol_bcache_get_bcache
(objfile->psymbol_cache)));
Index: gdb-7.2.50.20101116/include/obstack.h
===================================================================
--- gdb-6.8.orig/include/obstack.h 2005-05-10 12:21:08.000000000 +0200
+++ gdb-6.8/include/obstack.h 2008-07-14 10:27:50.000000000 +0200
--- gdb-7.2.50.20101116.orig/include/obstack.h 2008-10-21 01:03:31.000000000 +0200
+++ gdb-7.2.50.20101116/include/obstack.h 2010-11-16 08:02:37.000000000 +0100
@@ -188,31 +188,31 @@ struct obstack /* control current objec
/* Declare the external functions we use; they are in obstack.c. */
@ -134,10 +134,10 @@ Index: gdb-6.8/include/obstack.h
= (h)->temp + (char *) (h)->chunk) \
: (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0)))
Index: gdb-6.8/libiberty/obstack.c
Index: gdb-7.2.50.20101116/libiberty/obstack.c
===================================================================
--- gdb-6.8.orig/libiberty/obstack.c 2005-05-10 17:33:33.000000000 +0200
+++ gdb-6.8/libiberty/obstack.c 2008-07-14 10:27:50.000000000 +0200
--- gdb-7.2.50.20101116.orig/libiberty/obstack.c 2005-05-10 17:33:33.000000000 +0200
+++ gdb-7.2.50.20101116/libiberty/obstack.c 2010-11-16 08:02:37.000000000 +0100
@@ -44,9 +44,11 @@
#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
#include <gnu-versions.h>

View File

@ -4,20 +4,20 @@
to install and uninstall.
* gstack.sh, gstack.1: New files.
Index: gdb-7.2/gdb/Makefile.in
Index: gdb-7.2.50.20101116/gdb/Makefile.in
===================================================================
--- gdb-7.2.orig/gdb/Makefile.in 2010-09-03 09:37:55.000000000 +0200
+++ gdb-7.2/gdb/Makefile.in 2010-09-03 09:38:45.000000000 +0200
@@ -1010,7 +1010,7 @@ install: all install-only
--- gdb-7.2.50.20101116.orig/gdb/Makefile.in 2010-11-05 15:31:25.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/Makefile.in 2010-11-16 07:56:10.000000000 +0100
@@ -972,7 +972,7 @@ gdb.z:gdb.1
install: all
@$(MAKE) $(FLAGS_TO_PASS) 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
-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 \
@@ -1046,7 +1046,25 @@ install-tui:
@@ -1008,7 +1008,25 @@ install-tui:
install-python:
$(SHELL) $(srcdir)/../mkinstalldirs $(DESTDIR)$(GDB_DATADIR)/python/gdb
@ -44,7 +44,7 @@ Index: gdb-7.2/gdb/Makefile.in
transformed_name=`t='$(program_transform_name)'; \
echo gdb | sed -e $$t` ; \
if test "x$$transformed_name" = x; then \
@@ -1068,6 +1086,17 @@ uninstall-tui:
@@ -1030,6 +1048,17 @@ uninstall-tui:
fi ; \
rm -f $(DESTDIR)$(bindir)/$$transformed_name$(EXEEXT) \
$(DESTDIR)$(man1dir)/$$transformed_name.1
@ -62,10 +62,10 @@ Index: gdb-7.2/gdb/Makefile.in
# The C++ name parser can be built standalone for testing.
test-cp-name-parser.o: cp-name-parser.c
Index: gdb-7.2/gdb/gstack.sh
Index: gdb-7.2.50.20101116/gdb/gstack.sh
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/gstack.sh 2010-09-03 09:38:12.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/gstack.sh 2010-11-16 07:55:47.000000000 +0100
@@ -0,0 +1,48 @@
+#!/bin/sh
+
@ -115,10 +115,10 @@ Index: gdb-7.2/gdb/gstack.sh
+ -e 's/^\((gdb) \)*//' \
+ -e '/^#/p' \
+ -e '/^Thread/p'
Index: gdb-7.2/gdb/testsuite/gdb.base/gstack.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.base/gstack.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.base/gstack.exp 2010-09-03 09:38:12.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.base/gstack.exp 2010-11-16 07:55:47.000000000 +0100
@@ -0,0 +1,71 @@
+# Copyright (C) 2010 Free Software Foundation, Inc.
+
@ -191,10 +191,10 @@ Index: gdb-7.2/gdb/testsuite/gdb.base/gstack.exp
+gdb_exit
+
+remote_exec host "kill -9 $pid"
Index: gdb-7.2/gdb/testsuite/gdb.base/gstack.c
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.base/gstack.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.base/gstack.c 2010-09-03 09:38:12.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.base/gstack.c 2010-11-16 07:55:47.000000000 +0100
@@ -0,0 +1,43 @@
+/* This testcase is part of GDB, the GNU debugger.
+

View File

@ -25,10 +25,10 @@
Port to GDB-6.7.
Index: gdb-7.1.90.20100711/gdb/symfile-mem.c
Index: gdb-7.2.50.20101116/gdb/symfile-mem.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/symfile-mem.c 2010-01-01 08:31:42.000000000 +0100
+++ gdb-7.1.90.20100711/gdb/symfile-mem.c 2010-07-12 10:46:24.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/symfile-mem.c 2010-01-01 08:31:42.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/symfile-mem.c 2010-11-16 08:00:37.000000000 +0100
@@ -57,6 +57,14 @@
#include "elf/common.h"
@ -53,10 +53,10 @@ Index: gdb-7.1.90.20100711/gdb/symfile-mem.c
if (nbfd == NULL)
error (_("Failed to read a valid object file image from memory."));
Index: gdb-7.1.90.20100711/gdb/target.c
Index: gdb-7.2.50.20101116/gdb/target.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/target.c 2010-07-12 10:00:56.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/target.c 2010-07-12 10:47:04.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/target.c 2010-11-16 07:53:59.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/target.c 2010-11-16 08:00:37.000000000 +0100
@@ -58,7 +58,7 @@ static int nosymbol (char *, CORE_ADDR *
static void tcomplain (void) ATTRIBUTE_NORETURN;
@ -84,7 +84,7 @@ Index: gdb-7.1.90.20100711/gdb/target.c
nomemory);
de_fault (to_files_info,
(void (*) (struct target_ops *))
@@ -1526,7 +1526,7 @@ target_xfer_partial (struct target_ops *
@@ -1550,7 +1550,7 @@ target_xfer_partial (struct target_ops *
it makes no progress, and then return how much was transferred). */
int
@ -93,7 +93,7 @@ Index: gdb-7.1.90.20100711/gdb/target.c
{
/* Dispatch to the topmost target, not the flattened current_target.
Memory accesses check target->to_has_(all_)memory, and the
@@ -1542,7 +1542,7 @@ target_read_memory (CORE_ADDR memaddr, g
@@ -1566,7 +1566,7 @@ target_read_memory (CORE_ADDR memaddr, g
the target's stack. This may trigger different cache behavior. */
int
@ -102,7 +102,7 @@ Index: gdb-7.1.90.20100711/gdb/target.c
{
/* Dispatch to the topmost target, not the flattened current_target.
Memory accesses check target->to_has_(all_)memory, and the
@@ -1561,7 +1561,7 @@ target_read_stack (CORE_ADDR memaddr, gd
@@ -1585,7 +1585,7 @@ target_read_stack (CORE_ADDR memaddr, gd
Callers that can deal with partial writes should call target_write. */
int
@ -111,7 +111,7 @@ Index: gdb-7.1.90.20100711/gdb/target.c
{
/* Dispatch to the topmost target, not the flattened current_target.
Memory accesses check target->to_has_(all_)memory, and the
@@ -3218,8 +3218,8 @@ debug_to_prepare_to_store (struct regcac
@@ -3348,8 +3348,8 @@ debug_to_prepare_to_store (struct regcac
fprintf_unfiltered (gdb_stdlog, "target_prepare_to_store ()\n");
}
@ -122,7 +122,7 @@ Index: gdb-7.1.90.20100711/gdb/target.c
int write, struct mem_attrib *attrib,
struct target_ops *target)
{
@@ -3229,8 +3229,8 @@ deprecated_debug_xfer_memory (CORE_ADDR
@@ -3359,8 +3359,8 @@ deprecated_debug_xfer_memory (CORE_ADDR
attrib, target);
fprintf_unfiltered (gdb_stdlog,
@ -133,11 +133,11 @@ Index: gdb-7.1.90.20100711/gdb/target.c
write ? "write" : "read", retval);
if (retval > 0)
Index: gdb-7.1.90.20100711/gdb/target.h
Index: gdb-7.2.50.20101116/gdb/target.h
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/target.h 2010-07-12 10:00:56.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/target.h 2010-07-12 10:46:24.000000000 +0200
@@ -417,10 +417,10 @@ struct target_ops
--- gdb-7.2.50.20101116.orig/gdb/target.h 2010-11-16 07:53:59.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/target.h 2010-11-16 08:00:37.000000000 +0100
@@ -429,10 +429,10 @@ struct target_ops
NOTE: cagney/2004-10-01: This has been entirely superseeded by
to_xfer_partial and inferior inheritance. */
@ -152,7 +152,7 @@ Index: gdb-7.1.90.20100711/gdb/target.h
void (*to_files_info) (struct target_ops *);
int (*to_insert_breakpoint) (struct gdbarch *, struct bp_target_info *);
@@ -838,12 +838,12 @@ extern void target_dcache_invalidate (vo
@@ -846,12 +846,12 @@ extern void target_dcache_invalidate (vo
extern int target_read_string (CORE_ADDR, char **, int, int *);
@ -168,10 +168,10 @@ Index: gdb-7.1.90.20100711/gdb/target.h
/* Fetches the target's memory map. If one is found it is sorted
and returned, after some consistency checking. Otherwise, NULL
Index: gdb-7.1.90.20100711/gdb/dcache.c
Index: gdb-7.2.50.20101116/gdb/dcache.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/dcache.c 2010-05-14 19:53:15.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/dcache.c 2010-07-12 10:46:24.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/dcache.c 2010-05-14 19:53:15.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/dcache.c 2010-11-16 08:00:37.000000000 +0100
@@ -465,10 +465,10 @@ dcache_free (DCACHE *dcache)
NOTE: This is different than the to_xfer_partial interface, in which
positive values less than LEN mean further transfers may be possible. */
@ -185,10 +185,10 @@ Index: gdb-7.1.90.20100711/gdb/dcache.c
{
int i;
int res;
Index: gdb-7.1.90.20100711/gdb/dcache.h
Index: gdb-7.2.50.20101116/gdb/dcache.h
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/dcache.h 2010-01-01 08:31:30.000000000 +0100
+++ gdb-7.1.90.20100711/gdb/dcache.h 2010-07-12 10:46:24.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/dcache.h 2010-01-01 08:31:30.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/dcache.h 2010-11-16 08:00:37.000000000 +0100
@@ -35,8 +35,8 @@ void dcache_free (DCACHE *);
/* Simple to call from <remote>_xfer_memory */
@ -200,10 +200,10 @@ Index: gdb-7.1.90.20100711/gdb/dcache.h
void dcache_update (DCACHE *dcache, CORE_ADDR memaddr, gdb_byte *myaddr,
int len);
Index: gdb-7.1.90.20100711/gdb/exec.c
Index: gdb-7.2.50.20101116/gdb/exec.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/exec.c 2010-05-14 20:35:11.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/exec.c 2010-07-12 10:46:24.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/exec.c 2010-08-31 20:08:43.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/exec.c 2010-11-16 08:00:37.000000000 +0100
@@ -571,7 +571,7 @@ map_vmap (bfd *abfd, bfd *arch)
}
@ -213,11 +213,11 @@ Index: gdb-7.1.90.20100711/gdb/exec.c
section_table_xfer_memory_partial (gdb_byte *readbuf, const gdb_byte *writebuf,
ULONGEST offset, LONGEST len,
struct target_section *sections,
Index: gdb-7.1.90.20100711/gdb/linux-nat.c
Index: gdb-7.2.50.20101116/gdb/linux-nat.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/linux-nat.c 2010-07-12 10:44:36.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/linux-nat.c 2010-07-12 10:46:24.000000000 +0200
@@ -5197,7 +5197,7 @@ linux_xfer_partial (struct target_ops *o
--- gdb-7.2.50.20101116.orig/gdb/linux-nat.c 2010-11-16 08:00:26.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/linux-nat.c 2010-11-16 08:00:37.000000000 +0100
@@ -5251,7 +5251,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. */
@ -226,10 +226,10 @@ Index: gdb-7.1.90.20100711/gdb/linux-nat.c
/* Re-read register stack area. */
xxfer = super_xfer_partial (ops, object, annex,
Index: gdb-7.1.90.20100711/gdb/remote.c
Index: gdb-7.2.50.20101116/gdb/remote.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/remote.c 2010-07-07 18:15:16.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/remote.c 2010-07-12 10:46:24.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/remote.c 2010-11-04 05:48:21.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/remote.c 2010-11-16 08:00:37.000000000 +0100
@@ -25,6 +25,7 @@
#include "gdb_string.h"
#include <ctype.h>
@ -269,11 +269,11 @@ Index: gdb-7.1.90.20100711/gdb/remote.c
}
/* Sends a packet with content determined by the printf format string
Index: gdb-7.1.90.20100711/gdb/remote-sim.c
Index: gdb-7.2.50.20101116/gdb/remote-sim.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/remote-sim.c 2010-05-16 23:11:14.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/remote-sim.c 2010-07-12 10:46:24.000000000 +0200
@@ -759,11 +759,14 @@ gdbsim_prepare_to_store (struct regcache
--- gdb-7.2.50.20101116.orig/gdb/remote-sim.c 2010-08-10 06:39:26.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/remote-sim.c 2010-11-16 08:01:16.000000000 +0100
@@ -1055,11 +1055,13 @@ gdbsim_prepare_to_store (struct regcache
Returns the number of bytes transferred. */
@ -286,14 +286,13 @@ Index: gdb-7.1.90.20100711/gdb/remote-sim.c
{
+ /* Convert to len type that sim_read and sim_write can handle. */
+ int xfer_len = (int)len;
+
/* If no program is running yet, then ignore the simulator for
memory. Pass the request down to the next target, hopefully
an exec file. */
Index: gdb-7.1.90.20100711/gdb/exec.h
struct sim_inferior_data *sim_data
= get_sim_inferior_data (current_inferior (), SIM_INSTANCE_NOT_NEEDED);
Index: gdb-7.2.50.20101116/gdb/exec.h
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/exec.h 2010-01-01 08:31:31.000000000 +0100
+++ gdb-7.1.90.20100711/gdb/exec.h 2010-07-12 10:46:24.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/exec.h 2010-01-01 08:31:31.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/exec.h 2010-11-16 08:00:37.000000000 +0100
@@ -60,7 +60,7 @@ extern int resize_section_table (struct
One, and only one, of readbuf or writebuf must be non-NULL. */

View File

@ -11,11 +11,11 @@
* gdb.texinfo (File Options): Document --readnever.
Index: gdb-7.1.90.20100721/gdb/doc/gdb.texinfo
Index: gdb-7.2.50.20101116/gdb/doc/gdb.texinfo
===================================================================
--- gdb-7.1.90.20100721.orig/gdb/doc/gdb.texinfo 2010-07-23 20:58:52.000000000 +0200
+++ gdb-7.1.90.20100721/gdb/doc/gdb.texinfo 2010-07-23 20:59:15.000000000 +0200
@@ -998,6 +998,12 @@ Read each symbol file's entire symbol ta
--- gdb-7.2.50.20101116.orig/gdb/doc/gdb.texinfo 2010-11-12 21:49:41.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/doc/gdb.texinfo 2010-11-16 07:59:31.000000000 +0100
@@ -1001,6 +1001,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-7.1.90.20100721/gdb/doc/gdb.texinfo
@end table
@node Mode Options
Index: gdb-7.1.90.20100721/gdb/main.c
Index: gdb-7.2.50.20101116/gdb/main.c
===================================================================
--- gdb-7.1.90.20100721.orig/gdb/main.c 2010-07-23 20:58:55.000000000 +0200
+++ gdb-7.1.90.20100721/gdb/main.c 2010-07-23 20:59:15.000000000 +0200
@@ -391,6 +391,7 @@ captured_main (void *data)
--- gdb-7.2.50.20101116.orig/gdb/main.c 2010-11-16 07:59:20.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/main.c 2010-11-16 07:59:59.000000000 +0100
@@ -390,6 +390,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,18 +40,18 @@ Index: gdb-7.1.90.20100721/gdb/main.c
{"r", no_argument, &readnow_symbol_files, 1},
{"quiet", no_argument, &quiet, 1},
{"q", no_argument, &quiet, 1},
@@ -1038,6 +1039,7 @@ Options:\n\n\
fputs_unfiltered (_("\
@@ -982,6 +983,7 @@ Options:\n\n\
fputs_unfiltered (_(" file.\n\
--quiet Do not print version number on startup.\n\
--readnow Fully read symbol files on first access.\n\
+ --readnever Do not read symbol files.\n\
"), stream);
fputs_unfiltered (_("\
--se=FILE Use FILE as symbol file and executable file.\n\
Index: gdb-7.1.90.20100721/gdb/symfile.c
Index: gdb-7.2.50.20101116/gdb/symfile.c
===================================================================
--- gdb-7.1.90.20100721.orig/gdb/symfile.c 2010-07-23 20:58:52.000000000 +0200
+++ gdb-7.1.90.20100721/gdb/symfile.c 2010-07-23 20:59:15.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/symfile.c 2010-10-17 20:49:46.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/symfile.c 2010-11-16 07:59:31.000000000 +0100
@@ -80,6 +80,7 @@ static void clear_symtab_users_cleanup (
/* Global variables owned by this file */
@ -60,19 +60,19 @@ Index: gdb-7.1.90.20100721/gdb/symfile.c
/* External variables and functions referenced. */
Index: gdb-7.1.90.20100721/gdb/dwarf2read.c
Index: gdb-7.2.50.20101116/gdb/dwarf2read.c
===================================================================
--- gdb-7.1.90.20100721.orig/gdb/dwarf2read.c 2010-07-23 20:58:53.000000000 +0200
+++ gdb-7.1.90.20100721/gdb/dwarf2read.c 2010-07-23 20:59:26.000000000 +0200
@@ -54,6 +54,7 @@
#include "exceptions.h"
#include "gdb_stat.h"
#include "completer.h"
--- gdb-7.2.50.20101116.orig/gdb/dwarf2read.c 2010-11-16 07:54:02.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/dwarf2read.c 2010-11-16 08:00:18.000000000 +0100
@@ -57,6 +57,7 @@
#include "vec.h"
#include "c-lang.h"
#include "valprint.h"
+#include "top.h"
#include <fcntl.h>
#include "gdb_string.h"
@@ -1283,8 +1284,9 @@ dwarf2_has_info (struct objfile *objfile
@@ -1356,8 +1357,9 @@ dwarf2_has_info (struct objfile *objfile
bfd_map_over_sections (objfile->obfd, dwarf2_locate_sections, NULL);
dwarf2_per_objfile->objfile = objfile;
}
@ -84,10 +84,10 @@ Index: gdb-7.1.90.20100721/gdb/dwarf2read.c
}
/* When loading sections, we can either look for ".<name>", or for
Index: gdb-7.1.90.20100721/gdb/top.h
Index: gdb-7.2.50.20101116/gdb/top.h
===================================================================
--- gdb-7.1.90.20100721.orig/gdb/top.h 2010-04-07 18:54:39.000000000 +0200
+++ gdb-7.1.90.20100721/gdb/top.h 2010-07-23 20:59:15.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/top.h 2010-04-07 18:54:39.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/top.h 2010-11-16 07:59:31.000000000 +0100
@@ -61,6 +61,7 @@ extern void set_prompt (char *);
/* From random places. */

View File

@ -1,25 +1,25 @@
Index: gdb-7.0.90.20100306/gdb/testsuite/configure.ac
Index: gdb-7.2.50.20101116/gdb/testsuite/configure.ac
===================================================================
--- gdb-7.0.90.20100306.orig/gdb/testsuite/configure.ac 2010-02-19 20:16:36.000000000 +0100
+++ gdb-7.0.90.20100306/gdb/testsuite/configure.ac 2010-03-06 23:19:56.000000000 +0100
--- gdb-7.2.50.20101116.orig/gdb/testsuite/configure.ac 2010-11-05 15:31:29.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/configure.ac 2010-11-16 07:56:53.000000000 +0100
@@ -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.multi/Makefile \
- gdb.objc/Makefile gdb.opt/Makefile gdb.pascal/Makefile \
+ gdb.objc/Makefile gdb.opt/Makefile gdb.pascal/Makefile gdb.pie/Makefile \
- gdb.objc/Makefile gdb.opencl/Makefile gdb.opt/Makefile gdb.pascal/Makefile \
+ gdb.objc/Makefile gdb.opencl/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])
Index: gdb-7.0.90.20100306/gdb/testsuite/configure
Index: gdb-7.2.50.20101116/gdb/testsuite/configure
===================================================================
--- gdb-7.0.90.20100306.orig/gdb/testsuite/configure 2010-02-19 20:16:36.000000000 +0100
+++ gdb-7.0.90.20100306/gdb/testsuite/configure 2010-03-06 23:20:12.000000000 +0100
--- gdb-7.2.50.20101116.orig/gdb/testsuite/configure 2010-11-05 15:31:29.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/configure 2010-11-16 07:57:59.000000000 +0100
@@ -3515,7 +3515,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.multi/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.multi/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"
-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.multi/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 gdb.opencl/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.multi/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 gdb.opencl/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@ -31,10 +31,10 @@ Index: gdb-7.0.90.20100306/gdb/testsuite/configure
"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" ;;
Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/attach.c
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/attach.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/attach.c 2010-03-06 23:19:31.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/attach.c 2010-11-16 07:56:34.000000000 +0100
@@ -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-7.0.90.20100306/gdb/testsuite/gdb.pie/attach.c
+ }
+ return 0;
+}
Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/attach2.c
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/attach2.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/attach2.c 2010-03-06 23:19:31.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/attach2.c 2010-11-16 07:56:34.000000000 +0100
@@ -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-7.0.90.20100306/gdb/testsuite/gdb.pie/attach2.c
+ }
+ return (0);
+}
Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/break.c
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/break.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/break.c 2010-03-06 23:19:31.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/break.c 2010-11-16 07:56:34.000000000 +0100
@@ -0,0 +1,146 @@
+/* This testcase is part of GDB, the GNU debugger.
+
@ -236,10 +236,10 @@ Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/break.c
+ }
+ return 0;
+}
Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/break1.c
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/break1.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/break1.c 2010-03-06 23:19:31.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/break1.c 2010-11-16 07:56:34.000000000 +0100
@@ -0,0 +1,44 @@
+/* This testcase is part of GDB, the GNU debugger.
+
@ -285,10 +285,10 @@ Index: gdb-7.0.90.20100306/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-7.0.90.20100306/gdb/testsuite/gdb.pie/coremaker.c
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/coremaker.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/coremaker.c 2010-03-06 23:19:31.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/coremaker.c 2010-11-16 07:56:34.000000000 +0100
@@ -0,0 +1,142 @@
+/* Copyright 1992, 1993, 1994, 1995, 1996, 1999
+ Free Software Foundation, Inc.
@ -432,10 +432,10 @@ Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/coremaker.c
+ return 0;
+}
+
Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/attach.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/attach.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/attach.exp 2010-03-06 23:19:31.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/attach.exp 2010-11-16 07:56:34.000000000 +0100
@@ -0,0 +1,423 @@
+# Copyright 1997, 1999, 2002 Free Software Foundation, Inc.
+
@ -860,10 +860,10 @@ Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/attach.exp
+do_call_attach_tests
+
+return 0
Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/break.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/break.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/break.exp 2010-03-06 23:19:31.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/break.exp 2010-11-16 07:56:34.000000000 +0100
@@ -0,0 +1,966 @@
+# Copyright 1988, 1990, 1991, 1992, 1994, 1995, 1996, 1997, 1998, 1999,
+# 2000, 2002, 2003, 2004
@ -1831,10 +1831,10 @@ Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/break.exp
+ send_gdb "set args main\n"
+ gdb_expect -re ".*$gdb_prompt $" {}
+}
Index: gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/corefile.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/corefile.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/corefile.exp 2010-03-06 23:19:31.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/corefile.exp 2010-11-16 07:56:34.000000000 +0100
@@ -0,0 +1,233 @@
+# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000
+# Free Software Foundation, Inc.
@ -2069,10 +2069,10 @@ Index: gdb-7.0.90.20100306/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-7.0.90.20100306/gdb/testsuite/gdb.pie/Makefile.in
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/Makefile.in
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.0.90.20100306/gdb/testsuite/gdb.pie/Makefile.in 2010-03-06 23:19:31.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.pie/Makefile.in 2010-11-16 07:56:34.000000000 +0100
@@ -0,0 +1,19 @@
+VPATH = @srcdir@
+srcdir = @srcdir@

View File

@ -30,11 +30,11 @@ glibc-debuginfo-2.7-2.x86_64: /usr/lib/debug/lib64/libc.so.6.debug:
<81a2> DW_AT_name : (indirect string, offset: 0x280e): __errno_location
<81a8> DW_AT_MIPS_linkage_name: (indirect string, offset: 0x2808): *__GI___errno_location
Index: gdb-7.0.50.20100128/gdb/gdbtypes.c
Index: gdb-7.2.50.20101116/gdb/gdbtypes.c
===================================================================
--- gdb-7.0.50.20100128.orig/gdb/gdbtypes.c 2010-01-28 12:52:17.000000000 +0100
+++ gdb-7.0.50.20100128/gdb/gdbtypes.c 2010-01-28 12:52:48.000000000 +0100
@@ -3978,6 +3978,9 @@ gdbtypes_post_init (struct gdbarch *gdba
--- gdb-7.2.50.20101116.orig/gdb/gdbtypes.c 2010-11-16 07:53:59.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/gdbtypes.c 2010-11-16 08:01:33.000000000 +0100
@@ -4262,6 +4262,9 @@ gdbtypes_post_init (struct gdbarch *gdba
= arch_type (gdbarch, TYPE_CODE_INTERNAL_FUNCTION, 0,
"<internal function>");
@ -44,11 +44,11 @@ Index: gdb-7.0.50.20100128/gdb/gdbtypes.c
return builtin_type;
}
Index: gdb-7.0.50.20100128/gdb/gdbtypes.h
Index: gdb-7.2.50.20101116/gdb/gdbtypes.h
===================================================================
--- gdb-7.0.50.20100128.orig/gdb/gdbtypes.h 2010-01-28 12:52:17.000000000 +0100
+++ gdb-7.0.50.20100128/gdb/gdbtypes.h 2010-01-28 12:52:48.000000000 +0100
@@ -1245,6 +1245,8 @@ struct builtin_type
--- gdb-7.2.50.20101116.orig/gdb/gdbtypes.h 2010-11-16 07:53:59.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/gdbtypes.h 2010-11-16 08:01:33.000000000 +0100
@@ -1294,6 +1294,8 @@ struct builtin_type
/* This type is used to represent a GDB internal function. */
struct type *internal_fn;
@ -57,11 +57,11 @@ Index: gdb-7.0.50.20100128/gdb/gdbtypes.h
};
/* Return the type table for the specified architecture. */
Index: gdb-7.0.50.20100128/gdb/parse.c
Index: gdb-7.2.50.20101116/gdb/parse.c
===================================================================
--- gdb-7.0.50.20100128.orig/gdb/parse.c 2010-01-28 12:52:19.000000000 +0100
+++ gdb-7.0.50.20100128/gdb/parse.c 2010-01-28 12:53:20.000000000 +0100
@@ -509,7 +509,11 @@ write_exp_msymbol (struct minimal_symbol
--- gdb-7.2.50.20101116.orig/gdb/parse.c 2010-11-16 07:53:59.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/parse.c 2010-11-16 08:01:33.000000000 +0100
@@ -530,7 +530,11 @@ write_exp_msymbol (struct minimal_symbol
case mst_text:
case mst_file_text:
case mst_solib_trampoline:
@ -74,12 +74,12 @@ Index: gdb-7.0.50.20100128/gdb/parse.c
break;
case mst_text_gnu_ifunc:
Index: gdb-7.0.50.20100128/gdb/target.c
Index: gdb-7.2.50.20101116/gdb/target.c
===================================================================
--- gdb-7.0.50.20100128.orig/gdb/target.c 2010-01-28 12:52:29.000000000 +0100
+++ gdb-7.0.50.20100128/gdb/target.c 2010-01-28 12:52:48.000000000 +0100
@@ -1000,6 +1000,25 @@ pop_all_targets (int quitting)
pop_all_targets_above (dummy_stratum, quitting);
--- gdb-7.2.50.20101116.orig/gdb/target.c 2010-11-16 08:00:37.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/target.c 2010-11-16 08:01:52.000000000 +0100
@@ -1067,6 +1067,25 @@ target_is_pushed (struct target_ops *t)
return 0;
}
+static int
@ -104,7 +104,7 @@ Index: gdb-7.0.50.20100128/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
@@ -1090,7 +1109,28 @@ target_translate_tls_address (struct obj
@@ -1157,7 +1176,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
@ -134,10 +134,10 @@ Index: gdb-7.0.50.20100128/gdb/target.c
return addr;
}
Index: gdb-7.0.50.20100128/gdb/testsuite/gdb.dwarf2/dw2-errno.c
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.dwarf2/dw2-errno.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.0.50.20100128/gdb/testsuite/gdb.dwarf2/dw2-errno.c 2010-01-28 12:52:48.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.dwarf2/dw2-errno.c 2010-11-16 08:01:33.000000000 +0100
@@ -0,0 +1,28 @@
+/* This testcase is part of GDB, the GNU debugger.
+
@ -167,10 +167,10 @@ Index: gdb-7.0.50.20100128/gdb/testsuite/gdb.dwarf2/dw2-errno.c
+
+ return 0; /* breakpoint */
+}
Index: gdb-7.0.50.20100128/gdb/testsuite/gdb.dwarf2/dw2-errno.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.dwarf2/dw2-errno.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.0.50.20100128/gdb/testsuite/gdb.dwarf2/dw2-errno.exp 2010-01-28 12:52:48.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.dwarf2/dw2-errno.exp 2010-11-16 08:01:33.000000000 +0100
@@ -0,0 +1,60 @@
+# Copyright 2007 Free Software Foundation, Inc.
+

View File

@ -1,7 +1,7 @@
Index: gdb-7.2/gdb/event-top.c
Index: gdb-7.2.50.20101116/gdb/event-top.c
===================================================================
--- gdb-7.2.orig/gdb/event-top.c 2010-06-26 08:44:47.000000000 +0200
+++ gdb-7.2/gdb/event-top.c 2010-10-06 22:39:32.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/event-top.c 2010-09-11 18:00:25.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/event-top.c 2010-11-16 08:14:26.000000000 +0100
@@ -33,6 +33,7 @@
#include "cli/cli-script.h" /* for reset_command_nest_depth */
#include "main.h"
@ -28,10 +28,10 @@ Index: gdb-7.2/gdb/event-top.c
/* Each interpreter has its own rules on displaying the command
prompt. */
if (!current_interp_display_prompt_p ())
Index: gdb-7.2/gdb/elfread.c
Index: gdb-7.2.50.20101116/gdb/elfread.c
===================================================================
--- gdb-7.2.orig/gdb/elfread.c 2010-10-06 22:39:32.000000000 +0200
+++ gdb-7.2/gdb/elfread.c 2010-10-06 22:39:52.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/elfread.c 2010-11-16 08:04:18.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/elfread.c 2010-11-16 08:14:26.000000000 +0100
@@ -42,6 +42,7 @@
#include "gdbcore.h"
#include "gdbcmd.h"
@ -464,11 +464,11 @@ Index: gdb-7.2/gdb/elfread.c
}
static char *
Index: gdb-7.2/gdb/symfile.h
Index: gdb-7.2.50.20101116/gdb/symfile.h
===================================================================
--- gdb-7.2.orig/gdb/symfile.h 2010-10-06 22:39:32.000000000 +0200
+++ gdb-7.2/gdb/symfile.h 2010-10-06 22:39:52.000000000 +0200
@@ -577,6 +577,8 @@ extern struct build_id *build_id_addr_ge
--- gdb-7.2.50.20101116.orig/gdb/symfile.h 2010-11-16 08:04:18.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/symfile.h 2010-11-16 08:14:26.000000000 +0100
@@ -552,6 +552,8 @@ 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);
@ -477,11 +477,11 @@ Index: gdb-7.2/gdb/symfile.h
/* From dwarf2read.c */
Index: gdb-7.2/gdb/testsuite/lib/gdb.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/lib/gdb.exp
===================================================================
--- gdb-7.2.orig/gdb/testsuite/lib/gdb.exp 2010-10-06 22:39:32.000000000 +0200
+++ gdb-7.2/gdb/testsuite/lib/gdb.exp 2010-10-06 22:39:32.000000000 +0200
@@ -1359,7 +1359,7 @@ proc default_gdb_start { } {
--- gdb-7.2.50.20101116.orig/gdb/testsuite/lib/gdb.exp 2010-11-16 08:04:18.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/lib/gdb.exp 2010-11-16 08:14:26.000000000 +0100
@@ -1358,7 +1358,7 @@ proc default_gdb_start { } {
warning "Couldn't set the width to 0."
}
}
@ -490,10 +490,10 @@ Index: gdb-7.2/gdb/testsuite/lib/gdb.exp
send_gdb "set build-id-verbose 0\n"
gdb_expect 10 {
-re "$gdb_prompt $" {
Index: gdb-7.2/gdb/testsuite/lib/mi-support.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/lib/mi-support.exp
===================================================================
--- gdb-7.2.orig/gdb/testsuite/lib/mi-support.exp 2010-10-06 22:39:32.000000000 +0200
+++ gdb-7.2/gdb/testsuite/lib/mi-support.exp 2010-10-06 22:39:32.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/testsuite/lib/mi-support.exp 2010-11-16 08:04:18.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/lib/mi-support.exp 2010-11-16 08:14:26.000000000 +0100
@@ -221,7 +221,7 @@ proc default_mi_gdb_start { args } {
}
}
@ -503,10 +503,10 @@ Index: gdb-7.2/gdb/testsuite/lib/mi-support.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-7.2/gdb/tui/tui-interp.c
Index: gdb-7.2.50.20101116/gdb/tui/tui-interp.c
===================================================================
--- gdb-7.2.orig/gdb/tui/tui-interp.c 2010-05-18 00:21:43.000000000 +0200
+++ gdb-7.2/gdb/tui/tui-interp.c 2010-10-06 22:39:32.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/tui/tui-interp.c 2010-05-18 00:21:43.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/tui/tui-interp.c 2010-11-16 08:14:26.000000000 +0100
@@ -30,6 +30,7 @@
#include "tui/tui.h"
#include "tui/tui-io.h"
@ -524,10 +524,10 @@ Index: gdb-7.2/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-7.2/gdb/aclocal.m4
Index: gdb-7.2.50.20101116/gdb/aclocal.m4
===================================================================
--- gdb-7.2.orig/gdb/aclocal.m4 2010-05-23 02:56:59.000000000 +0200
+++ gdb-7.2/gdb/aclocal.m4 2010-10-06 22:39:32.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/aclocal.m4 2010-05-23 02:56:59.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/aclocal.m4 2010-11-16 08:14:26.000000000 +0100
@@ -19,6 +19,162 @@ You have another version of autoconf. I
If you have problems, you may need to regenerate the build system entirely.
To do so, use the procedure documented by the package, typically `autoreconf'.])])
@ -691,10 +691,10 @@ Index: gdb-7.2/gdb/aclocal.m4
# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
Index: gdb-7.2/gdb/config.in
Index: gdb-7.2.50.20101116/gdb/config.in
===================================================================
--- gdb-7.2.orig/gdb/config.in 2010-10-06 22:39:31.000000000 +0200
+++ gdb-7.2/gdb/config.in 2010-10-06 22:39:32.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/config.in 2010-09-02 19:12:35.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/config.in 2010-11-16 08:14:26.000000000 +0100
@@ -46,6 +46,9 @@
/* Define to BFD's default target vector. */
#undef DEFAULT_BFD_VEC
@ -705,7 +705,7 @@ Index: gdb-7.2/gdb/config.in
/* Define to 1 if translation of program messages to the user's native
language is requested. */
#undef ENABLE_NLS
@@ -231,6 +234,9 @@
@@ -232,6 +235,9 @@
/* Define if Python 2.7 is being used. */
#undef HAVE_LIBPYTHON2_7
@ -715,10 +715,10 @@ Index: gdb-7.2/gdb/config.in
/* Define if libunwind library is being used. */
#undef HAVE_LIBUNWIND
Index: gdb-7.2/gdb/configure
Index: gdb-7.2.50.20101116/gdb/configure
===================================================================
--- gdb-7.2.orig/gdb/configure 2010-10-06 22:39:31.000000000 +0200
+++ gdb-7.2/gdb/configure 2010-10-06 22:39:32.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/configure 2010-11-05 02:50:17.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/configure 2010-11-16 08:15:33.000000000 +0100
@@ -679,6 +679,9 @@ REPORT_BUGS_TO
PKGVERSION
TARGET_OBS
@ -726,18 +726,18 @@ Index: gdb-7.2/gdb/configure
+RPM_LIBS
+RPM_CFLAGS
+PKG_CONFIG
pythondir
GDB_DATADIR_PATH
GDB_DATADIR
@@ -948,6 +951,7 @@ with_separate_debug_dir
DEBUGDIR
am__fastdepCC_FALSE
@@ -945,6 +948,7 @@ enable_dependency_tracking
with_separate_debug_dir
with_gdb_datadir
with_relocated_sources
with_pythondir
+with_rpm
enable_targets
enable_64_bit_bfd
enable_gdbcli
@@ -988,6 +992,9 @@ LDFLAGS
@@ -986,6 +990,9 @@ LDFLAGS
LIBS
CPPFLAGS
CPP
@ -747,16 +747,16 @@ Index: gdb-7.2/gdb/configure
YACC
YFLAGS
XMKMF'
@@ -1653,6 +1660,8 @@ Optional Packages:
@@ -1649,6 +1656,8 @@ Optional Packages:
[DATADIR/gdb]
--with-pythondir install Python data files in this path
[DATADIR/gdb/python]
--with-relocated-sources=PATH
automatically relocate this path for source files
+ --with-rpm query rpm database for missing debuginfos (yes/no,
+ def. auto=librpm.so)
--with-libunwind use libunwind frame unwinding support
--with-curses use the curses library instead of the termcap
library
@@ -1688,6 +1697,9 @@ Some influential environment variables:
@@ -1684,6 +1693,9 @@ Some influential environment variables:
CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
you have headers in a nonstandard directory <include dir>
CPP C preprocessor
@ -766,7 +766,7 @@ Index: gdb-7.2/gdb/configure
YACC The `Yet Another C Compiler' implementation to use. Defaults to
the first program found out of: `bison -y', `byacc', `yacc'.
YFLAGS The list of arguments that will be passed by default to $YACC.
@@ -7951,6 +7963,485 @@ _ACEOF
@@ -7881,6 +7893,486 @@ _ACEOF
fi
@ -1249,16 +1249,17 @@ Index: gdb-7.2/gdb/configure
+ fi
+ fi
+fi
+
Index: gdb-7.2/gdb/configure.ac
subdirs="$subdirs doc testsuite"
Index: gdb-7.2.50.20101116/gdb/configure.ac
===================================================================
--- gdb-7.2.orig/gdb/configure.ac 2010-10-06 22:39:31.000000000 +0200
+++ gdb-7.2/gdb/configure.ac 2010-10-06 22:39:32.000000000 +0200
@@ -152,6 +152,198 @@ else
fi
AC_SUBST(pythondir)
--- gdb-7.2.50.20101116.orig/gdb/configure.ac 2010-11-05 02:50:18.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/configure.ac 2010-11-16 08:15:10.000000000 +0100
@@ -108,6 +108,199 @@ AS_HELP_STRING([--with-relocated-sources
[Relocated directory for source files. ])
])
+# Integration with rpm library to support missing debuginfo suggestions.
+# --without-rpm: Disable any rpm support.
@ -1452,13 +1453,14 @@ Index: gdb-7.2/gdb/configure.ac
+ fi
+ fi
+fi
+
AC_CONFIG_SUBDIRS(doc testsuite)
Index: gdb-7.2/gdb/acinclude.m4
# Check whether to support alternative target configurations
Index: gdb-7.2.50.20101116/gdb/acinclude.m4
===================================================================
--- gdb-7.2.orig/gdb/acinclude.m4 2010-05-27 05:40:45.000000000 +0200
+++ gdb-7.2/gdb/acinclude.m4 2010-10-06 22:39:32.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/acinclude.m4 2010-05-27 05:40:45.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/acinclude.m4 2010-11-16 08:14:26.000000000 +0100
@@ -1,3 +1,5 @@
+# serial 1
+
@ -1474,11 +1476,11 @@ Index: gdb-7.2/gdb/acinclude.m4
# @defmac AC_PROG_CC_STDC
# @maindex PROG_CC_STDC
# @ovindex CC
Index: gdb-7.2/gdb/corelow.c
Index: gdb-7.2.50.20101116/gdb/corelow.c
===================================================================
--- gdb-7.2.orig/gdb/corelow.c 2010-10-06 22:39:39.000000000 +0200
+++ gdb-7.2/gdb/corelow.c 2010-10-06 22:39:52.000000000 +0200
@@ -331,7 +331,7 @@ build_id_locate_exec (int from_tty)
--- gdb-7.2.50.20101116.orig/gdb/corelow.c 2010-11-16 08:04:18.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/corelow.c 2010-11-16 08:14:26.000000000 +0100
@@ -317,7 +317,7 @@ build_id_locate_exec (int from_tty)
symfile_objfile->flags |= OBJF_BUILD_ID_CORE_LOADED;
}
else

View File

@ -1,184 +0,0 @@
2007-04-22 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb_gcore.sh: Redirect GDB from `</dev/null'.
2007-04-22 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.base/gcorebg.exp, gdb.base/gcorebg.c: New files.
--- gdb-6.6-orig/gdb/gdb_gcore.sh 2005-12-17 17:33:59.000000000 -0500
+++ gdb-6.6/gdb/gdb_gcore.sh 2007-04-22 05:42:50.000000000 -0400
@@ -71,7 +71,9 @@
quit
EOF
- gdb -x $tmpfile -batch
+ # `</dev/null' to avoid touching interactive terminal if it is
+ # available but not accessible (SIGTTIN risk)
+ gdb -x $tmpfile -batch </dev/null
if [ -r $name.$pid ] ; then
rc=0
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ./gdb/testsuite/gdb.base/gcorebg.c 25 Feb 2007 12:21:20 -0000
@@ -0,0 +1,43 @@
+#include <stdio.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <signal.h>
+
+int main (int argc, char **argv)
+{
+ pid_t pid = 0;
+ pid_t ppid;
+ char buf[256];
+
+ if (argc != 4)
+ {
+ fprintf (stderr, "Syntax: %s {standard|detached} <gcore command> <core output file>\n",
+ argv[0]);
+ exit (1);
+ }
+
+ pid = fork ();
+
+ switch (pid)
+ {
+ case 0:
+ if (strcmp (argv[1], "detached") == 0)
+ setpgrp ();
+ ppid = getppid ();
+ sprintf (buf, "sh %s -o %s %d", argv[2], argv[3], (int) ppid);
+ system (buf);
+ kill (ppid, SIGTERM);
+ break;
+
+ case -1:
+ perror ("fork err\n");
+ exit (1);
+ break;
+
+ default:
+ sleep (60);
+ }
+
+ return 0;
+}
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ./gdb/testsuite/gdb.base/gcorebg.exp 25 Feb 2007 12:21:20 -0000
@@ -0,0 +1,113 @@
+# Copyright 2007 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# Please email any bugs, comments, and/or additions to this file to:
+# bug-gdb@prep.ai.mit.edu
+
+# This file was written by Jan Kratochvil <jan.kratochvil@redhat.com>.
+# This is a test for `gdb_gcore.sh' functionality.
+# It also tests a regression with `gdb_gcore.sh' being run without its
+# accessible terminal.
+
+if ![info exists GCORE] {
+ set GCORE "${srcdir}/../gdb_gcore.sh"
+}
+verbose "using GCORE = $GCORE" 2
+
+set testfile "gcorebg"
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+set corefile ${objdir}/${subdir}/${testfile}.test
+
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
+ untested gcorebg.exp
+ return -1
+}
+
+# Cleanup.
+
+proc core_clean {} {
+ global corefile
+
+ foreach file [glob -nocomplain [join [list $corefile *] ""]] {
+ verbose "Delete file $file" 1
+ remote_file target delete $file
+ }
+}
+core_clean
+remote_file target delete "./gdb"
+
+# Generate the core file.
+
+# Provide `./gdb' for `gdb_gcore.sh' running it as a bare `gdb' command.
+# Setup also `$PATH' appropriately.
+# If GDB was not found let `gdb_gcore.sh' to find the system GDB by `$PATH'.
+if {$GDB != "gdb"} {
+ file link ./gdb $GDB
+}
+global env
+set oldpath $env(PATH)
+set env(PATH) [join [list . $env(PATH)] ":"]
+verbose "PATH = $env(PATH)" 2
+
+# Test file body.
+# $detached == "standard" || $detached == "detached"
+
+proc test_body { detached } {
+ global binfile
+ global GCORE
+ global corefile
+
+ set res [remote_spawn target "$binfile $detached $GCORE $corefile"]
+ if { $res < 0 || $res == "" } {
+ fail "Spawning $detached gcore"
+ return 1
+ }
+ pass "Spawning $detached gcore"
+ remote_expect target 20 {
+ timeout {
+ fail "Spawned $detached gcore finished"
+ remote_exec target "kill -9 -[exp_pid -i $res]"
+ return 1
+ }
+ eof {
+ pass "Spawned $detached gcore finished"
+ remote_wait target 20
+ }
+ }
+
+ if {1 == [llength [glob -nocomplain [join [list $corefile *] ""]]]} {
+ pass "Core file generated by $detached gcore"
+ } else {
+ fail "Core file generated by $detached gcore"
+ }
+ core_clean
+}
+
+# First a general `gdb_gcore.sh' spawn with its controlling terminal available.
+
+test_body standard
+
+# And now `gdb_gcore.sh' spawn without its controlling terminal available.
+# It is spawned through `gcorebg.c' using setpgrp ().
+
+test_body detached
+
+
+# Cleanup.
+
+set env(PATH) $oldpath
+remote_file target delete "./gdb"

View File

@ -21,10 +21,10 @@
Port to GDB-6.8pre.
Index: gdb-7.1.90.20100711/gdb/inferior.h
Index: gdb-7.2.50.20101116/gdb/inferior.h
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/inferior.h 2010-07-12 10:00:56.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/inferior.h 2010-07-12 10:04:25.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/inferior.h 2010-06-24 17:17:30.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/inferior.h 2010-11-16 07:54:36.000000000 +0100
@@ -198,7 +198,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,11 +42,11 @@ Index: gdb-7.1.90.20100711/gdb/inferior.h
/* From misc files */
Index: gdb-7.1.90.20100711/gdb/infrun.c
Index: gdb-7.2.50.20101116/gdb/infrun.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/infrun.c 2010-07-12 10:00:56.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/infrun.c 2010-07-12 10:05:26.000000000 +0200
@@ -76,7 +76,7 @@ static int follow_fork (void);
--- gdb-7.2.50.20101116.orig/gdb/infrun.c 2010-11-16 07:53:59.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/infrun.c 2010-11-16 07:55:23.000000000 +0100
@@ -74,7 +74,7 @@ static int follow_fork (void);
static void set_schedlock_func (char *args, int from_tty,
struct cmd_list_element *c);
@ -55,7 +55,7 @@ Index: gdb-7.1.90.20100711/gdb/infrun.c
static int currently_stepping_or_nexting_callback (struct thread_info *tp,
void *data);
@@ -1549,7 +1549,7 @@ maybe_software_singlestep (struct gdbarc
@@ -1557,7 +1557,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,8 +64,8 @@ Index: gdb-7.1.90.20100711/gdb/infrun.c
{
int should_resume = 1;
struct cleanup *old_cleanups = make_cleanup (resume_cleanups, 0);
@@ -1562,10 +1562,12 @@ resume (int step, enum target_signal sig
QUIT;
@@ -1589,10 +1589,12 @@ resume (int step, enum target_signal sig
}
if (debug_infrun)
- fprintf_unfiltered (gdb_stdlog,
@ -81,7 +81,7 @@ Index: gdb-7.1.90.20100711/gdb/infrun.c
/* Normally, by the time we reach `resume', the breakpoints are either
removed or inserted, as appropriate. The exception is if we're sitting
@@ -1678,9 +1680,10 @@ a command like `return' or `jump' to con
@@ -1710,9 +1712,10 @@ a command like `return' or `jump' to con
individually. */
resume_ptid = inferior_ptid;
}
@ -94,7 +94,7 @@ Index: gdb-7.1.90.20100711/gdb/infrun.c
{
/* User-settable 'scheduler' mode requires solo thread resume. */
resume_ptid = inferior_ptid;
@@ -1889,7 +1892,7 @@ proceed (CORE_ADDR addr, enum target_sig
@@ -1921,7 +1924,7 @@ proceed (CORE_ADDR addr, enum target_sig
struct thread_info *tp;
CORE_ADDR pc;
struct address_space *aspace;
@ -103,7 +103,7 @@ Index: gdb-7.1.90.20100711/gdb/infrun.c
/* If we're stopped at a fork/vfork, follow the branch set by the
"set follow-fork-mode" command; otherwise, we'll just proceed
@@ -1924,13 +1927,13 @@ proceed (CORE_ADDR addr, enum target_sig
@@ -1956,13 +1959,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-7.1.90.20100711/gdb/infrun.c
}
else
{
@@ -1971,13 +1974,13 @@ proceed (CORE_ADDR addr, enum target_sig
@@ -2003,13 +2006,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-7.1.90.20100711/gdb/infrun.c
{
tp->trap_expected = 1;
/* If displaced stepping is enabled, we can step over the
@@ -2064,8 +2067,13 @@ proceed (CORE_ADDR addr, enum target_sig
@@ -2096,8 +2099,13 @@ proceed (CORE_ADDR addr, enum target_sig
/* Reset to normal state. */
init_infwait_state ();
@ -150,7 +150,7 @@ Index: gdb-7.1.90.20100711/gdb/infrun.c
/* Wait for it to stop (if not standalone)
and in any case decode why it stopped, and act accordingly. */
@@ -4903,13 +4911,18 @@ infrun: not switching back to stepped th
@@ -4859,13 +4867,18 @@ infrun: not switching back to stepped th
/* Is thread TP in the middle of single-stepping? */
@ -174,11 +174,11 @@ Index: gdb-7.1.90.20100711/gdb/infrun.c
}
/* Returns true if any thread *but* the one passed in "data" is in the
Index: gdb-7.1.90.20100711/gdb/linux-nat.c
Index: gdb-7.2.50.20101116/gdb/linux-nat.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/linux-nat.c 2010-07-12 10:00:56.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/linux-nat.c 2010-07-12 10:04:25.000000000 +0200
@@ -2827,7 +2827,10 @@ count_events_callback (struct lwp_info *
--- gdb-7.2.50.20101116.orig/gdb/linux-nat.c 2010-11-16 07:53:59.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/linux-nat.c 2010-11-16 07:54:36.000000000 +0100
@@ -2883,7 +2883,10 @@ count_events_callback (struct lwp_info *
static int
select_singlestep_lwp_callback (struct lwp_info *lp, void *data)
{
@ -190,10 +190,10 @@ Index: gdb-7.1.90.20100711/gdb/linux-nat.c
return 1;
else
return 0;
Index: gdb-7.1.90.20100711/gdb/linux-nat.h
Index: gdb-7.2.50.20101116/gdb/linux-nat.h
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/linux-nat.h 2010-06-11 14:10:12.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/linux-nat.h 2010-07-12 10:04:25.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/linux-nat.h 2010-07-27 22:51:37.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/linux-nat.h 2010-11-16 07:54:36.000000000 +0100
@@ -55,8 +55,8 @@ struct lwp_info
/* If non-zero, a pending wait status. */
int status;

View File

@ -1,8 +1,8 @@
Index: gdb-6.8.50.20090811/gdb/linux-nat.c
Index: gdb-7.2.50.20101116/gdb/linux-nat.c
===================================================================
--- gdb-6.8.50.20090811.orig/gdb/linux-nat.c 2009-08-12 07:21:20.000000000 +0200
+++ gdb-6.8.50.20090811/gdb/linux-nat.c 2009-08-12 08:11:25.000000000 +0200
@@ -1656,16 +1656,18 @@ resume_set_callback (struct lwp_info *lp
--- gdb-7.2.50.20101116.orig/gdb/linux-nat.c 2010-11-16 07:58:15.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/linux-nat.c 2010-11-16 07:59:06.000000000 +0100
@@ -1863,16 +1863,18 @@ resume_set_callback (struct lwp_info *lp
static void
linux_nat_resume (struct target_ops *ops,
@ -21,9 +21,9 @@ Index: gdb-6.8.50.20090811/gdb/linux-nat.c
+ (step == RESUME_STEP_NEEDED
+ ? "needed" : (step ? "step" : "resume")),
target_pid_to_str (ptid),
signo ? strsignal (signo) : "0",
target_pid_to_str (inferior_ptid));
@@ -2625,10 +2627,34 @@ linux_nat_filter_event (int lwpid, int s
(signo != TARGET_SIGNAL_0
? strsignal (target_signal_to_host (signo)) : "0"),
@@ -3171,10 +3173,34 @@ linux_nat_filter_event (int lwpid, int s
if (num_lwps (GET_PID (lp->ptid)) > 1)
{

View File

@ -1,41 +0,0 @@
Original patch was:
http://sourceware.org/ml/gdb-patches/2007-12/msg00397.html
http://sourceware.org/ml/gdb-cvs/2007-12/msg00123.html
extended for the RHEL safety:
2007-12-28 Jan Kratochvil <jan.kratochvil@redhat.com>
* dwarf2read.c (fixup_partial_die): Provide full
`DW_TAG_class_type'-type backing for `DW_TAG_interface_type', even for
namespaces which should not apply for Java `DW_TAG_interface_type'.
2008-02-24 Jan Kratochvil <jan.kratochvil@redhat.com>
Port to GDB-6.8pre.
Index: ./gdb/dwarf2read.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2read.c,v
retrieving revision 1.245
diff -u -p -r1.245 dwarf2read.c
--- ./gdb/dwarf2read.c 26 Dec 2007 12:36:18 -0000 1.245
+++ ./gdb/dwarf2read.c 27 Dec 2007 23:25:49 -0000
@@ -5887,7 +5887,8 @@ fixup_partial_die (struct partial_die_in
/* Set default names for some unnamed DIEs. */
if (part_die->name == NULL && (part_die->tag == DW_TAG_structure_type
- || part_die->tag == DW_TAG_class_type))
+ || part_die->tag == DW_TAG_class_type
+ || part_die->tag == DW_TAG_interface_type))
part_die->name = "(anonymous class)";
if (part_die->name == NULL && part_die->tag == DW_TAG_namespace)
@@ -5895,6 +5896,7 @@ fixup_partial_die (struct partial_die_in
if (part_die->tag == DW_TAG_structure_type
|| part_die->tag == DW_TAG_class_type
+ || part_die->tag == DW_TAG_interface_type
|| part_die->tag == DW_TAG_union_type)
guess_structure_name (part_die, cu);
}

View File

@ -1,84 +0,0 @@
Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/dwarf2read.c 2010-07-12 23:07:35.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/dwarf2read.c 2010-07-13 00:13:02.000000000 +0200
@@ -2251,6 +2251,7 @@ scan_partial_symbols (struct partial_die
add_partial_subprogram (pdi, lowpc, highpc, need_pc, cu);
break;
case DW_TAG_variable:
+ case DW_TAG_constant:
case DW_TAG_typedef:
case DW_TAG_union_type:
if (!pdi->is_declaration)
@@ -2452,6 +2453,7 @@ add_partial_symbol (struct partial_die_i
}
break;
case DW_TAG_variable:
+ case DW_TAG_constant:
if (pdi->is_external)
{
/* Global Variable.
@@ -3289,6 +3291,7 @@ die_needs_namespace (struct die_info *di
return 1;
case DW_TAG_variable:
+ case DW_TAG_constant:
/* We only need to prefix "globally" visible variables. These include
any variable marked with DW_AT_external or any variable that
lives in a namespace. [Variables in anonymous namespaces
@@ -4638,7 +4641,8 @@ dwarf2_add_field (struct field_info *fip
fip->non_public_fields = 1;
}
}
- else if (die->tag == DW_TAG_member || die->tag == DW_TAG_variable)
+ else if (die->tag == DW_TAG_member || die->tag == DW_TAG_variable
+ || die->tag == DW_TAG_constant)
{
/* C++ static member. */
@@ -5250,7 +5254,8 @@ read_structure_type (struct die_info *di
while (child_die && child_die->tag)
{
if (child_die->tag == DW_TAG_member
- || child_die->tag == DW_TAG_variable)
+ || child_die->tag == DW_TAG_variable
+ || child_die->tag == DW_TAG_constant)
{
/* NOTE: carlton/2002-11-05: A C++ static data member
should be a DW_TAG_member that is a declaration, but
@@ -5396,6 +5401,7 @@ process_structure_scope (struct die_info
{
if (child_die->tag == DW_TAG_member
|| child_die->tag == DW_TAG_variable
+ || child_die->tag == DW_TAG_constant
|| child_die->tag == DW_TAG_inheritance)
{
/* Do nothing. */
@@ -7109,6 +7115,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)
@@ -7217,6 +7224,7 @@ load_partial_dies (bfd *abfd, gdb_byte *
if (load_all
|| abbrev->tag == DW_TAG_subprogram
|| abbrev->tag == DW_TAG_variable
+ || abbrev->tag == DW_TAG_constant
|| abbrev->tag == DW_TAG_namespace
|| part_die->is_declaration)
{
@@ -9059,6 +9067,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;
+ case DW_TAG_constant:
+ SYMBOL_TYPE (sym) = make_cv_type (1,
+ TYPE_VOLATILE (SYMBOL_TYPE (sym)),
+ SYMBOL_TYPE (sym), NULL);
+ /* PASSTHRU */
case DW_TAG_variable:
case DW_TAG_member:
/* Compilation with minimal debug info may result in variables

View File

@ -1,8 +1,8 @@
Index: gdb-7.1.90.20100711/gdb/breakpoint.c
Index: gdb-7.2.50.20101116/gdb/breakpoint.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/breakpoint.c 2010-07-12 23:07:33.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/breakpoint.c 2010-07-13 00:38:04.000000000 +0200
@@ -10159,6 +10159,50 @@ update_breakpoint_locations (struct brea
--- gdb-7.2.50.20101116.orig/gdb/breakpoint.c 2010-11-16 07:53:58.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/breakpoint.c 2010-11-16 08:28:53.000000000 +0100
@@ -10249,6 +10249,50 @@ update_breakpoint_locations (struct brea
update_global_location_list (1);
}
@ -53,23 +53,23 @@ Index: gdb-7.1.90.20100711/gdb/breakpoint.c
/* Reset a breakpoint given it's struct breakpoint * BINT.
The value we return ends up being the return value from catch_errors.
Unused in this case. */
Index: gdb-7.1.90.20100711/gdb/breakpoint.h
Index: gdb-7.2.50.20101116/gdb/breakpoint.h
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/breakpoint.h 2010-07-12 23:07:33.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/breakpoint.h 2010-07-13 00:37:34.000000000 +0200
@@ -1088,4 +1088,7 @@ extern void check_tracepoint_command (ch
extern void start_rbreak_breakpoints (void);
extern void end_rbreak_breakpoints (void);
--- gdb-7.2.50.20101116.orig/gdb/breakpoint.h 2010-11-16 07:53:58.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/breakpoint.h 2010-11-16 08:29:06.000000000 +0100
@@ -1128,4 +1128,7 @@ extern void end_rbreak_breakpoints (void
extern struct breakpoint *iterate_over_breakpoints (int (*) (struct breakpoint *,
void *), void *);
+extern void breakpoints_relocate (struct objfile *objfile,
+ struct section_offsets *delta);
+
#endif /* !defined (BREAKPOINT_H) */
Index: gdb-7.1.90.20100711/gdb/objfiles.c
Index: gdb-7.2.50.20101116/gdb/objfiles.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/objfiles.c 2010-05-16 02:46:46.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/objfiles.c 2010-07-13 00:37:19.000000000 +0200
@@ -834,6 +834,11 @@ objfile_relocate1 (struct objfile *objfi
--- gdb-7.2.50.20101116.orig/gdb/objfiles.c 2010-10-17 19:45:16.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/objfiles.c 2010-11-16 08:28:53.000000000 +0100
@@ -844,6 +844,11 @@ objfile_relocate1 (struct objfile *objfi
obj_section_addr (s));
}

View File

@ -1,8 +1,8 @@
Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
Index: gdb-7.2.50.20101116/gdb/dwarf2read.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/dwarf2read.c 2010-07-13 00:26:25.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/dwarf2read.c 2010-07-13 00:34:00.000000000 +0200
@@ -5737,7 +5737,12 @@ read_common_block (struct die_info *die,
--- gdb-7.2.50.20101116.orig/gdb/dwarf2read.c 2010-11-16 08:25:21.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/dwarf2read.c 2010-11-16 08:26:35.000000000 +0100
@@ -7325,7 +7325,12 @@ read_common_block (struct die_info *die,
{
struct attribute *attr;
struct symbol *sym;
@ -16,7 +16,7 @@ Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
attr = dwarf2_attr (die, DW_AT_location, cu);
if (attr)
@@ -5746,6 +5751,7 @@ read_common_block (struct die_info *die,
@@ -7334,6 +7339,7 @@ read_common_block (struct die_info *die,
if (attr_form_is_block (attr))
{
base = decode_locdesc (DW_BLOCK (attr), cu);
@ -24,7 +24,7 @@ Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
}
else if (attr_form_is_section_offset (attr))
{
@@ -5807,12 +5813,15 @@ read_common_block (struct die_info *die,
@@ -7395,12 +7401,15 @@ read_common_block (struct die_info *die,
else
dwarf2_complex_location_expr_complaint ();
@ -42,7 +42,7 @@ Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
else
SET_FIELD_PHYSNAME (*field, SYMBOL_LINKAGE_NAME (sym));
FIELD_TYPE (*field) = SYMBOL_TYPE (sym);
@@ -5826,7 +5835,7 @@ read_common_block (struct die_info *die,
@@ -7414,7 +7423,7 @@ read_common_block (struct die_info *die,
sym = new_symbol (die, type, cu);
/* SYMBOL_VALUE_ADDRESS never gets used as all its fields are static. */
@ -51,10 +51,10 @@ Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
set_die_type (die, type, cu);
}
Index: gdb-7.1.90.20100711/gdb/gdbtypes.h
Index: gdb-7.2.50.20101116/gdb/gdbtypes.h
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/gdbtypes.h 2010-07-12 23:07:34.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/gdbtypes.h 2010-07-13 00:34:00.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/gdbtypes.h 2010-11-16 08:01:33.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/gdbtypes.h 2010-11-16 08:26:35.000000000 +0100
@@ -395,6 +395,7 @@ enum type_instance_flag_value
enum field_loc_kind
{
@ -63,7 +63,7 @@ Index: gdb-7.1.90.20100711/gdb/gdbtypes.h
FIELD_LOC_KIND_PHYSADDR, /* physaddr */
FIELD_LOC_KIND_PHYSNAME /* physname */
};
@@ -577,6 +578,7 @@ struct main_type
@@ -576,6 +577,7 @@ struct main_type
is the location (in the target) of the static field.
Otherwise, physname is the mangled label of the static field. */
@ -71,7 +71,7 @@ Index: gdb-7.1.90.20100711/gdb/gdbtypes.h
CORE_ADDR physaddr;
char *physname;
}
@@ -1073,6 +1075,7 @@ extern void allocate_gnat_aux_type (stru
@@ -1101,6 +1103,7 @@ extern void allocate_gnat_aux_type (stru
#define FIELD_LOC_KIND(thisfld) ((thisfld).loc_kind)
#define FIELD_BITPOS(thisfld) ((thisfld).loc.bitpos)
#define FIELD_STATIC_PHYSNAME(thisfld) ((thisfld).loc.physname)
@ -79,7 +79,7 @@ Index: gdb-7.1.90.20100711/gdb/gdbtypes.h
#define FIELD_STATIC_PHYSADDR(thisfld) ((thisfld).loc.physaddr)
#define SET_FIELD_BITPOS(thisfld, bitpos) \
(FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_BITPOS, \
@@ -1080,6 +1083,7 @@ extern void allocate_gnat_aux_type (stru
@@ -1108,6 +1111,7 @@ extern void allocate_gnat_aux_type (stru
#define SET_FIELD_PHYSNAME(thisfld, name) \
(FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSNAME, \
FIELD_STATIC_PHYSNAME (thisfld) = (name))
@ -87,7 +87,7 @@ Index: gdb-7.1.90.20100711/gdb/gdbtypes.h
#define SET_FIELD_PHYSADDR(thisfld, addr) \
(FIELD_LOC_KIND (thisfld) = FIELD_LOC_KIND_PHYSADDR, \
FIELD_STATIC_PHYSADDR (thisfld) = (addr))
@@ -1092,6 +1096,7 @@ extern void allocate_gnat_aux_type (stru
@@ -1120,6 +1124,7 @@ extern void allocate_gnat_aux_type (stru
#define TYPE_FIELD_LOC_KIND(thistype, n) FIELD_LOC_KIND (TYPE_FIELD (thistype, n))
#define TYPE_FIELD_BITPOS(thistype, n) FIELD_BITPOS (TYPE_FIELD (thistype, n))
#define TYPE_FIELD_STATIC_PHYSNAME(thistype, n) FIELD_STATIC_PHYSNAME (TYPE_FIELD (thistype, n))
@ -95,10 +95,10 @@ Index: gdb-7.1.90.20100711/gdb/gdbtypes.h
#define TYPE_FIELD_STATIC_PHYSADDR(thistype, n) FIELD_STATIC_PHYSADDR (TYPE_FIELD (thistype, n))
#define TYPE_FIELD_ARTIFICIAL(thistype, n) FIELD_ARTIFICIAL(TYPE_FIELD(thistype,n))
#define TYPE_FIELD_BITSIZE(thistype, n) FIELD_BITSIZE(TYPE_FIELD(thistype,n))
Index: gdb-7.1.90.20100711/gdb/jv-lang.c
Index: gdb-7.2.50.20101116/gdb/jv-lang.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/jv-lang.c 2010-05-17 19:18:39.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/jv-lang.c 2010-07-13 00:34:00.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/jv-lang.c 2010-08-09 21:42:47.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/jv-lang.c 2010-11-16 08:26:35.000000000 +0100
@@ -409,7 +409,8 @@ java_link_class_type (struct gdbarch *gd
fields = NULL;
@ -119,11 +119,11 @@ Index: gdb-7.1.90.20100711/gdb/jv-lang.c
else
TYPE_FIELD_BITPOS (type, i) = 8 * boffset;
if (accflags & 0x8000) /* FIELD_UNRESOLVED_FLAG */
Index: gdb-7.1.90.20100711/gdb/value.c
Index: gdb-7.2.50.20101116/gdb/value.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/value.c 2010-07-12 23:07:33.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/value.c 2010-07-13 00:35:21.000000000 +0200
@@ -1943,7 +1943,8 @@ value_static_field (struct type *type, i
--- gdb-7.2.50.20101116.orig/gdb/value.c 2010-11-16 07:54:00.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/value.c 2010-11-16 08:26:35.000000000 +0100
@@ -1965,7 +1965,8 @@ value_static_field (struct type *type, i
{
case FIELD_LOC_KIND_PHYSADDR:
retval = value_at_lazy (TYPE_FIELD_TYPE (type, fieldno),
@ -133,13 +133,3 @@ Index: gdb-7.1.90.20100711/gdb/value.c
break;
case FIELD_LOC_KIND_PHYSNAME:
{
@@ -1977,7 +1978,8 @@ value_static_field (struct type *type, i
}
if (retval && VALUE_LVAL (retval) == lval_memory)
SET_FIELD_PHYSADDR (TYPE_FIELD (type, fieldno),
- value_address (retval));
+ value_address (retval)
+ - (TYPE_OBJFILE (type) == NULL ? 0 : ANOFFSET (TYPE_OBJFILE (type)->section_offsets, SECT_OFF_TEXT (TYPE_OBJFILE (type)))));
break;
}
default:

File diff suppressed because it is too large Load Diff

View File

@ -1,12 +0,0 @@
--- a/gdb/gdb_gcore.sh
+++ b/gdb/gdb_gcore.sh
@@ -64,6 +64,9 @@ for pid in $*
do
# Write gdb script for pid $pid.
cat >>$tmpfile <<EOF
+set pagination off
+set width 0
+set height 0
attach $pid
gcore $name.$pid
detach

View File

@ -12,10 +12,10 @@
* gdb.python/pr10659.exp. New file.
* gdb.python/pr10659.py: New file.
Index: gdb-7.1/gdb/valprint.h
Index: gdb-7.2.50.20101116/gdb/valprint.h
===================================================================
--- gdb-7.1.orig/gdb/valprint.h 2010-06-30 14:02:16.000000000 +0200
+++ gdb-7.1/gdb/valprint.h 2010-06-30 14:35:24.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/valprint.h 2010-11-03 15:21:57.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/valprint.h 2010-11-16 08:31:56.000000000 +0100
@@ -90,6 +90,9 @@ struct value_print_options
/* If nonzero, print the value in "summary" form. */
@ -26,11 +26,11 @@ Index: gdb-7.1/gdb/valprint.h
};
/* The global print options set by the user. In general this should
Index: gdb-7.1/gdb/python/py-prettyprint.c
Index: gdb-7.2.50.20101116/gdb/python/py-prettyprint.c
===================================================================
--- gdb-7.1.orig/gdb/python/py-prettyprint.c 2010-06-30 14:01:40.000000000 +0200
+++ gdb-7.1/gdb/python/py-prettyprint.c 2010-06-30 14:34:49.000000000 +0200
@@ -385,7 +385,8 @@ print_children (PyObject *printer, const
--- gdb-7.2.50.20101116.orig/gdb/python/py-prettyprint.c 2010-11-12 21:49:42.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/python/py-prettyprint.c 2010-11-16 08:36:32.000000000 +0100
@@ -499,7 +499,8 @@ print_children (PyObject *printer, const
/* Use the prettyprint_arrays option if we are printing an array,
and the pretty option otherwise. */
@ -40,7 +40,7 @@ Index: gdb-7.1/gdb/python/py-prettyprint.c
/* Manufacture a dummy Python frame to work around Python 2.4 bug,
where it insists on having a non-NULL tstate->frame when
@@ -397,6 +398,9 @@ print_children (PyObject *printer, const
@@ -511,6 +512,9 @@ print_children (PyObject *printer, const
goto done;
}
make_cleanup_py_decref (frame);
@ -50,7 +50,7 @@ Index: gdb-7.1/gdb/python/py-prettyprint.c
done_flag = 0;
for (i = 0; i < options->print_max; ++i)
@@ -431,12 +435,23 @@ print_children (PyObject *printer, const
@@ -545,12 +549,23 @@ print_children (PyObject *printer, const
3. Other. Always print a ",". */
if (i == 0)
{
@ -79,7 +79,7 @@ Index: gdb-7.1/gdb/python/py-prettyprint.c
else if (! is_map || i % 2 == 0)
fputs_filtered (pretty ? "," : ", ", stream);
@@ -465,6 +480,10 @@ print_children (PyObject *printer, const
@@ -579,6 +594,10 @@ print_children (PyObject *printer, const
if (is_map && i % 2 == 0)
fputs_filtered ("[", stream);
@ -90,7 +90,7 @@ Index: gdb-7.1/gdb/python/py-prettyprint.c
else if (is_array)
{
/* We print the index, not whatever the child method
@@ -539,7 +558,12 @@ print_children (PyObject *printer, const
@@ -655,7 +674,12 @@ print_children (PyObject *printer, const
fputs_filtered ("\n", stream);
print_spaces_filtered (2 * recurse, stream);
}
@ -104,15 +104,15 @@ Index: gdb-7.1/gdb/python/py-prettyprint.c
}
done:
@@ -561,6 +585,7 @@ apply_val_pretty_printer (struct type *t
@@ -678,6 +702,7 @@ apply_val_pretty_printer (struct type *t
struct cleanup *cleanups;
int result = 0;
int is_py_none = 0;
enum string_repr_result print_result;
+ struct value_print_options *options_copy;
cleanups = ensure_python_env (gdbarch, language);
/* Instantiate the printer. */
@@ -582,12 +607,23 @@ apply_val_pretty_printer (struct type *t
@@ -709,9 +734,21 @@ apply_val_pretty_printer (struct type *t
/* If we are printing a map, we want some special formatting. */
hint = gdbpy_get_display_hint (printer);
@ -128,21 +128,16 @@ Index: gdb-7.1/gdb/python/py-prettyprint.c
make_cleanup (free_current_contents, &hint);
/* Print the section */
- is_py_none = print_string_repr (printer, hint, stream, recurse,
- options, language, gdbarch);
- print_children (printer, hint, stream, recurse, options, language,
+ is_py_none = options_copy->prettyprint_matrix ?
+ 1 : print_string_repr (printer, hint, stream,
+ recurse, options_copy,
+ language, gdbarch);
+ print_children (printer, hint, stream, recurse, options_copy, language,
is_py_none);
result = 1;
Index: gdb-7.1/gdb/testsuite/gdb.python/pr10659.cc
+ if (options_copy->prettyprint_matrix)
+ print_result = string_repr_none;
+else /* Red Hat 2D matrix patch */
print_result = print_string_repr (printer, hint, stream, recurse,
options, language, gdbarch);
if (print_result != string_repr_error)
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.python/pr10659.cc
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.1/gdb/testsuite/gdb.python/pr10659.cc 2010-06-30 14:34:49.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.python/pr10659.cc 2010-11-16 08:31:56.000000000 +0100
@@ -0,0 +1,43 @@
+#include <list>
+#include <vector> // /usr/include/c++/4.4.1/bits/vector.tcc
@ -187,10 +182,10 @@ Index: gdb-7.1/gdb/testsuite/gdb.python/pr10659.cc
+
+ return 0; // break
+}
Index: gdb-7.1/gdb/testsuite/gdb.python/pr10659.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.python/pr10659.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.1/gdb/testsuite/gdb.python/pr10659.exp 2010-06-30 14:34:49.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.python/pr10659.exp 2010-11-16 08:31:56.000000000 +0100
@@ -0,0 +1,82 @@
+#Copyright 2010 Free Software Foundation, Inc.
+
@ -274,10 +269,10 @@ Index: gdb-7.1/gdb/testsuite/gdb.python/pr10659.exp
+#
+
+
Index: gdb-7.1/gdb/testsuite/gdb.python/pr10659.py
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.python/pr10659.py
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.1/gdb/testsuite/gdb.python/pr10659.py 2010-06-30 14:34:49.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.python/pr10659.py 2010-11-16 08:31:56.000000000 +0100
@@ -0,0 +1,109 @@
+# Copyright (C) 2008, 2009 Free Software Foundation, Inc.
+
@ -388,11 +383,11 @@ Index: gdb-7.1/gdb/testsuite/gdb.python/pr10659.py
+fake_pretty_printers_dict = {}
+
+build_libfakecxx_dictionary ()
Index: gdb-7.1/gdb/valprint.c
Index: gdb-7.2.50.20101116/gdb/valprint.c
===================================================================
--- gdb-7.1.orig/gdb/valprint.c 2010-06-30 13:51:26.000000000 +0200
+++ gdb-7.1/gdb/valprint.c 2010-06-30 14:35:41.000000000 +0200
@@ -83,7 +83,8 @@ struct value_print_options user_print_op
--- gdb-7.2.50.20101116.orig/gdb/valprint.c 2010-11-16 07:54:00.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/valprint.c 2010-11-16 08:31:56.000000000 +0100
@@ -85,7 +85,8 @@ struct value_print_options user_print_op
1, /* static_field_print */
1, /* pascal_static_field_print */
0, /* raw */

View File

@ -1,630 +0,0 @@
Made more safe (but less effective) by using a linked list.
Based on:
Re: [RFA] Delayed physname computation
http://sourceware.org/ml/gdb-patches/2010-05/msg00248.html
Neither its obstack-leak.patch nor
[patch] Fix duplicate types for single DIE
http://sourceware.org/ml/gdb-patches/2010-05/msg00271.html
is needed as the linked list is used instead.
Index: gdb-7.1.90.20100721/gdb/dwarf2read.c
===================================================================
--- gdb-7.1.90.20100721.orig/gdb/dwarf2read.c 2010-07-22 11:59:19.000000000 +0200
+++ gdb-7.1.90.20100721/gdb/dwarf2read.c 2010-07-22 12:00:08.000000000 +0200
@@ -253,6 +253,28 @@ struct comp_unit_head
unsigned int first_die_offset;
};
+/* Type used for delaying computation of method physnames.
+ See comments for compute_delayed_physnames. */
+struct delayed_method_info
+{
+ struct delayed_method_info *next;
+
+ /* The type to which the method is attached, i.e., its parent class. */
+ struct type *type;
+
+ /* The index of the method in the type's function fieldlists. */
+ int fnfield_index;
+
+ /* The index of the method in the fieldlist. */
+ int index;
+
+ /* The name of the DIE. */
+ const char *name;
+
+ /* The DIE associated with this method. */
+ struct die_info *die;
+};
+
/* Internal state when decoding a particular compilation unit. */
struct dwarf2_cu
{
@@ -331,6 +353,10 @@ struct dwarf2_cu
/* Header data from the line table, during full symbol processing. */
struct line_header *line_header;
+ /* A list of methods which need to have physnames computed
+ after all type information has been read. */
+ struct delayed_method_info *method_list;
+
/* Mark used when releasing cached dies. */
unsigned int mark : 1;
@@ -1239,6 +1265,9 @@ static gdb_byte *partial_read_comp_unit_
static void init_cu_die_reader (struct die_reader_specs *reader,
struct dwarf2_cu *cu);
+static const char *dwarf2_physname (char *name, struct die_info *die,
+ struct dwarf2_cu *cu);
+
#if WORDS_BIGENDIAN
/* Convert VALUE between big- and little-endian. */
@@ -4103,6 +4132,58 @@ load_full_comp_unit (struct dwarf2_per_c
discard_cleanups (free_cu_cleanup);
}
+/* Add a DIE to the delayed physname list. */
+static void
+add_to_method_list (struct type *type, int fnfield_index, int index,
+ const char *name, struct die_info *die,
+ struct dwarf2_cu *cu)
+{
+ struct delayed_method_info *mi;
+
+ mi = xmalloc (sizeof (*mi));
+ mi->next = cu->method_list;
+ cu->method_list = mi;
+ mi->type = type;
+ mi->fnfield_index = fnfield_index;
+ mi->index = index;
+ mi->name = name;
+ mi->die = die;
+}
+
+/* Compute the physnames of any methods on the CU's method list.
+
+ The computation of method physnames is delayed in order to avoid the
+ (bad) condition that one of the method's formal parameters is of an as yet
+ incomplete type. */
+static void
+compute_delayed_physnames (struct dwarf2_cu *cu)
+{
+ struct delayed_method_info *mi;
+
+ for (mi = cu->method_list; mi; mi = mi->next)
+ {
+ char *physname;
+ struct fn_fieldlist *fn_flp
+ = &TYPE_FN_FIELDLIST (mi->type, mi->fnfield_index);
+ physname = (char *) dwarf2_physname ((char *) mi->name, mi->die, cu);
+ fn_flp->fn_fields[mi->index].physname = physname ? physname : "";
+ }
+}
+
+static void
+method_list_cleanup (void *arg)
+{
+ struct delayed_method_info **method_list_pointer = arg;
+
+ while (*method_list_pointer)
+ {
+ struct delayed_method_info *mi = *method_list_pointer;
+
+ *method_list_pointer = mi->next;
+ xfree (mi);
+ }
+}
+
/* Generate full symbol information for PST and CU, whose DIEs have
already been loaded into memory. */
@@ -4113,7 +4194,7 @@ process_full_comp_unit (struct dwarf2_pe
struct objfile *objfile = per_cu->objfile;
CORE_ADDR lowpc, highpc;
struct symtab *symtab;
- struct cleanup *back_to;
+ struct cleanup *back_to, *delayed_list_cleanup;
CORE_ADDR baseaddr;
baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
@@ -4123,11 +4204,22 @@ process_full_comp_unit (struct dwarf2_pe
cu->list_in_scope = &file_symbols;
+ /* If methods were found in the partial symbol table, we allocate one
+ big buffer to hold the entire delayed list for the CU. */
+ delayed_list_cleanup = make_cleanup (method_list_cleanup,
+ &cu->method_list);
+
dwarf2_find_base_address (cu->dies, cu);
/* Do line number decoding in read_file_scope () */
process_die (cu->dies, cu);
+ /* Now that we have processed all the DIEs in the CU, all the types
+ should be complete, and it should now be safe to compute all of the
+ physnames. */
+ compute_delayed_physnames (cu);
+ do_cleanups (delayed_list_cleanup);
+
/* Some compilers don't define a DW_AT_high_pc attribute for the
compilation unit. If the DW_AT_high_pc is missing, synthesize
it, by scanning the DIE's below the compilation unit. */
@@ -5838,7 +5930,6 @@ dwarf2_add_member_fn (struct field_info
int i;
struct fn_field *fnp;
char *fieldname;
- char *physname;
struct nextfnfield *new_fnfield;
struct type *this_type;
@@ -5850,9 +5941,6 @@ dwarf2_add_member_fn (struct field_info
if (fieldname == NULL)
return;
- /* Get the mangled name. */
- physname = (char *) dwarf2_physname (fieldname, die, cu);
-
/* Look up member function name in fieldlist. */
for (i = 0; i < fip->nfnfields; i++)
{
@@ -5878,7 +5966,7 @@ dwarf2_add_member_fn (struct field_info
flp->name = fieldname;
flp->length = 0;
flp->head = NULL;
- fip->nfnfields++;
+ i = fip->nfnfields++;
}
/* Create a new member function field and chain it to the field list
@@ -5892,9 +5980,19 @@ dwarf2_add_member_fn (struct field_info
/* Fill in the member function field info. */
fnp = &new_fnfield->fnfield;
- /* The name is already allocated along with this objfile, so we don't
- need to duplicate it for the type. */
- fnp->physname = physname ? physname : "";
+
+ /* Delay processing of the physname until later. */
+ if (cu->language == language_cplus || cu->language == language_java)
+ {
+ add_to_method_list (type, i, flp->length - 1, fieldname,
+ die, cu);
+ }
+ else
+ {
+ char *physname = (char *) dwarf2_physname (fieldname, die, cu);
+ fnp->physname = physname ? physname : "";
+ }
+
fnp->type = alloc_type (objfile);
this_type = read_type_die (die, cu);
if (this_type && TYPE_CODE (this_type) == TYPE_CODE_FUNC)
@@ -5920,7 +6018,7 @@ dwarf2_add_member_fn (struct field_info
}
else
complaint (&symfile_complaints, _("member function type missing for '%s'"),
- physname);
+ dwarf2_full_name (fieldname, die, cu));
/* Get fcontext from DW_AT_containing_type if present. */
if (dwarf2_attr (die, DW_AT_containing_type, cu) != NULL)
@@ -8299,7 +8397,9 @@ load_partial_dies (bfd *abfd, gdb_byte *
|| last_die->tag == DW_TAG_interface_type
|| last_die->tag == DW_TAG_structure_type
|| last_die->tag == DW_TAG_union_type))
- || (cu->language == language_ada
+ || ((cu->language == language_ada
+ || cu->language == language_cplus
+ || cu->language == language_java)
&& (last_die->tag == DW_TAG_subprogram
|| last_die->tag == DW_TAG_lexical_block))))
{
Index: gdb-7.1.90.20100721/gdb/testsuite/gdb.dwarf2/pr11465.S
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.1.90.20100721/gdb/testsuite/gdb.dwarf2/pr11465.S 2010-07-22 11:59:29.000000000 +0200
@@ -0,0 +1,355 @@
+/* Copyright 2010 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Compiled from:
+
+ namespace N
+ {
+ class C
+ {
+ public:
+ typedef void (*t) (C);
+ C (t) {}
+ };
+ typedef C::t u;
+ u f;
+ C c (f);
+ };
+
+ int
+ main ()
+ {
+ return 0;
+ }
+*/
+
+ .text
+_ZN1N1cE:
+ .section .debug_info
+d:
+ .long .Ldebug_info_end - 1f /* Length of CU info */
+1:
+ .2byte 0x2 /* DWARF version number */
+ .long .Ldebug_abbrev0 /* Abbrev offset */
+ .byte 0x4 /* Pointer size */
+dieb: .uleb128 0x1 /* DW_TAG_compile_unit */
+ .long .LASF4 /* DW_AT_producer */
+ .byte 0x4 /* DW_AT_language */
+ .long .LASF5 /* DW_AT_name */
+ .long .LASF6 /* DW_AT_comp_dir */
+ .long 0x0 /* DW_AT_low_pc */
+ .long 0x0 /* DW_AT_high_pc */
+ .long 0x0 /* DW_AT_entry_pc */
+die29: .uleb128 0x2 /* DW_TAG_namespace */
+ .string "N" /* DW_AT_name */
+die32: .uleb128 0x3 /* DW_TAG_class_type */
+ .string "C" /* DW_AT_name */
+ .byte 0x1 /* DW_AT_declaration */
+die36: .uleb128 0x4 /* DW_TAG_typedef */
+ .string "u" /* DW_AT_name */
+ .long die7e-d /* DW_AT_type */
+die3f: .uleb128 0x5 /* DW_TAG_variable */
+ .string "f" /* DW_AT_name */
+ .long .LASF0 /* DW_AT_MIPS_linkage_name */
+ .long die36-d /* DW_AT_type */
+ .byte 0x1 /* DW_AT_external */
+ .byte 0x1 /* DW_AT_declaration */
+die4e: .uleb128 0x5 /* DW_TAG_variable */
+ .string "c" /* DW_AT_name */
+ .long .LASF1 /* DW_AT_MIPS_linkage_name */
+ .long die5e-d /* DW_AT_type */
+ .byte 0x1 /* DW_AT_external */
+ .byte 0x1 /* DW_AT_declaration */
+ .byte 0x0
+die5e: .uleb128 0x6 /* DW_TAG_class_type */
+ .long die32-d /* DW_AT_specification */
+ .byte 0x1 /* DW_AT_byte_size */
+die6a: .uleb128 0x7 /* DW_TAG_subprogram */
+ .byte 0x1 /* DW_AT_external */
+ .string "C" /* DW_AT_name */
+ .byte 0x1 /* DW_AT_declaration */
+die71: .uleb128 0x8 /* DW_TAG_formal_parameter */
+ .long die8f-d /* DW_AT_type */
+ .byte 0x1 /* DW_AT_artificial */
+die77: .uleb128 0x9 /* DW_TAG_formal_parameter */
+ .long die7e-d /* DW_AT_type */
+ .byte 0x0
+ .byte 0x0
+die7e: .uleb128 0xa /* DW_TAG_pointer_type */
+ .byte 0x4 /* DW_AT_byte_size */
+ .long die84-d /* DW_AT_type */
+die84: .uleb128 0xb /* DW_TAG_subroutine_type */
+die89: .uleb128 0x9 /* DW_TAG_formal_parameter */
+ .long die5e-d /* DW_AT_type */
+ .byte 0x0
+die8f: .uleb128 0xa /* DW_TAG_pointer_type */
+ .byte 0x4 /* DW_AT_byte_size */
+ .long die5e-d /* DW_AT_type */
+die95: .uleb128 0xc /* DW_TAG_subprogram */
+ .long die6a-d /* DW_AT_specification */
+ .byte 0x2 /* DW_AT_inline */
+die9f: .uleb128 0xd /* DW_TAG_formal_parameter */
+ .long .LASF7 /* DW_AT_name */
+ .long dieaf-d /* DW_AT_type */
+ .byte 0x1 /* DW_AT_artificial */
+diea9: .uleb128 0x9 /* DW_TAG_formal_parameter */
+ .long die7e-d /* DW_AT_type */
+ .byte 0x0
+dieaf: .uleb128 0xe /* DW_TAG_const_type */
+ .long die8f-d /* DW_AT_type */
+dieb4: .uleb128 0xf /* DW_TAG_subprogram */
+ .long die95-d /* DW_AT_abstract_origin */
+ .long _ZN1N1cE /* DW_AT_low_pc */
+ .long _ZN1N1cE /* DW_AT_high_pc */
+diec9: .uleb128 0x10 /* DW_TAG_subprogram */
+ .long die9f-d /* DW_AT_abstract_origin */
+ .byte 2f-1f /* DW_AT_location */
+1:
+ .byte 0x50 /* DW_OP_reg0 */
+2:
+died1: .uleb128 0x10 /* DW_TAG_formal_parameter */
+ .long diea9-d /* DW_AT_abstract_origin */
+ .byte 2f-1f /* DW_AT_location */
+1:
+ .byte 0x51 /* DW_OP_reg1 */
+2:
+ .byte 0x0
+dieda: .uleb128 0x11 /* DW_TAG_subprogram */
+ .byte 0x1 /* DW_AT_external */
+ .long .LASF8 /* DW_AT_name */
+ .long dief2-d /* DW_AT_type */
+ .long _ZN1N1cE /* DW_AT_low_pc */
+ .long _ZN1N1cE /* DW_AT_high_pc */
+dief2: .uleb128 0x12 /* DW_TAG_base_type */
+ .byte 0x4 /* DW_AT_byte_size */
+ .byte 0x5 /* DW_AT_encoding */
+ .string "int" /* DW_AT_name */
+die149: .uleb128 0x16 /* DW_TAG_variable */
+ .long die4e-d /* DW_AT_specification */
+ .byte 0x5 /* DW_AT_location */
+ .byte 0x3
+ .long _ZN1N1cE
+ .byte 0x0
+.Ldebug_info_end:
+ .section .debug_abbrev
+.Ldebug_abbrev0:
+ .uleb128 0x1 /* abbrev code*/
+ .uleb128 0x11 /* DW_TAG_compile_unit */
+ .byte 0x1 /* DW_children_yes */
+ .uleb128 0x25 /* DW_AT_producer*/
+ .uleb128 0xe /* DW_FORM_strp */
+ .uleb128 0x13 /* DW_AT_language */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0xe /* DW_FORM_strp */
+ .uleb128 0x1b /* DW_AT_comp_dir */
+ .uleb128 0xe /* DW_FORM_strp */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x52 /* DW_AT_entry_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x2 /* abbrev code */
+ .uleb128 0x39 /* DW_TAG_namespace */
+ .byte 0x1 /* DW_children_yes */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x3 /* abbrev code */
+ .uleb128 0x2 /* DW_TAG_class_type */
+ .byte 0x0 /* DW_has_children_no */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x3c /* DW_AT_declaration */
+ .uleb128 0xc /* DW_FORM_flag */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x4 /* abbrev code */
+ .uleb128 0x16 /* DW_TAG_typedef */
+ .byte 0x0 /* DW_has_children_no */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x5 /* abbrev code */
+ .uleb128 0x34 /* DW_TAG_variable */
+ .byte 0x0 /* DW_has_children_no */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x2007 /* DW_AT_MIPS_linkage_name */
+ .uleb128 0xe /* DW_FORM_strp */
+ .uleb128 0x49 /* DW_AT_TYPE */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0x3f /* DW_AT_external */
+ .uleb128 0xc /* DW_FORM_flag */
+ .uleb128 0x3c /* DW_AT_declaration */
+ .uleb128 0xc /* DW_FORM_flag */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x6 /* abbrev code */
+ .uleb128 0x2 /* DW_TAG_class_type */
+ .byte 0x1 /* DW_has_children_yes */
+ .uleb128 0x47 /* DW_AT_specification */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0xb /* DW_AT_byte_size */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x7 /* abbrev code */
+ .uleb128 0x2e /* DW_TAG_subprogra */
+ .byte 0x1 /* DW_has_children_yes */
+ .uleb128 0x3f /* DW_AT_external */
+ .uleb128 0xc /* DW_FORM_flag */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x3c /* DW_AT_declaration */
+ .uleb128 0xc /* DW_FORM_flag */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x8 /* abbrev code */
+ .uleb128 0x5 /* DW_TAG_formal_parameter */
+ .byte 0x0 /* DW_has_children_no */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0x34 /* DW_AT_artificial */
+ .uleb128 0xc /* DW_FORM_flag */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x9 /* abbrev code */
+ .uleb128 0x5 /* DW_TAG_formal_parameter */
+ .byte 0x0 /* DW_has_children_no */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xa /* abbrev code */
+ .uleb128 0xf /* DW_TAG_pointer_type */
+ .byte 0x0 /* DW_has_children_no */
+ .uleb128 0xb /* DW_AT_byte_size */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xb /* abbrev code */
+ .uleb128 0x15 /* DW_TAG_subroutine_type */
+ .byte 0x1 /* DW_has_children_yes */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xc /* abbrev code */
+ .uleb128 0x2e /* DW_TAG_subprogram */
+ .byte 0x1 /* DW_has_children_yes */
+ .uleb128 0x47 /* DW_AT_specification */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0x20 /* DW_AT_inline */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xd /* abbrev code */
+ .uleb128 0x5 /* DW_TAG_formal_parameter */
+ .byte 0x0 /* DW_has_children_no */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0xe /* DW_FORM_strp */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0x34 /* DW_AT_artificial */
+ .uleb128 0xc /* DW_FORM_flag */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xe /* abbrev code */
+ .uleb128 0x26 /* DW_TAG_const_type */
+ .byte 0x0 /* DW_has_children_no */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0xf /* abbrev code */
+ .uleb128 0x2e /* DW_TAG_subprogram */
+ .byte 0x1 /* DW_has_children_yes */
+ .uleb128 0x31 /* DW_AT_abstract_origin */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x10 /* abbrev code */
+ .uleb128 0x5 /* DW_TAG_formal_parameter */
+ .byte 0x0 /* DW_has_children_no */
+ .uleb128 0x31 /* DW_AT_abstract_origin */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0x2 /* DW_AT_location */
+ .uleb128 0xa /* DW_FORM_block1 */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x11 /* abbrev code */
+ .uleb128 0x2e /* DW_TAG_subprogram */
+ .byte 0x0 /* DW_has_children_no */
+ .uleb128 0x3f /* DW_AT_external */
+ .uleb128 0xc /* DW_FORM_flag */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0xe /* DW_FORM_strp */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x12 /* abbrev code */
+ .uleb128 0x24 /* DW_TAG_base_type */
+ .byte 0x0 /* DW_has_children_no */
+ .uleb128 0xb /* DW_AT_byte_size */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3e /* DW_AT_encoding */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .byte 0x0
+ .byte 0x0
+ .uleb128 0x16 /* abbrev code */
+ .uleb128 0x34 /* DW_TAG_variable */
+ .byte 0x0 /* DW_has_children_no */
+ .uleb128 0x47 /* DW_AT_specification */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0x2 /* DW_AT_location */
+ .uleb128 0xa /* DW_FORM_block1 */
+ .byte 0x0
+ .byte 0x0
+ .byte 0x0
+ .section .debug_str
+.LASF0:
+ .string "_ZN1N1fE"
+.LASF7:
+ .string "this"
+.LASF6:
+ .string ""
+.LASF8:
+ .string "main"
+.LASF1:
+ .string "_ZN1N1cE"
+.LASF5:
+ .string "pr11465.cc"
+.LASF4:
+ .string "GNU C++ 4.4.2"
+ .ident "GCC: (GNU) 4.4.2"
Index: gdb-7.1.90.20100721/gdb/testsuite/gdb.dwarf2/pr11465.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.1.90.20100721/gdb/testsuite/gdb.dwarf2/pr11465.exp 2010-07-22 11:59:29.000000000 +0200
@@ -0,0 +1,39 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+# For now pick a sampling of likely targets.
+if {![istarget *-*-linux*]
+ && ![istarget *-*-gnu*]
+ && ![istarget *-*-elf*]
+ && ![istarget *-*-openbsd*]
+ && ![istarget arm-*-eabi*]
+ && ![istarget powerpc-*-eabi*]} {
+ return 0
+}
+
+set testfile "pr11465"
+set srcfile ${testfile}.S
+set executable ${testfile}.x
+set binfile ${objdir}/${subdir}/${executable}
+
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != "" } {
+ return -1
+}
+
+clean_restart $executable
+
+# Test delayed physname computations
+gdb_test "p N::c.C" { = {void \(N::C \*, void \(\*\)\(N::C\)\)}.*}

View File

@ -1,87 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-08/msg00559.html
http://sourceware.org/ml/gdb-cvs/2010-08/msg00199.html
### src/gdb/ChangeLog 2010/08/31 18:08:42 1.12129
### src/gdb/ChangeLog 2010/08/31 18:11:48 1.12130
## -1,5 +1,14 @@
2010-08-31 Jan Kratochvil <jan.kratochvil@redhat.com>
+ Make linux_get_siginfo_type `type *' unique.
+ * linux-tdep.c (linux_gdbarch_data_handle, struct linux_gdbarch_data)
+ (init_linux_gdbarch_data, get_linux_gdbarch_data): New.
+ (linux_get_siginfo_type): New variable linux_gdbarch_data. Initialize
+ it. Use linux_gdbarch_data->siginfo_type as a persistent storage.
+ (_initialize_linux_tdep): New.
+
+2010-08-31 Jan Kratochvil <jan.kratochvil@redhat.com>
+
Code cleanup.
* defs.h (find_memory_region_ftype): New typedef.
(exec_set_find_memory_regions): Use it.
Index: gdb-7.2/gdb/linux-tdep.c
===================================================================
--- gdb-7.2.orig/gdb/linux-tdep.c 2010-09-25 15:30:50.000000000 +0200
+++ gdb-7.2/gdb/linux-tdep.c 2010-09-25 15:31:54.000000000 +0200
@@ -26,18 +26,42 @@
#include "value.h"
#include "infcall.h"
+static struct gdbarch_data *linux_gdbarch_data_handle;
+
+struct linux_gdbarch_data
+ {
+ struct type *siginfo_type;
+ };
+
+static void *
+init_linux_gdbarch_data (struct gdbarch *gdbarch)
+{
+ return GDBARCH_OBSTACK_ZALLOC (gdbarch, struct linux_gdbarch_data);
+}
+
+static struct linux_gdbarch_data *
+get_linux_gdbarch_data (struct gdbarch *gdbarch)
+{
+ return gdbarch_data (gdbarch, linux_gdbarch_data_handle);
+}
+
/* This function is suitable for architectures that don't
extend/override the standard siginfo structure. */
struct type *
linux_get_siginfo_type (struct gdbarch *gdbarch)
{
+ struct linux_gdbarch_data *linux_gdbarch_data;
struct type *int_type, *uint_type, *long_type, *void_ptr_type;
struct type *uid_type, *pid_type;
struct type *sigval_type, *clock_type;
struct type *siginfo_type, *sifields_type;
struct type *type;
+ linux_gdbarch_data = get_linux_gdbarch_data (gdbarch);
+ if (linux_gdbarch_data->siginfo_type != NULL)
+ return linux_gdbarch_data->siginfo_type;
+
int_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
0, "int");
uint_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
@@ -137,6 +161,8 @@ linux_get_siginfo_type (struct gdbarch *
"_sifields", sifields_type,
TYPE_LENGTH (long_type));
+ linux_gdbarch_data->siginfo_type = siginfo_type;
+
return siginfo_type;
}
@@ -154,3 +180,10 @@ linux_has_shared_address_space (void)
return target_is_uclinux;
}
+
+void
+_initialize_linux_tdep (void)
+{
+ linux_gdbarch_data_handle =
+ gdbarch_data_register_post_init (init_linux_gdbarch_data);
+}

View File

@ -1,139 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-09/msg00430.html
http://sourceware.org/ml/gdb-cvs/2010-09/msg00152.html
### src/gdb/ChangeLog 2010/09/24 11:15:51 1.12199
### src/gdb/ChangeLog 2010/09/24 13:41:42 1.12200
## -1,5 +1,12 @@
2010-09-24 Pedro Alves <pedro@codesourcery.com>
+ * amd64-linux-nat.c (compat_siginfo_from_siginfo)
+ (siginfo_from_compat_siginfo): Also copy si_pid and si_uid when
+ si_code is < 0. Check for si_code == SI_TIMER before checking for
+ si_code < 0.
+
+2010-09-24 Pedro Alves <pedro@codesourcery.com>
+
* objfiles.h (ALL_OBJSECTIONS): Handle breaks in the inner loop.
2010-09-22 Joel Brobecker <brobecker@adacore.com>
--- src/gdb/amd64-linux-nat.c 2010/04/22 20:02:55 1.32
+++ src/gdb/amd64-linux-nat.c 2010/09/24 13:41:43 1.33
@@ -574,8 +574,10 @@
to->si_errno = from->si_errno;
to->si_code = from->si_code;
- if (to->si_code < 0)
+ if (to->si_code == SI_TIMER)
{
+ to->cpt_si_timerid = from->si_timerid;
+ to->cpt_si_overrun = from->si_overrun;
to->cpt_si_ptr = (intptr_t) from->si_ptr;
}
else if (to->si_code == SI_USER)
@@ -583,10 +585,10 @@
to->cpt_si_pid = from->si_pid;
to->cpt_si_uid = from->si_uid;
}
- else if (to->si_code == SI_TIMER)
+ else if (to->si_code < 0)
{
- to->cpt_si_timerid = from->si_timerid;
- to->cpt_si_overrun = from->si_overrun;
+ to->cpt_si_pid = from->si_pid;
+ to->cpt_si_uid = from->si_uid;
to->cpt_si_ptr = (intptr_t) from->si_ptr;
}
else
@@ -628,8 +630,10 @@
to->si_errno = from->si_errno;
to->si_code = from->si_code;
- if (to->si_code < 0)
+ if (to->si_code == SI_TIMER)
{
+ to->si_timerid = from->cpt_si_timerid;
+ to->si_overrun = from->cpt_si_overrun;
to->si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
}
else if (to->si_code == SI_USER)
@@ -637,10 +641,10 @@
to->si_pid = from->cpt_si_pid;
to->si_uid = from->cpt_si_uid;
}
- else if (to->si_code == SI_TIMER)
+ if (to->si_code < 0)
{
- to->si_timerid = from->cpt_si_timerid;
- to->si_overrun = from->cpt_si_overrun;
+ to->si_pid = from->cpt_si_pid;
+ to->si_uid = from->cpt_si_uid;
to->si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
}
else
### src/gdb/gdbserver/ChangeLog 2010/09/13 19:11:03 1.431
### src/gdb/gdbserver/ChangeLog 2010/09/24 13:41:43 1.432
## -1,3 +1,10 @@
+2010-09-24 Pedro Alves <pedro@codesourcery.com>
+
+ * linux-x86-low.c (compat_siginfo_from_siginfo)
+ (siginfo_from_compat_siginfo): Also copy si_pid and si_uid when
+ si_code is < 0. Check for si_code == SI_TIMER before checking for
+ si_code < 0.
+
2010-09-13 Joel Brobecker <brobecker@adacore.com>
* lynx-i386-low.c: New file.
--- src/gdb/gdbserver/linux-x86-low.c 2010/08/27 00:16:48 1.23
+++ src/gdb/gdbserver/linux-x86-low.c 2010/09/24 13:41:43 1.24
@@ -792,8 +792,10 @@
to->si_errno = from->si_errno;
to->si_code = from->si_code;
- if (to->si_code < 0)
+ if (to->si_code == SI_TIMER)
{
+ to->cpt_si_timerid = from->si_timerid;
+ to->cpt_si_overrun = from->si_overrun;
to->cpt_si_ptr = (intptr_t) from->si_ptr;
}
else if (to->si_code == SI_USER)
@@ -801,10 +803,10 @@
to->cpt_si_pid = from->si_pid;
to->cpt_si_uid = from->si_uid;
}
- else if (to->si_code == SI_TIMER)
+ else if (to->si_code < 0)
{
- to->cpt_si_timerid = from->si_timerid;
- to->cpt_si_overrun = from->si_overrun;
+ to->cpt_si_pid = from->si_pid;
+ to->cpt_si_uid = from->si_uid;
to->cpt_si_ptr = (intptr_t) from->si_ptr;
}
else
@@ -846,8 +848,10 @@
to->si_errno = from->si_errno;
to->si_code = from->si_code;
- if (to->si_code < 0)
+ if (to->si_code == SI_TIMER)
{
+ to->si_timerid = from->cpt_si_timerid;
+ to->si_overrun = from->cpt_si_overrun;
to->si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
}
else if (to->si_code == SI_USER)
@@ -855,10 +859,10 @@
to->si_pid = from->cpt_si_pid;
to->si_uid = from->cpt_si_uid;
}
- else if (to->si_code == SI_TIMER)
+ else if (to->si_code < 0)
{
- to->si_timerid = from->cpt_si_timerid;
- to->si_overrun = from->cpt_si_overrun;
+ to->si_pid = from->cpt_si_pid;
+ to->si_uid = from->cpt_si_uid;
to->si_ptr = (void *) (intptr_t) from->cpt_si_ptr;
}
else

View File

@ -1,259 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-09/msg00438.html
http://sourceware.org/ml/gdb-cvs/2010-09/msg00156.html
### src/gdb/ChangeLog 2010/09/24 16:11:44 1.12203
### src/gdb/ChangeLog 2010/09/24 18:35:20 1.12204
## -1,3 +1,16 @@
+2010-09-24 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Fix lost siginfo_t for inferior calls.
+ * infrun.c
+ (struct inferior_thread_state) <siginfo_gdbarch, siginfo_data>: New.
+ (save_inferior_thread_state): New variables regcache, gdbarch and
+ siginfo_data. Initialize SIGINFO_DATA if gdbarch_get_siginfo_type_p.
+ Move INF_STATE allocation later, pre-clear it. Initialize REGISTERS
+ using REGCACHE.
+ (restore_inferior_thread_state): New variables regcache and gdbarch.
+ Restore SIGINFO_DATA for matching GDBARCH. Restore REGISTERS using
+ REGCACHE. Free also SIGINFO_DATA.
+
2010-09-24 Tom Tromey <tromey@redhat.com>
* dwarf2read.c (dw2_expand_symtabs_matching): Add missing
--- src/gdb/infrun.c 2010/09/06 14:22:07 1.450
+++ src/gdb/infrun.c 2010/09/24 18:35:27 1.451
@@ -6037,18 +6037,57 @@
enum target_signal stop_signal;
CORE_ADDR stop_pc;
struct regcache *registers;
+
+ /* Format of SIGINFO or NULL if it is not present. */
+ struct gdbarch *siginfo_gdbarch;
+
+ /* The inferior format depends on SIGINFO_GDBARCH and it has a length of
+ TYPE_LENGTH (gdbarch_get_siginfo_type ()). For different gdbarch the
+ content would be invalid. */
+ gdb_byte *siginfo_data;
};
struct inferior_thread_state *
save_inferior_thread_state (void)
{
- struct inferior_thread_state *inf_state = XMALLOC (struct inferior_thread_state);
+ struct inferior_thread_state *inf_state;
struct thread_info *tp = inferior_thread ();
+ struct regcache *regcache = get_current_regcache ();
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
+ gdb_byte *siginfo_data = NULL;
+
+ if (gdbarch_get_siginfo_type_p (gdbarch))
+ {
+ struct type *type = gdbarch_get_siginfo_type (gdbarch);
+ size_t len = TYPE_LENGTH (type);
+ struct cleanup *back_to;
+
+ siginfo_data = xmalloc (len);
+ back_to = make_cleanup (xfree, siginfo_data);
+
+ if (target_read (&current_target, TARGET_OBJECT_SIGNAL_INFO, NULL,
+ siginfo_data, 0, len) == len)
+ discard_cleanups (back_to);
+ else
+ {
+ /* Errors ignored. */
+ do_cleanups (back_to);
+ siginfo_data = NULL;
+ }
+ }
+
+ inf_state = XZALLOC (struct inferior_thread_state);
+
+ if (siginfo_data)
+ {
+ inf_state->siginfo_gdbarch = gdbarch;
+ inf_state->siginfo_data = siginfo_data;
+ }
inf_state->stop_signal = tp->stop_signal;
inf_state->stop_pc = stop_pc;
- inf_state->registers = regcache_dup (get_current_regcache ());
+ inf_state->registers = regcache_dup (regcache);
return inf_state;
}
@@ -6059,16 +6098,29 @@
restore_inferior_thread_state (struct inferior_thread_state *inf_state)
{
struct thread_info *tp = inferior_thread ();
+ struct regcache *regcache = get_current_regcache ();
+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
tp->stop_signal = inf_state->stop_signal;
stop_pc = inf_state->stop_pc;
+ if (inf_state->siginfo_gdbarch == gdbarch)
+ {
+ struct type *type = gdbarch_get_siginfo_type (gdbarch);
+ size_t len = TYPE_LENGTH (type);
+
+ /* Errors ignored. */
+ target_write (&current_target, TARGET_OBJECT_SIGNAL_INFO, NULL,
+ inf_state->siginfo_data, 0, len);
+ }
+
/* The inferior can be gone if the user types "print exit(0)"
(and perhaps other times). */
if (target_has_execution)
/* NB: The register write goes through to the target. */
- regcache_cpy (get_current_regcache (), inf_state->registers);
+ regcache_cpy (regcache, inf_state->registers);
regcache_xfree (inf_state->registers);
+ xfree (inf_state->siginfo_data);
xfree (inf_state);
}
### src/gdb/testsuite/ChangeLog 2010/09/22 20:08:04 1.2456
### src/gdb/testsuite/ChangeLog 2010/09/24 18:35:28 1.2457
## -1,3 +1,9 @@
+2010-09-24 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Fix lost siginfo_t for inferior calls.
+ * gdb.base/siginfo-infcall.exp: New file.
+ * gdb.base/siginfo-infcall.c: New file.
+
2010-09-22 Joel Brobecker <brobecker@adacore.com>
* gdb.dwarf2/dw2-const.S: Minor (space) reformatting.
--- src/gdb/testsuite/gdb.base/siginfo-infcall.c
+++ src/gdb/testsuite/gdb.base/siginfo-infcall.c 2010-09-25 13:25:25.007169000 +0000
@@ -0,0 +1,79 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2010 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <signal.h>
+#include <assert.h>
+#include <string.h>
+#include <unistd.h>
+
+#ifndef SA_SIGINFO
+# error "SA_SIGINFO is required for this test"
+#endif
+
+static int
+callme (void)
+{
+ return 42;
+}
+
+static int
+pass (void)
+{
+ return 1;
+}
+
+static int
+fail (void)
+{
+ return 1;
+}
+
+static void
+handler (int sig, siginfo_t *siginfo, void *context)
+{
+ assert (sig == SIGUSR1);
+ assert (siginfo->si_signo == SIGUSR1);
+ if (siginfo->si_pid == getpid ())
+ pass ();
+ else
+ fail ();
+}
+
+int
+main (void)
+{
+ struct sigaction sa;
+ int i;
+
+ callme ();
+
+ memset (&sa, 0, sizeof (sa));
+ sa.sa_sigaction = handler;
+ sa.sa_flags = SA_SIGINFO;
+
+ i = sigemptyset (&sa.sa_mask);
+ assert (i == 0);
+
+ i = sigaction (SIGUSR1, &sa, NULL);
+ assert (i == 0);
+
+ i = raise (SIGUSR1);
+ assert (i == 0);
+
+ sleep (600);
+ return 0;
+}
--- src/gdb/testsuite/gdb.base/siginfo-infcall.exp
+++ src/gdb/testsuite/gdb.base/siginfo-infcall.exp 2010-09-25 13:25:25.357724000 +0000
@@ -0,0 +1,47 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+if [target_info exists gdb,nosignals] {
+ verbose "Skipping siginfo-infcall.exp because of nosignals."
+ continue
+}
+
+set testfile siginfo-infcall
+set srcfile ${testfile}.c
+set executable ${testfile}
+if { [prepare_for_testing ${testfile}.exp $executable] } {
+ return -1
+}
+
+if ![runto_main] {
+ return -1
+}
+
+gdb_breakpoint "pass"
+gdb_breakpoint "fail"
+
+gdb_test "continue" "Program received signal SIGUSR1, .*" "continue to SIGUSR1"
+
+gdb_test "p callme ()" " = 42"
+
+set test "continue to the handler"
+gdb_test_multiple "continue" $test {
+ -re "Breakpoint \[0-9\]+,\[^\r\n\]* pass .*\r\n$gdb_prompt $" {
+ pass $test
+ }
+ -re "Breakpoint \[0-9\]+,\[^\r\n\]* fail .*\r\n$gdb_prompt $" {
+ fail $test
+ }
+}

View File

@ -78,11 +78,11 @@ gdb/testsuite/
* gdb.threads/sigstep-threads.exp: New file.
* gdb.threads/sigstep-threads.c: New file.
Index: gdb-7.2/gdb/linux-nat.c
Index: gdb-7.2.50.20101116/gdb/linux-nat.c
===================================================================
--- gdb-7.2.orig/gdb/linux-nat.c 2010-09-25 15:30:54.000000000 +0200
+++ gdb-7.2/gdb/linux-nat.c 2010-09-25 15:37:23.000000000 +0200
@@ -2702,6 +2702,8 @@ stop_wait_callback (struct lwp_info *lp,
--- gdb-7.2.50.20101116.orig/gdb/linux-nat.c 2010-11-16 08:21:46.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/linux-nat.c 2010-11-16 09:12:26.000000000 +0100
@@ -2759,6 +2759,8 @@ stop_wait_callback (struct lwp_info *lp,
{
int status;
@ -91,11 +91,11 @@ Index: gdb-7.2/gdb/linux-nat.c
status = wait_lwp (lp);
if (status == 0)
return 0;
@@ -2726,110 +2728,61 @@ stop_wait_callback (struct lwp_info *lp,
@@ -2783,110 +2785,61 @@ stop_wait_callback (struct lwp_info *lp,
if (WSTOPSIG (status) != SIGSTOP)
{
- if (WSTOPSIG (status) == SIGTRAP)
- if (linux_nat_status_is_event (status))
- {
- /* If a LWP other than the LWP that we're reporting an
- event for has hit a GDB breakpoint (as opposed to
@ -248,7 +248,7 @@ Index: gdb-7.2/gdb/linux-nat.c
lp->signalled = 0;
}
}
@@ -3416,52 +3369,6 @@ retry:
@@ -3469,52 +3422,6 @@ retry:
lp = NULL;
}
@ -301,10 +301,10 @@ Index: gdb-7.2/gdb/linux-nat.c
if (!target_can_async_p ())
{
/* Causes SIGINT to be passed on to the attached process. */
Index: gdb-7.2/gdb/testsuite/gdb.threads/siginfo-threads.c
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.threads/siginfo-threads.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.threads/siginfo-threads.c 2010-09-25 15:32:32.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.threads/siginfo-threads.c 2010-11-16 09:08:44.000000000 +0100
@@ -0,0 +1,447 @@
+/* This testcase is part of GDB, the GNU debugger.
+
@ -753,10 +753,10 @@ Index: gdb-7.2/gdb/testsuite/gdb.threads/siginfo-threads.c
+
+ return EXIT_SUCCESS;
+}
Index: gdb-7.2/gdb/testsuite/gdb.threads/siginfo-threads.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.threads/siginfo-threads.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.threads/siginfo-threads.exp 2010-09-25 15:32:32.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.threads/siginfo-threads.exp 2010-11-16 09:08:44.000000000 +0100
@@ -0,0 +1,94 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
@ -852,10 +852,10 @@ Index: gdb-7.2/gdb/testsuite/gdb.threads/siginfo-threads.exp
+}
+
+gdb_continue_to_breakpoint break-at-exit ".*break-at-exit.*"
Index: gdb-7.2/gdb/testsuite/gdb.threads/sigstep-threads.c
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.threads/sigstep-threads.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.threads/sigstep-threads.c 2010-09-25 15:32:32.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.threads/sigstep-threads.c 2010-11-16 09:08:44.000000000 +0100
@@ -0,0 +1,54 @@
+/* This testcase is part of GDB, the GNU debugger.
+
@ -911,10 +911,10 @@ Index: gdb-7.2/gdb/testsuite/gdb.threads/sigstep-threads.c
+ start (NULL); /* main-start */
+ return 0;
+}
Index: gdb-7.2/gdb/testsuite/gdb.threads/sigstep-threads.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.threads/sigstep-threads.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.threads/sigstep-threads.exp 2010-09-25 15:32:32.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.threads/sigstep-threads.exp 2010-11-16 09:08:44.000000000 +0100
@@ -0,0 +1,74 @@
+# Copyright 2010 Free Software Foundation, Inc.
+

View File

@ -26,11 +26,11 @@ gdb/
(linux_nat_set_siginfo_fixup): Use PTRACE_GETSIGINFO.
* linux-nat.h (struct lwp_info) <siginfo>: Remove.
Index: gdb-7.2/gdb/linux-nat.c
Index: gdb-7.2.50.20101116/gdb/linux-nat.c
===================================================================
--- gdb-7.2.orig/gdb/linux-nat.c 2010-09-25 15:37:23.000000000 +0200
+++ gdb-7.2/gdb/linux-nat.c 2010-09-25 15:38:18.000000000 +0200
@@ -1851,7 +1851,6 @@ resume_callback (struct lwp_info *lp, vo
--- gdb-7.2.50.20101116.orig/gdb/linux-nat.c 2010-11-16 09:12:26.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/linux-nat.c 2010-11-16 09:13:21.000000000 +0100
@@ -1850,7 +1850,6 @@ resume_callback (struct lwp_info *lp, vo
target_pid_to_str (lp->ptid));
lp->stopped = 0;
lp->step = 0;
@ -46,7 +46,7 @@ Index: gdb-7.2/gdb/linux-nat.c
lp->stopped_by_watchpoint = 0;
if (debug_linux_nat)
@@ -2483,22 +2481,6 @@ wait_lwp (struct lwp_info *lp)
@@ -2503,22 +2501,6 @@ wait_lwp (struct lwp_info *lp)
return status;
}
@ -69,7 +69,7 @@ Index: gdb-7.2/gdb/linux-nat.c
/* Send a SIGSTOP to LP. */
static int
@@ -2730,9 +2712,6 @@ stop_wait_callback (struct lwp_info *lp,
@@ -2787,9 +2769,6 @@ stop_wait_callback (struct lwp_info *lp,
{
/* The thread was stopped with a signal other than SIGSTOP. */
@ -79,10 +79,10 @@ Index: gdb-7.2/gdb/linux-nat.c
save_sigtrap (lp);
if (debug_linux_nat)
@@ -3102,12 +3081,7 @@ linux_nat_filter_event (int lwpid, int s
@@ -3155,12 +3134,7 @@ linux_nat_filter_event (int lwpid, int s
}
if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGTRAP)
if (linux_nat_status_is_event (status))
- {
- /* Save the trap's siginfo in case we need it later. */
- save_siginfo (lp);
@ -93,7 +93,7 @@ Index: gdb-7.2/gdb/linux-nat.c
/* Check if the thread has exited. */
if ((WIFEXITED (status) || WIFSIGNALED (status))
@@ -3706,7 +3680,6 @@ resume_stopped_resumed_lwps (struct lwp_
@@ -3763,7 +3737,6 @@ resume_stopped_resumed_lwps (struct lwp_
linux_ops->to_resume (linux_ops, pid_to_ptid (GET_LWP (lp->ptid)),
lp->step, TARGET_SIGNAL_0);
lp->stopped = 0;
@ -101,7 +101,7 @@ Index: gdb-7.2/gdb/linux-nat.c
lp->stopped_by_watchpoint = 0;
}
@@ -5878,11 +5851,19 @@ linux_nat_set_siginfo_fixup (struct targ
@@ -5932,11 +5905,19 @@ linux_nat_set_siginfo_fixup (struct targ
struct siginfo *
linux_nat_get_siginfo (ptid_t ptid)
{
@ -124,10 +124,10 @@ Index: gdb-7.2/gdb/linux-nat.c
}
/* Provide a prototype to silence -Wmissing-prototypes. */
Index: gdb-7.2/gdb/linux-nat.h
Index: gdb-7.2.50.20101116/gdb/linux-nat.h
===================================================================
--- gdb-7.2.orig/gdb/linux-nat.h 2010-09-25 15:30:50.000000000 +0200
+++ gdb-7.2/gdb/linux-nat.h 2010-09-25 15:37:57.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/linux-nat.h 2010-11-16 07:54:36.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/linux-nat.h 2010-11-16 09:12:44.000000000 +0100
@@ -58,10 +58,6 @@ struct lwp_info
/* The kind of stepping of this LWP. */
enum resume_step step;

View File

@ -1,164 +0,0 @@
--- ./gdb/doc/gdb.texinfo 2010-05-24 19:37:01.000000000 +0200
+++ ./gdb/doc/gdb.texinfo 2010-05-24 19:38:56.000000000 +0200
@@ -14768,33 +14768,21 @@ and @code{show architecture}.
@cindex active targets
@cindex multiple targets
-There are three classes of targets: processes, core files, and
-executable files. @value{GDBN} can work concurrently on up to three
-active targets, one in each class. This allows you to (for example)
-start a process and inspect its activity without abandoning your work on
-a core file.
-
-For example, if you execute @samp{gdb a.out}, then the executable file
-@code{a.out} is the only active target. If you designate a core file as
-well---presumably from a prior run that crashed and coredumped---then
-@value{GDBN} has two active targets and uses them in tandem, looking
-first in the corefile target, then in the executable file, to satisfy
-requests for memory addresses. (Typically, these two classes of target
-are complementary, since core files contain only a program's
-read-write memory---variables and so on---plus machine status, while
-executable files contain only the program text and initialized data.)
-
-When you type @code{run}, your executable file becomes an active process
-target as well. When a process target is active, all @value{GDBN}
-commands requesting memory addresses refer to that target; addresses in
-an active core file or executable file target are obscured while the
-process target is active.
-
-Use the @code{core-file} and @code{exec-file} commands to select a new
-core file or executable target (@pxref{Files, ,Commands to Specify
-Files}). To specify as a target a process that is already running, use
-the @code{attach} command (@pxref{Attach, ,Debugging an Already-running
-Process}).
+There are multiple classes of targets such as: processes, executable files or
+recording sessions. Core files belong to the process class, there can be
+active only one of a core or a running process. Otherwise @value{GDBN} can
+work concurrently on multiple active targets, one in each class. This allows
+you to (for example) start a process and inspect its activity while still
+having access to the executable file after the process finishes. Or if you
+start process recording (@pxref{Reverse Execution}) and @code{reverse-step}
+there you are presented a virtual layer of the recording target while the
+process target remains stopped at the chronologically last point of the process
+execution.
+
+Use the @code{core-file} and @code{exec-file} commands to select a new core
+file or executable target (@pxref{Files, ,Commands to Specify Files}). To
+specify as a target a process that is already running, use the @code{attach}
+command (@pxref{Attach, ,Debugging an Already-running Process}).
@node Target Commands
@section Commands for Managing Targets
--- ./gdb/infcmd.c 2010-05-24 19:37:01.000000000 +0200
+++ ./gdb/infcmd.c 2010-05-24 19:41:21.000000000 +0200
@@ -483,6 +483,13 @@ run_command_1 (char *args, int from_tty,
dont_repeat ();
+ if (core_bfd)
+ {
+ core_file_command (NULL, from_tty);
+ if (core_bfd)
+ warning (_("Core file not unloaded."));
+ }
+
kill_if_already_running (from_tty);
init_wait_for_inferior ();
@@ -2373,6 +2380,13 @@ attach_command (char *args, int from_tty
error (_("Not killed."));
}
+ if (core_bfd)
+ {
+ core_file_command (NULL, from_tty);
+ if (core_bfd)
+ warning (_("Core file not unloaded."));
+ }
+
/* Clean up any leftovers from other runs. Some other things from
this function should probably be moved into target_pre_inferior. */
target_pre_inferior (from_tty);
--- ./gdb/testsuite/gdb.base/corefile.exp 2010-01-09 01:14:11.000000000 +0100
+++ ./gdb/testsuite/gdb.base/corefile.exp 2010-05-24 19:38:56.000000000 +0200
@@ -182,3 +182,62 @@ gdb_load ${binfile}
gdb_test "up" "#\[0-9\]* *\[0-9xa-fH'\]* in .* \\(.*\\).*" "up in corefile.exp (reinit)"
gdb_test "core" "No core file now."
+
+
+# Test a run (start) command will clear any loaded core file.
+
+gdb_test "core-file $corefile" "Core was generated by .*" "run: load core again"
+gdb_test "info files" "\r\nLocal core dump file:\r\n.*" "run: sanity check we see the core file"
+
+set test "run: with core"
+if [runto_main] {
+ pass $test
+} else {
+ fail $test
+}
+
+set test "run: core file is cleared"
+gdb_test_multiple "info files" $test {
+ "\r\nLocal core dump file:\r\n.*\r\n$gdb_prompt $" {
+ fail $test
+ }
+ "\r\n$gdb_prompt $" {
+ pass $test
+ }
+}
+
+gdb_exit
+
+
+# Test an attach command will clear any loaded core file.
+
+if ![is_remote target] {
+ set test "attach: spawn sleep"
+ set res [remote_spawn host "$binfile sleep"];
+ if { $res < 0 || $res == "" } {
+ perror "$test failed."
+ fail $test
+ return
+ }
+ set pid [exp_pid -i $res]
+ # We do not care of the startup phase where it will be caught.
+
+ gdb_start
+
+ gdb_test "core-file $corefile" "Core was generated by .*" "attach: load core again"
+ gdb_test "info files" "\r\nLocal core dump file:\r\n.*" "attach: sanity check we see the core file"
+
+ gdb_test "attach $pid" "Attaching to process $pid\r\n.*" "attach: with core"
+
+ set test "attach: core file is cleared"
+ gdb_test_multiple "info files" $test {
+ "\r\nLocal core dump file:\r\n.*\r\n$gdb_prompt $" {
+ fail $test
+ }
+ "\r\n$gdb_prompt $" {
+ pass $test
+ }
+ }
+
+ gdb_exit
+}
--- ./gdb/testsuite/gdb.base/coremaker.c 2010-01-01 08:32:00.000000000 +0100
+++ ./gdb/testsuite/gdb.base/coremaker.c 2010-05-24 19:38:56.000000000 +0200
@@ -133,8 +133,14 @@ func1 ()
func2 ();
}
-int main ()
+int
+main (int argc, char **argv)
{
+ if (argc == 2 && strcmp (argv[1], "sleep") == 0)
+ {
+ sleep (60);
+ return 0;
+ }
mmapdata ();
func1 ();
return 0;

View File

@ -1,217 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-07/msg00237.html
Subject: [patch] Fix regression on prelinked executables
Hi,
there is a regression since gdb-7.0 for a combination of:
* prelinked
* main executable
* using separate debug info
* using copy relocations
It is since a patch for both PIE and (AFAIK) OSX support:
[commit] syms_from_objfile: Relativize also MAINLINE
http://sourceware.org/ml/gdb-patches/2010-01/msg00080.html
which started to use problematic addr_info_make_relative even for main
executables. prelink<->gdb discussion at:
https://bugzilla.redhat.com/show_bug.cgi?id=614659
Currently in the unfortunately executables GDB has invalid displcement for
symbols in .bss:
int bssvar, *bssvarp = &bssvar;
(gdb) p &bssvar
$1 = (int *) 0x600b54
(gdb) p bssvarp
$2 = (int *) 0x600b50
<abstract-higher-point-of-view>
addr_info_make_relative could just simply subtract entry point address and
provide single CORE_ADDR objfile->offset (instead of the current
section_offsets array with offsets specific for each section). Linux systems
use always single offset for the whole objfile. AFAIK these per-section
offsets are there for some embedded targets. Curiously GDB already uses at
many places
baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
instead of using offset for the appropriate section at that place and nobody
complains.
</abstract-higher-point-of-view>
No regressions on {x86_64,x86_64-m32,i686}-fedora13-linux-gnu.
Proposing for the gdb-7.2 branch. I had problems fixing up my crashing X.
Thanks,
Jan
gdb/
2010-07-15 Jan Kratochvil <jan.kratochvil@redhat.com>
* symfile.c (addr_section_name): New function.
(addrs_section_compar): Use it.
(addr_info_make_relative): Use it. Move variable sect_name into a more
inner block. Make ".dynbss" and ".sdynbss" checks more strict.
gdb/testsuite/
2010-07-15 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.base/prelink-lib.c (copyreloc): New initialized variable.
* gdb.base/prelink.c (copyreloc, bssvar, bssvarp): New variables.
(main): Use copyreloc.
* gdb.base/prelink.exp (split debug of executable)
(.dynbss vs. .bss address shift): New tests.
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -547,6 +547,23 @@ relative_addr_info_to_section_offsets (struct section_offsets *section_offsets,
}
}
+/* Transform section name S for a name comparison. prelink can split section
+ `.bss' into two sections `.dynbss' and `.bss' (in this order). Similarly
+ prelink can split `.sbss' into `.sdynbss' and `.sbss'. Use virtual address
+ of the new `.dynbss' (`.sdynbss') section as the adjacent new `.bss'
+ (`.sbss') section has invalid (increased) virtual address. */
+
+static const char *
+addr_section_name (const char *s)
+{
+ if (strcmp (s, ".dynbss") == 0)
+ return ".bss";
+ if (strcmp (s, ".sdynbss") == 0)
+ return ".sbss";
+
+ return s;
+}
+
/* qsort comparator for addrs_section_sort. Sort entries in ascending order by
their (name, sectindex) pair. sectindex makes the sort by name stable. */
@@ -557,7 +574,7 @@ addrs_section_compar (const void *ap, const void *bp)
const struct other_sections *b = *((struct other_sections **) bp);
int retval, a_idx, b_idx;
- retval = strcmp (a->name, b->name);
+ retval = strcmp (addr_section_name (a->name), addr_section_name (b->name));
if (retval)
return retval;
@@ -641,14 +658,16 @@ addr_info_make_relative (struct section_addr_info *addrs, bfd *abfd)
while (*addrs_sorted)
{
- const char *sect_name = (*addrs_sorted)->name;
+ const char *sect_name = addr_section_name ((*addrs_sorted)->name);
while (*abfd_addrs_sorted
- && strcmp ((*abfd_addrs_sorted)->name, sect_name) < 0)
+ && strcmp (addr_section_name ((*abfd_addrs_sorted)->name),
+ sect_name) < 0)
abfd_addrs_sorted++;
if (*abfd_addrs_sorted
- && strcmp ((*abfd_addrs_sorted)->name, sect_name) == 0)
+ && strcmp (addr_section_name ((*abfd_addrs_sorted)->name),
+ sect_name) == 0)
{
int index_in_addrs;
@@ -676,7 +695,6 @@ addr_info_make_relative (struct section_addr_info *addrs, bfd *abfd)
for (i = 0; i < addrs->num_sections && addrs->other[i].name; i++)
{
- const char *sect_name = addrs->other[i].name;
struct other_sections *sect = addrs_to_abfd_addrs[i];
if (sect)
@@ -694,6 +712,9 @@ addr_info_make_relative (struct section_addr_info *addrs, bfd *abfd)
}
else
{
+ /* addr_section_name transformation is not used for SECT_NAME. */
+ const char *sect_name = addrs->other[i].name;
+
/* This section does not exist in ABFD, which is normally
unexpected and we want to issue a warning.
@@ -704,12 +725,20 @@ addr_info_make_relative (struct section_addr_info *addrs, bfd *abfd)
a warning. Shared libraries contain just the section
".gnu.liblist" but it is not marked as loadable there. There is
no other way to identify them than by their name as the sections
- created by prelink have no special flags. */
+ created by prelink have no special flags.
+
+ For the sections `.bss' and `.sbss' see addr_section_name. */
if (!(strcmp (sect_name, ".gnu.liblist") == 0
|| strcmp (sect_name, ".gnu.conflict") == 0
- || strcmp (sect_name, ".dynbss") == 0
- || strcmp (sect_name, ".sdynbss") == 0))
+ || (strcmp (sect_name, ".bss") == 0
+ && i > 0
+ && strcmp (addrs->other[i - 1].name, ".dynbss") == 0
+ && addrs_to_abfd_addrs[i - 1] != NULL)
+ || (strcmp (sect_name, ".sbss") == 0
+ && i > 0
+ && strcmp (addrs->other[i - 1].name, ".sdynbss") == 0
+ && addrs_to_abfd_addrs[i - 1] != NULL)))
warning (_("section %s not found in %s"), sect_name,
bfd_get_filename (abfd));
--- a/gdb/testsuite/gdb.base/prelink-lib.c
+++ b/gdb/testsuite/gdb.base/prelink-lib.c
@@ -16,6 +16,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+int copyreloc = 1;
+
int
g (void (*p)(void))
{
--- a/gdb/testsuite/gdb.base/prelink.c
+++ b/gdb/testsuite/gdb.base/prelink.c
@@ -18,6 +18,11 @@
#include <stdio.h>
+extern int copyreloc;
+
+/* Test GDB itself finds `&bssvar' right. */
+static int bssvar, *bssvarp = &bssvar;
+
extern void (*h (void)) (void (*)(void));
int
@@ -25,5 +30,6 @@ main (void)
{
void (*f) (void (*)(void)) = h ();
printf ("%p\n", f);
+ printf ("%d\n", copyreloc);
f (0);
}
--- a/gdb/testsuite/gdb.base/prelink.exp
+++ b/gdb/testsuite/gdb.base/prelink.exp
@@ -57,6 +57,13 @@ if {$prelink_args == ""} {
return -1
}
+set test "split debug of executable"
+if [gdb_gnu_strip_debug $binfile] {
+ fail $test
+} else {
+ pass $test
+}
+
if ![prelink_yes $prelink_args] {
# Maybe we don't have prelink.
return -1
@@ -105,3 +112,5 @@ clean_restart $executable
gdb_test_no_output "set verbose on"
gdb_test "core-file $objdir/$subdir/prelink.core" "Using PIC \\(Position Independent Code\\) prelink displacement 0x\[^0\]\[0-9a-f\]* for \[^\r\n\]*[file tail ${libfile}].*" "seen displacement message"
+
+gdb_test "p &bssvar == bssvarp" " = 1" ".dynbss vs. .bss address shift"

View File

@ -1,280 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-09/msg00440.html
Subject: [patch] Fix infinite loop crash on self-referencing class
Hi,
class C { static C s; }; is a problem for GDB as it references itself and it
can crash. Downstream Bug:
https://bugzilla.redhat.com/show_bug.cgi?id=627432
#3 0x00000000005b2cc5 in gnuv3_pass_by_reference (type=0x1044d3c8) at ../../gdb/gnu-v3-abi.c:840
#4 0x00000000005b2cc5 in gnuv3_pass_by_reference (type=0x1044d3c8) at ../../gdb/gnu-v3-abi.c:840
[...]
No regressions on {x86_64,x86_64-m32,i686}-fedora13-linux-gnu.
FYI the .cc file is not reproducible on - and only on - Fedora 14 GCC, filed:
https://bugzilla.redhat.com/show_bug.cgi?id=637315
I would even check it in in some time.
Thanks,
Jan
gdb/
2010-09-24 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix GDB crash on inferior calls with self-referencing classes.
* gnu-v3-abi.c (gnuv3_pass_by_reference): Do not call itself on static
member fields.
gdb/testsuite/
2010-09-24 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix GDB crash on inferior calls with self-referencing classes.
* gdb.dwarf2/dw2-cp-infcall-ref-static.exp: New file.
* gdb.dwarf2/dw2-cp-infcall-ref-static-main.c: New file.
* gdb.dwarf2/dw2-cp-infcall-ref-static.S: New file.
--- a/gdb/gnu-v3-abi.c
+++ b/gdb/gnu-v3-abi.c
@@ -835,9 +835,10 @@ gnuv3_pass_by_reference (struct type *type)
by reference, so does this class. Similarly for members, which
are constructed whenever this class is. We do not need to worry
about recursive loops here, since we are only looking at members
- of complete class type. */
+ of complete class type. Also ignore any static members. */
for (fieldnum = 0; fieldnum < TYPE_NFIELDS (type); fieldnum++)
- if (gnuv3_pass_by_reference (TYPE_FIELD_TYPE (type, fieldnum)))
+ if (TYPE_FIELD_LOC_KIND (type, fieldnum) == FIELD_LOC_KIND_BITPOS
+ && gnuv3_pass_by_reference (TYPE_FIELD_TYPE (type, fieldnum)))
return 1;
return 0;
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static-main.c
@@ -0,0 +1,51 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2010 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* class C
+ {
+ public:
+ static C s;
+ };
+ C C::s;
+ C f()
+ {
+ return C::s;
+ } */
+
+asm (".globl cu_text_start");
+asm ("cu_text_start:");
+
+asm (".globl f_start");
+asm ("f_start:");
+
+void
+f (void)
+{
+}
+
+asm (".globl f_end");
+asm ("f_end:");
+
+int
+main (void)
+{
+ f ();
+ return 0;
+}
+
+asm (".globl cu_text_end");
+asm ("cu_text_end:");
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.S
@@ -0,0 +1,115 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2010 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Debug information */
+
+ .section .debug_info
+.Lcu1_begin:
+ /* CU header */
+ .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */
+.Lcu1_start:
+ .2byte 2 /* DWARF Version */
+ .4byte .Labbrev1_begin /* Offset into abbrev section */
+ .byte 4 /* Pointer size */
+
+ /* CU die */
+ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */
+ .4byte cu_text_start /* DW_AT_low_pc */
+ .4byte cu_text_end /* DW_AT_high_pc */
+ .ascii "file1.txt\0" /* DW_AT_name */
+ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */
+ .byte 4 /* DW_AT_language (DW_LANG_C_plus_plus) */
+
+.Ltype_class:
+ .uleb128 3 /* Abbrev: DW_TAG_class_type */
+ .ascii "C\0" /* DW_AT_name */
+
+ .uleb128 4 /* Abbrev: DW_TAG_member */
+ .ascii "s\0" /* DW_AT_name */
+ .4byte .Ltype_class-.Lcu1_begin /* DW_AT_type */
+ .byte 1 /* DW_AT_declaration */
+ .byte 1 /* DW_AT_external */
+
+ .byte 0 /* End of children of DW_TAG_class_type */
+
+ .uleb128 5 /* Abbrev: DW_TAG_subprogram */
+ .ascii "f\0" /* DW_AT_name */
+ .4byte .Ltype_class-.Lcu1_begin /* DW_AT_type */
+ .4byte f_start /* DW_AT_low_pc */
+ .4byte f_end /* DW_AT_high_pc */
+
+ .byte 0 /* End of children of CU */
+
+.Lcu1_end:
+
+/* Abbrev table */
+ .section .debug_abbrev
+.Labbrev1_begin:
+ .uleb128 1 /* Abbrev code */
+ .uleb128 0x11 /* DW_TAG_compile_unit */
+ .byte 1 /* has_children */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x25 /* DW_AT_producer */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x13 /* DW_AT_language */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 3 /* Abbrev code */
+ .uleb128 0x2 /* DW_TAG_class_type */
+ .byte 1 /* has_children */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 4 /* Abbrev code */
+ .uleb128 0xd /* DW_TAG_member */
+ .byte 0 /* has_children */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0x3c /* DW_AT_declaration */
+ .uleb128 0xc /* DW_FORM_flag */
+ .uleb128 0x3f /* DW_AT_external */
+ .uleb128 0xc /* DW_FORM_flag */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 5 /* Abbrev code */
+ .uleb128 0x2e /* DW_TAG_subprogram */
+ .byte 0 /* has_children */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp
@@ -0,0 +1,49 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Check that GDB can call C++ functions whose parameters or return values have
+# type containing a static member of the same type.
+
+# Still no C++ compiler is used.
+if { [skip_cplus_tests] } { continue }
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+# For now pick a sampling of likely targets.
+if {![istarget *-*-linux*]
+ && ![istarget *-*-gnu*]
+ && ![istarget *-*-elf*]
+ && ![istarget *-*-openbsd*]
+ && ![istarget arm-*-eabi*]
+ && ![istarget powerpc-*-eabi*]} {
+ return 0
+}
+
+set testfile "dw2-cp-infcall-ref-static"
+if { [prepare_for_testing ${testfile}.exp ${testfile} [list ${testfile}-main.c ${testfile}.S] {}] } {
+ return -1
+}
+
+if ![runto_main] then {
+ return -1
+}
+
+# main is not provided by DWARF.
+gdb_test_no_output "set language c++"
+
+# There are no mangled names in DWARF to suggest the v3 ABI.
+gdb_test_no_output "set cp-abi gnu-v3"
+
+# GDB could crash. There is no DW_AT_location so it is <optimized out>.
+gdb_test "p f()" { = {static s = <optimized out>}}

View File

@ -1,14 +0,0 @@
https://bugzilla.redhat.com/show_bug.cgi?id=631158
http://sourceware.org/ml/gdb-patches/2010-09/msg00229.html
Subject: [patch] PR 11992 "Regression: C++ this scope sometimes does not work"
--- gdb-7.2/gdb/c-exp.y.orig 2010-08-19 17:50:00.000000000 +0200
+++ gdb-7.2/gdb/c-exp.y 2010-09-11 20:30:15.000000000 +0200
@@ -2422,6 +2422,7 @@ classify_name (struct block *block)
if (sym == NULL
&& parse_language->la_language == language_cplus
+ && !is_a_field_of_this
&& !lookup_minimal_symbol (copy, NULL, NULL))
return UNKNOWN_CPP_NAME;

View File

@ -1,61 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-09/msg00183.html
Subject: [patch] .gdb_index: Do not crash on NOBITS
Hi,
elfutils-0.148 still do not contain patch of its GIT
804e9ca4d644e64a6125307cbf0a0b89477d7611 where the .gdb_index section has been
also split into the separate debug info file.
Due to it binaries split using elfutils-0.148 contain
[38] .gdb_index NOBITS 0000000000000000 0000338c
instead of expected
[28] .gdb_index PROGBITS 0000000000000000 0000211c
and due to it GDB while reading the file can error() by:
Reading symbols from x.debug...Dwarf Error: Can't read DWARF data from 'x.debug'
which should not be fatal but due to some other bugs therein it can crash GDB.
The wrong separate debug info file is for example:
http://kojipkgs.fedoraproject.org/packages/glibc/2.12.90/10/x86_64/glibc-debuginfo-2.12.90-10.x86_64.rpm
/usr/lib/debug/lib64/libutil-2.12.90.so.debug
OK to check-in?
It does not attempt to use .gdb_index from the main binary, it will just
disable .gdb_index usage on these binaries.
Thanks,
Jan
http://sourceware.org/ml/gdb-cvs/2010-09/msg00062.html
### src/gdb/ChangeLog 2010/09/08 19:09:42 1.12162
### src/gdb/ChangeLog 2010/09/08 19:49:28 1.12163
## -1,3 +1,7 @@
+2010-09-08 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * dwarf2read.c (dwarf2_read_index): Return on no SEC_HAS_CONTENTS.
+
2010-09-08 Daniel Jacobowitz <dan@codesourcery.com>
* dwarf2read.c (read_structure_type): Move processing of
--- src/gdb/dwarf2read.c 2010/09/08 19:09:42 1.452
+++ src/gdb/dwarf2read.c 2010/09/08 19:49:28 1.453
@@ -1904,6 +1904,13 @@
if (dwarf2_per_objfile->gdb_index.asection == NULL
|| dwarf2_per_objfile->gdb_index.size == 0)
return 0;
+
+ /* Older elfutils strip versions could keep the section in the main
+ executable while splitting it for the separate debug info file. */
+ if ((bfd_get_file_flags (dwarf2_per_objfile->gdb_index.asection)
+ & SEC_HAS_CONTENTS) == 0)
+ return 0;
+
dwarf2_read_section (objfile, &dwarf2_per_objfile->gdb_index);
addr = dwarf2_per_objfile->gdb_index.buffer;

View File

@ -1,61 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-09/msg00365.html
Subject: [patch] python: load *-gdb.py for shlibs during attach
Hi,
currently if you attach to or load a core file for executable, its -gdb.py
script is loaded. But none -gdb.py for the shared libraries.
Spawned or with the fix (libstdc++-gdb.py):
#1 0x00000000004007b5 in f (s="a") at 1.C:4
^ is std::string
Attached/core without the fix:
#1 0x00000000004007b5 in f (s=...) at 1.C:4
No regressions on {x86_64,x86_64-m32,i686}-fedora13-linux-gnu.
Mostly obvious, I will check it in later.
Thanks,
Jan
gdb/
2010-09-22 Jan Kratochvil <jan.kratochvil@redhat.com>
* main.c: Include objfiles.h.
(captured_main): New variable objfile. Call
load_auto_scripts_for_objfile for ALL_OBJFILES.
--- ./gdb/main.c 2010-09-22 10:51:32.000000000 +0200
+++ ./gdb/main.c 2010-09-22 10:50:44.000000000 +0200
@@ -43,6 +43,7 @@
#include "source.h"
#include "cli/cli-cmds.h"
#include "python/python.h"
+#include "objfiles.h"
/* The selected interpreter. This will be used as a set command
variable, so it should always be malloc'ed - since
@@ -323,6 +324,7 @@ captured_main (void *data)
int i;
int save_auto_load;
+ struct objfile *objfile;
struct cleanup *pre_stat_chain = make_command_stats_cleanup (0);
@@ -957,8 +959,8 @@ Can't attach to process and specify a co
We wait until now because it is common to add to the source search
path in local_gdbinit. */
gdbpy_global_auto_load = save_auto_load;
- if (symfile_objfile != NULL)
- load_auto_scripts_for_objfile (symfile_objfile);
+ ALL_OBJFILES (objfile)
+ load_auto_scripts_for_objfile (objfile);
for (i = 0; i < ncmd; i++)
{

View File

@ -1,111 +0,0 @@
commit 30fedadf224a8c119575fcc8a6ced51f0d4aee9f
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date: Wed Sep 29 01:25:39 2010 +0200
Fix the crash.
commit d101ce597f2d6143e9f023a4444352bceffb2679
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
Date: Wed Sep 29 00:42:37 2010 +0200
New testcase for: https://bugzilla.redhat.com/show_bug.cgi?id=637770
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index de51231..18b7868 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -10560,6 +10560,11 @@ map_breakpoint_numbers (char *args, void (*function) (struct breakpoint *,
/* FUNCTION can be also delete_breakpoint. */
next_related_b = related_breakpoint->related_breakpoint;
function (related_breakpoint, data);
+
+ /* For delete_breakpoint of the last entry of the ring we
+ were traversing we would never get back to B. */
+ if (next_related_b == related_breakpoint)
+ break;
related_breakpoint = next_related_b;
}
while (related_breakpoint != b);
diff --git a/gdb/testsuite/gdb.base/watchpoint-delete.c b/gdb/testsuite/gdb.base/watchpoint-delete.c
new file mode 100644
index 0000000..031ef92
--- /dev/null
+++ b/gdb/testsuite/gdb.base/watchpoint-delete.c
@@ -0,0 +1,33 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2010 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+void
+func (void)
+{
+ volatile int x = 0;
+
+ x++; /* break-here */
+ x++;
+}
+
+int
+main (void)
+{
+ func ();
+
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.base/watchpoint-delete.exp b/gdb/testsuite/gdb.base/watchpoint-delete.exp
new file mode 100644
index 0000000..45bc650
--- /dev/null
+++ b/gdb/testsuite/gdb.base/watchpoint-delete.exp
@@ -0,0 +1,38 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set testfile "watchpoint-delete"
+set srcfile ${testfile}.c
+set binfile ${objdir}/${subdir}/${testfile}
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
+ untested ${testfile}.exp
+ return -1
+}
+
+# It is more compatible this way.
+gdb_test_no_output "set can-use-hw-watchpoints 0"
+
+if ![runto_main] {
+ return -1
+}
+
+# Ensure there is a parent frame to create related bp_watchpoint_scope.
+gdb_breakpoint [gdb_get_line_number "break-here"]
+gdb_continue_to_breakpoint "break-here" ".* break-here .*"
+
+gdb_test "watch x" {Watchpoint [0-9]+: x}
+
+gdb_test_no_output {delete $bpnum}

View File

@ -1,313 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-11/msg00084.html
Subject: [new testcase] Regression 7.1->7.2 for iFort [Re: [RFA-v2] dwarf debug format: Support DW_AT_variable_parameter attribute]
On Fri, 21 May 2010 22:45:35 +0200, Pierre Muller wrote:
> Thanks, I committed the patch.
commit 570d5d01de35effada277a69552c0903a4928241
Author: Pierre Muller <muller@ics.u-strasbg.fr>
Date: Fri May 21 20:45:18 2010 +0000
* dwarf2read.c (new_symbol): Handle DW_AT_variable_parameter
attribute.
Please revert this patch.
>From the DWARF-4 description of DW_AT_variable_parameter I do not think it
changes the data structures meaning in any way. It just states which data can
be modified by whom. I do not think this is useful for GDB in any way.
> > I think it would be improved by a test case, but that is up to you.
>
> This test would be pascal specific anyhow,
I believe the Pascal compiler should generate different debug info. For the
`var' keyword you can either (a) use DW_TAG_reference_type and point
DW_AT_location at the pointer or (b) use DW_OP_deref (as iFort does) on the
passed pointer and point DW_AT_location at the value itself.
DW_AT_variable_parameter would be true only for the (a) choice.
1 subroutine f (i)
2 integer i
3 i = 2
4 end
5 program varparam
6 integer m
7 m = 1
8 call f (m)
9 write(*,*) m
10 end
for iFort 11.1 20100806 it regressed this code, GDB-7.1 displayed:
Breakpoint 1, f (i=1) at varparam.f90:3
3 i = 2
(gdb) p i
$1 = 1
while GDB-7.2 displays:
Breakpoint 2, f (i=@0x1) at varparam.f90:3
3 i = 2
(gdb) p i
$1 = (REF TO -> ( INTEGER(4) )) @0x1: <error reading variable>
(note that `0x1' GDB considers as an address here)
A new testcase for the iFort usage case is attached.
No regressions on {x86_64,x86_64-m32,i686}-fedora14snapshot-linux-gnu.
I will then check-in the testcase or you can or so.
Regards,
Jan
gdb/
2010-11-04 Jan Kratochvil <jan.kratochvil@redhat.com>
Revert:
2010-05-21 Pierre Muller <muller@ics.u-strasbg.fr>
* dwarf2read.c (new_symbol): Handle DW_AT_variable_parameter
attribute.
gdb/testsuite/
2010-11-04 Jan Kratochvil <jan.kratochvil@redhat.com>
* dw2-ifort-parameter-debug.S: New file.
* dw2-ifort-parameter.c: New file.
* dw2-ifort-parameter.exp: New file.
Index: gdb-7.2/gdb/dwarf2read.c
===================================================================
--- gdb-7.2.orig/gdb/dwarf2read.c 2010-11-07 05:24:01.000000000 +0100
+++ gdb-7.2/gdb/dwarf2read.c 2010-11-07 05:36:34.000000000 +0100
@@ -10474,14 +10474,6 @@ new_symbol (struct die_info *die, struct
{
dwarf2_const_value (attr, sym, cu);
}
- attr = dwarf2_attr (die, DW_AT_variable_parameter, cu);
- if (attr && DW_UNSND (attr))
- {
- struct type *ref_type;
-
- ref_type = lookup_reference_type (SYMBOL_TYPE (sym));
- SYMBOL_TYPE (sym) = ref_type;
- }
add_symbol_to_list (sym, cu->list_in_scope);
break;
Index: gdb-7.2/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter-debug.S
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter-debug.S 2010-11-07 05:36:18.000000000 +0100
@@ -0,0 +1,122 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2010 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+ .section .debug_info
+.Lcu1_begin:
+ /* CU header */
+ .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */
+.Lcu1_start:
+ .2byte 2 /* DWARF Version */
+ .4byte .Labbrev1_begin /* Offset into abbrev section */
+ .byte 4 /* Pointer size */
+
+ /* CU die */
+ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */
+ .ascii "file1.txt\0" /* DW_AT_name */
+ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */
+ .byte 1 /* DW_AT_language (C) */
+ .4byte func /* DW_AT_low_pc */
+ .4byte main /* DW_AT_high_pc */
+
+ .uleb128 2 /* Abbrev: DW_TAG_subprogram */
+ .byte 1 /* DW_AT_external */
+ .ascii "func\0" /* DW_AT_name */
+ .4byte func /* DW_AT_low_pc */
+ .4byte main /* DW_AT_high_pc */
+
+ .uleb128 3 /* Abbrev: DW_TAG_formal_parameter */
+ .ascii "param\0" /* DW_AT_name */
+ .byte 1 /* DW_AT_variable_parameter */
+ .4byte .Ltype_int - .Lcu1_begin /* DW_AT_type */
+ .byte 2f - 1f /* DW_AT_location */
+1: .byte 3 /* DW_OP_addr */
+ .4byte ptr /* <addr> */
+ .byte 0x6 /* DW_OP_deref */
+2:
+
+ .byte 0 /* End of children of func */
+
+.Ltype_int:
+ .uleb128 4 /* Abbrev: DW_TAG_base_type */
+ .ascii "int\0" /* DW_AT_name */
+ .byte 4 /* DW_AT_byte_size */
+ .byte 5 /* DW_AT_encoding */
+
+ .byte 0 /* End of children of CU */
+.Lcu1_end:
+
+/* Abbrev table */
+ .section .debug_abbrev
+.Labbrev1_begin:
+ .uleb128 1 /* Abbrev code */
+ .uleb128 0x11 /* DW_TAG_compile_unit */
+ .byte 1 /* has_children */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x25 /* DW_AT_producer */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x13 /* DW_AT_language */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 2 /* Abbrev code */
+ .uleb128 0x2e /* DW_TAG_subprogram */
+ .byte 1 /* has_children */
+ .uleb128 0x3f /* DW_AT_external */
+ .uleb128 0xc /* DW_FORM_flag */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 3 /* Abbrev code */
+ .uleb128 0x05 /* DW_TAG_formal_parameter */
+ .byte 0 /* has_children */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x4b /* DW_AT_variable_parameter */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x49 /* DW_AT_type */
+ .uleb128 0x13 /* DW_FORM_ref4 */
+ .uleb128 0x2 /* DW_AT_location */
+ .uleb128 0xa /* DW_FORM_block1 */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 4 /* Abbrev code */
+ .uleb128 0x24 /* DW_TAG_base_type */
+ .byte 0 /* has_children */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0xb /* DW_AT_byte_size */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x3e /* DW_AT_encoding */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
Index: gdb-7.2/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.c 2010-11-07 05:36:18.000000000 +0100
@@ -0,0 +1,31 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2010 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+int value = 0xdeadf00d;
+int *ptr = &value;
+
+void
+func (void)
+{
+}
+
+int
+main (void)
+{
+ func ();
+ return 0;
+}
Index: gdb-7.2/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp 2010-11-07 05:36:18.000000000 +0100
@@ -0,0 +1,40 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Verify DW_AT_variable_parameter does not modify the data structures meaning
+# for GDB, as being used by iFort.
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+# For now pick a sampling of likely targets.
+if {![istarget *-*-linux*]
+ && ![istarget *-*-gnu*]
+ && ![istarget *-*-elf*]
+ && ![istarget *-*-openbsd*]
+ && ![istarget arm-*-eabi*]
+ && ![istarget powerpc-*-eabi*]} {
+ return 0
+}
+
+set testfile "dw2-ifort-parameter"
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} [list ${testfile}.c ${testfile}-debug.S] {nodebug}] } {
+ return -1
+}
+
+if ![runto func] {
+ return -1
+}
+
+gdb_test "p/x param" " = 0xdeadf00d"

View File

@ -1,204 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-11/msg00107.html
Subject: [patch 1/2] Code cleanup: New init_one_comp_unit
Hi,
unify some code into a function, to be extended in the next patch.
Thanks,
Jan
gdb/
2010-11-06 Jan Kratochvil <jan.kratochvil@redhat.com>
Code cleanup.
* dwarf2read.c (alloc_one_comp_unit): Rename prototype to ...
(init_one_comp_unit): ... this one.
(prepare_one_comp_unit): New prototype.
(dw2_require_line_header, process_psymtab_comp_unit): Use
init_one_comp_unit.
(process_psymtab_comp_unit): Use prepare_one_comp_unit.
(load_partial_comp_unit): Remove variable attr. Use
init_one_comp_unit with xmalloc. Use prepare_one_comp_unit.
(load_full_comp_unit): Use init_one_comp_unit with xmalloc. Use
prepare_one_comp_unit.
(read_signatured_type): Remove variable attr. Use init_one_comp_unit.
Use prepare_one_comp_unit.
(alloc_one_comp_unit): Rename to ...
(init_one_comp_unit): ... here and remove there calloc, new parameter
cu.
(prepare_one_comp_unit): New function.
Index: gdb-7.2/gdb/dwarf2read.c
===================================================================
--- gdb-7.2.orig/gdb/dwarf2read.c 2010-11-07 05:36:34.000000000 +0100
+++ gdb-7.2/gdb/dwarf2read.c 2010-11-07 05:38:21.000000000 +0100
@@ -1214,7 +1214,11 @@ static struct dwarf2_per_cu_data *dwarf2
static struct dwarf2_per_cu_data *dwarf2_find_comp_unit
(unsigned int offset, struct objfile *objfile);
-static struct dwarf2_cu *alloc_one_comp_unit (struct objfile *objfile);
+static void init_one_comp_unit (struct dwarf2_cu *cu,
+ struct objfile *objfile);
+
+static void prepare_one_comp_unit (struct dwarf2_cu *cu,
+ struct die_info *comp_unit_die);
static void free_one_comp_unit (void *);
@@ -1980,10 +1984,7 @@ dw2_require_line_header (struct objfile
return;
this_cu->v.quick->read_lines = 1;
- memset (&cu, 0, sizeof (cu));
- cu.objfile = objfile;
- obstack_init (&cu.comp_unit_obstack);
-
+ init_one_comp_unit (&cu, objfile);
cleanups = make_cleanup (free_stack_comp_unit, &cu);
dwarf2_read_section (objfile, &dwarf2_per_objfile->info);
@@ -2978,10 +2979,7 @@ process_psymtab_comp_unit (struct objfil
CORE_ADDR best_lowpc = 0, best_highpc = 0;
struct die_reader_specs reader_specs;
- memset (&cu, 0, sizeof (cu));
- cu.objfile = objfile;
- obstack_init (&cu.comp_unit_obstack);
-
+ init_one_comp_unit (&cu, objfile);
back_to_inner = make_cleanup (free_stack_comp_unit, &cu);
info_ptr = partial_read_comp_unit_head (&cu.header, info_ptr,
@@ -3035,12 +3033,7 @@ process_psymtab_comp_unit (struct objfil
return info_ptr;
}
- /* Set the language we're debugging. */
- attr = dwarf2_attr (comp_unit_die, DW_AT_language, &cu);
- if (attr)
- set_cu_language (DW_UNSND (attr), &cu);
- else
- set_cu_language (language_minimal, &cu);
+ prepare_one_comp_unit (&cu, comp_unit_die);
/* Allocate a new partial symbol table structure. */
attr = dwarf2_attr (comp_unit_die, DW_AT_name, &cu);
@@ -3263,7 +3256,8 @@ load_partial_comp_unit (struct dwarf2_pe
info_ptr = dwarf2_per_objfile->info.buffer + this_cu->offset;
beg_of_comp_unit = info_ptr;
- cu = alloc_one_comp_unit (objfile);
+ cu = xmalloc (sizeof (*cu));
+ init_one_comp_unit (cu, objfile);
/* ??? Missing cleanup for CU? */
@@ -3290,12 +3284,7 @@ load_partial_comp_unit (struct dwarf2_pe
info_ptr = read_full_die (&reader_specs, &comp_unit_die, info_ptr,
&has_children);
- /* Set the language we're debugging. */
- attr = dwarf2_attr (comp_unit_die, DW_AT_language, cu);
- if (attr)
- set_cu_language (DW_UNSND (attr), cu);
- else
- set_cu_language (language_minimal, cu);
+ prepare_one_comp_unit (cu, comp_unit_die);
/* Check if comp unit has_children.
If so, read the rest of the partial symbols from this comp unit.
@@ -4227,7 +4216,8 @@ load_full_comp_unit (struct dwarf2_per_c
info_ptr = dwarf2_per_objfile->info.buffer + offset;
beg_of_comp_unit = info_ptr;
- cu = alloc_one_comp_unit (objfile);
+ cu = xmalloc (sizeof (*cu));
+ init_one_comp_unit (cu, objfile);
/* If an error occurs while loading, release our storage. */
free_cu_cleanup = make_cleanup (free_one_comp_unit, cu);
@@ -4254,11 +4244,7 @@ load_full_comp_unit (struct dwarf2_per_c
all objfiles needed for references have been loaded yet, and symbol
table processing isn't initialized. But we have to set the CU language,
or we won't be able to build types correctly. */
- attr = dwarf2_attr (cu->dies, DW_AT_language, cu);
- if (attr)
- set_cu_language (DW_UNSND (attr), cu);
- else
- set_cu_language (language_minimal, cu);
+ prepare_one_comp_unit (cu, cu->dies);
/* Similarly, if we do not read the producer, we can not apply
producer-specific interpretation. */
@@ -12617,17 +12603,15 @@ read_signatured_type (struct objfile *ob
struct dwarf2_cu *cu;
ULONGEST signature;
struct cleanup *back_to, *free_cu_cleanup;
- struct attribute *attr;
dwarf2_read_section (objfile, &dwarf2_per_objfile->types);
types_ptr = dwarf2_per_objfile->types.buffer + type_sig->offset;
gdb_assert (type_sig->per_cu.cu == NULL);
- cu = xmalloc (sizeof (struct dwarf2_cu));
- memset (cu, 0, sizeof (struct dwarf2_cu));
- obstack_init (&cu->comp_unit_obstack);
- cu->objfile = objfile;
+ cu = xmalloc (sizeof (*cu));
+ init_one_comp_unit (cu, objfile);
+
type_sig->per_cu.cu = cu;
cu->per_cu = &type_sig->per_cu;
@@ -12659,11 +12643,7 @@ read_signatured_type (struct objfile *ob
all objfiles needed for references have been loaded yet, and symbol
table processing isn't initialized. But we have to set the CU language,
or we won't be able to build types correctly. */
- attr = dwarf2_attr (cu->dies, DW_AT_language, cu);
- if (attr)
- set_cu_language (DW_UNSND (attr), cu);
- else
- set_cu_language (language_minimal, cu);
+ prepare_one_comp_unit (cu, cu->dies);
do_cleanups (back_to);
@@ -13755,15 +13735,29 @@ dwarf2_find_comp_unit (unsigned int offs
return this_cu;
}
-/* Malloc space for a dwarf2_cu for OBJFILE and initialize it. */
+/* Initialize dwarf2_cu CU for OBJFILE in a pre-allocated space. */
-static struct dwarf2_cu *
-alloc_one_comp_unit (struct objfile *objfile)
+static void
+init_one_comp_unit (struct dwarf2_cu *cu, struct objfile *objfile)
{
- struct dwarf2_cu *cu = xcalloc (1, sizeof (struct dwarf2_cu));
+ memset (cu, 0, sizeof (*cu));
cu->objfile = objfile;
obstack_init (&cu->comp_unit_obstack);
- return cu;
+}
+
+/* Initiailize basic fields of dwarf_cu CU according to DIE COMP_UNIT_DIE. */
+
+static void
+prepare_one_comp_unit (struct dwarf2_cu *cu, struct die_info *comp_unit_die)
+{
+ struct attribute *attr;
+
+ /* Set the language we're debugging. */
+ attr = dwarf2_attr (comp_unit_die, DW_AT_language, cu);
+ if (attr)
+ set_cu_language (DW_UNSND (attr), cu);
+ else
+ set_cu_language (language_minimal, cu);
}
/* Release one cached compilation unit, CU. We unlink it from the tree

View File

@ -1,448 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-11/msg00108.html
Subject: [patch 2/2] iFort compat.: case insensitive symbols (PR 11313)
Hi,
iFort (Intel Fortran compiler) produces DIEs like:
<1><1dc>: Abbrev Number: 6 (DW_TAG_module)
<1e0> DW_AT_name : MOD1
But Fortran is case insensitive, therefore GDB lowercases any user input
first. Symbols cannot match. gfortran always produces lowercased DIE names.
I was told by Jakub Jelinek GCC frontend will never be properly case
preserving - to output "Mod1" if user stated it in such case in the sources.
Therefore GDB will now lowercase any case insensitive symbol names on their
read-in from DWARF.
ELF symbol tables are currently not touched - their matching to their CU (and
thus to their DW_AT_identifier_case / DW_AT_language) is expensive and it does
not seem to me to be needed for iFort as only the module names are uppercased
there.
For the iFort compatibility there is also needed:
[new testcase] Regression 7.1->7.2 for iFort [Re: [RFA-v2] dwarf debug format: Support DW_AT_variable_parameter attribute]
http://sourceware.org/ml/gdb-patches/2010-11/msg00084.html
No regressions on {x86_64,x86_64-m32,i686}-fedora14snapshot-linux-gnu.
Thanks,
Jan
gdb/
2010-11-07 Jan Kratochvil <jan.kratochvil@redhat.com>
PR 11313 - case insensitive identifiers in DWARF not in lowercase.
* dwarf2read.c: Include ctype.h.
(struct dwarf2_cu) <case_sensitivity>: New.
(struct attribute) <string_is_canonical>: Update the comment.
(canonical_case): New declaration.
(read_partial_die): Call canonical_case.
(canonical_case): New function.
(dwarf2_canonicalize_name): Update the function comment. Call
canonical_case, adjust the obstack allocation.
(dwarf2_name): Call canonical_case, set DW_STRING_IS_CANONICAL.
(init_one_comp_unit, prepare_one_comp_unit): Set cu->case_sensitivity.
gdb/testsuite/
2010-11-07 Jan Kratochvil <jan.kratochvil@redhat.com>
PR 11313 - case insensitive identifiers in DWARF not in lowercase.
* gdb.dwarf2/dw2-case-insensitive-debug.S: New.
* gdb.dwarf2/dw2-case-insensitive.c: New.
* gdb.dwarf2/dw2-case-insensitive.exp: New.
* gdb.mi/mi-var-child-f.exp (mi_runto): Use lowercase main__.
Index: gdb-7.2/gdb/dwarf2read.c
===================================================================
--- gdb-7.2.orig/gdb/dwarf2read.c 2010-11-07 05:38:21.000000000 +0100
+++ gdb-7.2/gdb/dwarf2read.c 2010-11-07 05:38:47.000000000 +0100
@@ -55,6 +55,7 @@
#include "gdb_stat.h"
#include "completer.h"
#include "top.h"
+#include <ctype.h>
#include <fcntl.h>
#include "gdb_string.h"
@@ -376,6 +377,10 @@ struct dwarf2_cu
DIEs for namespaces, we don't need to try to infer them
from mangled names. */
unsigned int has_namespace_info : 1;
+
+ /* Are identifiers in this CU case sensitive or should they be lowercased
+ before storing them into GDB symbol tables? */
+ enum case_sensitivity case_sensitivity;
};
/* When using the index (and thus not using psymtabs), each CU has an
@@ -621,9 +626,10 @@ struct attribute
ENUM_BITFIELD(dwarf_attribute) name : 16;
ENUM_BITFIELD(dwarf_form) form : 15;
- /* Has DW_STRING already been updated by dwarf2_canonicalize_name? This
- field should be in u.str (existing only for DW_STRING) but it is kept
- here for better struct attribute alignment. */
+ /* Has DW_STRING already been updated by dwarf2_canonicalize_name or
+ canonical_case? This field should be in u.str (existing only for
+ DW_STRING) but it is kept here for better struct attribute alignment.
+ */
unsigned int string_is_canonical : 1;
union
@@ -1109,6 +1115,9 @@ static gdb_byte *read_full_die (const st
static void process_die (struct die_info *, struct dwarf2_cu *);
+static char *canonical_case (char *name, struct dwarf2_cu *cu,
+ struct obstack *obstack);
+
static char *dwarf2_canonicalize_name (char *, struct dwarf2_cu *,
struct obstack *);
@@ -8589,7 +8598,8 @@ read_partial_die (struct partial_die_inf
case DW_TAG_enumerator:
/* These tags always have simple identifiers already; no need
to canonicalize them. */
- part_die->name = DW_STRING (&attr);
+ part_die->name = canonical_case (DW_STRING (&attr), cu,
+ &cu->objfile->objfile_obstack);
break;
default:
part_die->name
@@ -11043,7 +11053,36 @@ sibling_die (struct die_info *die)
return die->sibling;
}
-/* Get name of a die, return NULL if not found. */
+/* Convert NAME to the lower case if CU is case_sensitive_off. Allocate
+ memory on OBSTACK if needed, otherwise return the NAME pointer. */
+
+static char *
+canonical_case (char *name, struct dwarf2_cu *cu,
+ struct obstack *obstack)
+{
+ char *retval;
+ int i;
+
+ if (cu->case_sensitivity == case_sensitive_on)
+ return name;
+
+ for (i = 0; name[i] != 0; i++)
+ if (tolower (name[i]) != name[i])
+ break;
+ if (name[i] == 0)
+ return name;
+
+ retval = obstack_alloc (obstack, strlen (name) + 1);
+
+ for (i = 0; name[i] != 0; i++)
+ retval[i] = tolower (name[i]);
+ retval[i] = 0;
+
+ return retval;
+}
+
+/* Get name of a die, return NULL if not found. canonical_case is always
+ already called for the returned string. */
static char *
dwarf2_canonicalize_name (char *name, struct dwarf2_cu *cu,
@@ -11055,14 +11094,26 @@ dwarf2_canonicalize_name (char *name, st
if (canon_name != NULL)
{
- if (strcmp (canon_name, name) != 0)
- name = obsavestring (canon_name, strlen (canon_name),
+ char *cased_name;
+
+ cased_name = canonical_case (canon_name, cu, obstack);
+
+ /* Push CASED_NAME on OBSTACK only if it isn't already pushed there
+ by canonical_case and if it was allocated using xmalloc by
+ cp_canonicalize_string. */
+ if (strcmp (canon_name, cased_name) == 0
+ && strcmp (canon_name, name) != 0)
+ name = obsavestring (cased_name, strlen (cased_name),
obstack);
+ else
+ name = cased_name;
xfree (canon_name);
+
+ return name;
}
}
- return name;
+ return canonical_case (name, cu, obstack);
}
/* Get name of a die, return NULL if not found. */
@@ -11088,7 +11139,13 @@ dwarf2_name (struct die_info *die, struc
case DW_TAG_enumeration_type:
case DW_TAG_enumerator:
/* These tags always have simple identifiers already; no need
- to canonicalize them. */
+ to call dwarf2_canonicalize_name for them. */
+ if (!DW_STRING_IS_CANONICAL (attr))
+ {
+ DW_STRING (attr) = canonical_case (DW_STRING (attr), cu,
+ &cu->objfile->objfile_obstack);
+ DW_STRING_IS_CANONICAL (attr) = 1;
+ }
return DW_STRING (attr);
case DW_TAG_subprogram:
@@ -13743,6 +13800,7 @@ init_one_comp_unit (struct dwarf2_cu *cu
memset (cu, 0, sizeof (*cu));
cu->objfile = objfile;
obstack_init (&cu->comp_unit_obstack);
+ cu->case_sensitivity = case_sensitive_on;
}
/* Initiailize basic fields of dwarf_cu CU according to DIE COMP_UNIT_DIE. */
@@ -13758,6 +13816,13 @@ prepare_one_comp_unit (struct dwarf2_cu
set_cu_language (DW_UNSND (attr), cu);
else
set_cu_language (language_minimal, cu);
+
+ attr = dwarf2_attr (comp_unit_die, DW_AT_identifier_case, cu);
+ if (attr)
+ cu->case_sensitivity = (DW_UNSND (attr) == DW_ID_case_sensitive
+ ? case_sensitive_on : case_sensitive_off);
+ else
+ cu->case_sensitivity = cu->language_defn->la_case_sensitivity;
}
/* Release one cached compilation unit, CU. We unlink it from the tree
Index: gdb-7.2/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S 2010-11-07 05:38:35.000000000 +0100
@@ -0,0 +1,122 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2004, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+ .section .debug_info
+.Lcu1_begin:
+ /* CU header */
+ .4byte .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */
+.Lcu1_start:
+ .2byte 2 /* DWARF Version */
+ .4byte .Labbrev1_begin /* Offset into abbrev section */
+ .byte 4 /* Pointer size */
+
+ /* CU die */
+ .uleb128 2 /* Abbrev: DW_TAG_compile_unit */
+ .ascii "file1.txt\0" /* DW_AT_name */
+ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */
+ .byte 2 /* DW_AT_language (DW_LANG_C) */
+ .byte 3 /* DW_AT_identifier_case (DW_ID_case_insensitive) */
+ .4byte FUNC_attr /* DW_AT_low_pc */
+ .4byte FUNC_lang /* DW_AT_high_pc */
+
+ .uleb128 3 /* Abbrev: DW_TAG_subprogram */
+ .byte 1 /* DW_AT_external */
+ .ascii "FUNC_attr\0" /* DW_AT_name */
+ .4byte FUNC_attr /* DW_AT_low_pc */
+ .4byte FUNC_lang /* DW_AT_high_pc */
+
+ .byte 0 /* End of children of CU */
+.Lcu1_end:
+
+.Lcu2_begin:
+ /* CU header */
+ .4byte .Lcu2_end - .Lcu2_start /* Length of Compilation Unit */
+.Lcu2_start:
+ .2byte 2 /* DWARF Version */
+ .4byte .Labbrev1_begin /* Offset into abbrev section */
+ .byte 4 /* Pointer size */
+
+ /* CU die */
+ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */
+ .ascii "file1.txt\0" /* DW_AT_name */
+ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */
+ .byte 8 /* DW_AT_language (DW_LANG_Fortran90) */
+ .4byte FUNC_lang /* DW_AT_low_pc */
+ .4byte main /* DW_AT_high_pc */
+
+ .uleb128 3 /* Abbrev: DW_TAG_subprogram */
+ .byte 1 /* DW_AT_external */
+ .ascii "FUNC_lang\0" /* DW_AT_name */
+ .4byte FUNC_lang /* DW_AT_low_pc */
+ .4byte main /* DW_AT_high_pc */
+
+ .byte 0 /* End of children of CU */
+.Lcu2_end:
+
+/* Abbrev table */
+ .section .debug_abbrev
+.Labbrev1_begin:
+ .uleb128 1 /* Abbrev code */
+ .uleb128 0x11 /* DW_TAG_compile_unit */
+ .byte 1 /* has_children */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x25 /* DW_AT_producer */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x13 /* DW_AT_language */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 2 /* Abbrev code */
+ .uleb128 0x11 /* DW_TAG_compile_unit */
+ .byte 1 /* has_children */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x25 /* DW_AT_producer */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x13 /* DW_AT_language */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x42 /* DW_AT_identifier_case */
+ .uleb128 0xb /* DW_FORM_data1 */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .uleb128 3 /* Abbrev code */
+ .uleb128 0x2e /* DW_TAG_subprogram */
+ .byte 0 /* has_children */
+ .uleb128 0x3f /* DW_AT_external */
+ .uleb128 0xc /* DW_FORM_flag */
+ .uleb128 0x3 /* DW_AT_name */
+ .uleb128 0x8 /* DW_FORM_string */
+ .uleb128 0x11 /* DW_AT_low_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .uleb128 0x12 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_FORM_addr */
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
+
+ .byte 0x0 /* Terminator */
+ .byte 0x0 /* Terminator */
Index: gdb-7.2/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.c 2010-11-07 05:38:35.000000000 +0100
@@ -0,0 +1,36 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2004, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* This one is DW_LANG_C but it uses DW_ID_case_insensitive. */
+
+void
+FUNC_attr (void)
+{
+}
+
+/* This one has no DW_AT_identifier_case but it is DW_LANG_Fortran90. */
+
+void
+FUNC_lang (void)
+{
+}
+
+int
+main()
+{
+ return 0;
+}
Index: gdb-7.2/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp 2010-11-07 05:38:35.000000000 +0100
@@ -0,0 +1,41 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+# For now pick a sampling of likely targets.
+if {![istarget *-*-linux*]
+ && ![istarget *-*-gnu*]
+ && ![istarget *-*-elf*]
+ && ![istarget *-*-openbsd*]
+ && ![istarget arm-*-eabi*]
+ && ![istarget powerpc-*-eabi*]} {
+ return 0
+}
+
+set testfile "dw2-case-insensitive"
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} [list ${testfile}.c ${testfile}-debug.S] {nodebug}] } {
+ return -1
+}
+
+gdb_test_no_output "set language fortran"
+
+if {[gdb_breakpoint "fuNC_attr"] == 1} {
+ pass "setting breakpoint at fuNC_attr"
+}
+
+if {[gdb_breakpoint "fuNC_lang"] == 1} {
+ pass "setting breakpoint at fuNC_lang"
+}
Index: gdb-7.2/gdb/testsuite/gdb.mi/mi-var-child-f.exp
===================================================================
--- gdb-7.2.orig/gdb/testsuite/gdb.mi/mi-var-child-f.exp 2010-01-01 08:32:03.000000000 +0100
+++ gdb-7.2/gdb/testsuite/gdb.mi/mi-var-child-f.exp 2010-11-07 05:38:35.000000000 +0100
@@ -36,7 +36,7 @@ if {[gdb_compile "${srcdir}/${subdir}/${
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}
-mi_runto MAIN__
+mi_runto main__
mi_gdb_test "-var-create array * array" \
"\\^done,name=\"array\",numchild=\"3\",value=\".*\",type=\"integer \\(2,-1:1\\)\"" \

View File

@ -1,418 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-09/msg00519.html
Subject: [patch] Fix inferior execl of new PIE x86_64
Hi,
gcc -o 1 1.c -Wall -g -fPIE -pie; gdb -nx ./1 -ex 'b main' -ex r -ex c
Starting program: .../gdb/1
Breakpoint 1, main (argc=1, argv=0x7fffffffdff8) at 1.c:7
7 setbuf (stdout, NULL);
Continuing.
re-exec
process 28056 is executing new program: .../gdb/1
Error in re-setting breakpoint 1: Cannot access memory at address 0x80c
exit
Program exited normally.
(gdb) _
while it should be:
re-exec
process 28095 is executing new program: .../gdb/1
Breakpoint 1, main (argc=2, argv=0x7fffffffe008) at 1.c:7
7 setbuf (stdout, NULL);
(gdb) _
The error comes from:
throw_error <- memory_error <- read_memory <- read_memory_unsigned_integer <-
amd64_analyze_prologue <- amd64_skip_prologue <- gdbarch_skip_prologue <-
skip_prologue_sal <- find_function_start_sal <- symbol_found <- decode_variable
<- decode_line_1 <- breakpoint_re_set_one <- catch_errors <- breakpoint_re_set
<- clear_symtab_users <- new_symfile_objfile <-
symbol_file_add_with_addrs_or_offsets <- symbol_file_add_from_bfd <-
symbol_file_add <- symbol_file_add_main_1 <- symbol_file_add_main <-
follow_exec
I understand this hack is not nice, the correct way would be to unify more
follow_exec with post_create_inferior. But I could break it for non-GNU/Linux
targets a lot.
No regressions on {x86_64,x86_64-m32,i686}-fedora14snapshot-linux-gnu.
Thanks,
Jan
for the demo above:
------------------------------------------------------------------------------
#include <unistd.h>
#include <assert.h>
#include <stdio.h>
int
main (int argc, char **argv)
{
setbuf (stdout, NULL);
if (argc == 1)
{
puts ("re-exec");
execl ("/proc/self/exe", argv[0], "foo", NULL);
assert (0);
}
puts ("exit");
return 0;
}
------------------------------------------------------------------------------
gdb/
2010-09-30 Jan Kratochvil <jan.kratochvil@redhat.com>
* infrun.c (follow_exec): Replace symbol_file_add_main by
symbol_file_add with SYMFILE_DEFER_BP_RESET, set_initial_language and
breakpoint_re_set.
* m32r-rom.c (m32r_load, m32r_upload_command): Use parameter 0 for
clear_symtab_users.
* objfiles.c (free_all_objfiles): Likewise.
* remote-m32r-sdi.c (m32r_load): Likewise.
* solib-som.c (som_solib_create_inferior_hook): Likewise.
* symfile.c (new_symfile_objfile): New comment for add_flags. Call
clear_symtab_users with ADD_FLAGS.
(reread_symbols): Use parameter 0 for clear_symtab_users.
(clear_symtab_users): New parameter add_flags. Do not call
breakpoint_re_set if SYMFILE_DEFER_BP_RESET.
(clear_symtab_users_cleanup): Use parameter 0 for clear_symtab_users.
* symtab.h (clear_symtab_users): New parameter add_flags.
gdb/testsuite/
2010-09-30 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.base/pie-execl.exp: New file.
* gdb.base/pie-execl.c: New file.
Index: gdb-7.2/gdb/infrun.c
===================================================================
--- gdb-7.2.orig/gdb/infrun.c 2010-10-12 18:27:58.000000000 +0200
+++ gdb-7.2/gdb/infrun.c 2010-10-12 18:29:24.000000000 +0200
@@ -840,8 +840,15 @@ follow_exec (ptid_t pid, char *execd_pat
/* That a.out is now the one to use. */
exec_file_attach (execd_pathname, 0);
- /* Load the main file's symbols. */
- symbol_file_add_main (execd_pathname, 0);
+ /* SYMFILE_DEFER_BP_RESET is used as the proper displacement for PIE
+ (Position Independent Executable) main symbol file will get applied by
+ solib_create_inferior_hook below. breakpoint_re_set would fail to insert
+ the breakpoints with the zero displacement. */
+
+ symbol_file_add (execd_pathname, SYMFILE_MAINLINE | SYMFILE_DEFER_BP_RESET,
+ NULL, 0);
+
+ set_initial_language ();
#ifdef SOLIB_CREATE_INFERIOR_HOOK
SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid));
@@ -851,6 +858,8 @@ follow_exec (ptid_t pid, char *execd_pat
jit_inferior_created_hook ();
+ breakpoint_re_set ();
+
/* Reinsert all breakpoints. (Those which were symbolic have
been reset to the proper address in the new a.out, thanks
to symbol_file_command...) */
Index: gdb-7.2/gdb/m32r-rom.c
===================================================================
--- gdb-7.2.orig/gdb/m32r-rom.c 2010-01-01 08:31:37.000000000 +0100
+++ gdb-7.2/gdb/m32r-rom.c 2010-10-12 18:29:24.000000000 +0200
@@ -188,7 +188,7 @@ m32r_load (char *filename, int from_tty)
the stack may not be valid, and things would get horribly
confused... */
- clear_symtab_users ();
+ clear_symtab_users (0);
}
static void
@@ -551,7 +551,7 @@ m32r_upload_command (char *args, int fro
the stack may not be valid, and things would get horribly
confused... */
- clear_symtab_users ();
+ clear_symtab_users (0);
}
/* Provide a prototype to silence -Wmissing-prototypes. */
Index: gdb-7.2/gdb/objfiles.c
===================================================================
--- gdb-7.2.orig/gdb/objfiles.c 2010-10-12 18:27:56.000000000 +0200
+++ gdb-7.2/gdb/objfiles.c 2010-10-12 18:29:39.000000000 +0200
@@ -699,7 +699,7 @@ free_all_objfiles (void)
{
free_objfile (objfile);
}
- clear_symtab_users ();
+ clear_symtab_users (0);
}
/* Relocate OBJFILE to NEW_OFFSETS. There should be OBJFILE->NUM_SECTIONS
Index: gdb-7.2/gdb/remote-m32r-sdi.c
===================================================================
--- gdb-7.2.orig/gdb/remote-m32r-sdi.c 2010-07-07 18:15:16.000000000 +0200
+++ gdb-7.2/gdb/remote-m32r-sdi.c 2010-10-12 18:29:24.000000000 +0200
@@ -1377,7 +1377,7 @@ m32r_load (char *args, int from_tty)
might be to call normal_stop, except that the stack may not be valid,
and things would get horribly confused... */
- clear_symtab_users ();
+ clear_symtab_users (0);
if (!nostart)
{
Index: gdb-7.2/gdb/solib-som.c
===================================================================
--- gdb-7.2.orig/gdb/solib-som.c 2010-05-17 01:49:58.000000000 +0200
+++ gdb-7.2/gdb/solib-som.c 2010-10-12 18:29:24.000000000 +0200
@@ -354,7 +354,7 @@ keep_going:
/* Make the breakpoint at "_start" a shared library event breakpoint. */
create_solib_event_breakpoint (target_gdbarch, anaddr);
- clear_symtab_users ();
+ clear_symtab_users (0);
}
static void
Index: gdb-7.2/gdb/symfile.c
===================================================================
--- gdb-7.2.orig/gdb/symfile.c 2010-10-12 18:27:57.000000000 +0200
+++ gdb-7.2/gdb/symfile.c 2010-10-12 18:29:24.000000000 +0200
@@ -1036,7 +1036,7 @@ syms_from_objfile (struct objfile *objfi
/* Perform required actions after either reading in the initial
symbols for a new objfile, or mapping in the symbols from a reusable
- objfile. */
+ objfile. ADD_FLAGS is a bitmask of enum symfile_add_flags. */
void
new_symfile_objfile (struct objfile *objfile, int add_flags)
@@ -1049,7 +1049,7 @@ new_symfile_objfile (struct objfile *obj
/* OK, make it the "real" symbol file. */
symfile_objfile = objfile;
- clear_symtab_users ();
+ clear_symtab_users (add_flags);
}
else if ((add_flags & SYMFILE_DEFER_BP_RESET) == 0)
{
@@ -2527,7 +2527,7 @@ reread_symbols (void)
/* Notify objfiles that we've modified objfile sections. */
objfiles_changed ();
- clear_symtab_users ();
+ clear_symtab_users (0);
/* At least one objfile has changed, so we can consider that
the executable we're debugging has changed too. */
observer_notify_executable_changed ();
@@ -2745,10 +2745,10 @@ allocate_symtab (char *filename, struct
/* Reset all data structures in gdb which may contain references to symbol
- table data. */
+ table data. ADD_FLAGS is a bitmask of enum symfile_add_flags. */
void
-clear_symtab_users (void)
+clear_symtab_users (int add_flags)
{
/* Someday, we should do better than this, by only blowing away
the things that really need to be blown. */
@@ -2758,7 +2758,8 @@ clear_symtab_users (void)
clear_current_source_symtab_and_line ();
clear_displays ();
- breakpoint_re_set ();
+ if ((add_flags & SYMFILE_DEFER_BP_RESET) == 0)
+ breakpoint_re_set ();
set_default_breakpoint (0, NULL, 0, 0, 0);
clear_pc_function_cache ();
observer_notify_new_objfile (NULL);
@@ -2777,7 +2778,7 @@ clear_symtab_users (void)
static void
clear_symtab_users_cleanup (void *ignore)
{
- clear_symtab_users ();
+ clear_symtab_users (0);
}
/* OVERLAYS:
Index: gdb-7.2/gdb/symtab.h
===================================================================
--- gdb-7.2.orig/gdb/symtab.h 2010-10-12 18:27:56.000000000 +0200
+++ gdb-7.2/gdb/symtab.h 2010-10-12 18:29:24.000000000 +0200
@@ -1170,7 +1170,7 @@ extern void skip_prologue_sal (struct sy
/* symfile.c */
-extern void clear_symtab_users (void);
+extern void clear_symtab_users (int add_flags);
extern enum language deduce_language_from_filename (const char *);
Index: gdb-7.2/gdb/testsuite/gdb.base/pie-execl.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.base/pie-execl.c 2010-10-12 18:29:24.000000000 +0200
@@ -0,0 +1,51 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2010 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#include <stdio.h>
+#include <unistd.h>
+#include <assert.h>
+
+static void pie_execl_marker (void);
+
+int
+main (int argc, char **argv)
+{
+ setbuf (stdout, NULL);
+
+#if BIN == 1
+ if (argc == 2)
+ {
+ printf ("pie-execl: re-exec: %s\n", argv[1]);
+ execl (argv[1], argv[1], NULL);
+ assert (0);
+ }
+#endif
+
+ pie_execl_marker ();
+
+ return 0;
+}
+
+/* pie_execl_marker must be on a different address than in `pie-execl2.c'. */
+
+volatile int v;
+
+static void
+pie_execl_marker (void)
+{
+ v = 1;
+}
Index: gdb-7.2/gdb/testsuite/gdb.base/pie-execl.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.base/pie-execl.exp 2010-10-12 18:29:24.000000000 +0200
@@ -0,0 +1,94 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# The problem was due to amd64_skip_prologue attempting to access inferior
+# memory before the PIE (Position Independent Executable) gets relocated.
+
+if { ![istarget *-linux*]} {
+ continue
+}
+
+set testfile "pie-execl"
+set srcfile ${testfile}.c
+set executable1 ${testfile}1
+set executable2 ${testfile}2
+set binfile1 ${objdir}/${subdir}/${executable1}
+set binfile2 ${objdir}/${subdir}/${executable2}
+
+# Use conditional compilation according to `BIN' as GDB remembers the source
+# file name of the breakpoint.
+
+set opts [list debug {additional_flags=-fPIE -pie}]
+if {[build_executable ${testfile}.exp $executable1 $srcfile [concat $opts {additional_flags=-DBIN=1}]] == ""
+ || [build_executable ${testfile}.exp $executable2 $srcfile [concat $opts {additional_flags=-DBIN=2}]] == ""} {
+ return -1
+}
+
+clean_restart ${executable1}
+
+gdb_test_no_output "set args ${binfile2}"
+
+if ![runto_main] {
+ return -1
+}
+
+# Do not stop on `main' after re-exec.
+delete_breakpoints
+
+gdb_breakpoint "pie_execl_marker"
+gdb_test "info breakpoints" ".*" ""
+
+set addr1 ""
+set test "pie_execl_marker address first"
+gdb_test_multiple "p/x &pie_execl_marker" $test {
+ -re " = (0x\[0-9a-f\]+)\r\n$gdb_prompt $" {
+ set addr1 $expect_out(1,string)
+ pass $test
+ }
+}
+verbose -log "addr1 is $addr1"
+
+set test "continue"
+gdb_test_multiple $test $test {
+ -re "Error in re-setting breakpoint" {
+ fail $test
+ }
+ -re "Cannot access memory" {
+ fail $test
+ }
+ -re "pie-execl: re-exec.*executing new program.*\r\nBreakpoint \[0-9\]+,\[^\r\n\]* pie_execl_marker .*\r\n$gdb_prompt $" {
+ pass $test
+ }
+}
+
+gdb_test "info breakpoints" ".*" ""
+
+set addr2 ""
+set test "pie_execl_marker address second"
+gdb_test_multiple "p/x &pie_execl_marker" $test {
+ -re " = (0x\[0-9a-f\]+)\r\n$gdb_prompt $" {
+ set addr2 $expect_out(1,string)
+ pass $test
+ }
+}
+verbose -log "addr2 is $addr2"
+
+# Ensure we cannot get a false PASS and the inferior has really changed.
+set test "pie_execl_marker address has changed"
+if [string equal $addr1 $addr2] {
+ fail $test
+} else {
+ pass $test
+}

View File

@ -1,8 +1,8 @@
Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
Index: gdb-7.2.50.20101116/gdb/dwarf2read.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/dwarf2read.c 2010-07-13 00:13:02.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/dwarf2read.c 2010-07-13 00:26:25.000000000 +0200
@@ -5727,12 +5727,14 @@ read_set_type (struct die_info *die, str
--- gdb-7.2.50.20101116.orig/gdb/dwarf2read.c 2010-11-16 08:19:54.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/dwarf2read.c 2010-11-16 08:25:21.000000000 +0100
@@ -7315,12 +7315,14 @@ read_set_type (struct die_info *die, str
return set_die_type (die, set_type, cu);
}
@ -19,7 +19,7 @@ Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
struct attribute *attr;
struct symbol *sym;
CORE_ADDR base = (CORE_ADDR) 0;
@@ -5757,10 +5759,40 @@ read_common_block (struct die_info *die,
@@ -7345,10 +7347,40 @@ read_common_block (struct die_info *die,
}
if (die->child != NULL)
{
@ -58,9 +58,9 @@ Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
+
+ /* Undocumented in DWARF3, when it can be present? */
attr = dwarf2_attr (child_die, DW_AT_data_member_location, cu);
if (attr)
if (sym != NULL && attr != NULL)
{
@@ -5778,8 +5810,25 @@ read_common_block (struct die_info *die,
@@ -7366,8 +7398,25 @@ read_common_block (struct die_info *die,
SYMBOL_VALUE_ADDRESS (sym) = base + byte_offset;
add_symbol_to_list (sym, &global_symbols);
}
@ -86,7 +86,7 @@ Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
}
}
@@ -9106,6 +9155,13 @@ new_symbol (struct die_info *die, struct
@@ -10954,6 +11003,13 @@ new_symbol_full (struct die_info *die, s
{
var_decode_location (attr, sym, cu);
attr2 = dwarf2_attr (die, DW_AT_external, cu);
@ -97,12 +97,12 @@ Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
+ && die->parent->tag == DW_TAG_common_block)
+ attr2 = NULL;
+
if (attr2 && (DW_UNSND (attr2) != 0))
{
struct pending **list_to_add;
@@ -9277,6 +9333,11 @@ new_symbol (struct die_info *die, struct
if (SYMBOL_CLASS (sym) == LOC_STATIC
&& SYMBOL_VALUE_ADDRESS (sym) == 0
&& !dwarf2_per_objfile->has_section_at_zero)
@@ -11126,6 +11182,11 @@ new_symbol_full (struct die_info *die, s
SYMBOL_CLASS (sym) = LOC_TYPEDEF;
add_symbol_to_list (sym, &global_symbols);
list_to_add = &global_symbols;
break;
+ case DW_TAG_common_block:
+ SYMBOL_CLASS (sym) = LOC_STATIC;
@ -112,10 +112,10 @@ Index: gdb-7.1.90.20100711/gdb/dwarf2read.c
default:
/* Not a tag we recognize. Hopefully we aren't processing
trash data, but since we must specifically ignore things
Index: gdb-7.1.90.20100711/gdb/f-lang.c
Index: gdb-7.2.50.20101116/gdb/f-lang.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/f-lang.c 2010-07-13 00:24:04.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/f-lang.c 2010-07-13 00:25:56.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/f-lang.c 2010-11-16 08:21:46.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/f-lang.c 2010-11-16 08:22:05.000000000 +0100
@@ -443,27 +443,3 @@ _initialize_f_language (void)
add_language (&f_language_defn);
@ -144,10 +144,10 @@ Index: gdb-7.1.90.20100711/gdb/f-lang.c
- }
- return (NULL);
-}
Index: gdb-7.1.90.20100711/gdb/f-lang.h
Index: gdb-7.2.50.20101116/gdb/f-lang.h
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/f-lang.h 2010-07-13 00:24:04.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/f-lang.h 2010-07-13 00:25:56.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/f-lang.h 2010-11-16 08:21:46.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/f-lang.h 2010-11-16 08:22:05.000000000 +0100
@@ -52,36 +52,8 @@ enum f90_range_type
NONE_BOUND_DEFAULT /* "(low:high)" */
};
@ -185,10 +185,10 @@ Index: gdb-7.1.90.20100711/gdb/f-lang.h
/* When reasonable array bounds cannot be fetched, such as when
you ask to 'mt print symbols' and there is no stack frame and
Index: gdb-7.1.90.20100711/gdb/f-valprint.c
Index: gdb-7.2.50.20101116/gdb/f-valprint.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/f-valprint.c 2010-07-13 00:24:25.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/f-valprint.c 2010-07-13 00:32:05.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/f-valprint.c 2010-11-16 08:21:46.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/f-valprint.c 2010-11-16 08:22:05.000000000 +0100
@@ -34,6 +34,8 @@
#include "gdbcore.h"
#include "command.h"
@ -371,11 +371,11 @@ Index: gdb-7.1.90.20100711/gdb/f-valprint.c
}
void
Index: gdb-7.1.90.20100711/gdb/stack.c
Index: gdb-7.2.50.20101116/gdb/stack.c
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/stack.c 2010-07-01 17:36:17.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/stack.c 2010-07-13 00:29:49.000000000 +0200
@@ -1484,6 +1484,8 @@ iterate_over_block_locals (struct block
--- gdb-7.2.50.20101116.orig/gdb/stack.c 2010-09-30 12:29:00.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/stack.c 2010-11-16 08:22:05.000000000 +0100
@@ -1490,6 +1490,8 @@ iterate_over_block_locals (struct block
case LOC_COMPUTED:
if (SYMBOL_IS_ARGUMENT (sym))
break;
@ -384,11 +384,11 @@ Index: gdb-7.1.90.20100711/gdb/stack.c
(*cb) (SYMBOL_PRINT_NAME (sym), sym, cb_data);
break;
Index: gdb-7.1.90.20100711/gdb/symtab.h
Index: gdb-7.2.50.20101116/gdb/symtab.h
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/symtab.h 2010-07-12 23:07:33.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/symtab.h 2010-07-13 00:27:02.000000000 +0200
@@ -396,7 +396,10 @@ typedef enum domain_enum_tag
--- gdb-7.2.50.20101116.orig/gdb/symtab.h 2010-11-16 07:53:59.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/symtab.h 2010-11-16 08:22:05.000000000 +0100
@@ -408,7 +408,10 @@ typedef enum domain_enum_tag
FUNCTIONS_DOMAIN,
/* All defined types */
@ -400,10 +400,10 @@ Index: gdb-7.1.90.20100711/gdb/symtab.h
}
domain_enum;
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/common-block.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/common-block.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/common-block.exp 2010-07-13 00:25:56.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/common-block.exp 2010-11-16 08:22:05.000000000 +0100
@@ -0,0 +1,101 @@
+# Copyright 2008 Free Software Foundation, Inc.
+
@ -506,10 +506,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/common-block.exp
+gdb_test "p ix_x" " = 1 *" "p ix_x in"
+gdb_test "p iy_y" " = 2 *" "p iy_y in"
+gdb_test "p iz_z2" " = 3 *" "p iz_z2 in"
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/common-block.f90
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/common-block.f90
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/common-block.f90 2010-07-13 00:25:56.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/common-block.f90 2010-11-16 08:22:05.000000000 +0100
@@ -0,0 +1,67 @@
+! Copyright 2008 Free Software Foundation, Inc.
+!

View File

@ -40,11 +40,11 @@ Subject: [PATCH 4/4] add gdb-add-index
5 files changed, 57 insertions(+), 1 deletions(-)
create mode 100755 gdb/gdb-add-index
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 6dbb284..8210a2c 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -1018,7 +1018,16 @@ install-only: $(CONFIG_INSTALL) xml-syscall-install
Index: gdb-7.2.50.20101116/gdb/Makefile.in
===================================================================
--- gdb-7.2.50.20101116.orig/gdb/Makefile.in 2010-11-16 08:03:17.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/Makefile.in 2010-11-16 08:47:45.000000000 +0100
@@ -986,7 +986,16 @@ install-only: install-gstack $(CONFIG_IN
$(SHELL) $(srcdir)/../mkinstalldirs \
$(DESTDIR)$(man1dir) ; \
$(INSTALL_DATA) $(srcdir)/gdb.1 \
@ -62,11 +62,11 @@ index 6dbb284..8210a2c 100644
@$(MAKE) DO=install "DODIRS=$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do
.PHONY: install-tui
install-tui:
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 69141e3..457e6b4 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -15045,6 +15045,14 @@ There are currently some limitation on indices. They only work when
Index: gdb-7.2.50.20101116/gdb/doc/gdb.texinfo
===================================================================
--- gdb-7.2.50.20101116.orig/gdb/doc/gdb.texinfo 2010-11-16 08:04:18.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/doc/gdb.texinfo 2010-11-16 08:56:30.000000000 +0100
@@ -15500,6 +15500,14 @@ There are currently some limitation on i
for DWARF debugging information, not stabs. And, they do not
currently work for programs using Ada.
@ -78,14 +78,13 @@ index 69141e3..457e6b4 100644
+$ gdb-add-index symfile
+@end smallexample
+
@node Symbol Errors
@section Errors Reading Symbol Files
diff --git a/gdb/gdb-add-index b/gdb/gdb-add-index
new file mode 100755
index 0000000..c9a03b0
--- /dev/null
+++ b/gdb/gdb-add-index
Index: gdb-7.2.50.20101116/gdb/gdb-add-index
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2.50.20101116/gdb/gdb-add-index 2010-11-16 08:47:45.000000000 +0100
@@ -0,0 +1,30 @@
+#! /bin/sh
+
@ -117,6 +116,3 @@ index 0000000..c9a03b0
+fi
+
+exit 0
--
1.6.2.5

View File

@ -1,50 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-09/msg00273.html
Subject: [patch] .gdb_index: Fix Ada regression
Hi,
on a system with libraries using .gdb_index all the Ada testcases FAIL:
Running ./gdb.ada/print_pc.exp ...
FAIL: gdb.ada/print_pc.exp: start inferior (GDB internal error)
FAIL: gdb.ada/print_pc.exp: p /x $pc
dwarf2read.c:2374: internal-error: map_ada_symtabs called via index method
FAIl is on Fedora 14 snapshot using gcc-debuginfo-4.5.1-3.fc14.x86_64 file:
/usr/lib/debug/lib64/libgcc_s-4.5.1-20100907.so.1.debug
The regressions get fixed on x86_64-fedora14snapshot-linux-gnu by the attached
patch. No regressions on {x86_64,x86_64-m32,i686}-fedora14snapshot-linux-gnu.
During my tests with `set language ada' I could not lookup non-Ada symbols
anyway so I believe the patch is OK but sure it needs an Ada-wise review.
Thanks,
Jan
gdb/
2010-09-14 Jan Kratochvil <jan.kratochvil@redhat.com>
* dwarf2read.c (dw2_map_ada_symtabs): Remove the internal_error.
Update the comment.
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -2369,10 +2369,9 @@ dw2_map_ada_symtabs (struct objfile *objfile,
domain_enum namespace, int wild,
void *data)
{
- /* For now, we don't support Ada, so this function can't be
- reached. */
- internal_error (__FILE__, __LINE__,
- _("map_ada_symtabs called via index method"));
+ /* For now, we don't support Ada. Still the function can be called if the
+ current language is Ada for a non-Ada objfile using GNU index. As Ada
+ does not look for non-Ada symbols this function should just return. */
}
static void

View File

@ -1,96 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-09/msg00434.html
http://sourceware.org/ml/gdb-cvs/2010-09/msg00155.html
### src/gdb/ChangeLog 2010/09/24 14:47:52 1.12202
### src/gdb/ChangeLog 2010/09/24 16:11:44 1.12203
## -1,3 +1,9 @@
+2010-09-24 Tom Tromey <tromey@redhat.com>
+
+ * dwarf2read.c (dw2_expand_symtabs_matching): Add missing
+ MAYBE_SWAPs.
+ (dw2_map_symbol_names): Likewise.
+
2010-09-24 Sami Wagiaalla <swagiaal@redhat.com>
* valops.c (find_oload_champ_namespace_loop): replace incorrect
--- src/gdb/dwarf2read.c 2010/09/22 19:22:44 1.460
+++ src/gdb/dwarf2read.c 2010/09/24 16:11:46 1.461
@@ -2382,10 +2382,12 @@
{
int i;
offset_type iter;
+ struct mapped_index *index;
dw2_setup (objfile);
if (!dwarf2_per_objfile->index_table)
return;
+ index = dwarf2_per_objfile->index_table;
for (i = 0; i < (dwarf2_per_objfile->n_comp_units
+ dwarf2_per_objfile->n_type_comp_units); ++i)
@@ -2411,28 +2413,24 @@
}
}
- for (iter = 0;
- iter < dwarf2_per_objfile->index_table->index_table_slots;
- ++iter)
+ for (iter = 0; iter < index->index_table_slots; ++iter)
{
offset_type idx = 2 * iter;
const char *name;
offset_type *vec, vec_len, vec_idx;
- if (dwarf2_per_objfile->index_table->index_table[idx] == 0
- && dwarf2_per_objfile->index_table->index_table[idx + 1] == 0)
+ if (index->index_table[idx] == 0 && index->index_table[idx + 1] == 0)
continue;
- name = (dwarf2_per_objfile->index_table->constant_pool
- + dwarf2_per_objfile->index_table->index_table[idx]);
+ name = index->constant_pool + MAYBE_SWAP (index->index_table[idx]);
if (! (*name_matcher) (name, data))
continue;
/* The name was matched, now expand corresponding CUs that were
marked. */
- vec = (offset_type *) (dwarf2_per_objfile->index_table->constant_pool
- + dwarf2_per_objfile->index_table->index_table[idx + 1]);
+ vec = (offset_type *) (index->constant_pool
+ + MAYBE_SWAP (index->index_table[idx + 1]));
vec_len = MAYBE_SWAP (vec[0]);
for (vec_idx = 0; vec_idx < vec_len; ++vec_idx)
{
@@ -2476,25 +2474,24 @@
void *data)
{
offset_type iter;
+ struct mapped_index *index;
+
dw2_setup (objfile);
if (!dwarf2_per_objfile->index_table)
return;
+ index = dwarf2_per_objfile->index_table;
- for (iter = 0;
- iter < dwarf2_per_objfile->index_table->index_table_slots;
- ++iter)
+ for (iter = 0; iter < index->index_table_slots; ++iter)
{
offset_type idx = 2 * iter;
const char *name;
offset_type *vec, vec_len, vec_idx;
- if (dwarf2_per_objfile->index_table->index_table[idx] == 0
- && dwarf2_per_objfile->index_table->index_table[idx + 1] == 0)
+ if (index->index_table[idx] == 0 && index->index_table[idx + 1] == 0)
continue;
- name = (dwarf2_per_objfile->index_table->constant_pool
- + dwarf2_per_objfile->index_table->index_table[idx]);
+ name = (index->constant_pool + MAYBE_SWAP (index->index_table[idx]));
(*fun) (name, data);
}

View File

@ -1,689 +0,0 @@
http://sourceware.org/ml/gdb-cvs/2010-07/msg00139.html
### src/gdb/ChangeLog 2010/07/23 21:10:54 1.12013
### src/gdb/ChangeLog 2010/07/23 22:15:13 1.12014
## -1,3 +1,31 @@
+2010-07-23 Tom Tromey <tromey@redhat.com>
+
+ * dwarf2read.c (struct dwarf2_per_objfile) <n_type_comp_units,
+ type_comp_units>: New fields.
+ (dw2_get_cu): New function.
+ (create_cus_from_index): Remove unused argument.
+ (create_signatured_type_hash_from_index): New function.
+ (create_addrmap_from_index): Update.
+ (dwarf2_read_index): Handle version 2.
+ (dw2_find_last_source_symtab, dw2_forget_cached_source_info)
+ (dw2_lookup_symtab, dw2_do_expand_symtabs_matching)
+ (dw2_print_stats, dw2_expand_all_symtabs)
+ (dw2_expand_symtabs_with_filename, dw2_find_symbol_file)
+ (dw2_expand_symtabs_matching, dw2_map_symbol_filenames): Update.
+ (dwarf2_initialize_objfile): Call create_debug_types_hash_table.
+ (allocate_signatured_type_hash_table): New function.
+ (add_signatured_type_cu_to_list): Likewise.
+ (create_debug_types_hash_table): Use them. Set type_comp_units.
+ (read_signatured_type): Ensure section data is available.
+ (add_address_entry): Don't record empty ranges.
+ (struct signatured_type_index_data): New.
+ (write_one_signatured_type): New function.
+ (write_psymtabs_to_index): Write type CUs.
+ (save_gdb_index_command): Update comment.
+ (process_type_comp_unit): Move inititalization of
+ from_debug_types...
+ (create_debug_types_hash_table): ... here.
+
2010-07-23 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb_gcore.sh (tmpfile): Remove the variable, its initialization,
Index: gdb-7.2/gdb/dwarf2read.c
===================================================================
--- gdb-7.2.orig/gdb/dwarf2read.c 2010-10-12 18:10:47.000000000 +0200
+++ gdb-7.2/gdb/dwarf2read.c 2010-10-12 18:11:16.000000000 +0200
@@ -184,6 +184,12 @@ struct dwarf2_per_objfile
/* The number of compilation units in ALL_COMP_UNITS. */
int n_comp_units;
+ /* The number of .debug_types-related CUs. */
+ int n_type_comp_units;
+
+ /* The .debug_types-related CUs. */
+ struct dwarf2_per_cu_data **type_comp_units;
+
/* A chain of compilation units that are currently read in, so that
they can be freed later. */
struct dwarf2_per_cu_data *read_in_chain;
@@ -1226,6 +1232,8 @@ static struct type *set_die_type (struct
static void create_all_comp_units (struct objfile *);
+static int create_debug_types_hash_table (struct objfile *objfile);
+
static void load_full_comp_unit (struct dwarf2_per_cu_data *,
struct objfile *);
@@ -1269,6 +1277,8 @@ static void init_cu_die_reader (struct d
static const char *dwarf2_physname (char *name, struct die_info *die,
struct dwarf2_cu *cu);
+static htab_t allocate_signatured_type_hash_table (struct objfile *objfile);
+
#if WORDS_BIGENDIAN
/* Convert VALUE between big- and little-endian. */
@@ -1646,6 +1656,18 @@ dw2_instantiate_symtab (struct objfile *
return per_cu->v.quick->symtab;
}
+/* Return the CU given its index. */
+static struct dwarf2_per_cu_data *
+dw2_get_cu (int index)
+{
+ if (index >= dwarf2_per_objfile->n_comp_units)
+ {
+ index -= dwarf2_per_objfile->n_comp_units;
+ return dwarf2_per_objfile->type_comp_units[index];
+ }
+ return dwarf2_per_objfile->all_comp_units[index];
+}
+
/* A helper function that knows how to read a 64-bit value in a way
that doesn't make gdb die. Returns 1 if the conversion went ok, 0
otherwise. */
@@ -1672,11 +1694,10 @@ extract_cu_value (const char *bytes, ULO
the CU objects for this objfile. Return 0 if something went wrong,
1 if everything went ok. */
static int
-create_cus_from_index (struct objfile *objfile, struct mapped_index *index,
- const gdb_byte *cu_list, offset_type cu_list_elements)
+create_cus_from_index (struct objfile *objfile, const gdb_byte *cu_list,
+ offset_type cu_list_elements)
{
offset_type i;
- const char *entry;
dwarf2_per_objfile->n_comp_units = cu_list_elements / 2;
dwarf2_per_objfile->all_comp_units
@@ -1707,6 +1728,58 @@ create_cus_from_index (struct objfile *o
return 1;
}
+/* Create the signatured type hash table from the index. */
+static int
+create_signatured_type_hash_from_index (struct objfile *objfile,
+ const gdb_byte *bytes,
+ offset_type elements)
+{
+ offset_type i;
+ htab_t type_hash;
+
+ dwarf2_per_objfile->n_type_comp_units = elements / 3;
+ dwarf2_per_objfile->type_comp_units
+ = obstack_alloc (&objfile->objfile_obstack,
+ dwarf2_per_objfile->n_type_comp_units
+ * sizeof (struct dwarf2_per_cu_data *));
+
+ type_hash = allocate_signatured_type_hash_table (objfile);
+
+ for (i = 0; i < elements; i += 3)
+ {
+ struct signatured_type *type_sig;
+ ULONGEST offset, type_offset, signature;
+ void **slot;
+
+ if (!extract_cu_value (bytes, &offset)
+ || !extract_cu_value (bytes + 8, &type_offset))
+ return 0;
+ signature = extract_unsigned_integer (bytes + 16, 8, BFD_ENDIAN_LITTLE);
+ bytes += 3 * 8;
+
+ type_sig = OBSTACK_ZALLOC (&objfile->objfile_obstack,
+ struct signatured_type);
+ type_sig->signature = signature;
+ type_sig->offset = offset;
+ type_sig->type_offset = type_offset;
+ type_sig->per_cu.from_debug_types = 1;
+ type_sig->per_cu.offset = offset;
+ type_sig->per_cu.objfile = objfile;
+ type_sig->per_cu.v.quick
+ = OBSTACK_ZALLOC (&objfile->objfile_obstack,
+ struct dwarf2_per_cu_quick_data);
+
+ slot = htab_find_slot (type_hash, type_sig, INSERT);
+ *slot = type_sig;
+
+ dwarf2_per_objfile->type_comp_units[i / 3] = &type_sig->per_cu;
+ }
+
+ dwarf2_per_objfile->signatured_types = type_hash;
+
+ return 1;
+}
+
/* Read the address map data from the mapped index, and use it to
populate the objfile's psymtabs_addrmap. */
static void
@@ -1738,7 +1811,7 @@ create_addrmap_from_index (struct objfil
iter += 4;
addrmap_set_empty (mutable_map, lo + baseaddr, hi + baseaddr - 1,
- dwarf2_per_objfile->all_comp_units[cu_index]);
+ dw2_get_cu (cu_index));
}
objfile->psymtabs_addrmap = addrmap_create_fixed (mutable_map,
@@ -1805,8 +1878,9 @@ dwarf2_read_index (struct objfile *objfi
char *addr;
struct mapped_index *map;
offset_type *metadata;
- const gdb_byte *cu_list;
- offset_type cu_list_elements;
+ const gdb_byte *cu_list, *types_list;
+ offset_type version, cu_list_elements, types_list_elements;
+ int i;
if (dwarf2_per_objfile->gdb_index.asection == NULL
|| dwarf2_per_objfile->gdb_index.size == 0)
@@ -1822,26 +1896,58 @@ dwarf2_read_index (struct objfile *objfi
addr = dwarf2_per_objfile->gdb_index.buffer;
/* Version check. */
- if (MAYBE_SWAP (*(offset_type *) addr) != 1)
+ version = MAYBE_SWAP (*(offset_type *) addr);
+ if (version == 1)
+ {
+ /* Index version 1 neglected to account for .debug_types. So,
+ if we see .debug_types, we cannot use this index. */
+ if (dwarf2_per_objfile->types.asection != NULL
+ && dwarf2_per_objfile->types.size != 0)
+ return 0;
+ }
+ else if (version != 2)
return 0;
map = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct mapped_index);
map->total_size = dwarf2_per_objfile->gdb_index.size;
metadata = (offset_type *) (addr + sizeof (offset_type));
- cu_list = addr + MAYBE_SWAP (metadata[0]);
- cu_list_elements = ((MAYBE_SWAP (metadata[1]) - MAYBE_SWAP (metadata[0]))
+
+ i = 0;
+ cu_list = addr + MAYBE_SWAP (metadata[i]);
+ cu_list_elements = ((MAYBE_SWAP (metadata[i + 1]) - MAYBE_SWAP (metadata[i]))
/ 8);
- map->address_table = addr + MAYBE_SWAP (metadata[1]);
- map->address_table_size = (MAYBE_SWAP (metadata[2])
- - MAYBE_SWAP (metadata[1]));
- map->index_table = (offset_type *) (addr + MAYBE_SWAP (metadata[2]));
- map->index_table_slots = ((MAYBE_SWAP (metadata[3])
- - MAYBE_SWAP (metadata[2]))
+ ++i;
+
+ if (version == 2)
+ {
+ types_list = addr + MAYBE_SWAP (metadata[i]);
+ types_list_elements = ((MAYBE_SWAP (metadata[i + 1])
+ - MAYBE_SWAP (metadata[i]))
+ / 8);
+ ++i;
+ }
+
+ map->address_table = addr + MAYBE_SWAP (metadata[i]);
+ map->address_table_size = (MAYBE_SWAP (metadata[i + 1])
+ - MAYBE_SWAP (metadata[i]));
+ ++i;
+
+ map->index_table = (offset_type *) (addr + MAYBE_SWAP (metadata[i]));
+ map->index_table_slots = ((MAYBE_SWAP (metadata[i + 1])
+ - MAYBE_SWAP (metadata[i]))
/ (2 * sizeof (offset_type)));
- map->constant_pool = addr + MAYBE_SWAP (metadata[3]);
+ ++i;
- if (!create_cus_from_index (objfile, map, cu_list, cu_list_elements))
+ map->constant_pool = addr + MAYBE_SWAP (metadata[i]);
+
+ if (!create_cus_from_index (objfile, cu_list, cu_list_elements))
+ return 0;
+
+ if (version == 2
+ && types_list_elements
+ && !create_signatured_type_hash_from_index (objfile, types_list,
+ types_list_elements))
return 0;
create_addrmap_from_index (objfile, map);
@@ -1968,8 +2074,7 @@ dw2_find_last_source_symtab (struct objf
int index;
dw2_setup (objfile);
index = dwarf2_per_objfile->n_comp_units - 1;
- return dw2_instantiate_symtab (objfile,
- dwarf2_per_objfile->all_comp_units[index]);
+ return dw2_instantiate_symtab (objfile, dw2_get_cu (index));
}
static void
@@ -1978,9 +2083,10 @@ dw2_forget_cached_source_info (struct ob
int i;
dw2_setup (objfile);
- for (i = 0; i < dwarf2_per_objfile->n_comp_units; ++i)
+ for (i = 0; i < (dwarf2_per_objfile->n_comp_units
+ + dwarf2_per_objfile->n_type_comp_units); ++i)
{
- struct dwarf2_per_cu_data *cu = dwarf2_per_objfile->all_comp_units[i];
+ struct dwarf2_per_cu_data *cu = dw2_get_cu (i);
if (cu->v.quick->full_names)
{
@@ -2002,10 +2108,11 @@ dw2_lookup_symtab (struct objfile *objfi
struct dwarf2_per_cu_data *base_cu = NULL;
dw2_setup (objfile);
- for (i = 0; i < dwarf2_per_objfile->n_comp_units; ++i)
+ for (i = 0; i < (dwarf2_per_objfile->n_comp_units
+ + dwarf2_per_objfile->n_type_comp_units); ++i)
{
int j;
- struct dwarf2_per_cu_data *cu = dwarf2_per_objfile->all_comp_units[i];
+ struct dwarf2_per_cu_data *cu = dw2_get_cu (i);
if (cu->v.quick->symtab)
continue;
@@ -2097,8 +2204,8 @@ dw2_do_expand_symtabs_matching (struct o
for (i = 0; i < len; ++i)
{
offset_type cu_index = MAYBE_SWAP (vec[i + 1]);
- struct dwarf2_per_cu_data *cu;
- cu = dwarf2_per_objfile->all_comp_units[cu_index];
+ struct dwarf2_per_cu_data *cu = dw2_get_cu (cu_index);
+
dw2_instantiate_symtab (objfile, cu);
}
}
@@ -2120,9 +2227,10 @@ dw2_print_stats (struct objfile *objfile
dw2_setup (objfile);
count = 0;
- for (i = 0; i < dwarf2_per_objfile->n_comp_units; ++i)
+ for (i = 0; i < (dwarf2_per_objfile->n_comp_units
+ + dwarf2_per_objfile->n_type_comp_units); ++i)
{
- struct dwarf2_per_cu_data *cu = dwarf2_per_objfile->all_comp_units[i];
+ struct dwarf2_per_cu_data *cu = dw2_get_cu (i);
if (!cu->v.quick->symtab)
++count;
@@ -2156,9 +2264,11 @@ dw2_expand_all_symtabs (struct objfile *
int i;
dw2_setup (objfile);
- for (i = 0; i < dwarf2_per_objfile->n_comp_units; ++i)
+
+ for (i = 0; i < (dwarf2_per_objfile->n_comp_units
+ + dwarf2_per_objfile->n_type_comp_units); ++i)
{
- struct dwarf2_per_cu_data *cu = dwarf2_per_objfile->all_comp_units[i];
+ struct dwarf2_per_cu_data *cu = dw2_get_cu (i);
dw2_instantiate_symtab (objfile, cu);
}
@@ -2171,10 +2281,11 @@ dw2_expand_symtabs_with_filename (struct
int i;
dw2_setup (objfile);
- for (i = 0; i < dwarf2_per_objfile->n_comp_units; ++i)
+ for (i = 0; i < (dwarf2_per_objfile->n_comp_units
+ + dwarf2_per_objfile->n_type_comp_units); ++i)
{
int j;
- struct dwarf2_per_cu_data *cu = dwarf2_per_objfile->all_comp_units[i];
+ struct dwarf2_per_cu_data *cu = dw2_get_cu (i);
if (cu->v.quick->symtab)
continue;
@@ -2215,7 +2326,7 @@ dw2_find_symbol_file (struct objfile *ob
should be rewritten so that it doesn't require a custom hook. It
could just use the ordinary symbol tables. */
/* vec[0] is the length, which must always be >0. */
- cu = dwarf2_per_objfile->all_comp_units[MAYBE_SWAP (vec[1])];
+ cu = dw2_get_cu (MAYBE_SWAP (vec[1]));
dw2_require_line_header (objfile, cu);
if (!cu->v.quick->lines)
@@ -2253,10 +2364,11 @@ dw2_expand_symtabs_matching (struct objf
if (!dwarf2_per_objfile->index_table)
return;
- for (i = 0; i < dwarf2_per_objfile->n_comp_units; ++i)
+ for (i = 0; i < (dwarf2_per_objfile->n_comp_units
+ + dwarf2_per_objfile->n_type_comp_units); ++i)
{
int j;
- struct dwarf2_per_cu_data *cu = dwarf2_per_objfile->all_comp_units[i];
+ struct dwarf2_per_cu_data *cu = dw2_get_cu (i);
cu->v.quick->mark = 0;
if (cu->v.quick->symtab)
@@ -2301,8 +2413,9 @@ dw2_expand_symtabs_matching (struct objf
vec_len = MAYBE_SWAP (vec[0]);
for (vec_idx = 0; vec_idx < vec_len; ++vec_idx)
{
- struct dwarf2_per_cu_data *cu
- = dwarf2_per_objfile->all_comp_units[MAYBE_SWAP (vec[vec_idx + 1])];
+ struct dwarf2_per_cu_data *cu;
+
+ cu = dw2_get_cu (MAYBE_SWAP (vec[vec_idx + 1]));
if (cu->v.quick->mark)
dw2_instantiate_symtab (objfile, cu);
}
@@ -2372,10 +2485,11 @@ dw2_map_symbol_filenames (struct objfile
int i;
dw2_setup (objfile);
- for (i = 0; i < dwarf2_per_objfile->n_comp_units; ++i)
+ for (i = 0; i < (dwarf2_per_objfile->n_comp_units
+ + dwarf2_per_objfile->n_type_comp_units); ++i)
{
int j;
- struct dwarf2_per_cu_data *cu = dwarf2_per_objfile->all_comp_units[i];
+ struct dwarf2_per_cu_data *cu = dw2_get_cu (i);
if (cu->v.quick->symtab)
continue;
@@ -2436,10 +2550,12 @@ dwarf2_initialize_objfile (struct objfil
dwarf2_per_objfile->using_index = 1;
create_all_comp_units (objfile);
+ create_debug_types_hash_table (objfile);
- for (i = 0; i < dwarf2_per_objfile->n_comp_units; ++i)
+ for (i = 0; i < (dwarf2_per_objfile->n_comp_units
+ + dwarf2_per_objfile->n_type_comp_units); ++i)
{
- struct dwarf2_per_cu_data *cu = dwarf2_per_objfile->all_comp_units[i];
+ struct dwarf2_per_cu_data *cu = dw2_get_cu (i);
cu->v.quick = OBSTACK_ZALLOC (&objfile->objfile_obstack,
struct dwarf2_per_cu_quick_data);
@@ -2653,6 +2769,34 @@ eq_type_signature (const void *item_lhs,
return lhs->signature == rhs->signature;
}
+/* Allocate a hash table for signatured types. */
+
+static htab_t
+allocate_signatured_type_hash_table (struct objfile *objfile)
+{
+ return htab_create_alloc_ex (41,
+ hash_type_signature,
+ eq_type_signature,
+ NULL,
+ &objfile->objfile_obstack,
+ hashtab_obstack_allocate,
+ dummy_obstack_deallocate);
+}
+
+/* A helper function to add a signatured type CU to a list. */
+
+static int
+add_signatured_type_cu_to_list (void **slot, void *datum)
+{
+ struct signatured_type *sigt = *slot;
+ struct dwarf2_per_cu_data ***datap = datum;
+
+ **datap = &sigt->per_cu;
+ ++*datap;
+
+ return 1;
+}
+
/* Create the hash table of all entries in the .debug_types section.
The result is zero if there is an error (e.g. missing .debug_types section),
otherwise non-zero. */
@@ -2662,6 +2806,7 @@ create_debug_types_hash_table (struct ob
{
gdb_byte *info_ptr;
htab_t types_htab;
+ struct dwarf2_per_cu_data **iter;
dwarf2_read_section (objfile, &dwarf2_per_objfile->types);
info_ptr = dwarf2_per_objfile->types.buffer;
@@ -2672,13 +2817,7 @@ create_debug_types_hash_table (struct ob
return 0;
}
- types_htab = htab_create_alloc_ex (41,
- hash_type_signature,
- eq_type_signature,
- NULL,
- &objfile->objfile_obstack,
- hashtab_obstack_allocate,
- dummy_obstack_deallocate);
+ types_htab = allocate_signatured_type_hash_table (objfile);
if (dwarf2_die_debug)
fprintf_unfiltered (gdb_stdlog, "Signatured types:\n");
@@ -2726,6 +2865,7 @@ create_debug_types_hash_table (struct ob
type_sig->offset = offset;
type_sig->type_offset = type_offset;
type_sig->per_cu.objfile = objfile;
+ type_sig->per_cu.from_debug_types = 1;
slot = htab_find_slot (types_htab, type_sig, INSERT);
gdb_assert (slot != NULL);
@@ -2740,6 +2880,16 @@ create_debug_types_hash_table (struct ob
dwarf2_per_objfile->signatured_types = types_htab;
+ dwarf2_per_objfile->n_type_comp_units = htab_elements (types_htab);
+ dwarf2_per_objfile->type_comp_units
+ = obstack_alloc (&objfile->objfile_obstack,
+ dwarf2_per_objfile->n_type_comp_units
+ * sizeof (struct dwarf2_per_cu_data *));
+ iter = &dwarf2_per_objfile->type_comp_units[0];
+ htab_traverse_noresize (types_htab, add_signatured_type_cu_to_list, &iter);
+ gdb_assert (iter - &dwarf2_per_objfile->type_comp_units[0]
+ == dwarf2_per_objfile->n_type_comp_units);
+
return 1;
}
@@ -3008,7 +3158,6 @@ process_type_comp_unit (void **slot, voi
struct dwarf2_per_cu_data *this_cu;
this_cu = &entry->per_cu;
- this_cu->from_debug_types = 1;
gdb_assert (dwarf2_per_objfile->types.readin);
process_psymtab_comp_unit (objfile, this_cu,
@@ -12483,13 +12632,16 @@ static void
read_signatured_type (struct objfile *objfile,
struct signatured_type *type_sig)
{
- gdb_byte *types_ptr = dwarf2_per_objfile->types.buffer + type_sig->offset;
+ gdb_byte *types_ptr;
struct die_reader_specs reader_specs;
struct dwarf2_cu *cu;
ULONGEST signature;
struct cleanup *back_to, *free_cu_cleanup;
struct attribute *attr;
+ dwarf2_read_section (objfile, &dwarf2_per_objfile->types);
+ types_ptr = dwarf2_per_objfile->types.buffer + type_sig->offset;
+
gdb_assert (type_sig->per_cu.cu == NULL);
cu = xmalloc (sizeof (struct dwarf2_cu));
@@ -14402,6 +14554,10 @@ add_address_entry (struct objfile *objfi
char addr[8];
CORE_ADDR baseaddr;
+ /* Don't bother recording empty ranges. */
+ if (pst->textlow == pst->texthigh)
+ return;
+
baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
store_unsigned_integer (addr, 8, BFD_ENDIAN_LITTLE, pst->textlow - baseaddr);
@@ -14447,13 +14603,53 @@ unlink_if_set (void *p)
unlink (*filename);
}
+/* A helper struct used when iterating over debug_types. */
+struct signatured_type_index_data
+{
+ struct objfile *objfile;
+ struct mapped_symtab *symtab;
+ struct obstack *types_list;
+ int cu_index;
+};
+
+/* A helper function that writes a single signatured_type to an
+ obstack. */
+static int
+write_one_signatured_type (void **slot, void *d)
+{
+ struct signatured_type_index_data *info = d;
+ struct signatured_type *entry = (struct signatured_type *) *slot;
+ struct dwarf2_per_cu_data *cu = &entry->per_cu;
+ struct partial_symtab *psymtab = cu->v.psymtab;
+ gdb_byte val[8];
+
+ write_psymbols (info->symtab,
+ info->objfile->global_psymbols.list + psymtab->globals_offset,
+ psymtab->n_global_syms, info->cu_index);
+ write_psymbols (info->symtab,
+ info->objfile->static_psymbols.list + psymtab->statics_offset,
+ psymtab->n_static_syms, info->cu_index);
+
+ store_unsigned_integer (val, 8, BFD_ENDIAN_LITTLE, entry->offset);
+ obstack_grow (info->types_list, val, 8);
+ store_unsigned_integer (val, 8, BFD_ENDIAN_LITTLE, entry->type_offset);
+ obstack_grow (info->types_list, val, 8);
+ store_unsigned_integer (val, 8, BFD_ENDIAN_LITTLE, entry->signature);
+ obstack_grow (info->types_list, val, 8);
+
+ ++info->cu_index;
+
+ return 1;
+}
+
/* Create an index file for OBJFILE in the directory DIR. */
static void
write_psymtabs_to_index (struct objfile *objfile, const char *dir)
{
struct cleanup *cleanup;
char *filename, *cleanup_filename;
- struct obstack contents, addr_obstack, constant_pool, symtab_obstack, cu_list;
+ struct obstack contents, addr_obstack, constant_pool, symtab_obstack;
+ struct obstack cu_list, types_cu_list;
int i;
FILE *out_file;
struct mapped_symtab *symtab;
@@ -14489,6 +14685,12 @@ write_psymtabs_to_index (struct objfile
obstack_init (&cu_list);
make_cleanup_obstack_free (&cu_list);
+ obstack_init (&types_cu_list);
+ make_cleanup_obstack_free (&types_cu_list);
+
+ /* The list is already sorted, so we don't need to do additional
+ work here. Also, the debug_types entries do not appear in
+ all_comp_units, but only in their own hash table. */
for (i = 0; i < dwarf2_per_objfile->n_comp_units; ++i)
{
struct dwarf2_per_cu_data *cu = dwarf2_per_objfile->all_comp_units[i];
@@ -14510,6 +14712,19 @@ write_psymtabs_to_index (struct objfile
obstack_grow (&cu_list, val, 8);
}
+ /* Write out the .debug_type entries, if any. */
+ if (dwarf2_per_objfile->signatured_types)
+ {
+ struct signatured_type_index_data sig_data;
+
+ sig_data.objfile = objfile;
+ sig_data.symtab = symtab;
+ sig_data.types_list = &types_cu_list;
+ sig_data.cu_index = dwarf2_per_objfile->n_comp_units;
+ htab_traverse_noresize (dwarf2_per_objfile->signatured_types,
+ write_one_signatured_type, &sig_data);
+ }
+
obstack_init (&constant_pool);
make_cleanup_obstack_free (&constant_pool);
obstack_init (&symtab_obstack);
@@ -14518,11 +14733,11 @@ write_psymtabs_to_index (struct objfile
obstack_init (&contents);
make_cleanup_obstack_free (&contents);
- size_of_contents = 5 * sizeof (offset_type);
+ size_of_contents = 6 * sizeof (offset_type);
total_len = size_of_contents;
/* The version number. */
- val = MAYBE_SWAP (1);
+ val = MAYBE_SWAP (2);
obstack_grow (&contents, &val, sizeof (val));
/* The offset of the CU list from the start of the file. */
@@ -14530,6 +14745,11 @@ write_psymtabs_to_index (struct objfile
obstack_grow (&contents, &val, sizeof (val));
total_len += obstack_object_size (&cu_list);
+ /* The offset of the types CU list from the start of the file. */
+ val = MAYBE_SWAP (total_len);
+ obstack_grow (&contents, &val, sizeof (val));
+ total_len += obstack_object_size (&types_cu_list);
+
/* The offset of the address table from the start of the file. */
val = MAYBE_SWAP (total_len);
obstack_grow (&contents, &val, sizeof (val));
@@ -14549,6 +14769,7 @@ write_psymtabs_to_index (struct objfile
write_obstack (out_file, &contents);
write_obstack (out_file, &cu_list);
+ write_obstack (out_file, &types_cu_list);
write_obstack (out_file, &addr_obstack);
write_obstack (out_file, &symtab_obstack);
write_obstack (out_file, &constant_pool);
@@ -14573,18 +14794,33 @@ write_psymtabs_to_index (struct objfile
1. The file header. This is a sequence of values, of offset_type
unless otherwise noted:
- [0] The version number. Currently 1.
+ [0] The version number. Currently 1 or 2. The differences are
+ noted below. Version 1 did not account for .debug_types sections;
+ the presence of a .debug_types section invalidates any version 1
+ index that may exist.
[1] The offset, from the start of the file, of the CU list.
+ [1.5] In version 2, the offset, from the start of the file, of the
+ types CU list. This offset does not appear in version 1. Note
+ that this can be empty, in which case this offset will be equal to
+ the next offset.
[2] The offset, from the start of the file, of the address section.
[3] The offset, from the start of the file, of the symbol table.
[4] The offset, from the start of the file, of the constant pool.
2. The CU list. This is a sequence of pairs of 64-bit
- little-endian values. The first element in each pair is the offset
- of a CU in the .debug_info section. The second element in each
- pair is the length of that CU. References to a CU elsewhere in the
- map are done using a CU index, which is just the 0-based index into
- this table.
+ little-endian values, sorted by the CU offset. The first element
+ in each pair is the offset of a CU in the .debug_info section. The
+ second element in each pair is the length of that CU. References
+ to a CU elsewhere in the map are done using a CU index, which is
+ just the 0-based index into this table. Note that if there are
+ type CUs, then conceptually CUs and type CUs form a single list for
+ the purposes of CU indices.
+
+ 2.5 The types CU list. This does not appear in a version 1 index.
+ This is a sequence of triplets of 64-bit little-endian values. In
+ a triplet, the first value is the CU offset, the second value is
+ the type offset in the CU, and the third value is the type
+ signature. The types CU list is not sorted.
3. The address section. The address section consists of a sequence
of address entries. Each address entry has three elements.

View File

@ -1,278 +0,0 @@
FYI: index pre-expansion fix
http://sourceware.org/ml/gdb-patches/2010-09/msg00452.html
http://sourceware.org/ml/gdb-cvs/2010-09/msg00165.html
### src/gdb/ChangeLog 2010/09/27 17:41:35 1.12206
### src/gdb/ChangeLog 2010/09/27 18:42:35 1.12207
## -1,5 +1,17 @@
2010-09-27 Tom Tromey <tromey@redhat.com>
+ * dwarf2read.c (dwarf2_read_index): Only allow version 3.
+ (write_psymbols): Add 'psyms_seen' and 'is_static' arguments.
+ Only emit a given psymbol once.
+ (struct signatured_type_index_data) <psyms_seen>: New field.
+ (write_one_signatured_type): Update.
+ (cleanup_htab): New function.
+ (write_psymtabs_to_index): Update. Create psyms_seen hash. Bump
+ version to 3.
+ (save_gdb_index_command): Update index documentation.
+
+2010-09-27 Tom Tromey <tromey@redhat.com>
+
* bcache.c (expand_hash_table): Use hash_function, not hash.
2010-09-27 Tom Tromey <tromey@redhat.com>
Index: gdb-7.2/gdb/dwarf2read.c
===================================================================
--- gdb-7.2.orig/gdb/dwarf2read.c 2010-10-12 18:11:27.000000000 +0200
+++ gdb-7.2/gdb/dwarf2read.c 2010-10-12 18:12:03.000000000 +0200
@@ -1897,15 +1897,10 @@ dwarf2_read_index (struct objfile *objfi
addr = dwarf2_per_objfile->gdb_index.buffer;
/* Version check. */
version = MAYBE_SWAP (*(offset_type *) addr);
- if (version == 1)
- {
- /* Index version 1 neglected to account for .debug_types. So,
- if we see .debug_types, we cannot use this index. */
- if (dwarf2_per_objfile->types.asection != NULL
- && dwarf2_per_objfile->types.size != 0)
- return 0;
- }
- else if (version != 2)
+ /* Versions earlier than 3 emitted every copy of a psymbol. This
+ causes the index to behave very poorly for certain requests. So,
+ it seems better to just ignore such indices. */
+ if (version < 3)
return 0;
map = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct mapped_index);
@@ -1919,14 +1914,11 @@ dwarf2_read_index (struct objfile *objfi
/ 8);
++i;
- if (version == 2)
- {
- types_list = addr + MAYBE_SWAP (metadata[i]);
- types_list_elements = ((MAYBE_SWAP (metadata[i + 1])
- - MAYBE_SWAP (metadata[i]))
- / 8);
- ++i;
- }
+ types_list = addr + MAYBE_SWAP (metadata[i]);
+ types_list_elements = ((MAYBE_SWAP (metadata[i + 1])
+ - MAYBE_SWAP (metadata[i]))
+ / 8);
+ ++i;
map->address_table = addr + MAYBE_SWAP (metadata[i]);
map->address_table_size = (MAYBE_SWAP (metadata[i + 1])
@@ -1944,8 +1936,7 @@ dwarf2_read_index (struct objfile *objfi
if (!create_cus_from_index (objfile, cu_list, cu_list_elements))
return 0;
- if (version == 2
- && types_list_elements
+ if (types_list_elements
&& !create_signatured_type_hash_from_index (objfile, types_list,
types_list_elements))
return 0;
@@ -14568,15 +14559,38 @@ add_address_entry (struct objfile *objfi
/* Add a list of partial symbols to SYMTAB. */
static void
write_psymbols (struct mapped_symtab *symtab,
+ htab_t psyms_seen,
struct partial_symbol **psymp,
int count,
- offset_type cu_index)
+ offset_type cu_index,
+ int is_static)
{
for (; count-- > 0; ++psymp)
{
+ void **slot, *lookup;
+
if (SYMBOL_LANGUAGE (*psymp) == language_ada)
error (_("Ada is not currently supported by the index"));
- add_index_entry (symtab, SYMBOL_NATURAL_NAME (*psymp), cu_index);
+
+ /* We only want to add a given psymbol once. However, we also
+ want to account for whether it is global or static. So, we
+ may add it twice, using slightly different values. */
+ if (is_static)
+ {
+ uintptr_t val = 1 | (uintptr_t) *psymp;
+
+ lookup = (void *) val;
+ }
+ else
+ lookup = *psymp;
+
+ /* Only add a given psymbol once. */
+ slot = htab_find_slot (psyms_seen, lookup, INSERT);
+ if (!*slot)
+ {
+ *slot = lookup;
+ add_index_entry (symtab, SYMBOL_NATURAL_NAME (*psymp), cu_index);
+ }
}
}
@@ -14606,6 +14620,7 @@ struct signatured_type_index_data
struct objfile *objfile;
struct mapped_symtab *symtab;
struct obstack *types_list;
+ htab_t psyms_seen;
int cu_index;
};
@@ -14621,11 +14636,15 @@ write_one_signatured_type (void **slot,
gdb_byte val[8];
write_psymbols (info->symtab,
+ info->psyms_seen,
info->objfile->global_psymbols.list + psymtab->globals_offset,
- psymtab->n_global_syms, info->cu_index);
+ psymtab->n_global_syms, info->cu_index,
+ 0);
write_psymbols (info->symtab,
+ info->psyms_seen,
info->objfile->static_psymbols.list + psymtab->statics_offset,
- psymtab->n_static_syms, info->cu_index);
+ psymtab->n_static_syms, info->cu_index,
+ 1);
store_unsigned_integer (val, 8, BFD_ENDIAN_LITTLE, entry->offset);
obstack_grow (info->types_list, val, 8);
@@ -14639,6 +14658,14 @@ write_one_signatured_type (void **slot,
return 1;
}
+/* A cleanup function for an htab_t. */
+
+static void
+cleanup_htab (void *arg)
+{
+ htab_delete (arg);
+}
+
/* Create an index file for OBJFILE in the directory DIR. */
static void
write_psymtabs_to_index (struct objfile *objfile, const char *dir)
@@ -14653,6 +14680,7 @@ write_psymtabs_to_index (struct objfile
offset_type val, size_of_contents, total_len;
struct stat st;
char buf[8];
+ htab_t psyms_seen;
if (!objfile->psymtabs)
return;
@@ -14685,6 +14713,10 @@ write_psymtabs_to_index (struct objfile
obstack_init (&types_cu_list);
make_cleanup_obstack_free (&types_cu_list);
+ psyms_seen = htab_create_alloc (100, htab_hash_pointer, htab_eq_pointer,
+ NULL, xcalloc, xfree);
+ make_cleanup (cleanup_htab, psyms_seen);
+
/* The list is already sorted, so we don't need to do additional
work here. Also, the debug_types entries do not appear in
all_comp_units, but only in their own hash table. */
@@ -14695,11 +14727,15 @@ write_psymtabs_to_index (struct objfile
gdb_byte val[8];
write_psymbols (symtab,
+ psyms_seen,
objfile->global_psymbols.list + psymtab->globals_offset,
- psymtab->n_global_syms, i);
+ psymtab->n_global_syms, i,
+ 0);
write_psymbols (symtab,
+ psyms_seen,
objfile->static_psymbols.list + psymtab->statics_offset,
- psymtab->n_static_syms, i);
+ psymtab->n_static_syms, i,
+ 1);
add_address_entry (objfile, &addr_obstack, psymtab, i);
@@ -14717,6 +14753,7 @@ write_psymtabs_to_index (struct objfile
sig_data.objfile = objfile;
sig_data.symtab = symtab;
sig_data.types_list = &types_cu_list;
+ sig_data.psyms_seen = psyms_seen;
sig_data.cu_index = dwarf2_per_objfile->n_comp_units;
htab_traverse_noresize (dwarf2_per_objfile->signatured_types,
write_one_signatured_type, &sig_data);
@@ -14734,7 +14771,7 @@ write_psymtabs_to_index (struct objfile
total_len = size_of_contents;
/* The version number. */
- val = MAYBE_SWAP (2);
+ val = MAYBE_SWAP (3);
obstack_grow (&contents, &val, sizeof (val));
/* The offset of the CU list from the start of the file. */
@@ -14791,18 +14828,16 @@ write_psymtabs_to_index (struct objfile
1. The file header. This is a sequence of values, of offset_type
unless otherwise noted:
- [0] The version number. Currently 1 or 2. The differences are
- noted below. Version 1 did not account for .debug_types sections;
- the presence of a .debug_types section invalidates any version 1
- index that may exist.
+
+ [0] The version number, currently 3. Versions 1 and 2 are
+ obsolete.
[1] The offset, from the start of the file, of the CU list.
- [1.5] In version 2, the offset, from the start of the file, of the
- types CU list. This offset does not appear in version 1. Note
- that this can be empty, in which case this offset will be equal to
- the next offset.
- [2] The offset, from the start of the file, of the address section.
- [3] The offset, from the start of the file, of the symbol table.
- [4] The offset, from the start of the file, of the constant pool.
+ [2] The offset, from the start of the file, of the types CU list.
+ Note that this section can be empty, in which case this offset will
+ be equal to the next offset.
+ [3] The offset, from the start of the file, of the address section.
+ [4] The offset, from the start of the file, of the symbol table.
+ [5] The offset, from the start of the file, of the constant pool.
2. The CU list. This is a sequence of pairs of 64-bit
little-endian values, sorted by the CU offset. The first element
@@ -14813,19 +14848,19 @@ write_psymtabs_to_index (struct objfile
type CUs, then conceptually CUs and type CUs form a single list for
the purposes of CU indices.
- 2.5 The types CU list. This does not appear in a version 1 index.
- This is a sequence of triplets of 64-bit little-endian values. In
- a triplet, the first value is the CU offset, the second value is
- the type offset in the CU, and the third value is the type
- signature. The types CU list is not sorted.
+ 3. The types CU list. This is a sequence of triplets of 64-bit
+ little-endian values. In a triplet, the first value is the CU
+ offset, the second value is the type offset in the CU, and the
+ third value is the type signature. The types CU list is not
+ sorted.
- 3. The address section. The address section consists of a sequence
+ 4. The address section. The address section consists of a sequence
of address entries. Each address entry has three elements.
[0] The low address. This is a 64-bit little-endian value.
[1] The high address. This is a 64-bit little-endian value.
[2] The CU index. This is an offset_type value.
- 4. The symbol table. This is a hash table. The size of the hash
+ 5. The symbol table. This is a hash table. The size of the hash
table is always a power of 2. The initial hash and the step are
currently defined by the `find_slot' function.
@@ -14847,7 +14882,7 @@ write_psymtabs_to_index (struct objfile
element in the hash table is used to indicate which CUs define the
symbol.
- 5. The constant pool. This is simply a bunch of bytes. It is
+ 6. The constant pool. This is simply a bunch of bytes. It is
organized so that alignment is correct: CU vectors are stored
first, followed by strings. */
static void

1283
gdb-next-over-throw.patch Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,99 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-09/msg00321.html
Subject: [patch] PR 12028 "GDB crashes on a double free during overload resolution"
old_cleanups was being set twice making the later call to
discard_cleanups ignore the first 'make_cleanup' request.
The patch is proposed for both head and the 7.2 branch.
This has been regression tested on x8664 with gcc-4.4.4-10.fc13
Fix PR 12028: "GDB crashes on a double free during overload resolution "
2010-09-16 Sami Wagiaalla <swagiaal@redhat.com>
PR C++/12028
* valops.c (find_oload_champ_namespace_loop): removed incorrect
'old_cleanups' reassignment.
2010-09-16 Sami Wagiaalla <swagiaal@redhat.com>
* gdb.cp/pr12028.cc: New.
* gdb.cp/pr12028.exp: New.
diff --git a/gdb/testsuite/gdb.cp/pr12028.cc b/gdb/testsuite/gdb.cp/pr12028.cc
new file mode 100644
index 0000000..0fcab6b
--- /dev/null
+++ b/gdb/testsuite/gdb.cp/pr12028.cc
@@ -0,0 +1,21 @@
+class A{};
+class B{};
+class C: public B {};
+
+namespace D{
+ int foo (A) { return 11; }
+ int foo (C) { return 12; }
+}
+
+int main()
+{
+ A a;
+ B b;
+ C c;
+
+ D::foo (a);
+ // D::foo (b);
+ D::foo (c);
+
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.cp/pr12028.exp b/gdb/testsuite/gdb.cp/pr12028.exp
new file mode 100644
index 0000000..746c6b5
--- /dev/null
+++ b/gdb/testsuite/gdb.cp/pr12028.exp
@@ -0,0 +1,29 @@
+# Copyright 2008 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set testfile pr12028
+set srcfile ${testfile}.cc
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} {debug c++}] } {
+ return -1
+}
+
+############################################
+
+if ![runto_main] then {
+ perror "couldn't run to breakpoint main"
+ continue
+}
+
+gdb_test "p D::foo(b)" "Cannot resolve function foo to any overloaded instance"
diff --git a/gdb/valops.c b/gdb/valops.c
index 7fbad10..4e83a04 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -2715,7 +2715,7 @@ find_oload_champ_namespace_loop (struct type **arg_types, int nargs,
function symbol to start off with.) */
old_cleanups = make_cleanup (xfree, *oload_syms);
- old_cleanups = make_cleanup (xfree, *oload_champ_bv);
+ make_cleanup (xfree, *oload_champ_bv);
new_namespace = alloca (namespace_len + 1);
strncpy (new_namespace, qualified_name, namespace_len);
new_namespace[namespace_len] = '\0';

View File

@ -1,592 +0,0 @@
http://sourceware.org/ml/gdb-patches/2010-10/msg00175.html
Subject: Re: [patch] python: save/restore/fix error state
On Fri, 08 Oct 2010 22:08:27 +0200, Doug Evans wrote:
> The comment above this code says:
>
> /* Note: If an exception occurs python will print the traceback and
> clear the error indicator. */
>
> ISTM that either this comment is wrong or the above patch is wrong, or
> some combination thereof.
This comment is right, Python has no bug there, other gdb/python/ code has
bugs. That is some gdb/python/ code returned success value while still
leaving the python exception set. Such case is undefined and unchecked by
Python. Python error state does not follow the errno POSIX semantics
The setting of errno after a successful call to a function is
unspecified [...].
as Python requires instead:
The Python error state after a successful call to a function must be
cleared.
I have checked callers of these functions, as a closure on the callers of the
top py-utils.c functions. That does not mean this Python error state handling
verification is complete:
python_string_to_unicode unicode_to_encoded_string
unicode_to_encoded_python_string unicode_to_target_string
unicode_to_target_python_string python_string_to_target_string
python_string_to_target_python_string python_string_to_host_string
target_string_to_unicode gdbpy_obj_to_string gdbpy_exception_to_string
get_addr_from_python convert_value_from_python frapy_read_var
gdbpy_get_display_hint valpy_getitem FIXME set_parameter_value
compute_enum_values infpy_read_memory infpy_write_memory
infpy_search_memory valpy_new valpy_call valpy_binop valpy_richcompare
pretty_print_one_value set_attr parmpy_init
Therefore I have removed the check after PyRun_SimpleFile.
No regressions on {x86_64,x86_64-m32,i686}-fedora14snapshot-linux-gnu.
Thanks,
Jan
gdb/
2010-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
* python/py-breakpoint.c (bppy_set_condition): New comment.
* python/py-cmd.c (cmdpy_function): Call also gdbpy_print_stack for
failed PyUnicode_Decode.
(cmdpy_completer): Skip element for failed
python_string_to_host_string.
(cmdpy_init): Return -1 on failed python_string_to_host_string.
* python/py-frame.c (frapy_read_var): Extend the function comment.
* python/py-function.c (fnpy_init): Return -1 on failed
python_string_to_host_string.
* python/py-inferior.c (infpy_read_memory, infpy_write_memory): Extend
the function comment.
(infpy_search_memory): Extend the function comment. Remove the
PyErr_SetString call on already set error state.
* python/py-param.c (set_parameter_value): Extend the function
comment. Return -1 on failed python_string_to_host_string, twice.
(set_attr): Extend the function comment.
(compute_enum_values): Extend the function comment. New variable
back_to. Protect self->enumeration by BACK_TO cleanups. Return 0 on
failed python_string_to_host_string.
(get_doc_string): Call gdbpy_print_stack on failed
python_string_to_host_string.
(parmpy_init): Extend the function comment.
* python/py-prettyprint.c (pretty_print_one_value): Likewise.
(gdbpy_get_display_hint, print_children): Call gdbpy_print_stack on
failed python_string_to_host_string.
* python/py-value.c (valpy_new, valpy_getitem, valpy_call)
(valpy_binop, valpy_richcompare): Extend the function comment.
* python/python.c
(struct python_env) <error_type, error_value, error_traceback>: New
fields.
(restore_python_env): Handle PyErr_Occurred. Call PyErr_Restore.
(ensure_python_env): Call PyErr_Fetch.
* varobj.c (update_dynamic_varobj_children): Call gdbpy_print_stack on
failed convert_value_from_python.
(value_get_print_value): Call gdbpy_print_stack on failed
python_string_to_target_python_string.
gdb/testsuite/
2010-10-09 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.python/py-error.exp: New file.
* gdb.python/py-error.py: New file.
Index: gdb-7.2/gdb/python/py-breakpoint.c
===================================================================
--- gdb-7.2.orig/gdb/python/py-breakpoint.c 2010-10-12 18:27:54.000000000 +0200
+++ gdb-7.2/gdb/python/py-breakpoint.c 2010-10-12 18:28:58.000000000 +0200
@@ -420,6 +420,9 @@ bppy_get_condition (PyObject *self, void
return PyString_Decode (str, strlen (str), host_charset (), NULL);
}
+/* Returns 0 on success. Returns -1 on error, with a python exception set.
+ */
+
static int
bppy_set_condition (PyObject *self, PyObject *newvalue, void *closure)
{
Index: gdb-7.2/gdb/python/py-cmd.c
===================================================================
--- gdb-7.2.orig/gdb/python/py-cmd.c 2010-10-12 18:27:54.000000000 +0200
+++ gdb-7.2/gdb/python/py-cmd.c 2010-10-12 18:28:58.000000000 +0200
@@ -138,7 +138,10 @@ cmdpy_function (struct cmd_list_element
args = "";
argobj = PyUnicode_Decode (args, strlen (args), host_charset (), NULL);
if (! argobj)
- error (_("Could not convert arguments to Python string."));
+ {
+ gdbpy_print_stack ();
+ error (_("Could not convert arguments to Python string."));
+ }
ttyobj = from_tty ? Py_True : Py_False;
Py_INCREF (ttyobj);
@@ -255,6 +258,12 @@ cmdpy_completer (struct cmd_list_element
continue;
}
result[out] = python_string_to_host_string (elt);
+ if (result[out] == NULL)
+ {
+ /* Skip problem elements. */
+ PyErr_Clear ();
+ continue;
+ }
++out;
}
result[out] = NULL;
@@ -465,7 +474,15 @@ cmdpy_init (PyObject *self, PyObject *ar
PyObject *ds_obj = PyObject_GetAttr (self, gdbpy_doc_cst);
if (ds_obj && gdbpy_is_string (ds_obj))
- docstring = python_string_to_host_string (ds_obj);
+ {
+ docstring = python_string_to_host_string (ds_obj);
+ if (docstring == NULL)
+ {
+ xfree (cmd_name);
+ xfree (pfx_name);
+ return -1;
+ }
+ }
}
if (! docstring)
docstring = xstrdup (_("This command is not documented."));
Index: gdb-7.2/gdb/python/py-frame.c
===================================================================
--- gdb-7.2.orig/gdb/python/py-frame.c 2010-06-28 23:16:03.000000000 +0200
+++ gdb-7.2/gdb/python/py-frame.c 2010-10-12 18:28:58.000000000 +0200
@@ -385,7 +385,8 @@ frapy_find_sal (PyObject *self, PyObject
start the search from that block, otherwise search from the frame's
current block (determined by examining the resume address of the
frame). The variable argument must be a string or an instance of a
- gdb.Symbol. The block argument must be an instance of gdb.Block. */
+ gdb.Symbol. The block argument must be an instance of gdb.Block. Returns
+ NULL on error, with a python exception set. */
static PyObject *
frapy_read_var (PyObject *self, PyObject *args)
{
Index: gdb-7.2/gdb/python/py-function.c
===================================================================
--- gdb-7.2.orig/gdb/python/py-function.c 2010-05-17 23:23:25.000000000 +0200
+++ gdb-7.2/gdb/python/py-function.c 2010-10-12 18:28:58.000000000 +0200
@@ -113,7 +113,14 @@ fnpy_init (PyObject *self, PyObject *arg
{
PyObject *ds_obj = PyObject_GetAttrString (self, "__doc__");
if (ds_obj && gdbpy_is_string (ds_obj))
- docstring = python_string_to_host_string (ds_obj);
+ {
+ docstring = python_string_to_host_string (ds_obj);
+ if (docstring == NULL)
+ {
+ Py_DECREF (self);
+ return -1;
+ }
+ }
}
if (! docstring)
docstring = xstrdup (_("This function is not documented."));
Index: gdb-7.2/gdb/python/py-inferior.c
===================================================================
--- gdb-7.2.orig/gdb/python/py-inferior.c 2010-06-28 23:16:03.000000000 +0200
+++ gdb-7.2/gdb/python/py-inferior.c 2010-10-12 18:28:58.000000000 +0200
@@ -293,7 +293,8 @@ gdbpy_inferiors (PyObject *unused, PyObj
/* Implementation of gdb.read_memory (address, length).
Returns a Python buffer object with LENGTH bytes of the inferior's
- memory at ADDRESS. Both arguments are integers. */
+ memory at ADDRESS. Both arguments are integers. Returns NULL on error,
+ with a python exception set. */
static PyObject *
infpy_read_memory (PyObject *self, PyObject *args, PyObject *kw)
{
@@ -361,7 +362,8 @@ infpy_read_memory (PyObject *self, PyObj
Writes the contents of BUFFER (a Python object supporting the read
buffer protocol) at ADDRESS in the inferior's memory. Write LENGTH
bytes from BUFFER, or its entire contents if the argument is not
- provided. The function returns nothing. */
+ provided. The function returns nothing. Returns NULL on error, with
+ a python exception set. */
static PyObject *
infpy_write_memory (PyObject *self, PyObject *args, PyObject *kw)
{
@@ -473,7 +475,8 @@ get_char_buffer (PyObject *self, Py_ssiz
search from ADDRESS. PATTERN is the pattern to search for (and
must be a Python object supporting the buffer protocol).
Returns a Python Long object holding the address where the pattern
- was located, or if the pattern was not found, returns None. */
+ was located, or if the pattern was not found, returns None. Returns NULL
+ on error, with a python exception set. */
static PyObject *
infpy_search_memory (PyObject *self, PyObject *args, PyObject *kw)
{
@@ -511,12 +514,7 @@ infpy_search_memory (PyObject *self, PyO
}
}
else
- {
- PyErr_SetString (PyExc_RuntimeError,
- _("Cannot get search address/range from Python."));
-
- return NULL;
- }
+ return NULL;
if (!PyObject_CheckReadBuffer (pattern))
{
Index: gdb-7.2/gdb/python/py-param.c
===================================================================
--- gdb-7.2.orig/gdb/python/py-param.c 2010-05-17 23:23:25.000000000 +0200
+++ gdb-7.2/gdb/python/py-param.c 2010-10-12 18:28:58.000000000 +0200
@@ -110,8 +110,8 @@ get_attr (PyObject *obj, PyObject *attr_
return PyObject_GenericGetAttr (obj, attr_name);
}
-/* Set a parameter value from a Python value. Return 0 on success, -1
- on failure. */
+/* Set a parameter value from a Python value. Return 0 on success. Returns
+ -1 on error, with a python exception set. */
static int
set_parameter_value (parmpy_object *self, PyObject *value)
{
@@ -142,7 +142,11 @@ set_parameter_value (parmpy_object *self
self->value.stringval = NULL;
}
else
- self->value.stringval = python_string_to_host_string (value);
+ {
+ self->value.stringval = python_string_to_host_string (value);
+ if (self->value.stringval == NULL)
+ return -1;
+ }
break;
case var_enum:
@@ -158,6 +162,8 @@ set_parameter_value (parmpy_object *self
}
str = python_string_to_host_string (value);
+ if (str == NULL)
+ return -1;
for (i = 0; self->enumeration[i]; ++i)
if (! strcmp (self->enumeration[i], str))
break;
@@ -258,7 +264,7 @@ set_parameter_value (parmpy_object *self
return 0;
}
-/* Set an attribute. */
+/* Set an attribute. Returns -1 on error, with a python exception set. */
static int
set_attr (PyObject *obj, PyObject *attr_name, PyObject *val)
{
@@ -358,12 +364,13 @@ add_setshow_generic (int parmclass, enum
}
}
-/* A helper which computes enum values. Returns 1 on success, 0 on
- error. */
+/* A helper which computes enum values. Returns 1 on success. Returns 0 on
+ error, with a python exception set. */
static int
compute_enum_values (parmpy_object *self, PyObject *enum_values)
{
Py_ssize_t size, i;
+ struct cleanup *back_to;
if (! enum_values)
{
@@ -390,6 +397,7 @@ compute_enum_values (parmpy_object *self
}
self->enumeration = xmalloc ((size + 1) * sizeof (char *));
+ back_to = make_cleanup (free_current_contents, &self->enumeration);
memset (self->enumeration, 0, (size + 1) * sizeof (char *));
for (i = 0; i < size; ++i)
@@ -397,16 +405,27 @@ compute_enum_values (parmpy_object *self
PyObject *item = PySequence_GetItem (enum_values, i);
if (! item)
- return 0;
+ {
+ do_cleanups (back_to);
+ return 0;
+ }
if (! gdbpy_is_string (item))
{
+ do_cleanups (back_to);
PyErr_SetString (PyExc_RuntimeError,
_("The enumeration item not a string."));
return 0;
}
self->enumeration[i] = python_string_to_host_string (item);
+ if (self->enumeration[i] == NULL)
+ {
+ do_cleanups (back_to);
+ return 0;
+ }
+ make_cleanup (xfree, (char *) self->enumeration[i]);
}
+ discard_cleanups (back_to);
return 1;
}
@@ -422,7 +441,11 @@ get_doc_string (PyObject *object, PyObje
PyObject *ds_obj = PyObject_GetAttr (object, attr);
if (ds_obj && gdbpy_is_string (ds_obj))
- result = python_string_to_host_string (ds_obj);
+ {
+ result = python_string_to_host_string (ds_obj);
+ if (result == NULL)
+ gdbpy_print_stack ();
+ }
}
if (! result)
result = xstrdup (_("This command is not documented."));
@@ -449,8 +472,9 @@ get_doc_string (PyObject *object, PyObje
The documentation for the parameter is taken from the doc string
for the python class.
-
-*/
+
+ Returns -1 on error, with a python exception set. */
+
static int
parmpy_init (PyObject *self, PyObject *args, PyObject *kwds)
{
Index: gdb-7.2/gdb/python/py-prettyprint.c
===================================================================
--- gdb-7.2.orig/gdb/python/py-prettyprint.c 2010-10-12 18:27:57.000000000 +0200
+++ gdb-7.2/gdb/python/py-prettyprint.c 2010-10-12 18:28:58.000000000 +0200
@@ -185,8 +185,8 @@ find_pretty_printer (PyObject *value)
is returned. If the function returns Py_NONE that means the pretty
printer returned the Python None as a value. Otherwise, if the
function returns a value, *OUT_VALUE is set to the value, and NULL
- is returned. On error, *OUT_VALUE is set to NULL, and NULL is
- returned. */
+ is returned. On error, *OUT_VALUE is set to NULL, NULL is
+ returned, with a python exception set. */
static PyObject *
pretty_print_one_value (PyObject *printer, struct value **out_value)
@@ -232,7 +232,11 @@ gdbpy_get_display_hint (PyObject *printe
if (hint)
{
if (gdbpy_is_string (hint))
- result = python_string_to_host_string (hint);
+ {
+ result = python_string_to_host_string (hint);
+ if (result == NULL)
+ gdbpy_print_stack ();
+ }
Py_DECREF (hint);
}
else
@@ -574,7 +578,10 @@ print_children (PyObject *printer, const
else
{
output = python_string_to_host_string (py_v);
- fputs_filtered (output, stream);
+ if (!output)
+ gdbpy_print_stack ();
+ else
+ fputs_filtered (output, stream);
xfree (output);
}
}
Index: gdb-7.2/gdb/python/py-value.c
===================================================================
--- gdb-7.2.orig/gdb/python/py-value.c 2010-10-12 18:27:54.000000000 +0200
+++ gdb-7.2/gdb/python/py-value.c 2010-10-12 18:28:58.000000000 +0200
@@ -114,7 +114,8 @@ note_value (value_object *value_obj)
values_in_python = value_obj;
}
-/* Called when a new gdb.Value object needs to be allocated. */
+/* Called when a new gdb.Value object needs to be allocated. Returns NULL on
+ error, with a python exception set. */
static PyObject *
valpy_new (PyTypeObject *subtype, PyObject *args, PyObject *keywords)
{
@@ -334,7 +335,7 @@ valpy_length (PyObject *self)
}
/* Given string name of an element inside structure, return its value
- object. */
+ object. Returns NULL on error, with a python exception set. */
static PyObject *
valpy_getitem (PyObject *self, PyObject *key)
{
@@ -468,7 +469,8 @@ enum valpy_opcode
((TYPE_CODE (TYPE) == TYPE_CODE_REF) ? (TYPE_TARGET_TYPE (TYPE)) : (TYPE))
/* Returns a value object which is the result of applying the operation
- specified by OPCODE to the given arguments. */
+ specified by OPCODE to the given arguments. Returns NULL on error, with
+ a python exception set. */
static PyObject *
valpy_binop (enum valpy_opcode opcode, PyObject *self, PyObject *other)
{
@@ -723,7 +725,8 @@ valpy_xor (PyObject *self, PyObject *oth
return valpy_binop (VALPY_BITXOR, self, other);
}
-/* Implements comparison operations for value objects. */
+/* Implements comparison operations for value objects. Returns NULL on error,
+ with a python exception set. */
static PyObject *
valpy_richcompare (PyObject *self, PyObject *other, int op)
{
Index: gdb-7.2/gdb/python/python.c
===================================================================
--- gdb-7.2.orig/gdb/python/python.c 2010-10-12 18:27:54.000000000 +0200
+++ gdb-7.2/gdb/python/python.c 2010-10-12 18:28:58.000000000 +0200
@@ -82,6 +82,7 @@ struct python_env
PyGILState_STATE state;
struct gdbarch *gdbarch;
const struct language_defn *language;
+ PyObject *error_type, *error_value, *error_traceback;
};
static void
@@ -89,6 +90,16 @@ restore_python_env (void *p)
{
struct python_env *env = (struct python_env *)p;
+ /* Leftover Python error is forbidden by Python Exception Handling. */
+ if (PyErr_Occurred ())
+ {
+ /* This order is similar to the one calling error afterwards. */
+ gdbpy_print_stack ();
+ warning (_("internal error: Unhandled Python exception"));
+ }
+
+ PyErr_Restore (env->error_type, env->error_value, env->error_traceback);
+
PyGILState_Release (env->state);
python_gdbarch = env->gdbarch;
python_language = env->language;
@@ -111,6 +122,9 @@ ensure_python_env (struct gdbarch *gdbar
python_gdbarch = gdbarch;
python_language = language;
+ /* Save it and ensure ! PyErr_Occurred () afterwards. */
+ PyErr_Fetch (&env->error_type, &env->error_value, &env->error_traceback);
+
return make_cleanup (restore_python_env, env);
}
Index: gdb-7.2/gdb/testsuite/gdb.python/py-error.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.python/py-error.exp 2010-10-12 18:28:58.000000000 +0200
@@ -0,0 +1,56 @@
+# Copyright (C) 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Test error while loading *-gdb.py. IBM1047 is chosen as possibly supported
+# by glibc but unsupported by Python
+
+set testfile "py-error"
+
+load_lib gdb-python.exp
+
+# Start with a fresh gdb.
+gdb_exit
+gdb_start
+
+# Skip all tests if Python scripting is not enabled.
+if { [skip_python_tests] } { continue }
+
+set charset "IBM1047"
+
+set test2 "main reached"
+
+set test "set host-charset $charset"
+set test_regex [string_to_regexp $test]
+gdb_test_multiple $test $test {
+ -re "^$test_regex\r\n$gdb_prompt $" {
+ pass $test
+ }
+ -re "^$test_regex\r\nUndefined item: \"$charset\"\\.\r\n$gdb_prompt $" {
+ xfail $test
+ untested $test2
+ set test2 ""
+ }
+}
+
+if {$test2 == ""} {
+ return 0
+}
+
+set remote_python_file [remote_download host ${srcdir}/${subdir}/${testfile}.py]
+
+# argc=LookupError: unknown encoding: IBM1047
+gdb_test "source $remote_python_file" "Traceback.*ClassName.*\r\nLookupError: unknown encoding: $charset" $test2
+
+gdb_test "p 1" " = 1" "no delayed error"
Index: gdb-7.2/gdb/testsuite/gdb.python/py-error.py
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.2/gdb/testsuite/gdb.python/py-error.py 2010-10-12 18:28:58.000000000 +0200
@@ -0,0 +1,25 @@
+# Copyright (C) 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+import gdb
+
+class ClassName(gdb.Command):
+ 'a'
+ def __init__(self):
+ gdb.Command.__init__ (self, "ClassName", gdb.COMMAND_DATA, prefix=True)
+ def invoke(self, args, from_tty):
+ print
+
+ClassName()
Index: gdb-7.2/gdb/varobj.c
===================================================================
--- gdb-7.2.orig/gdb/varobj.c 2010-10-12 18:27:54.000000000 +0200
+++ gdb-7.2/gdb/varobj.c 2010-10-12 18:28:58.000000000 +0200
@@ -1054,6 +1054,8 @@ update_dynamic_varobj_children (struct v
error (_("Invalid item from the child list"));
v = convert_value_from_python (py_v);
+ if (v == NULL)
+ gdbpy_print_stack ();
install_dynamic_child (var, can_mention ? changed : NULL,
can_mention ? new : NULL,
can_mention ? unchanged : NULL,
@@ -2542,6 +2544,8 @@ value_get_print_value (struct value *val
type = builtin_type (gdbarch)->builtin_char;
Py_DECREF (py_str);
}
+ else
+ gdbpy_print_stack ();
}
Py_DECREF (output);
}

View File

@ -1,10 +1,10 @@
Some functionality is available on RHEL-5.4+ only with gcc44 and gfortran44 as
the default gcc and gfortran binaries are from gcc-4.1.
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.base/vla.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.base/vla.exp
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.base/vla.exp 2010-07-12 23:07:33.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.base/vla.exp 2010-07-13 23:05:14.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/testsuite/gdb.base/vla.exp 2010-11-16 09:26:50.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.base/vla.exp 2010-11-16 09:27:20.000000000 +0100
@@ -16,7 +16,25 @@
set testfile vla
set srcfile ${testfile}.c
@ -32,10 +32,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.base/vla.exp
untested "Couldn't compile test program"
return -1
}
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.base/break-interp.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.base/break-interp.exp
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.base/break-interp.exp 2010-07-05 20:04:33.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.base/break-interp.exp 2010-07-13 23:11:22.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/testsuite/gdb.base/break-interp.exp 2010-10-12 20:41:06.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.base/break-interp.exp 2010-11-16 09:28:40.000000000 +0100
@@ -33,9 +33,29 @@ if [get_compiler_info ${binfile_lib}] {
return -1
}
@ -55,8 +55,8 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.base/break-interp.exp
+
# Use -soname so that the new library gets copied by build_executable_own_libs.
-if {[gdb_compile_shlib ${srcdir}/${subdir}/${srcfile_lib} ${binfile_lib} [list debug additional_flags=-Wl,-soname,${test}.so]] != ""} {
+set err [gdb_compile_shlib ${srcdir}/${subdir}/${srcfile_lib} ${binfile_lib} [list debug additional_flags=-Wl,-soname,${test}.so]]
-if {[gdb_compile_shlib ${srcdir}/${subdir}/${srcfile_lib} ${binfile_lib} [list debug ldflags=-Wl,-soname,${test}.so]] != ""} {
+set err [gdb_compile_shlib ${srcdir}/${subdir}/${srcfile_lib} ${binfile_lib} [list debug ldflags=-Wl,-soname,${test}.so]]
+
+unset_board_info compiler
+if [info exists old_compiler] {
@ -67,10 +67,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.base/break-interp.exp
return -1
}
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/common-block.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/common-block.exp
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.fortran/common-block.exp 2010-07-13 00:25:56.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/common-block.exp 2010-07-13 23:05:14.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/testsuite/gdb.fortran/common-block.exp 2010-11-16 09:26:54.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/common-block.exp 2010-11-16 09:27:20.000000000 +0100
@@ -20,7 +20,25 @@ set testfile "common-block"
set srcfile ${testfile}.f90
set binfile ${objdir}/${subdir}/${testfile}
@ -98,10 +98,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/common-block.exp
untested "Couldn't compile ${srcfile}"
return -1
}
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/dwarf-stride.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/dwarf-stride.exp
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.fortran/dwarf-stride.exp 2010-07-12 23:07:33.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/dwarf-stride.exp 2010-07-13 23:05:14.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/testsuite/gdb.fortran/dwarf-stride.exp 2010-11-16 09:26:50.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/dwarf-stride.exp 2010-11-16 09:27:20.000000000 +0100
@@ -27,7 +27,25 @@
set testfile dwarf-stride
set srcfile ${testfile}.f90
@ -129,10 +129,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/dwarf-stride.exp
return -1
}
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/dynamic.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/dynamic.exp
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.fortran/dynamic.exp 2010-07-12 23:07:33.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/dynamic.exp 2010-07-13 23:05:14.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/testsuite/gdb.fortran/dynamic.exp 2010-11-16 09:26:50.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/dynamic.exp 2010-11-16 09:27:20.000000000 +0100
@@ -25,7 +25,25 @@ set testfile "dynamic"
set srcfile ${testfile}.f90
set binfile ${objdir}/${subdir}/${testfile}
@ -160,10 +160,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/dynamic.exp
untested "Couldn't compile ${srcfile}"
return -1
}
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/library-module.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/library-module.exp
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.fortran/library-module.exp 2010-06-03 00:41:56.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/library-module.exp 2010-07-13 23:05:14.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/testsuite/gdb.fortran/library-module.exp 2010-06-03 00:41:56.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/library-module.exp 2010-11-16 09:27:20.000000000 +0100
@@ -25,16 +25,34 @@ if [get_compiler_info not-used] {
return -1
}
@ -203,10 +203,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/library-module.exp
untested "Couldn't compile ${srcfile}"
return -1
}
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/module.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/module.exp
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.fortran/module.exp 2010-06-03 01:01:01.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/module.exp 2010-07-13 23:05:14.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/testsuite/gdb.fortran/module.exp 2010-09-22 21:22:44.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/module.exp 2010-11-16 09:27:20.000000000 +0100
@@ -16,7 +16,25 @@
set testfile "module"
set srcfile ${testfile}.f90
@ -234,10 +234,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/module.exp
return -1
}
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/string.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/string.exp
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.fortran/string.exp 2010-07-12 23:07:33.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/string.exp 2010-07-13 23:05:14.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/testsuite/gdb.fortran/string.exp 2010-11-16 09:26:50.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/string.exp 2010-11-16 09:27:20.000000000 +0100
@@ -23,7 +23,25 @@ set testfile "string"
set srcfile ${testfile}.f90
set binfile ${objdir}/${subdir}/${testfile}
@ -265,10 +265,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/string.exp
untested "Couldn't compile ${srcfile}"
return -1
}
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/omp-step.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/omp-step.exp
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.fortran/omp-step.exp 2010-07-13 00:21:30.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/omp-step.exp 2010-07-13 23:05:14.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/testsuite/gdb.fortran/omp-step.exp 2010-11-16 09:26:54.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/omp-step.exp 2010-11-16 09:27:20.000000000 +0100
@@ -15,7 +15,26 @@
set testfile "omp-step"
@ -297,10 +297,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/omp-step.exp
return -1
}
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/derived-type.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/derived-type.exp
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.fortran/derived-type.exp 2010-01-01 08:32:02.000000000 +0100
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/derived-type.exp 2010-07-13 23:05:14.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/testsuite/gdb.fortran/derived-type.exp 2010-01-01 08:32:02.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/derived-type.exp 2010-11-16 09:27:20.000000000 +0100
@@ -28,8 +28,26 @@ set testfile "derived-type"
set srcfile ${testfile}.f90
set binfile ${objdir}/${subdir}/${testfile}
@ -330,10 +330,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/derived-type.exp
return -1
}
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/subarray.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/subarray.exp
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.fortran/subarray.exp 2010-01-01 08:32:02.000000000 +0100
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/subarray.exp 2010-07-13 23:05:14.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/testsuite/gdb.fortran/subarray.exp 2010-01-01 08:32:02.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.fortran/subarray.exp 2010-11-16 09:27:20.000000000 +0100
@@ -28,8 +28,26 @@ set testfile "subarray"
set srcfile ${testfile}.f
set binfile ${objdir}/${subdir}/${testfile}
@ -363,10 +363,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.fortran/subarray.exp
return -1
}
Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.threads/tls-sepdebug.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/gdb.threads/tls-sepdebug.exp
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/testsuite/gdb.threads/tls-sepdebug.exp 2010-07-12 23:07:34.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/testsuite/gdb.threads/tls-sepdebug.exp 2010-07-13 23:05:14.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/testsuite/gdb.threads/tls-sepdebug.exp 2010-11-16 09:26:51.000000000 +0100
+++ gdb-7.2.50.20101116/gdb/testsuite/gdb.threads/tls-sepdebug.exp 2010-11-16 09:27:20.000000000 +0100
@@ -32,7 +32,25 @@ set binshareddebugfile ${objdir}/${subdi
# FIXME: gcc dependency (-Wl,-soname).
@ -394,10 +394,10 @@ Index: gdb-7.1.90.20100711/gdb/testsuite/gdb.threads/tls-sepdebug.exp
untested "Couldn't compile test library"
return -1
}
Index: gdb-7.1.90.20100711/gdb/testsuite/lib/prelink-support.exp
Index: gdb-7.2.50.20101116/gdb/testsuite/lib/prelink-support.exp
===================================================================
--- gdb-7.1.90.20100711.orig/gdb/testsuite/lib/prelink-support.exp 2010-07-05 20:02:56.000000000 +0200
+++ gdb-7.1.90.20100711/gdb/testsuite/lib/prelink-support.exp 2010-07-13 23:09:34.000000000 +0200
--- gdb-7.2.50.20101116.orig/gdb/testsuite/lib/prelink-support.exp 2010-10-12 20:12:49.000000000 +0200
+++ gdb-7.2.50.20101116/gdb/testsuite/lib/prelink-support.exp 2010-11-16 09:27:20.000000000 +0100
@@ -118,9 +118,31 @@ proc file_copy {src dest} {
proc build_executable_own_libs {testname executable sources options {interp ""} {dir ""}} {
global objdir subdir

View File

@ -1,75 +0,0 @@
ad20e5eb15d037a31e3b484e9f57542dc927c0a9
http://sourceware.org/ml/gdb-cvs/2010-10/msg00005.html
### src/gdb/testsuite/ChangeLog 2010/09/30 18:58:07 1.2462
### src/gdb/testsuite/ChangeLog 2010/10/01 17:03:49 1.2463
## -1,3 +1,19 @@
+2010-10-01 Doug Evans <dje@google.com>
+
+ * lib/gdb-python.exp: New file.
+ * gdb.python/py-block.exp: Use it.
+ * gdb.python/py-breakpoint.exp: Ditto.
+ * gdb.python/py-frame.exp: Ditto.
+ * gdb.python/py-inferior.exp: Ditto.
+ * gdb.python/py-param.exp: Ditto.
+ * gdb.python/py-prettyprint.exp: Ditto.
+ * gdb.python/py-shared.exp: Ditto.
+ * gdb.python/py-symbol.exp: Ditto.
+ * gdb.python/py-symtab.exp: Ditto.
+ * gdb.python/py-type.exp: Ditto.
+ * gdb.python/py-value.exp: Ditto.
+ * gdb.python/python.exp: Ditto.
+
2010-09-30 Tom Tromey <tromey@redhat.com>
* gdb.base/anon.exp: New file.
--- src/gdb/testsuite/lib/gdb-python.exp
+++ src/gdb/testsuite/lib/gdb-python.exp 2010-10-12 17:58:35.904468000 +0000
@@ -0,0 +1,47 @@
+# Copyright 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# Utilities for python-scripting related tests.
+
+# Run a command in GDB, and report a failure if a Python exception is thrown.
+# If report_pass is true, report a pass if no exception is thrown.
+
+proc gdb_py_test_silent_cmd { cmd name report_pass } {
+ global gdb_prompt
+
+ gdb_test_multiple $cmd $name {
+ -re "Traceback.*$gdb_prompt $" { fail $name }
+ -re "$gdb_prompt $" { if $report_pass { pass $name } }
+ }
+}
+
+# Usage: gdb_py_test_multiple NAME INPUT RESULT {INPUT RESULT}...
+# Run a test named NAME, consisting of multiple lines of input.
+# After each input line INPUT, search for result line RESULT.
+# Succeed if all results are seen; fail otherwise.
+
+proc gdb_py_test_multiple { name args } {
+ global gdb_prompt
+ foreach {input result} $args {
+ if {[gdb_test_multiple $input "$name - $input" {
+ -re "\[\r\n\]*($result)\[\r\n\]+($gdb_prompt | *>)$" {
+ pass "$name - $input"
+ }
+ }]} {
+ return 1
+ }
+ }
+ return 0
+}

View File

@ -1,467 +0,0 @@
https://bugzilla.redhat.com/show_bug.cgi?id=610986
http://sourceware.org/ml/gdb-cvs/2010-08/msg00112.html
### src/gdb/ChangeLog 2010/08/18 22:57:45 1.12097
### src/gdb/ChangeLog 2010/08/19 07:34:26 1.12098
## -1,3 +1,9 @@
+2010-08-19 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * varobj.c (varobj_create): Replace variable old_fi with old_id,
+ initialize it by null_frame_id, wrap its usage by get_frame_id,
+ frame_id_p and frame_find_by_id.
+
2010-08-18 Tom Tromey <tromey@redhat.com>
PR python/11900:
--- src/gdb/varobj.c 2010/08/06 14:17:56 1.159
+++ src/gdb/varobj.c 2010/08/19 07:34:27 1.160
@@ -524,7 +524,7 @@ varobj_create (char *objname,
{
struct varobj *var;
struct frame_info *fi;
- struct frame_info *old_fi = NULL;
+ struct frame_id old_id = null_frame_id;
struct block *block;
struct cleanup *old_chain;
@@ -611,7 +611,7 @@
var->root->frame = get_frame_id (fi);
var->root->thread_id = pid_to_thread_id (inferior_ptid);
- old_fi = get_selected_frame (NULL);
+ old_id = get_frame_id (get_selected_frame (NULL));
select_frame (fi);
}
@@ -639,8 +639,8 @@
var->root->rootvar = var;
/* Reset the selected frame */
- if (old_fi != NULL)
- select_frame (old_fi);
+ if (frame_id_p (old_id))
+ select_frame (frame_find_by_id (old_id));
}
/* If the variable object name is null, that means this
https://bugzilla.redhat.com/show_bug.cgi?id=627506
Re: [patch] Fix nesting of ui_out_redirect
http://sourceware.org/ml/gdb-patches/2010-09/msg00122.html
http://sourceware.org/ml/gdb-cvs/2010-09/msg00031.html
### src/gdb/ChangeLog 2010/09/03 01:29:09 1.12149
### src/gdb/ChangeLog 2010/09/03 15:41:59 1.12150
## -1,3 +1,27 @@
+2010-09-03 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * breakpoint.c (save_breakpoints): Use RETURN_MASK_ALL.
+ * cli-out.c: Include vec.h.
+ (cli_field_fmt, cli_spaces, cli_text, cli_message, cli_flush): New
+ variable stream, initialize it, use it.
+ (cli_redirect): New function comment. Replace the stream and
+ original_stream fields by the new streams field. Remove the
+ original_stream != NULL conditional, assert error on NULL instead.
+ (out_field_fmt, field_separator): New variable stream, initialize it, use it.
+ (cli_out_data_ctor): Assert non-NULL stream. Replace the stream and
+ original_stream fields by the new streams field.
+ (cli_out_set_stream): Replace the stream field by the new streams
+ field.
+ * cli-out.h: Include vec.h.
+ (ui_filep): New typedef, call DEF_VEC_P for it.
+ (struct cli_ui_out_data): Replace the stream and original_stream
+ fields by the new streams field.
+ * cli/cli-logging.c (set_logging_redirect): Call ui_out_redirect with
+ NULL first. Extend the comment.
+ (handle_redirections): Call ui_out_redirect with output.
+ * python/py-breakpoint.c (bppy_get_commands): Move ui_out_redirect
+ calls outside of the TRY_CATCH block.
+
[ cli/cli-logging.c removed. ]
--- src/gdb/breakpoint.c 2010/08/30 09:49:12 1.511
+++ src/gdb/breakpoint.c 2010/09/03 15:42:02 1.512
@@ -11487,7 +11487,7 @@
fprintf_unfiltered (fp, " commands\n");
ui_out_redirect (uiout, fp);
- TRY_CATCH (ex, RETURN_MASK_ERROR)
+ TRY_CATCH (ex, RETURN_MASK_ALL)
{
print_command_lines (uiout, tp->commands->commands, 2);
}
--- src/gdb/cli-out.c 2010/05/13 23:53:32 1.30
+++ src/gdb/cli-out.c 2010/09/03 15:42:02 1.31
@@ -26,6 +26,7 @@
#include "cli-out.h"
#include "gdb_string.h"
#include "gdb_assert.h"
+#include "vec.h"
typedef struct cli_ui_out_data cli_out_data;
@@ -224,11 +225,13 @@
va_list args)
{
cli_out_data *data = ui_out_data (uiout);
+ struct ui_file *stream;
if (data->suppress_output)
return;
- vfprintf_filtered (data->stream, format, args);
+ stream = VEC_last (ui_filep, data->streams);
+ vfprintf_filtered (stream, format, args);
if (align != ui_noalign)
field_separator ();
@@ -238,20 +241,26 @@
cli_spaces (struct ui_out *uiout, int numspaces)
{
cli_out_data *data = ui_out_data (uiout);
+ struct ui_file *stream;
if (data->suppress_output)
return;
- print_spaces_filtered (numspaces, data->stream);
+
+ stream = VEC_last (ui_filep, data->streams);
+ print_spaces_filtered (numspaces, stream);
}
static void
cli_text (struct ui_out *uiout, const char *string)
{
cli_out_data *data = ui_out_data (uiout);
+ struct ui_file *stream;
if (data->suppress_output)
return;
- fputs_filtered (string, data->stream);
+
+ stream = VEC_last (ui_filep, data->streams);
+ fputs_filtered (string, stream);
}
static void ATTRIBUTE_PRINTF (3, 0)
@@ -262,8 +271,13 @@
if (data->suppress_output)
return;
+
if (ui_out_get_verblvl (uiout) >= verbosity)
- vfprintf_unfiltered (data->stream, format, args);
+ {
+ struct ui_file *stream = VEC_last (ui_filep, data->streams);
+
+ vfprintf_unfiltered (stream, format, args);
+ }
}
static void
@@ -280,25 +294,24 @@
cli_flush (struct ui_out *uiout)
{
cli_out_data *data = ui_out_data (uiout);
+ struct ui_file *stream = VEC_last (ui_filep, data->streams);
- gdb_flush (data->stream);
+ gdb_flush (stream);
}
+/* OUTSTREAM as non-NULL will push OUTSTREAM on the stack of output streams
+ and make it therefore active. OUTSTREAM as NULL will pop the last pushed
+ output stream; it is an internal error if it does not exist. */
+
static int
cli_redirect (struct ui_out *uiout, struct ui_file *outstream)
{
cli_out_data *data = ui_out_data (uiout);
if (outstream != NULL)
- {
- data->original_stream = data->stream;
- data->stream = outstream;
- }
- else if (data->original_stream != NULL)
- {
- data->stream = data->original_stream;
- data->original_stream = NULL;
- }
+ VEC_safe_push (ui_filep, data->streams, outstream);
+ else
+ VEC_pop (ui_filep, data->streams);
return 0;
}
@@ -315,10 +328,11 @@
const char *format,...)
{
cli_out_data *data = ui_out_data (uiout);
+ struct ui_file *stream = VEC_last (ui_filep, data->streams);
va_list args;
va_start (args, format);
- vfprintf_filtered (data->stream, format, args);
+ vfprintf_filtered (stream, format, args);
va_end (args);
}
@@ -329,8 +343,9 @@
field_separator (void)
{
cli_out_data *data = ui_out_data (uiout);
+ struct ui_file *stream = VEC_last (ui_filep, data->streams);
- fputc_filtered (' ', data->stream);
+ fputc_filtered (' ', stream);
}
/* This is the CLI ui-out implementation functions vector */
@@ -364,8 +379,11 @@
void
cli_out_data_ctor (cli_out_data *self, struct ui_file *stream)
{
- self->stream = stream;
- self->original_stream = NULL;
+ gdb_assert (stream != NULL);
+
+ self->streams = NULL;
+ VEC_safe_push (ui_filep, self->streams, stream);
+
self->suppress_output = 0;
}
@@ -385,8 +403,10 @@
cli_out_set_stream (struct ui_out *uiout, struct ui_file *stream)
{
cli_out_data *data = ui_out_data (uiout);
- struct ui_file *old = data->stream;
+ struct ui_file *old;
+
+ old = VEC_pop (ui_filep, data->streams);
+ VEC_quick_push (ui_filep, data->streams, stream);
- data->stream = stream;
return old;
}
--- src/gdb/cli-out.h 2010/04/18 00:11:55 1.11
+++ src/gdb/cli-out.h 2010/09/03 15:42:02 1.12
@@ -22,14 +22,19 @@
#define CLI_OUT_H
#include "ui-out.h"
+#include "vec.h"
+
+/* Used for cli_ui_out_data->streams. */
+
+typedef struct ui_file *ui_filep;
+DEF_VEC_P (ui_filep);
/* These are exported so that they can be extended by other `ui_out'
implementations, like TUI's. */
struct cli_ui_out_data
{
- struct ui_file *stream;
- struct ui_file *original_stream;
+ VEC (ui_filep) *streams;
int suppress_output;
};
--- src/gdb/python/py-breakpoint.c 2010/07/01 10:36:12 1.4
+++ src/gdb/python/py-breakpoint.c 2010/09/03 15:42:03 1.5
@@ -474,12 +474,12 @@
string_file = mem_fileopen ();
chain = make_cleanup_ui_file_delete (string_file);
+ ui_out_redirect (uiout, string_file);
TRY_CATCH (except, RETURN_MASK_ALL)
{
- ui_out_redirect (uiout, string_file);
print_command_lines (uiout, breakpoint_commands (bp), 0);
- ui_out_redirect (uiout, NULL);
}
+ ui_out_redirect (uiout, NULL);
cmdstr = ui_file_xstrdup (string_file, &length);
GDB_PY_HANDLE_EXCEPTION (except);
### src/gdb/testsuite/ChangeLog 2010/09/02 15:19:56 1.2435
### src/gdb/testsuite/ChangeLog 2010/09/03 15:42:04 1.2436
## -1,3 +1,7 @@
+2010-09-03 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * gdb.base/ui-redirect.exp: New file.
+
2010-09-02 Jan Kratochvil <jan.kratochvil@redhat.com>
Joel Brobecker <brobecker@adacore.com>
--- src/gdb/testsuite/gdb.base/ui-redirect.exp
+++ src/gdb/testsuite/gdb.base/ui-redirect.exp 2010-09-11 18:42:40.040910000 +0000
@@ -0,0 +1,41 @@
+# Copyright (C) 2010 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+if { [prepare_for_testing ui-redirect.exp ui-redirect start.c] } {
+ return -1
+}
+
+gdb_breakpoint main
+
+set test "commands"
+gdb_test_multiple $test $test {
+ -re "End with a line saying just \"end\"\\.\r\n>$" {
+ pass $test
+ }
+}
+
+set test "print 1"
+gdb_test_multiple $test $test {
+ -re "\r\n>$" {
+ pass $test
+ }
+}
+gdb_test_no_output "end"
+
+gdb_test_no_output "set logging file /dev/null"
+gdb_test "set logging on" "Copying output to /dev/null\\."
+gdb_test "save breakpoints /dev/null" "Saved to file '/dev/null'\\."
+gdb_test "set logging off" "Done logging to /dev/null\\."
+gdb_test "help" "List of classes of commands:.*"
https://bugzilla.redhat.com/show_bug.cgi?id=627506
Re: [patch] Fix uiout for execute_command_to_string
http://sourceware.org/ml/gdb-patches/2010-09/msg00235.html
http://sourceware.org/ml/gdb-cvs/2010-09/msg00080.html
### src/gdb/ChangeLog 2010/09/10 16:17:11 1.12170
### src/gdb/ChangeLog 2010/09/11 16:00:20 1.12171
## -1,3 +1,21 @@
+2010-09-11 Jan Kratochvil <jan.kratochvil@redhat.com>
+ Paul Bolle <pebolle@tiscali.nl>
+
+ Redirect also uiout and stdtarg{,err} in execute_command_to_string.
+ * cli-logging.c (struct saved_output_files) <targerr>: New.
+ (set_logging_redirect, pop_output_files, handle_redirections):
+ Redirect also gdb_stdtargerr.
+ * defs.h (struct ui_out, make_cleanup_ui_out_redirect_pop): New
+ declarations.
+ * event-top.c (gdb_setup_readline, gdb_disable_readline): Redirect
+ also gdb_stdtargerr.
+ * top.c (execute_command_to_string): Move make_cleanup_ui_file_delete
+ to the top. Redirect also gdb_stdlog, gdb_stdtarg and gdb_stdtargerr.
+ Use ui_out_redirect, register make_cleanup_ui_out_redirect_pop.
+ * tui/tui-io.c (tui_setup_io): Redirect also gdb_stdtargerr.
+ * utils.c (do_ui_out_redirect_pop, make_cleanup_ui_out_redirect_pop):
+ New functions.
+
### src/gdb/testsuite/ChangeLog 2010/09/10 20:29:25 1.2444
### src/gdb/testsuite/ChangeLog 2010/09/11 16:00:26 1.2445
## -1,3 +1,8 @@
+2010-09-11 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * gdb.python/python.exp (set height 0, collect help from uiout)
+ (verify help to uiout): New tests.
+
[ gdb_stdtargerr handling dropped. ]
--- src/gdb/defs.h 2010/08/31 18:08:43 1.278
+++ src/gdb/defs.h 2010/09/11 16:00:25 1.279
@@ -337,6 +337,10 @@
struct ui_file;
extern struct cleanup *make_cleanup_ui_file_delete (struct ui_file *);
+struct ui_out;
+extern struct cleanup *
+ make_cleanup_ui_out_redirect_pop (struct ui_out *uiout);
+
struct section_addr_info;
extern struct cleanup *(make_cleanup_free_section_addr_info
(struct section_addr_info *));
--- src/gdb/top.c 2010/08/07 15:00:37 1.183
+++ src/gdb/top.c 2010/09/11 16:00:25 1.184
@@ -475,12 +475,23 @@
str_file = mem_fileopen ();
+ make_cleanup_ui_file_delete (str_file);
make_cleanup_restore_ui_file (&gdb_stdout);
make_cleanup_restore_ui_file (&gdb_stderr);
- make_cleanup_ui_file_delete (str_file);
+ make_cleanup_restore_ui_file (&gdb_stdlog);
+ make_cleanup_restore_ui_file (&gdb_stdtarg);
+ make_cleanup_restore_ui_file (&gdb_stdtargerr);
+
+ if (ui_out_redirect (uiout, str_file) < 0)
+ warning (_("Current output protocol does not support redirection"));
+ else
+ make_cleanup_ui_out_redirect_pop (uiout);
gdb_stdout = str_file;
gdb_stderr = str_file;
+ gdb_stdlog = str_file;
+ gdb_stdtarg = str_file;
+ gdb_stdtargerr = str_file;
execute_command (p, from_tty);
--- src/gdb/utils.c 2010/08/07 15:00:37 1.239
+++ src/gdb/utils.c 2010/09/11 16:00:25 1.240
@@ -311,6 +311,26 @@
return make_my_cleanup (&cleanup_chain, do_ui_file_delete, arg);
}
+/* Helper function for make_cleanup_ui_out_redirect_pop. */
+
+static void
+do_ui_out_redirect_pop (void *arg)
+{
+ struct ui_out *uiout = arg;
+
+ if (ui_out_redirect (uiout, NULL) < 0)
+ warning (_("Cannot restore redirection of the current output protocol"));
+}
+
+/* Return a new cleanup that pops the last redirection by ui_out_redirect
+ with NULL parameter. */
+
+struct cleanup *
+make_cleanup_ui_out_redirect_pop (struct ui_out *uiout)
+{
+ return make_my_cleanup (&cleanup_chain, do_ui_out_redirect_pop, uiout);
+}
+
static void
do_free_section_addr_info (void *arg)
{
--- gdb-7.2/gdb/testsuite/gdb.python/python.exp-orig 2010-08-09 21:23:00.000000000 +0200
+++ gdb-7.2/gdb/testsuite/gdb.python/python.exp 2010-09-11 20:49:22.000000000 +0200
@@ -110,3 +110,9 @@ gdb_test_multiple "python print \"\\n\"
}
}
gdb_test "q" "Quit" "verify pagination afterwards: q"
+
+gdb_test_no_output "set height 0"
+
+gdb_test_no_output "python a = gdb.execute('help', to_string=True)" "collect help from uiout"
+
+gdb_test "python print a" ".*aliases -- Aliases of other commands.*" "verify help to uiout"

139
gdb.spec
View File

@ -23,18 +23,19 @@ Name: gdb%{?_with_debug:-debug}
# Set version to contents of gdb/version.in.
# NOTE: the FSF gdb versions are numbered N.M for official releases, like 6.3
# and, since January 2005, X.Y.Z.date for daily snapshots, like 6.3.50.20050112 # (daily snapshot from mailine), or 6.3.0.20040112 (head of the release branch).
Version: 7.2
Version: 7.2.50.20101117
# 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: 25%{?_with_upstream:.upstream}%{dist}
Release: 1%{?_with_upstream:.upstream}%{dist}
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and GFDL and BSD and Public Domain
Group: Development/Debuggers
# Do not provide URL for snapshots as the file lasts there only for 2 days.
# ftp://sourceware.org/pub/gdb/snapshots/current/gdb-%{version}.tar.bz2
# ftp://sourceware.org/pub/gdb/snapshots/branch/gdb-%{version}.tar.bz2
# ftp://sourceware.org/pub/gdb/releases/gdb-%{version}.tar.bz2
Source: ftp://sourceware.org/pub/gdb/snapshots/branch/gdb-%{version}.tar.bz2
Source: ftp://sourceware.org/pub/gdb/snapshots/current/gdb-%{version}.tar.bz2
Buildroot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
URL: http://gnu.org/software/gdb/
@ -276,8 +277,8 @@ Patch229: gdb-6.3-bz140532-ppc-unwinding-test.patch
Patch231: gdb-6.3-bz202689-exec-from-pthread-test.patch
# Backported fixups post the source tarball.
#=drop: Just backports.
Patch232: gdb-upstream.patch
#Xdrop: Just backports.
#Patch232: gdb-upstream.patch
# Testcase for PPC Power6/DFP instructions disassembly (BZ 230000).
#=fedoratest+ppc
@ -291,10 +292,6 @@ Patch235: gdb-6.3-bz231832-obstack-2gb.patch
#=push
Patch241: gdb-6.6-bz225783-gdb-debuginfo-paths.patch
# Allow running `/usr/bin/gcore' with provided but inaccessible tty (BZ 229517).
#=fedoratest: Drop the obsoleted gdb_gcore.sh change.
Patch245: gdb-6.6-bz229517-gcore-without-terminal.patch
# Notify user of a child forked process being detached (BZ 235197).
#=push: This is more about discussion if/what should be printed.
Patch247: gdb-6.6-bz235197-fork-detach-info.patch
@ -357,8 +354,6 @@ Patch289: gdb-6.5-ia64-libunwind-leak-test.patch
Patch290: gdb-6.5-missed-trap-on-step-test.patch
# Support DW_TAG_interface_type the same way as DW_TAG_class_type (BZ 426600).
#=maybepush
Patch293: gdb-6.7-bz426600-DW_TAG_interface_type-fix.patch
#=fedoratest
Patch294: gdb-6.7-bz426600-DW_TAG_interface_type-test.patch
@ -419,10 +414,6 @@ Patch330: gdb-6.8-bz436037-reg-no-longer-active.patch
#=push: Useful only after gdb-6.8-attach-signalled-detach-stopped.patch .
Patch331: gdb-6.8-quit-never-aborts.patch
# Support DW_TAG_constant for Fortran in recent Fedora/RH GCCs.
#=push
Patch332: gdb-6.8-fortran-tag-constant.patch
# Fix attaching to stopped processes and/or pending signals.
#=push+work
Patch337: gdb-6.8-attach-signalled-detach-stopped.patch
@ -435,19 +426,14 @@ Patch343: gdb-6.8-watchpoint-conditionals-test.patch
#=fedoratest
Patch348: gdb-6.8-bz466901-backtrace-full-prelinked.patch
# The merged branch `archer' of: http://sourceware.org/gdb/wiki/ProjectArcher
# The merged branch `archer-jankratochvil-fedora15' of:
# http://sourceware.org/gdb/wiki/ProjectArcher
#=push
#archer-jankratochvil-vla
#=push
#archer-jankratochvil-watchpoint3
#=push
#archer-jankratochvil-ifunc
#=push
#archer-pmuldoon-next-over-throw2
#=maybepush
#archer-tromey-python
#=maybepush
#archer-tromey-optional-psymtab
Patch349: gdb-archer.patch
#=maybepush
Patch420: gdb-archer-ada.patch
@ -512,12 +498,6 @@ Patch412: gdb-unused-revert.patch
#=push+work: It should be fixed properly instead.
Patch417: gdb-bz541866-rwatch-before-run.patch
# Fix crash on C++ types in some debug info files (BZ 575292, Keith Seitz).
# Temporarily workaround the crash of BZ 575292 as there was now BZ 585445.
# Re-enable the BZ 575292 and BZ 585445 C++ fix using an updated patch.
#=maybepush: Not sure if all the parts are upstream.
Patch451: gdb-bz575292-delayed-physname.patch
# Fix crash when using GNU IFUNC call from breakpoint condition.
#=drop: After archer-jankratochvil-ifunc gets in this one gets obsoleted.
Patch454: gdb-bz539590-gnu-ifunc-fix-cond.patch
@ -526,10 +506,6 @@ Patch454: gdb-bz539590-gnu-ifunc-fix-cond.patch
#=push+work: Currently it is still not fully safe.
Patch459: gdb-moribund-utrace-workaround.patch
# Remove core file when starting a process (BZ 594560).
#=maybepush
Patch461: gdb-bz594560-core-vs-process.patch
# Fix follow-exec for C++ programs (bugreported by Martin Stransky).
#=fedoratest
Patch470: gdb-archer-next-over-throw-cxx-exec.patch
@ -544,18 +520,10 @@ Patch486: gdb-bz562763-pretty-print-2d-vectors.patch
#=push+work: There are some outstanding issues, check the mails.
Patch487: gdb-bz562763-pretty-print-2d-vectors-libstdcxx.patch
# Fix prelinked executables with sepdebug and copy relocations (BZ 614659).
#=drop: Upstreamed.
Patch489: gdb-bz614659-prelink-dynbss.patch
# Provide /usr/bin/gdb-add-index for rpm-build (Tom Tromey).
#=drop: Re-check against the upstream version.
Patch491: gdb-gdb-add-index-script.patch
# Fix gcore from very small terminal windows (BZ 555076).
#=drop: Upstreamed.
Patch493: gdb-bz555076-gcore-small-height.patch
# Out of memory is just an error, not fatal (uninitialized VLS vars, BZ 568248).
#=drop+work: Inferior objects should be read in parts, then this patch gets obsoleted.
Patch496: gdb-bz568248-oom-is-error.patch
@ -564,76 +532,23 @@ Patch496: gdb-bz568248-oom-is-error.patch
#=push
Patch497: gdb-false-gcc-warning.patch
# Do not crash on broken separate debuginfo due to old elfutils (BZ 631575).
#=drop: Upstreamed.
Patch499: gdb-bz631575-gdb-index-nobits.patch
# Fix symbol lookup misses methods of current class (BZ 631158, Sami Wagiaalla).
#=maybepush
Patch500: gdb-bz631158-cxx-this-lookup.patch
# Fix Ada regression when any .gdb_index library is present.
#=drop: Upstreamed.
Patch501: gdb-gdbindex-ada-regression.patch
# python: load *-gdb.py for shlibs during attach (BZ 634660).
#=drop: Upstreamed.
Patch502: gdb-bz634660-gdbpy-load-on-attach.patch
# Fix double free crash during overload resolution (PR 12028, Sami Wagiaalla).
#=drop: Upstreamed.
Patch503: gdb-pr12028-double-free.patch
# Fix gcore writer for -Wl,-z,relro (PR corefiles/11804).
#=push: There is different patch on gdb-patches, waiting now for resolution in kernel.
Patch504: gdb-bz623749-gcore-relro.patch
# Fix infinite loop crash on self-referencing class (BZ 627432).
#=drop: Upstreamed.
Patch506: gdb-bz627432-loop-static-self-class.patch
# Fix lost siginfo_t in linux-nat (BZ 592031).
#=drop: Upstreamed.
Patch507: gdb-bz592031-siginfo-lost-1of5.patch
#=drop: Upstreamed.
Patch508: gdb-bz592031-siginfo-lost-2of5.patch
#=drop: Upstreamed.
Patch509: gdb-bz592031-siginfo-lost-3of5.patch
#=push
Patch510: gdb-bz592031-siginfo-lost-4of5.patch
#=push
Patch511: gdb-bz592031-siginfo-lost-5of5.patch
# Fix .gdb_index for big-endian hosts (Tom Tromey).
#=drop: Upstreamed.
Patch514: gdb-gdbindex-v1-to-v2.patch
#=drop: Upstreamed.
Patch512: gdb-gdbindex-bigendian.patch
#=drop: Upstreamed.
Patch515: gdb-gdbindex-v2-to-v3.patch
# [ifunc] Fix crash on deleting watchpoint of an autovariable (BZ 637770).
#=drop: A part of archer-jankratochvil-ifunc work.
Patch513: gdb-bz637770-ifunc-watchpoint-delete.patch
# Fix python stale error state, also fix its save/restore (BZ 639089).
#=drop: Just a backport.
Patch518: gdb-testsuite-lib-python.patch
#=drop: Upstreamed.
Patch516: gdb-python-error-state.patch
# Fix inferior exec of new PIE x86_64 (BZ 638979).
#=drop: Upstreamed.
Patch517: gdb-exec-pie-amd64.patch
# Fix crash on CTRL-C while reading an ELF symbol file (BZ 642879).
#=push
Patch520: gdb-bz642879-elfread-sigint-stale.patch
# iFort compat. - case insensitive DWARF not in lowercase (BZ 645773).
Patch522: gdb-bz645773-ifort-case-1of3.patch
Patch523: gdb-bz645773-ifort-case-2of3.patch
Patch524: gdb-bz645773-ifort-case-3of3.patch
# Fix next/finish/etc -vs- exceptions (Tom Tromey).
#=push
Patch525: gdb-next-over-throw.patch
BuildRequires: ncurses-devel%{?_isa} texinfo gettext flex bison expat-devel%{?_isa}
Requires: readline%{?_isa}
@ -769,7 +684,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
%patch420 -p1
%patch1 -p1
@ -820,7 +735,6 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
%patch234 -p1
%patch235 -p1
%patch241 -p1
%patch245 -p1
%patch247 -p1
%patch254 -p1
%patch258 -p1
@ -837,7 +751,6 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
%patch287 -p1
%patch289 -p1
%patch290 -p1
%patch293 -p1
%patch294 -p1
%patch296 -p1
%patch298 -p1
@ -853,7 +766,6 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
%patch329 -p1
%patch330 -p1
%patch331 -p1
%patch332 -p1
%patch337 -p1
%patch343 -p1
%patch348 -p1
@ -872,10 +784,8 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
%patch408 -p1
%patch412 -p1
%patch417 -p1
%patch451 -p1
%patch454 -p1
%patch459 -p1
%patch461 -p1
%patch470 -p1
%patch475 -p1
%patch486 -p1
@ -883,34 +793,14 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c
#patch487 -p1
%patch415 -p1
%patch519 -p1
%patch489 -p1
%patch491 -p1
%patch493 -p1
%patch496 -p1
%patch497 -p1
%patch499 -p1
%patch500 -p1
%patch501 -p1
%patch502 -p1
%patch503 -p1
%patch504 -p1
%patch506 -p1
%patch507 -p1
%patch508 -p1
%patch509 -p1
%patch510 -p1
%patch511 -p1
%patch514 -p1
%patch512 -p1
%patch515 -p1
%patch513 -p1
%patch516 -p1
%patch517 -p1
%patch518 -p1
%patch520 -p1
%patch522 -p1
%patch523 -p1
%patch524 -p1
%patch525 -p1
%patch393 -p1
%patch335 -p1
@ -1281,6 +1171,9 @@ fi
%endif
%changelog
* Wed Nov 17 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2.50.20101117-1.fc15
- Rebase to FSF GDB 7.2.50.20101117 (which is a 7.3 pre-release).
* Sun Nov 7 2010 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.2-25.fc14
- iFort compat. - case insensitive DWARF not in lowercase (BZ 645773).

View File

@ -1 +1 @@
64260e6c56979ee750a01055f16091a5 gdb-7.2.tar.bz2
b13143c7c7e70f929c86c3f363247909 gdb-7.2.50.20101117.tar.bz2