Accepting request 125095 from devel:gcc

- Merge from gdb-7.4.50.20120603-3.fc18.src.rpm.
  * Wed Jun  6 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120603-3.fc18
  - Disable -lmcheck in the development builds.
  - Fix assertion on some files as glibc-2.15.90-8.fc18 (Doug Evans).
  
  * Sun Jun  3 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120603-2.fc18
  - Fix Release.
  - Make yum --enablerepo compatible with at least mock-1.1.21-1.fc16 Rawhide cfg.
  
  * Sun Jun  3 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120602-1.fc18
  - Rebase to FSF GDB 7.4.50.20120602.
  - [testsuite] BuildRequire gcc-go.
  - Drop printing 2D C++ vectors as matrices which no longer worked (BZ 562763).
  - Fix dejagnu-1.5-4.fc17 compatibility for Go (for BZ 635651).
  - Use librpm.so.3 for rpm-4.10.0 in Fedora 18.
  - Revert recent breakage of UNIX objfiles order for symbols lookup.
  
  * Sat Jun  2 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-48.fc17
  - [ppc] Fix hardware watchpoints on PowerPC (BZ 827600, Edjunior Machado).
  
  * Mon May 28 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-47.fc17
  - Workaround PR libc/14166 for inferior calls of strstr.
  
  * Mon May 14 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-46.fc17
  - [RHEL5] Workaround doc build race.
  
  * Mon May 14 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-45.fc17
  - Rename "set auto-load" patchset variable $ddir to $datadir.
  
  * Wed May  9 2012 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.4.50.20120120-44.fc17

OBS-URL: https://build.opensuse.org/request/show/125095
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/gdb?expand=0&rev=88
This commit is contained in:
Stephan Kulow
2012-06-16 04:55:29 +00:00
committed by Git OBS Bridge
parent c0ed4ee70c
commit cfb8ad09aa
86 changed files with 9093 additions and 34330 deletions

View File

@@ -1,8 +1,8 @@
Index: gdb-7.2.90.20110429/gdb/corelow.c
Index: gdb-7.4.50.20120602/gdb/corelow.c
===================================================================
--- gdb-7.2.90.20110429.orig/gdb/corelow.c 2011-02-26 03:07:07.000000000 +0100
+++ gdb-7.2.90.20110429/gdb/corelow.c 2011-05-03 05:14:57.000000000 +0200
@@ -47,6 +47,9 @@
--- gdb-7.4.50.20120602.orig/gdb/corelow.c 2012-06-02 21:07:03.695251272 +0200
+++ gdb-7.4.50.20120602/gdb/corelow.c 2012-06-02 21:07:16.464246569 +0200
@@ -46,6 +46,9 @@
#include "filenames.h"
#include "progspace.h"
#include "objfiles.h"
@@ -10,9 +10,9 @@ Index: gdb-7.2.90.20110429/gdb/corelow.c
+#include "elf/common.h"
+#include "gdbcmd.h"
#ifndef O_LARGEFILE
@@ -278,6 +281,52 @@ add_to_thread_list (bfd *abfd, asection
#define O_LARGEFILE 0
@@ -275,6 +278,52 @@ add_to_thread_list (bfd *abfd, asection
inferior_ptid = ptid; /* Yes, make it current. */
}
@@ -65,7 +65,7 @@ Index: gdb-7.2.90.20110429/gdb/corelow.c
/* This routine opens and sets up the core file bfd. */
static void
@@ -379,6 +428,12 @@ core_open (char *filename, int from_tty)
@@ -377,6 +426,12 @@ core_open (char *filename, int from_tty)
push_target (&core_ops);
discard_cleanups (old_chain);
@@ -78,7 +78,7 @@ Index: gdb-7.2.90.20110429/gdb/corelow.c
/* Do this before acknowledging the inferior, so if
post_create_inferior throws (can happen easilly if you're loading
a core file with the wrong exec), we aren't left with threads
@@ -932,4 +987,11 @@ _initialize_corelow (void)
@@ -935,4 +990,11 @@ _initialize_corelow (void)
init_core_ops ();
add_target (&core_ops);
@@ -90,11 +90,11 @@ Index: gdb-7.2.90.20110429/gdb/corelow.c
+ NULL, NULL, NULL,
+ &setlist, &showlist);
}
Index: gdb-7.2.90.20110429/gdb/doc/gdb.texinfo
Index: gdb-7.4.50.20120602/gdb/doc/gdb.texinfo
===================================================================
--- gdb-7.2.90.20110429.orig/gdb/doc/gdb.texinfo 2011-05-03 05:14:56.000000000 +0200
+++ gdb-7.2.90.20110429/gdb/doc/gdb.texinfo 2011-05-03 05:14:57.000000000 +0200
@@ -15356,6 +15356,27 @@ information files.
--- gdb-7.4.50.20120602.orig/gdb/doc/gdb.texinfo 2012-06-02 21:07:03.695251272 +0200
+++ gdb-7.4.50.20120602/gdb/doc/gdb.texinfo 2012-06-02 21:07:16.480246563 +0200
@@ -16502,6 +16502,27 @@ information files.
@end table
@@ -122,71 +122,74 @@ Index: gdb-7.2.90.20110429/gdb/doc/gdb.texinfo
@cindex @code{.gnu_debuglink} sections
@cindex debug link sections
A debug link is a special section of the executable file named
Index: gdb-7.2.90.20110429/gdb/solib-svr4.c
Index: gdb-7.4.50.20120602/gdb/solib-svr4.c
===================================================================
--- gdb-7.2.90.20110429.orig/gdb/solib-svr4.c 2011-05-03 05:14:56.000000000 +0200
+++ gdb-7.2.90.20110429/gdb/solib-svr4.c 2011-05-03 05:14:57.000000000 +0200
@@ -1179,9 +1179,49 @@ svr4_current_sos (void)
safe_strerror (errcode));
else
{
- strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
- new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
- strcpy (new->so_original_name, new->so_name);
+ struct build_id *build_id;
+
+ strncpy (new->so_original_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
+ new->so_original_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
+ /* May get overwritten below. */
+ strcpy (new->so_name, new->so_original_name);
+
+ build_id = build_id_addr_get (LM_DYNAMIC_FROM_LINK_MAP (new));
+ if (build_id != NULL)
+ {
+ char *name, *build_id_filename;
+
+ /* Missing the build-id matching separate debug info file
+ would be handled while SO_NAME gets loaded. */
+ name = build_id_to_filename (build_id, &build_id_filename, 0);
+ if (name != NULL)
+ {
+ strncpy (new->so_name, name, SO_NAME_MAX_PATH_SIZE - 1);
+ new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
+ xfree (name);
+ }
+ else
+ {
+ debug_print_missing (new->so_name, build_id_filename);
+
+ /* In the case the main executable was found according to
+ its build-id (from a core file) prevent loading
+ a different build of a library with accidentally the
+ same SO_NAME.
+
+ It suppresses bogus backtraces (and prints "??" there
+ instead) if the on-disk files no longer match the
+ running program version. */
+
+ if (symfile_objfile != NULL
+ && (symfile_objfile->flags
+ & OBJF_BUILD_ID_CORE_LOADED) != 0)
+ new->so_name[0] = 0;
+ }
+
+ xfree (build_id_filename);
+ xfree (build_id);
+ }
}
xfree (buffer);
--- gdb-7.4.50.20120602.orig/gdb/solib-svr4.c 2012-06-02 21:07:03.695251272 +0200
+++ gdb-7.4.50.20120602/gdb/solib-svr4.c 2012-06-02 21:07:16.510246552 +0200
@@ -1227,9 +1227,52 @@ svr4_read_so_list (CORE_ADDR lm, struct
continue;
}
Index: gdb-7.2.90.20110429/gdb/elfread.c
- strncpy (new->so_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
- new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
- strcpy (new->so_original_name, new->so_name);
+ {
+ struct build_id *build_id;
+
+ strncpy (new->so_original_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
+ new->so_original_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
+ /* May get overwritten below. */
+ strcpy (new->so_name, new->so_original_name);
+
+ build_id = build_id_addr_get (new->lm_info->l_ld);
+ if (build_id != NULL)
+ {
+ char *name, *build_id_filename;
+
+ /* Missing the build-id matching separate debug info file
+ would be handled while SO_NAME gets loaded. */
+ name = build_id_to_filename (build_id, &build_id_filename, 0);
+ if (name != NULL)
+ {
+ strncpy (new->so_name, name, SO_NAME_MAX_PATH_SIZE - 1);
+ new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
+ xfree (name);
+ }
+ else
+ {
+ debug_print_missing (new->so_name, build_id_filename);
+
+ /* In the case the main executable was found according to
+ its build-id (from a core file) prevent loading
+ a different build of a library with accidentally the
+ same SO_NAME.
+
+ It suppresses bogus backtraces (and prints "??" there
+ instead) if the on-disk files no longer match the
+ running program version. */
+
+ if (symfile_objfile != NULL
+ && (symfile_objfile->flags
+ & OBJF_BUILD_ID_CORE_LOADED) != 0)
+ new->so_name[0] = 0;
+ }
+
+ xfree (build_id_filename);
+ xfree (build_id);
+ }
+ }
+
xfree (buffer);
/* If this entry has no name, or its name matches the name
Index: gdb-7.4.50.20120602/gdb/elfread.c
===================================================================
--- gdb-7.2.90.20110429.orig/gdb/elfread.c 2011-05-03 05:14:56.000000000 +0200
+++ gdb-7.2.90.20110429/gdb/elfread.c 2011-05-03 05:19:27.000000000 +0200
@@ -49,6 +49,11 @@
#include "infcall.h"
--- gdb-7.4.50.20120602.orig/gdb/elfread.c 2012-06-02 21:07:03.695251272 +0200
+++ gdb-7.4.50.20120602/gdb/elfread.c 2012-06-02 21:07:56.264232049 +0200
@@ -44,6 +44,11 @@
#include "gdbthread.h"
#include "regcache.h"
#include "bcache.h"
+#include "libbfd.h"
+#include "gdbcore.h"
+#include "gdbcmd.h"
@@ -195,7 +198,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
extern void _initialize_elfread (void);
@@ -1077,16 +1082,65 @@ elf_gnu_ifunc_resolver_return_stop (stru
@@ -1072,16 +1077,65 @@ elf_gnu_ifunc_resolver_return_stop (stru
update_breakpoint_locations (b, sals, sals_end);
}
@@ -220,8 +223,9 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
-/* Locate NT_GNU_BUILD_ID from ABFD and return its content. */
+/* Locate NT_GNU_BUILD_ID and return its matching debug filename.
+ FIXME: NOTE decoding should be unified with the BFD core notes decoding. */
+
+struct build_id *
static struct build_id *
-build_id_bfd_get (bfd *abfd)
+build_id_buf_get (bfd *templ, gdb_byte *buf, bfd_size_type size)
+{
+ bfd_byte *p;
@@ -256,14 +260,13 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
+
+/* Separate debuginfo files have corrupted PHDR but SHDR is correct there.
+ Locate NT_GNU_BUILD_ID from ABFD and return its content. */
static struct build_id *
-build_id_bfd_get (bfd *abfd)
+
+static struct build_id *
+build_id_bfd_shdr_get (bfd *abfd)
{
struct build_id *retval;
@@ -1102,6 +1156,348 @@ build_id_bfd_get (bfd *abfd)
@@ -1097,6 +1151,348 @@ build_id_bfd_get (bfd *abfd)
return retval;
}
@@ -359,7 +362,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
+/* Translate an ELF program header table entry in external format into an
+ ELF program header table entry in internal format. */
+
+void
+static void
+elf_swap_phdr_in (bfd *abfd,
+ const Elf64_External_Phdr *src64,
+ Elf_Internal_Phdr *dst)
@@ -612,7 +615,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
/* Return if FILENAME has NT_GNU_BUILD_ID matching the CHECK value. */
static int
@@ -1116,7 +1512,7 @@ build_id_verify (const char *filename, s
@@ -1111,7 +1507,7 @@ build_id_verify (const char *filename, s
if (abfd == NULL)
return 0;
@@ -621,7 +624,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
if (found == NULL)
warning (_("File \"%s\" has no build-id, file skipped"), filename);
@@ -1134,14 +1530,15 @@ build_id_verify (const char *filename, s
@@ -1129,17 +1525,18 @@ build_id_verify (const char *filename, s
return retval;
}
@@ -633,6 +636,9 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
{
char *link, *debugdir, *retval = NULL;
+ char *link_all = NULL;
VEC (char_ptr) *debugdir_vec;
struct cleanup *back_to;
int ix;
/* DEBUG_FILE_DIRECTORY/.build-id/ab/cdef */
- link = alloca (strlen (debug_file_directory) + (sizeof "/.build-id/" - 1) + 1
@@ -642,29 +648,25 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
/* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
cause "/.build-id/..." lookups. */
@@ -1152,6 +1549,8 @@ build_id_to_debug_filename (struct build
char *s, *debugdir_end;
size_t debugdir_len = strlen (debugdir);
gdb_byte *data = build_id->data;
size_t size = build_id->size;
+ unsigned seqno;
+ struct stat statbuf_trash;
char *s;
while (*debugdir == DIRNAME_SEPARATOR)
debugdir++;
@@ -1172,39 +1571,242 @@ build_id_to_debug_filename (struct build
memcpy (link, debugdir, debugdir_len);
@@ -1166,37 +1565,240 @@ build_id_to_debug_filename (struct build
*s++ = '/';
while (size-- > 0)
s += sprintf (s, "%02x", (unsigned) *data++);
- strcpy (s, ".debug");
-
- /* lrealpath() is expensive even for the usually non-existent files. */
- if (access (link, F_OK) == 0)
- retval = lrealpath (link);
- if (retval != NULL && !build_id_verify (retval, build_id))
+ for (seqno = 0;; seqno++)
{
- xfree (retval);
- retval = NULL;
+ {
+ char *s2;
+
+ if (seqno)
@@ -682,7 +684,8 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
+ strcpy (s2, ".debug");
+ else
+ *s2 = 0;
+
- if (retval != NULL && !build_id_verify (retval, build_id))
+ /* `access' automatically dereferences LINK. */
+ if (lstat (link, &statbuf_trash) != 0)
+ {
@@ -700,15 +703,16 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
+
+ if (retval)
+ break;
}
if (retval != NULL)
- break;
+ {
+ /* LINK_ALL is not used below in this non-NULL RETVAL case. */
+ break;
+ }
+
+ if (retval != NULL)
{
- xfree (retval);
- retval = NULL;
+ /* LINK_ALL is not used below in this non-NULL RETVAL case. */
+ break;
}
+ if (link_all == NULL)
+ link_all = xstrdup (link);
+ else
@@ -723,14 +727,12 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
+
+ strcpy (&link_all[len_orig + 1], link);
+ }
debugdir = debugdir_end;
}
while (*debugdir != 0);
+ }
+
+ if (link_return != NULL)
+ {
+ if (retval != NULL)
if (retval != NULL)
- break;
+ {
+ *link_return = link;
+ link = NULL;
@@ -740,13 +742,14 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
+ *link_return = link_all;
+ link_all = NULL;
+ }
+ }
}
+ xfree (link);
+ xfree (link_all);
+
+ return retval;
+}
+
do_cleanups (back_to);
return retval;
}
+/* This MISSING_FILEPAIR_HASH tracker is used only for the duplicite messages
+ Try to install the hash file ...
+ avoidance. */
@@ -769,9 +772,9 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
+
+ retval = obstack_alloc (&missing_filepair_obstack, size);
+ memset (retval, 0, size);
return retval;
}
+ return retval;
+}
+
+static hashval_t
+missing_filepair_hash_func (const struct missing_filepair *elem)
+{
@@ -905,7 +908,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
xfree (build_id);
/* Prevent looping on a stripped .debug file. */
if (build_id_name != NULL
@@ -1215,7 +1817,7 @@ find_separate_debug_file_by_buildid (str
@@ -1207,7 +1809,7 @@ find_separate_debug_file_by_buildid (str
xfree (build_id_name);
}
else if (build_id_name != NULL)
@@ -914,7 +917,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
}
return NULL;
}
@@ -1418,9 +2020,10 @@ elf_symfile_read (struct objfile *objfil
@@ -1427,9 +2029,10 @@ elf_symfile_read (struct objfile *objfil
`.note.gnu.build-id'. */
else if (!objfile_has_partial_symbols (objfile))
{
@@ -927,7 +930,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
if (debugfile == NULL)
debugfile = find_separate_debug_file_by_debuglink (objfile);
@@ -1432,6 +2035,12 @@ elf_symfile_read (struct objfile *objfil
@@ -1441,6 +2044,12 @@ elf_symfile_read (struct objfile *objfil
symbol_file_add_separate (abfd, symfile_flags, objfile);
xfree (debugfile);
}
@@ -940,7 +943,7 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
}
}
@@ -1911,4 +2520,16 @@ _initialize_elfread (void)
@@ -1770,4 +2379,16 @@ _initialize_elfread (void)
elf_objfile_gnu_ifunc_cache_data = register_objfile_data ();
gnu_ifunc_fns_p = &elf_gnu_ifunc_fns;
@@ -957,11 +960,11 @@ Index: gdb-7.2.90.20110429/gdb/elfread.c
+
+ observer_attach_executable_changed (debug_print_executable_changed);
}
Index: gdb-7.2.90.20110429/gdb/symfile.h
Index: gdb-7.4.50.20120602/gdb/symfile.h
===================================================================
--- gdb-7.2.90.20110429.orig/gdb/symfile.h 2011-05-03 05:14:56.000000000 +0200
+++ gdb-7.2.90.20110429/gdb/symfile.h 2011-05-03 05:14:57.000000000 +0200
@@ -605,6 +605,13 @@ void free_symfile_segment_data (struct s
--- gdb-7.4.50.20120602.orig/gdb/symfile.h 2012-06-02 21:07:03.695251272 +0200
+++ gdb-7.4.50.20120602/gdb/symfile.h 2012-06-02 21:07:16.524246547 +0200
@@ -615,6 +615,13 @@ void free_symfile_segment_data (struct s
extern struct cleanup *increment_reading_symtab (void);
@@ -974,12 +977,12 @@ Index: gdb-7.2.90.20110429/gdb/symfile.h
+
/* From dwarf2read.c */
extern int dwarf2_has_info (struct objfile *);
Index: gdb-7.2.90.20110429/gdb/testsuite/lib/gdb.exp
/* Names for a dwarf2 debugging section. The field NORMAL is the normal
Index: gdb-7.4.50.20120602/gdb/testsuite/lib/gdb.exp
===================================================================
--- gdb-7.2.90.20110429.orig/gdb/testsuite/lib/gdb.exp 2011-05-03 05:14:56.000000000 +0200
+++ gdb-7.2.90.20110429/gdb/testsuite/lib/gdb.exp 2011-05-03 05:14:57.000000000 +0200
@@ -1381,6 +1381,16 @@ proc default_gdb_start { } {
--- gdb-7.4.50.20120602.orig/gdb/testsuite/lib/gdb.exp 2012-06-02 21:07:03.695251272 +0200
+++ gdb-7.4.50.20120602/gdb/testsuite/lib/gdb.exp 2012-06-02 21:07:16.526246546 +0200
@@ -1388,6 +1388,16 @@ proc default_gdb_start { } {
warning "Couldn't set the width to 0."
}
}
@@ -996,13 +999,13 @@ Index: gdb-7.2.90.20110429/gdb/testsuite/lib/gdb.exp
return 0;
}
Index: gdb-7.2.90.20110429/gdb/testsuite/lib/mi-support.exp
Index: gdb-7.4.50.20120602/gdb/testsuite/lib/mi-support.exp
===================================================================
--- gdb-7.2.90.20110429.orig/gdb/testsuite/lib/mi-support.exp 2011-03-07 17:03:04.000000000 +0100
+++ gdb-7.2.90.20110429/gdb/testsuite/lib/mi-support.exp 2011-05-03 05:14:57.000000000 +0200
@@ -221,6 +221,16 @@ proc default_mi_gdb_start { args } {
}
}
--- gdb-7.4.50.20120602.orig/gdb/testsuite/lib/mi-support.exp 2012-06-02 21:07:03.695251272 +0200
+++ gdb-7.4.50.20120602/gdb/testsuite/lib/mi-support.exp 2012-06-02 21:07:16.535246544 +0200
@@ -213,6 +213,16 @@ proc default_mi_gdb_start { args } {
warning "Couldn't set the width to 0."
}
}
+ # Turn off the missing warnings as the testsuite does not expect it.
+ send_gdb "190-gdb-set build-id-verbose 0\n"
@@ -1014,16 +1017,16 @@ Index: gdb-7.2.90.20110429/gdb/testsuite/lib/mi-support.exp
+ warning "Could not disable the missing debug infos warnings.."
+ }
+ }
detect_async
Index: gdb-7.2.90.20110429/gdb/objfiles.h
# If allowing the inferior to have its own PTY then assign the inferior
# its own terminal device here.
if { $separate_inferior_pty } {
Index: gdb-7.4.50.20120602/gdb/objfiles.h
===================================================================
--- gdb-7.2.90.20110429.orig/gdb/objfiles.h 2011-03-07 17:17:29.000000000 +0100
+++ gdb-7.2.90.20110429/gdb/objfiles.h 2011-05-03 05:14:57.000000000 +0200
@@ -441,6 +441,10 @@ struct objfile
--- gdb-7.4.50.20120602.orig/gdb/objfiles.h 2012-06-02 21:07:03.695251272 +0200
+++ gdb-7.4.50.20120602/gdb/objfiles.h 2012-06-02 21:07:16.539246541 +0200
@@ -432,6 +432,10 @@ struct objfile
#define OBJF_PSYMTABS_READ (1 << 4)
#define OBJF_MAINLINE (1 << 5)
+/* This file was loaded according to the BUILD_ID_CORE_LOADS rules. */
+