Rebase to FSF GDB 7.5.50.20130310 (pre-7.6 snapshot).

- Fix various entry-values sub-optimal results.
This commit is contained in:
Jan Kratochvil 2013-03-10 17:12:43 +01:00
parent 350d5a31c9
commit 1054fa6d0b
10 changed files with 2049 additions and 306 deletions

2
.gitignore vendored
View File

@ -1,2 +1,2 @@
/gdb-libstdc++-v3-python-r155978.tar.bz2
/gdb-7.5.50.20130215.tar.bz2
/gdb-7.5.50.20130310.tar.bz2

View File

@ -1,7 +1,7 @@
Index: gdb-7.5.50.20130215/gdb/event-top.c
Index: gdb-7.5.50.20130310/gdb/event-top.c
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/event-top.c 2013-01-31 19:37:37.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/event-top.c 2013-02-15 22:36:11.217308539 +0100
--- gdb-7.5.50.20130310.orig/gdb/event-top.c 2013-01-31 19:37:37.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/event-top.c 2013-03-10 16:44:05.471586917 +0100
@@ -36,6 +36,7 @@
#include "continuations.h"
#include "gdbcmd.h" /* for dont_repeat() */
@ -28,10 +28,10 @@ Index: gdb-7.5.50.20130215/gdb/event-top.c
/* Each interpreter has its own rules on displaying the command
prompt. */
if (!current_interp_display_prompt_p ())
Index: gdb-7.5.50.20130215/gdb/elfread.c
Index: gdb-7.5.50.20130310/gdb/elfread.c
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/elfread.c 2013-02-15 22:35:36.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/elfread.c 2013-02-15 22:35:59.414292874 +0100
--- gdb-7.5.50.20130310.orig/gdb/elfread.c 2013-03-10 16:38:01.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/elfread.c 2013-03-10 16:44:05.472586918 +0100
@@ -49,6 +49,7 @@
#include "gdbcore.h"
#include "gdbcmd.h"
@ -40,7 +40,7 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
#include <sys/stat.h>
extern void _initialize_elfread (void);
@@ -1649,8 +1650,361 @@ build_id_to_filename (struct build_id *b
@@ -1628,8 +1629,361 @@ build_id_to_filename (const struct elf_b
return retval;
}
@ -403,7 +403,7 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
avoidance. */
struct missing_filepair
@@ -1704,11 +2058,17 @@ missing_filepair_change (void)
@@ -1683,11 +2037,17 @@ missing_filepair_change (void)
/* All their memory came just from missing_filepair_OBSTACK. */
missing_filepair_hash = NULL;
}
@ -421,7 +421,7 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
missing_filepair_change ();
}
@@ -1775,14 +2135,35 @@ debug_print_missing (const char *binary,
@@ -1754,14 +2114,35 @@ debug_print_missing (const char *binary,
*slot = missing_filepair;
@ -464,12 +464,12 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
}
static char *
Index: gdb-7.5.50.20130215/gdb/symfile.h
Index: gdb-7.5.50.20130310/gdb/symfile.h
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/symfile.h 2013-02-15 22:35:03.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/symfile.h 2013-02-15 22:35:59.414292874 +0100
@@ -599,6 +599,8 @@ extern struct build_id *build_id_addr_ge
extern char *build_id_to_filename (struct build_id *build_id,
--- gdb-7.5.50.20130310.orig/gdb/symfile.h 2013-03-10 16:37:41.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/symfile.h 2013-03-10 16:44:23.409591946 +0100
@@ -598,6 +598,8 @@ extern struct elf_build_id *build_id_add
extern char *build_id_to_filename (const struct elf_build_id *build_id,
char **link_return, int add_debug_suffix);
extern void debug_print_missing (const char *binary, const char *debug);
+extern void debug_flush_missing (void);
@ -477,10 +477,10 @@ Index: gdb-7.5.50.20130215/gdb/symfile.h
/* From dwarf2read.c */
Index: gdb-7.5.50.20130215/gdb/testsuite/lib/gdb.exp
Index: gdb-7.5.50.20130310/gdb/testsuite/lib/gdb.exp
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/testsuite/lib/gdb.exp 2013-02-15 22:35:03.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/testsuite/lib/gdb.exp 2013-02-15 22:35:59.415292878 +0100
--- gdb-7.5.50.20130310.orig/gdb/testsuite/lib/gdb.exp 2013-03-10 16:17:15.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/testsuite/lib/gdb.exp 2013-03-10 16:44:05.474586918 +0100
@@ -1482,7 +1482,7 @@ proc default_gdb_start { } {
warning "Couldn't set the width to 0."
}
@ -490,10 +490,10 @@ Index: gdb-7.5.50.20130215/gdb/testsuite/lib/gdb.exp
send_gdb "set build-id-verbose 0\n"
gdb_expect 10 {
-re "$gdb_prompt $" {
Index: gdb-7.5.50.20130215/gdb/testsuite/lib/mi-support.exp
Index: gdb-7.5.50.20130310/gdb/testsuite/lib/mi-support.exp
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/testsuite/lib/mi-support.exp 2013-02-15 22:35:03.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/testsuite/lib/mi-support.exp 2013-02-15 22:35:59.416292881 +0100
--- gdb-7.5.50.20130310.orig/gdb/testsuite/lib/mi-support.exp 2013-03-10 16:17:15.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/testsuite/lib/mi-support.exp 2013-03-10 16:44:05.475586918 +0100
@@ -212,7 +212,7 @@ proc default_mi_gdb_start { args } {
warning "Couldn't set the width to 0."
}
@ -503,10 +503,10 @@ Index: gdb-7.5.50.20130215/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.5.50.20130215/gdb/tui/tui-interp.c
Index: gdb-7.5.50.20130310/gdb/tui/tui-interp.c
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/tui/tui-interp.c 2013-01-01 07:41:30.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/tui/tui-interp.c 2013-02-15 22:35:59.416292881 +0100
--- gdb-7.5.50.20130310.orig/gdb/tui/tui-interp.c 2013-01-01 07:41:30.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/tui/tui-interp.c 2013-03-10 16:44:05.475586918 +0100
@@ -30,6 +30,7 @@
#include "tui/tui.h"
#include "tui/tui-io.h"
@ -515,10 +515,10 @@ Index: gdb-7.5.50.20130215/gdb/tui/tui-interp.c
/* Set to 1 when the TUI mode must be activated when we first start
gdb. */
Index: gdb-7.5.50.20130215/gdb/aclocal.m4
Index: gdb-7.5.50.20130310/gdb/aclocal.m4
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/aclocal.m4 2013-01-17 12:06:26.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/aclocal.m4 2013-02-15 22:35:59.417292883 +0100
--- gdb-7.5.50.20130310.orig/gdb/aclocal.m4 2013-01-17 12:06:26.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/aclocal.m4 2013-03-10 16:44:05.475586918 +0100
@@ -11,6 +11,164 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@ -684,10 +684,10 @@ Index: gdb-7.5.50.20130215/gdb/aclocal.m4
# AM_CONDITIONAL -*- Autoconf -*-
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
Index: gdb-7.5.50.20130215/gdb/config.in
Index: gdb-7.5.50.20130310/gdb/config.in
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/config.in 2012-12-09 19:39:58.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/config.in 2013-02-15 22:35:59.417292883 +0100
--- gdb-7.5.50.20130310.orig/gdb/config.in 2012-12-09 19:39:58.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/config.in 2013-03-10 16:44:05.476586918 +0100
@@ -33,6 +33,9 @@
/* Define to BFD's default target vector. */
#undef DEFAULT_BFD_VEC
@ -708,10 +708,10 @@ Index: gdb-7.5.50.20130215/gdb/config.in
/* Define to 1 if you have the <libunwind-ia64.h> header file. */
#undef HAVE_LIBUNWIND_IA64_H
Index: gdb-7.5.50.20130215/gdb/configure
Index: gdb-7.5.50.20130310/gdb/configure
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/configure 2013-01-09 18:21:33.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/configure 2013-02-15 22:35:59.422292893 +0100
--- gdb-7.5.50.20130310.orig/gdb/configure 2013-01-09 18:21:33.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/configure 2013-03-10 16:44:05.480586919 +0100
@@ -683,6 +683,11 @@ REPORT_BUGS_TO
PKGVERSION
TARGET_OBS
@ -1259,10 +1259,10 @@ Index: gdb-7.5.50.20130215/gdb/configure
subdirs="$subdirs testsuite"
Index: gdb-7.5.50.20130215/gdb/configure.ac
Index: gdb-7.5.50.20130310/gdb/configure.ac
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/configure.ac 2013-01-09 18:21:35.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/configure.ac 2013-02-15 22:35:59.423292895 +0100
--- gdb-7.5.50.20130310.orig/gdb/configure.ac 2013-01-09 18:21:35.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/configure.ac 2013-03-10 16:44:05.481586919 +0100
@@ -166,6 +166,199 @@ AC_DEFINE_DIR(AUTO_LOAD_SAFE_PATH, escap
[Directories safe to hold auto-loaded files.])
AC_MSG_RESULT([$with_auto_load_safe_path])
@ -1463,11 +1463,11 @@ Index: gdb-7.5.50.20130215/gdb/configure.ac
AC_CONFIG_SUBDIRS(testsuite)
# Check whether to support alternative target configurations
Index: gdb-7.5.50.20130215/gdb/corelow.c
Index: gdb-7.5.50.20130310/gdb/corelow.c
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/corelow.c 2013-02-15 22:35:03.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/corelow.c 2013-02-15 22:35:59.423292895 +0100
@@ -313,7 +313,7 @@ build_id_locate_exec (int from_tty)
--- gdb-7.5.50.20130310.orig/gdb/corelow.c 2013-03-10 16:36:37.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/corelow.c 2013-03-10 16:44:05.481586919 +0100
@@ -314,7 +314,7 @@ build_id_locate_exec (int from_tty)
symfile_objfile->flags |= OBJF_BUILD_ID_CORE_LOADED;
}
else

View File

@ -1,11 +1,13 @@
--- gdb-7.4.50.20120120/gdb/solib-svr4.c.orig 2012-03-17 10:23:11.000000000 +0100
+++ gdb-7.4.50.20120120/gdb/solib-svr4.c 2012-03-17 10:36:22.265628529 +0100
@@ -1228,14 +1228,27 @@ svr4_read_so_list (CORE_ADDR lm, struct
Index: gdb-7.5.50.20130310/gdb/solib-svr4.c
===================================================================
--- gdb-7.5.50.20130310.orig/gdb/solib-svr4.c 2013-03-10 16:37:49.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/solib-svr4.c 2013-03-10 16:43:45.498585091 +0100
@@ -1225,14 +1225,27 @@ svr4_read_so_list (CORE_ADDR lm, struct
}
{
- struct build_id *build_id;
+ struct build_id *build_id = NULL;
- struct elf_build_id *build_id;
+ struct elf_build_id *build_id = NULL;
strncpy (new->so_original_name, buffer, SO_NAME_MAX_PATH_SIZE - 1);
new->so_original_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
@ -30,7 +32,7 @@
if (build_id != NULL)
{
char *name, *build_id_filename;
@@ -1250,23 +1263,7 @@ svr4_read_so_list (CORE_ADDR lm, struct
@@ -1247,23 +1260,7 @@ svr4_read_so_list (CORE_ADDR lm, struct
xfree (name);
}
else

View File

@ -1,7 +1,7 @@
Index: gdb-7.5.50.20130215/gdb/corelow.c
Index: gdb-7.5.50.20130310/gdb/corelow.c
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/corelow.c 2013-01-31 19:37:37.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/corelow.c 2013-02-15 22:35:03.278219844 +0100
--- gdb-7.5.50.20130310.orig/gdb/corelow.c 2013-01-31 19:37:37.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/corelow.c 2013-03-10 16:36:37.019937408 +0100
@@ -46,6 +46,9 @@
#include "progspace.h"
#include "objfiles.h"
@ -12,7 +12,7 @@ Index: gdb-7.5.50.20130215/gdb/corelow.c
#ifndef O_LARGEFILE
#define O_LARGEFILE 0
@@ -271,6 +274,52 @@ add_to_thread_list (bfd *abfd, asection
@@ -271,6 +274,53 @@ add_to_thread_list (bfd *abfd, asection
inferior_ptid = ptid; /* Yes, make it current. */
}
@ -22,7 +22,7 @@ Index: gdb-7.5.50.20130215/gdb/corelow.c
+build_id_locate_exec (int from_tty)
+{
+ CORE_ADDR at_entry;
+ struct build_id *build_id;
+ struct elf_build_id *build_id;
+ char *exec_filename, *debug_filename;
+ char *build_id_filename;
+ struct cleanup *back_to;
@ -36,6 +36,7 @@ Index: gdb-7.5.50.20130215/gdb/corelow.c
+ build_id = build_id_addr_get (at_entry);
+ if (build_id == NULL)
+ return;
+ back_to = make_cleanup (xfree, build_id);
+
+ /* SYMFILE_OBJFILE should refer to the main executable (not only to its
+ separate debug info file). gcc44+ keeps .eh_frame only in the main
@ -44,7 +45,7 @@ Index: gdb-7.5.50.20130215/gdb/corelow.c
+ directly to the separate debug info file. */
+
+ exec_filename = build_id_to_filename (build_id, &build_id_filename, 0);
+ back_to = make_cleanup (xfree, build_id_filename);
+ make_cleanup (xfree, build_id_filename);
+
+ if (exec_filename != NULL)
+ {
@ -65,7 +66,7 @@ Index: gdb-7.5.50.20130215/gdb/corelow.c
/* This routine opens and sets up the core file bfd. */
static void
@@ -409,6 +458,14 @@ core_open (char *filename, int from_tty)
@@ -409,6 +459,14 @@ core_open (char *filename, int from_tty)
switch_to_thread (thread->ptid);
}
@ -80,7 +81,7 @@ Index: gdb-7.5.50.20130215/gdb/corelow.c
post_create_inferior (&core_ops, from_tty);
/* Now go through the target stack looking for threads since there
@@ -978,4 +1035,11 @@ _initialize_corelow (void)
@@ -978,4 +1036,11 @@ _initialize_corelow (void)
init_core_ops ();
add_target (&core_ops);
@ -92,11 +93,11 @@ Index: gdb-7.5.50.20130215/gdb/corelow.c
+ NULL, NULL, NULL,
+ &setlist, &showlist);
}
Index: gdb-7.5.50.20130215/gdb/doc/gdb.texinfo
Index: gdb-7.5.50.20130310/gdb/doc/gdb.texinfo
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/doc/gdb.texinfo 2013-02-15 22:34:22.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/doc/gdb.texinfo 2013-02-15 22:35:03.287219863 +0100
@@ -16662,6 +16662,27 @@ information files.
--- gdb-7.5.50.20130310.orig/gdb/doc/gdb.texinfo 2013-03-10 16:16:23.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/doc/gdb.texinfo 2013-03-10 16:17:15.216114613 +0100
@@ -16680,6 +16680,27 @@ information files.
@end table
@ -124,10 +125,10 @@ Index: gdb-7.5.50.20130215/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.5.50.20130215/gdb/solib-svr4.c
Index: gdb-7.5.50.20130310/gdb/solib-svr4.c
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/solib-svr4.c 2013-01-31 14:52:52.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/solib-svr4.c 2013-02-15 22:35:03.287219863 +0100
--- gdb-7.5.50.20130310.orig/gdb/solib-svr4.c 2013-01-31 14:52:52.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/solib-svr4.c 2013-03-10 16:37:49.842963280 +0100
@@ -1224,9 +1224,52 @@ svr4_read_so_list (CORE_ADDR lm, struct
continue;
}
@ -136,7 +137,7 @@ Index: gdb-7.5.50.20130215/gdb/solib-svr4.c
- new->so_name[SO_NAME_MAX_PATH_SIZE - 1] = '\0';
- strcpy (new->so_original_name, new->so_name);
+ {
+ struct build_id *build_id;
+ struct elf_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';
@ -184,10 +185,10 @@ Index: gdb-7.5.50.20130215/gdb/solib-svr4.c
xfree (buffer);
/* If this entry has no name, or its name matches the name
Index: gdb-7.5.50.20130215/gdb/elfread.c
Index: gdb-7.5.50.20130310/gdb/elfread.c
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/elfread.c 2013-02-01 20:39:03.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/elfread.c 2013-02-15 22:35:36.826263354 +0100
--- gdb-7.5.50.20130310.orig/gdb/elfread.c 2013-03-06 22:20:02.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/elfread.c 2013-03-10 16:38:01.506968687 +0100
@@ -45,6 +45,11 @@
#include "regcache.h"
#include "bcache.h"
@ -200,10 +201,11 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
extern void _initialize_elfread (void);
@@ -1074,16 +1079,65 @@ elf_gnu_ifunc_resolver_return_stop (stru
@@ -1067,10 +1072,59 @@ elf_gnu_ifunc_resolver_return_stop (stru
update_breakpoint_locations (b, sals, sals_end);
}
-/* Locate NT_GNU_BUILD_ID from ABFD and return its content. */
+#define BUILD_ID_VERBOSE_NONE 0
+#define BUILD_ID_VERBOSE_FILENAMES 1
+#define BUILD_ID_VERBOSE_BINARY_PARSE 2
@ -216,18 +218,10 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
+ value);
+}
+
struct build_id
{
size_t size;
gdb_byte data[1];
};
-/* 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. */
static struct build_id *
-build_id_bfd_get (bfd *abfd)
+
+static struct elf_build_id *
+build_id_buf_get (bfd *templ, gdb_byte *buf, bfd_size_type size)
+{
+ bfd_byte *p;
@ -247,7 +241,7 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
+ {
+ size_t size = descsz;
+ gdb_byte *data = (void *) descdata;
+ struct build_id *retval;
+ struct elf_build_id *retval;
+
+ retval = xmalloc (sizeof *retval - 1 + size);
+ retval->size = size;
@ -262,26 +256,27 @@ Index: gdb-7.5.50.20130215/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 *
static const struct elf_build_id *
-build_id_bfd_get (bfd *abfd)
+build_id_bfd_shdr_get (bfd *abfd)
{
struct build_id *retval;
@@ -1099,6 +1153,348 @@ build_id_bfd_get (bfd *abfd)
return retval;
if (!bfd_check_format (abfd, bfd_object)
|| bfd_get_flavour (abfd) != bfd_target_elf_flavour
@@ -1080,6 +1134,348 @@ build_id_bfd_get (bfd *abfd)
return elf_tdata (abfd)->build_id;
}
+/* Core files may have missing (corrupt) SHDR but PDHR is correct there.
+ bfd_elf_bfd_from_remote_memory () has too much overhead by
+ allocating/reading all the available ELF PT_LOADs. */
+
+static struct build_id *
+static struct elf_build_id *
+build_id_phdr_get (bfd *templ, bfd_vma loadbase, unsigned e_phnum,
+ Elf_Internal_Phdr *i_phdr)
+{
+ int i;
+ struct build_id *retval = NULL;
+ struct elf_build_id *retval = NULL;
+
+ for (i = 0; i < e_phnum; i++)
+ if (i_phdr[i].p_type == PT_NOTE && i_phdr[i].p_filesz > 0)
@ -568,11 +563,11 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
+ }
+}
+
+struct build_id *
+struct elf_build_id *
+build_id_addr_get (CORE_ADDR addr)
+{
+ struct build_id_addr_sect *candidate;
+ struct build_id *retval = NULL;
+ struct elf_build_id *retval = NULL;
+ Elf_Internal_Phdr *i_phdr = NULL;
+ bfd_vma loadbase = 0;
+ unsigned e_phnum = 0;
@ -617,7 +612,7 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
/* Return if FILENAME has NT_GNU_BUILD_ID matching the CHECK value. */
static int
@@ -1113,7 +1509,7 @@ build_id_verify (const char *filename, s
@@ -1094,7 +1490,7 @@ build_id_verify (const char *filename, c
if (abfd == NULL)
return 0;
@ -626,14 +621,14 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
if (found == NULL)
warning (_("File \"%s\" has no build-id, file skipped"), filename);
@@ -1131,17 +1527,18 @@ build_id_verify (const char *filename, s
@@ -1110,17 +1506,18 @@ build_id_verify (const char *filename, c
return retval;
}
-static char *
-build_id_to_debug_filename (struct build_id *build_id)
-build_id_to_debug_filename (const struct elf_build_id *build_id)
+char *
+build_id_to_filename (struct build_id *build_id, char **link_return,
+build_id_to_filename (const struct elf_build_id *build_id, char **link_return,
+ int add_debug_suffix)
{
char *link, *debugdir, *retval = NULL;
@ -649,16 +644,16 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
/* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
cause "/.build-id/..." lookups. */
@@ -1154,6 +1551,8 @@ build_id_to_debug_filename (struct build
@@ -1133,6 +1530,8 @@ build_id_to_debug_filename (const struct
size_t debugdir_len = strlen (debugdir);
gdb_byte *data = build_id->data;
const gdb_byte *data = build_id->data;
size_t size = build_id->size;
+ unsigned seqno;
+ struct stat statbuf_trash;
char *s;
memcpy (link, debugdir, debugdir_len);
@@ -1168,37 +1567,240 @@ build_id_to_debug_filename (struct build
@@ -1147,37 +1546,240 @@ build_id_to_debug_filename (const struct
*s++ = '/';
while (size-- > 0)
s += sprintf (s, "%02x", (unsigned) *data++);
@ -686,15 +681,15 @@ Index: gdb-7.5.50.20130215/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)
+ {
+ /* Stop increasing SEQNO. */
+ break;
+ }
+
- if (retval != NULL && !build_id_verify (retval, build_id))
+ retval = lrealpath (link);
+
+ if (retval != NULL && !build_id_verify (retval, build_id))
@ -735,15 +730,15 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
+ {
if (retval != NULL)
- break;
+ {
+ *link_return = link;
+ link = NULL;
+ }
+ {
+ *link_return = link;
+ link = NULL;
+ }
+ else
+ {
+ *link_return = link_all;
+ link_all = NULL;
+ }
+ {
+ *link_return = link_all;
+ link_all = NULL;
+ }
}
+ xfree (link);
+ xfree (link_all);
@ -893,7 +888,7 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
+find_separate_debug_file_by_buildid (struct objfile *objfile,
+ char **build_id_filename_return)
{
struct build_id *build_id;
const struct elf_build_id *build_id;
- build_id = build_id_bfd_get (objfile->obfd);
+ if (build_id_filename_return)
@ -907,10 +902,10 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
- build_id_name = build_id_to_debug_filename (build_id);
+ build_id_name = build_id_to_filename (build_id, build_id_filename_return,
+ 1);
xfree (build_id);
/* Prevent looping on a stripped .debug file. */
if (build_id_name != NULL
@@ -1209,7 +1811,7 @@ find_separate_debug_file_by_buildid (str
&& filename_cmp (build_id_name, objfile->name) == 0)
@@ -1187,7 +1789,7 @@ find_separate_debug_file_by_buildid (str
xfree (build_id_name);
}
else if (build_id_name != NULL)
@ -919,7 +914,7 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
}
return NULL;
}
@@ -1444,9 +2046,10 @@ elf_symfile_read (struct objfile *objfil
@@ -1425,9 +2027,10 @@ elf_symfile_read (struct objfile *objfil
&& objfile->separate_debug_objfile == NULL
&& objfile->separate_debug_objfile_backlink == NULL)
{
@ -932,7 +927,7 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
if (debugfile == NULL)
debugfile = find_separate_debug_file_by_debuglink (objfile);
@@ -1460,6 +2063,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);
do_cleanups (cleanup);
}
@ -943,9 +938,9 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
+
+ xfree (build_id_filename);
}
}
if (symtab_create_debug)
@@ -1782,4 +2391,16 @@ _initialize_elfread (void)
@@ -1760,4 +2369,16 @@ _initialize_elfread (void)
elf_objfile_gnu_ifunc_cache_data = register_objfile_data ();
gnu_ifunc_fns_p = &elf_gnu_ifunc_fns;
@ -962,28 +957,27 @@ Index: gdb-7.5.50.20130215/gdb/elfread.c
+
+ observer_attach_executable_changed (debug_print_executable_changed);
}
Index: gdb-7.5.50.20130215/gdb/symfile.h
Index: gdb-7.5.50.20130310/gdb/symfile.h
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/symfile.h 2013-02-03 17:20:18.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/symfile.h 2013-02-15 22:35:03.288219867 +0100
@@ -593,6 +593,13 @@ void free_symfile_segment_data (struct s
--- gdb-7.5.50.20130310.orig/gdb/symfile.h 2013-02-03 17:20:18.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/symfile.h 2013-03-10 16:37:41.203959517 +0100
@@ -593,6 +593,12 @@ void free_symfile_segment_data (struct s
extern struct cleanup *increment_reading_symtab (void);
+/* build-id support. */
+struct build_id;
+extern struct build_id *build_id_addr_get (CORE_ADDR addr);
+extern char *build_id_to_filename (struct build_id *build_id,
+extern struct elf_build_id *build_id_addr_get (CORE_ADDR addr);
+extern char *build_id_to_filename (const struct elf_build_id *build_id,
+ char **link_return, int add_debug_suffix);
+extern void debug_print_missing (const char *binary, const char *debug);
+
/* From dwarf2read.c */
/* Names for a dwarf2 debugging section. The field NORMAL is the normal
Index: gdb-7.5.50.20130215/gdb/testsuite/lib/gdb.exp
Index: gdb-7.5.50.20130310/gdb/testsuite/lib/gdb.exp
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/testsuite/lib/gdb.exp 2013-02-15 22:31:37.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/testsuite/lib/gdb.exp 2013-02-15 22:35:03.289219870 +0100
--- gdb-7.5.50.20130310.orig/gdb/testsuite/lib/gdb.exp 2013-03-10 16:16:22.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/testsuite/lib/gdb.exp 2013-03-10 16:17:15.219114612 +0100
@@ -1482,6 +1482,16 @@ proc default_gdb_start { } {
warning "Couldn't set the width to 0."
}
@ -1001,10 +995,10 @@ Index: gdb-7.5.50.20130215/gdb/testsuite/lib/gdb.exp
return 0;
}
Index: gdb-7.5.50.20130215/gdb/testsuite/lib/mi-support.exp
Index: gdb-7.5.50.20130310/gdb/testsuite/lib/mi-support.exp
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/testsuite/lib/mi-support.exp 2013-01-22 00:57:59.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/testsuite/lib/mi-support.exp 2013-02-15 22:35:03.289219870 +0100
--- gdb-7.5.50.20130310.orig/gdb/testsuite/lib/mi-support.exp 2013-01-22 00:57:59.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/testsuite/lib/mi-support.exp 2013-03-10 16:17:15.220114612 +0100
@@ -212,6 +212,16 @@ proc default_mi_gdb_start { args } {
warning "Couldn't set the width to 0."
}
@ -1022,10 +1016,10 @@ Index: gdb-7.5.50.20130215/gdb/testsuite/lib/mi-support.exp
# 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.5.50.20130215/gdb/objfiles.h
Index: gdb-7.5.50.20130310/gdb/objfiles.h
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/objfiles.h 2013-01-01 07:32:47.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/objfiles.h 2013-02-15 22:35:03.290219872 +0100
--- gdb-7.5.50.20130310.orig/gdb/objfiles.h 2013-02-28 20:00:31.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/objfiles.h 2013-03-10 16:17:15.220114612 +0100
@@ -432,6 +432,10 @@ struct objfile
#define OBJF_MAINLINE (1 << 5)
@ -1037,10 +1031,10 @@ Index: gdb-7.5.50.20130215/gdb/objfiles.h
/* The object file that contains the runtime common minimal symbols
for SunOS4. Note that this objfile has no associated BFD. */
Index: gdb-7.5.50.20130215/gdb/testsuite/gdb.base/corefile.exp
Index: gdb-7.5.50.20130310/gdb/testsuite/gdb.base/corefile.exp
===================================================================
--- gdb-7.5.50.20130215.orig/gdb/testsuite/gdb.base/corefile.exp 2013-01-01 07:33:25.000000000 +0100
+++ gdb-7.5.50.20130215/gdb/testsuite/gdb.base/corefile.exp 2013-02-15 22:35:03.290219872 +0100
--- gdb-7.5.50.20130310.orig/gdb/testsuite/gdb.base/corefile.exp 2013-01-01 07:33:25.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/testsuite/gdb.base/corefile.exp 2013-03-10 16:17:15.220114612 +0100
@@ -256,3 +256,33 @@ if ![is_remote target] {
gdb_exit

View File

@ -2,13 +2,32 @@ http://sourceware.org/gdb/wiki/ProjectArcher
http://sourceware.org/gdb/wiki/ArcherBranchManagement
GIT snapshot:
commit e72ce29f8e339fc6fffd73e9ff4b854b6f2f1452
commit 92cf2d53a9c69b4fb361de662de9100c6e72caa0
branch `archer' - the merge of branches:
archer-jankratochvil-vla
archer-tromey-python
branch jankratochvil/fedora19 - the merge of branches:
jankratochvil/vla
tromey/python
diff --git a/README.archer b/README.archer
new file mode 100644
index 0000000..1f7ab48
--- /dev/null
+++ b/README.archer
@@ -0,0 +1,13 @@
+Merge for Fedora 19: http://pkgs.fedoraproject.org/cgit/gdb.git/
+
+jankratochvil/vla
+tromey/python
+
+================================================================
+This branch originally held the Python code for gdb. It still exists
+because a small amount of code here has not yet been merged upstream.
+
+================================================================
+C variable length arrays / DW_FORM_block / Fortran dynamic arrays.
+implementation plan: http://sourceware.org/ml/gdb/2012-11/msg00094.html
+explanation of its merge status: http://sourceware.org/ml/gdb/2011-03/msg00021.html
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index ed30db5..4356be7 100644
--- a/gdb/Makefile.in
@ -27,10 +46,10 @@ index ed30db5..4356be7 100644
$(SHELL) config.status --recheck
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 634e761..60276dc 100644
index 75f1c3d..6243818 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -12262,6 +12262,7 @@ ada_operator_length (const struct expression *exp, int pc, int *oplenp,
@@ -12287,6 +12287,7 @@ ada_operator_length (const struct expression *exp, int pc, int *oplenp,
static int
ada_operator_check (struct expression *exp, int pos,
@ -38,7 +57,7 @@ index 634e761..60276dc 100644
int (*objfile_func) (struct objfile *objfile, void *data),
void *data)
{
@@ -12276,12 +12277,15 @@ ada_operator_check (struct expression *exp, int pos,
@@ -12301,12 +12302,15 @@ ada_operator_check (struct expression *exp, int pos,
break;
default:
@ -94,10 +113,10 @@ index 02e7e8b..2931401 100644
+
#endif /* BLOCK_H */
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index fb57a57..5c03b1c 100644
index d6f8bc5..8a14224 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -15656,6 +15656,24 @@ all_tracepoints (void)
@@ -15653,6 +15653,24 @@ all_tracepoints (void)
return tp_vec;
}
@ -122,7 +141,7 @@ index fb57a57..5c03b1c 100644
/* This help string is used for the break, hbreak, tbreak and thbreak
commands. It is defined as a macro to prevent duplication.
@@ -16639,4 +16657,7 @@ agent-printf \"printf format string\", arg1, arg2, arg3, ..., argn\n\
@@ -16636,4 +16654,7 @@ agent-printf \"printf format string\", arg1, arg2, arg3, ..., argn\n\
automatic_hardware_breakpoints = 1;
observer_attach_about_to_proceed (breakpoint_about_to_proceed);
@ -187,10 +206,10 @@ index d98ac77..e248399 100644
FLAGS_TO_PASS = \
"prefix=$(prefix)" \
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index e8ac8c5..b18ccd6 100644
index a607166..6913628 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -1217,6 +1217,16 @@ for remote debugging.
@@ -1216,6 +1216,16 @@ for remote debugging.
Run using @var{device} for your program's standard input and output.
@c FIXME: kingdon thinks there is more to -tty. Investigate.
@ -207,7 +226,7 @@ index e8ac8c5..b18ccd6 100644
@c resolve the situation of these eventually
@item -tui
@cindex @code{--tui}
@@ -22786,8 +22796,6 @@ containing @code{end}. For example:
@@ -22804,8 +22814,6 @@ containing @code{end}. For example:
@smallexample
(@value{GDBP}) python
@ -216,7 +235,7 @@ index e8ac8c5..b18ccd6 100644
>print 23
>end
23
@@ -22801,6 +22809,14 @@ controlled using @code{set python print-stack}: if @code{full}, then
@@ -22819,6 +22827,14 @@ controlled using @code{set python print-stack}: if @code{full}, then
full Python stack printing is enabled; if @code{none}, then Python stack
and message printing is disabled; if @code{message}, the default, only
the message component of the error is printed.
@ -231,7 +250,7 @@ index e8ac8c5..b18ccd6 100644
@end table
It is also possible to execute a Python script from the @value{GDBN}
@@ -22822,6 +22838,14 @@ and thus is always available.
@@ -22840,6 +22856,14 @@ and thus is always available.
@cindex python api
@cindex programming in python
@ -428,7 +447,7 @@ index e85486a..e7ac799 100644
/* The location of a value. */
diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
index 002387e..2e0e722 100644
index 8a61ae6..451a759 100644
--- a/gdb/dwarf2loc.c
+++ b/gdb/dwarf2loc.c
@@ -298,6 +298,9 @@ struct dwarf_expr_baton
@ -571,7 +590,7 @@ index 002387e..2e0e722 100644
/* Callback function for dwarf2_evaluate_loc_desc. */
static struct type *
@@ -1155,10 +1248,12 @@ dwarf_expr_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
@@ -1156,10 +1249,12 @@ dwarf_expr_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
saved_ctx.gdbarch = ctx->gdbarch;
saved_ctx.addr_size = ctx->addr_size;
@ -584,7 +603,7 @@ index 002387e..2e0e722 100644
ctx->offset = dwarf2_per_cu_text_offset (baton_local.per_cu);
ctx->baton = &baton_local;
@@ -1166,10 +1261,95 @@ dwarf_expr_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
@@ -1167,10 +1262,95 @@ dwarf_expr_push_dwarf_reg_entry_value (struct dwarf_expr_context *ctx,
ctx->gdbarch = saved_ctx.gdbarch;
ctx->addr_size = saved_ctx.addr_size;
@ -680,7 +699,7 @@ index 002387e..2e0e722 100644
/* Callback function for dwarf2_evaluate_loc_desc.
Fetch the address indexed by DW_OP_GNU_addr_index. */
@@ -2105,22 +2285,6 @@ invalid_synthetic_pointer (void)
@@ -2106,22 +2286,6 @@ invalid_synthetic_pointer (void)
"referenced via synthetic pointer"));
}
@ -703,7 +722,7 @@ index 002387e..2e0e722 100644
/* Evaluate a location description, starting at DATA and with length
SIZE, to find the current location of variable of TYPE in the
context of FRAME. BYTE_OFFSET is applied after the contents are
@@ -2133,7 +2297,6 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
@@ -2134,7 +2298,6 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
LONGEST byte_offset)
{
struct value *retval;
@ -711,7 +730,7 @@ index 002387e..2e0e722 100644
struct dwarf_expr_context *ctx;
struct cleanup *old_chain, *value_chain;
struct objfile *objfile = dwarf2_per_cu_objfile (per_cu);
@@ -2145,29 +2308,18 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
@@ -2146,29 +2309,18 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
if (size == 0)
return allocate_optimized_out_value (type);
@ -742,7 +761,7 @@ index 002387e..2e0e722 100644
retval = allocate_value (type);
mark_value_bytes_unavailable (retval, 0, TYPE_LENGTH (type));
return retval;
@@ -2231,6 +2383,16 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
@@ -2232,6 +2384,16 @@ dwarf2_evaluate_loc_desc_full (struct type *type, struct frame_info *frame,
int in_stack_memory = dwarf_expr_fetch_in_stack_memory (ctx, 0);
do_cleanups (value_chain);
@ -759,7 +778,7 @@ index 002387e..2e0e722 100644
retval = allocate_value_lazy (type);
VALUE_LVAL (retval) = lval_memory;
if (in_stack_memory)
@@ -4147,8 +4309,7 @@ loclist_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
@@ -4148,8 +4310,7 @@ loclist_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
dlbaton->per_cu);
}
@ -769,7 +788,7 @@ index 002387e..2e0e722 100644
const struct symbol_computed_ops dwarf2_loclist_funcs = {
loclist_read_variable,
loclist_read_variable_at_entry,
@@ -4157,6 +4318,48 @@ const struct symbol_computed_ops dwarf2_loclist_funcs = {
@@ -4158,6 +4319,48 @@ const struct symbol_computed_ops dwarf2_loclist_funcs = {
loclist_tracepoint_var_ref
};
@ -839,7 +858,7 @@ index 36641b3..1394578 100644
/* Compile a DWARF location expression to an agent expression.
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index d26e7c8..9fbe61e 100644
index df6298b..b11abf0 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -1624,6 +1624,9 @@ static void fill_in_loclist_baton (struct dwarf2_cu *cu,
@ -1071,7 +1090,7 @@ index d26e7c8..9fbe61e 100644
type = create_string_type (NULL, char_type, range_type);
@@ -12739,7 +12858,7 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
struct type *base_type;
struct type *base_type, *orig_base_type;
struct type *range_type;
struct attribute *attr;
- LONGEST low, high;
@ -1079,7 +1098,7 @@ index d26e7c8..9fbe61e 100644
int low_default_is_valid;
const char *name;
LONGEST negative_mask;
@@ -12795,42 +12914,6 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
@@ -12798,42 +12917,6 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
"- DIE at 0x%x [in module %s]"),
die->offset.sect_off, cu->objfile->name);
@ -1122,13 +1141,13 @@ index d26e7c8..9fbe61e 100644
/* Dwarf-2 specifications explicitly allows to create subrange types
without specifying a base type.
In that case, the base type must be set to the type of
@@ -12869,24 +12952,163 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
@@ -12872,24 +12955,163 @@ read_subrange_type (struct die_info *die, struct dwarf2_cu *cu)
}
}
- negative_mask =
+ /* LOW_BOUND and HIGH_BOUND are set for real below. */
+ range_type = create_range_type (NULL, base_type, 0, -1);
+ range_type = create_range_type (NULL, orig_base_type, 0, -1);
+ TYPE_UNSIGNED (range_type) = 0;
+
+ negative_mask =
@ -1138,7 +1157,7 @@ index d26e7c8..9fbe61e 100644
- if (!TYPE_UNSIGNED (base_type) && (high & negative_mask))
- high |= negative_mask;
- range_type = create_range_type (NULL, base_type, low, high);
- range_type = create_range_type (NULL, orig_base_type, low, high);
+ /* Exclude language_ada from any TYPE_DYNAMIC constructs below. GDB Ada
+ supports implements the dynamic bounds in a non-DWARF way and the
+ existing DWARF dynamic bounds are invalid, leading to memory access
@ -1300,7 +1319,7 @@ index d26e7c8..9fbe61e 100644
name = dwarf2_name (die, cu);
if (name)
@@ -15746,10 +15968,12 @@ var_decode_location (struct attribute *attr, struct symbol *sym,
@@ -15749,10 +15971,12 @@ var_decode_location (struct attribute *attr, struct symbol *sym,
(i.e. when the value of a register or memory location is
referenced, or a thread-local block, etc.). Then again, it might
not be worthwhile. I'm assuming that it isn't unless performance
@ -1315,7 +1334,7 @@ index d26e7c8..9fbe61e 100644
if (SYMBOL_COMPUTED_OPS (sym) == &dwarf2_loclist_funcs)
cu->has_loclist = 1;
@@ -15790,6 +16014,8 @@ new_symbol_full (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
@@ -15793,6 +16017,8 @@ new_symbol_full (struct die_info *die, struct type *type, struct dwarf2_cu *cu,
else
sym = OBSTACK_ZALLOC (&objfile->objfile_obstack, struct symbol);
OBJSTAT (objfile, n_syms++);
@ -1324,7 +1343,7 @@ index d26e7c8..9fbe61e 100644
/* Cache this symbol's name and the name's demangled form (if any). */
SYMBOL_SET_LANGUAGE (sym, cu->language);
@@ -16599,6 +16825,9 @@ read_type_die_1 (struct die_info *die, struct dwarf2_cu *cu)
@@ -16602,6 +16828,9 @@ read_type_die_1 (struct die_info *die, struct dwarf2_cu *cu)
break;
}
@ -1334,7 +1353,7 @@ index d26e7c8..9fbe61e 100644
return this_type;
}
@@ -19043,62 +19272,100 @@ fill_in_loclist_baton (struct dwarf2_cu *cu,
@@ -19046,62 +19275,100 @@ fill_in_loclist_baton (struct dwarf2_cu *cu,
baton->from_dwo = cu->dwo_unit != NULL;
}
@ -1473,7 +1492,7 @@ index d26e7c8..9fbe61e 100644
}
}
@@ -19469,6 +19736,25 @@ per_cu_offset_and_type_eq (const void *item_lhs, const void *item_rhs)
@@ -19472,6 +19739,25 @@ per_cu_offset_and_type_eq (const void *item_lhs, const void *item_rhs)
&& ofs_lhs->offset.sect_off == ofs_rhs->offset.sect_off);
}
@ -1499,7 +1518,7 @@ index d26e7c8..9fbe61e 100644
/* Set the type associated with DIE to TYPE. Save it in CU's hash
table if necessary. For convenience, return TYPE.
@@ -19493,6 +19779,8 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
@@ -19496,6 +19782,8 @@ set_die_type (struct die_info *die, struct type *type, struct dwarf2_cu *cu)
struct dwarf2_per_cu_offset_and_type **slot, ofs;
struct objfile *objfile = cu->objfile;
@ -2362,7 +2381,7 @@ index fb66e0f..45684f0 100644
&unavail);
diff --git a/gdb/gdb-gdb.gdb.in b/gdb/gdb-gdb.gdb.in
index ffb7f53..a2e7e94 100644
index 05a38b2..9801fdf 100644
--- a/gdb/gdb-gdb.gdb.in
+++ b/gdb/gdb-gdb.gdb.in
@@ -1,5 +1,15 @@
@ -2378,9 +2397,9 @@ index ffb7f53..a2e7e94 100644
+end
+source @srcdir@/python/lib/gdb/__init__.py
+
set complaints 1
if !$gdb_init_done
set variable $gdb_init_done = 1
b internal_error
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index 12730d7..5a614e0 100644
--- a/gdb/gdbtypes.c
@ -4762,10 +4781,10 @@ index 11cc038..ef238f6 100644
diff --git a/gdb/python/python.c b/gdb/python/python.c
index 8dd65a1..82c6c86 100644
index cd8ddfb..e906c4f 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -66,6 +66,8 @@ static const char *gdbpy_should_print_stack = python_excp_message;
@@ -67,6 +67,8 @@ static const char *gdbpy_should_print_stack = python_excp_message;
#include "linespec.h"
#include "source.h"
#include "version.h"
@ -4774,7 +4793,7 @@ index 8dd65a1..82c6c86 100644
#include "target.h"
#include "gdbthread.h"
#include "observer.h"
@@ -1082,6 +1084,53 @@ gdbpy_print_stack (void)
@@ -1099,6 +1101,53 @@ gdbpy_print_stack (void)
/* Return the current Progspace.
There always is one. */
@ -4828,7 +4847,7 @@ index 8dd65a1..82c6c86 100644
static PyObject *
gdbpy_get_current_progspace (PyObject *unused1, PyObject *unused2)
@@ -1733,6 +1782,8 @@ static PyMethodDef GdbMethods[] =
@@ -1749,6 +1798,8 @@ static PyMethodDef GdbMethods[] =
"Get a value from history" },
{ "execute", (PyCFunction) execute_gdb_command, METH_VARARGS | METH_KEYWORDS,
"Execute a gdb command" },
@ -4851,10 +4870,10 @@ index 24e3077..0443087 100644
int embedded_offset, CORE_ADDR address,
struct ui_file *stream, int recurse,
diff --git a/gdb/stack.c b/gdb/stack.c
index 147d815..51115cf 100644
index f2aeb10..d20b2f1 100644
--- a/gdb/stack.c
+++ b/gdb/stack.c
@@ -508,6 +508,10 @@ print_frame_args (struct symbol *func, struct frame_info *frame,
@@ -509,6 +509,10 @@ print_frame_args (struct symbol *func, struct frame_info *frame,
stb = mem_fileopen ();
old_chain = make_cleanup_ui_file_delete (stb);
@ -8479,10 +8498,10 @@ index 2d5a6af..5251e3f 100644
get_user_print_options (&opts);
diff --git a/gdb/utils.c b/gdb/utils.c
index eb99f4b..2e17e8e 100644
index 4c2f08c..d1c8710 100644
--- a/gdb/utils.c
+++ b/gdb/utils.c
@@ -1804,6 +1804,36 @@ set_batch_flag_and_make_cleanup_restore_page_info (void)
@@ -1805,6 +1805,36 @@ set_batch_flag_and_make_cleanup_restore_page_info (void)
return back_to;
}
@ -8728,7 +8747,7 @@ index 93c09d8..aef0991 100644
{
struct type *element_type = TYPE_TARGET_TYPE (array_type);
diff --git a/gdb/valprint.c b/gdb/valprint.c
index 05d6c3e..5430e66 100644
index 18cff49..89cb01a 100644
--- a/gdb/valprint.c
+++ b/gdb/valprint.c
@@ -37,6 +37,7 @@

872
gdb-entryval-1of2.patch Normal file
View File

@ -0,0 +1,872 @@
http://sourceware.org/ml/gdb-patches/2013-03/msg00061.html
Subject: [patch] entry-values: Fix for C++ across CUs
Hi,
I have found with C++ entry-values do not work much. This is a problem
primarily for 'this' being in $rdi clobbered very soon and having a function
with 'this=<optimized out>' is pretty useless for core crash analysis.
It happens if the call is across CUs, where GCC uses name reference:
<2><7c>: Abbrev Number: 6 (DW_TAG_GNU_call_site)
<7d> DW_AT_low_pc : 0x40049e
<85> DW_AT_abstract_origin: <0xa8>
<1><a8>: Abbrev Number: 10 (DW_TAG_subprogram)
<a9> DW_AT_external : 1
<a9> DW_AT_name : f
<ab> DW_AT_decl_file : 1
<ac> DW_AT_decl_line : 26
<ad> DW_AT_linkage_name: (indirect string, offset: 0x83): _Z1fi
<b1> DW_AT_declaration : 1
The testcase tests tail calls which is another (compared to unrecovered values
such as 'this') reproduction of the same problem:
Cannot find function "f(int)" for a call site target at 0x4004ae in main
#0 g (x=2) at gdb.arch/amd64-tailcall-cxx1.cc:23
#1 0x00000000004004ae in main () at gdb.arch/amd64-tailcall-cxx1.cc:31
->
#0 g (x=x@entry=2) at gdb.arch/amd64-tailcall-cxx1.cc:23
#1 0x00000000004005c8 in f (x=x@entry=1) at gdb.arch/amd64-tailcall-cxx2.cc:23
#2 0x00000000004004ae in main () at gdb.arch/amd64-tailcall-cxx1.cc:31
There are two different fixes below. The first one only always works but it
always uses the demangled name, which is not exact. The second fix provides
the mangled name (if available); the mangled name would not need the first fix
but the mangled name is sometimes not available - for example in Fedora GCC.
No regressions on {x86_64,x86_64-m32,i686}-fedora19pre-linux-gnu.
Probably nothing interesting, I will check it in.
Thanks,
Jan
gdb/
2013-03-02 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix entry-values in C++ across CUs.
* dwarf2loc.c (call_site_to_target_addr) <FIELD_LOC_KIND_PHYSNAME>: Use
lookup_minimal_symbol. Add a comment.
* dwarf2read.c
(read_call_site_scope) <is_ref_attr> <die_is_declaration>: Prefer
DW_AT_linkage_name.
gdb/testsuite/
2013-03-02 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix entry-values in C++ across CUs.
* gdb.arch/amd64-tailcall-cxx.exp: New file.
* gdb.arch/amd64-tailcall-cxx1.S: New file.
* gdb.arch/amd64-tailcall-cxx1.cc: New file.
* gdb.arch/amd64-tailcall-cxx2.S: New file.
* gdb.arch/amd64-tailcall-cxx2.cc: New file.
diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
index 8a61ae6..f300df2 100644
--- a/gdb/dwarf2loc.c
+++ b/gdb/dwarf2loc.c
@@ -542,7 +542,9 @@ call_site_to_target_addr (struct gdbarch *call_site_gdbarch,
struct minimal_symbol *msym;
physname = FIELD_STATIC_PHYSNAME (call_site->target);
- msym = lookup_minimal_symbol_text (physname, NULL);
+
+ /* Handle both the mangled and demangled PHYSNAME. */
+ msym = lookup_minimal_symbol (physname, NULL, NULL);
if (msym == NULL)
{
msym = lookup_minimal_symbol_by_pc (call_site->pc - 1);
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index df6298b..faee1a8 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -9812,9 +9812,18 @@ read_call_site_scope (struct die_info *die, struct dwarf2_cu *cu)
gdb_assert (target_cu->objfile == objfile);
if (die_is_declaration (target_die, target_cu))
{
- const char *target_physname;
-
- target_physname = dwarf2_physname (NULL, target_die, target_cu);
+ const char *target_physname = NULL;
+ struct attribute *target_attr;
+
+ /* Prefer the mangled name; otherwise compute the demangled one. */
+ target_attr = dwarf2_attr (target_die, DW_AT_linkage_name, target_cu);
+ if (target_attr == NULL)
+ target_attr = dwarf2_attr (target_die, DW_AT_MIPS_linkage_name,
+ target_cu);
+ if (target_attr != NULL && DW_STRING (target_attr) != NULL)
+ target_physname = DW_STRING (target_attr);
+ else
+ target_physname = dwarf2_physname (NULL, target_die, target_cu);
if (target_physname == NULL)
complaint (&symfile_complaints,
_("DW_AT_GNU_call_site_target target DIE has invalid "
diff --git a/gdb/testsuite/gdb.arch/amd64-tailcall-cxx.exp b/gdb/testsuite/gdb.arch/amd64-tailcall-cxx.exp
new file mode 100644
index 0000000..db2ab3c
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/amd64-tailcall-cxx.exp
@@ -0,0 +1,36 @@
+# Copyright (C) 2012-2013 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 opts {}
+standard_testfile amd64-tailcall-cxx1.S amd64-tailcall-cxx2.S
+
+if [info exists COMPILE] {
+ # make check RUNTESTFLAGS="gdb.arch/amd64-tailcall-cxx.exp COMPILE=1"
+ standard_testfile amd64-tailcall-cxx1.cc amd64-tailcall-cxx2.cc
+ lappend opts debug optimize=-O2
+} elseif { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
+ verbose "Skipping ${testfile}."
+ return
+}
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} "${srcfile} ${srcfile2}" $opts] } {
+ return -1
+}
+
+if ![runto g] {
+ return -1
+}
+
+gdb_test "bt" "\r\n#0 +g \\(x=x@entry=2\\) at \[^\r\n\]*\r\n#1 +0x\[0-9a-f\]+ in f \\(x=x@entry=1\\) at \[^\r\n\]*\r\n#2 +0x\[0-9a-f\]+ in main .*"
diff --git a/gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.S b/gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.S
new file mode 100644
index 0000000..d988446
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.S
@@ -0,0 +1,367 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2012-2013 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 source file was generated by:
+ g++ -o gdb.arch/amd64-tailcall-cxx1.S gdb.arch/amd64-tailcall-cxx1.cc -Wall -S -dA -O2 -g
+ Fedora GCC was used here to also test the case of missing DW_AT_linkage_name.
+ */
+
+ .file "amd64-tailcall-cxx1.cc"
+ .text
+.Ltext0:
+ .p2align 4,,15
+ .globl _Z1gi
+ .type _Z1gi, @function
+_Z1gi:
+.LFB0:
+ .file 1 "gdb.arch/amd64-tailcall-cxx1.cc"
+ # gdb.arch/amd64-tailcall-cxx1.cc:22
+ .loc 1 22 0
+ .cfi_startproc
+.LVL0:
+# BLOCK 2 freq:10000 seq:0
+# PRED: ENTRY [100.0%] (FALLTHRU)
+ # gdb.arch/amd64-tailcall-cxx1.cc:23
+ .loc 1 23 0
+ movl %edi, v(%rip)
+# SUCC: EXIT [100.0%]
+ ret
+ .cfi_endproc
+.LFE0:
+ .size _Z1gi, .-_Z1gi
+ .section .text.startup,"ax",@progbits
+ .p2align 4,,15
+ .globl main
+ .type main, @function
+main:
+.LFB1:
+ # gdb.arch/amd64-tailcall-cxx1.cc:30
+ .loc 1 30 0
+ .cfi_startproc
+# BLOCK 2 freq:10000 seq:0
+# PRED: ENTRY [100.0%] (FALLTHRU)
+ subq $8, %rsp
+ .cfi_def_cfa_offset 16
+ # gdb.arch/amd64-tailcall-cxx1.cc:31
+ .loc 1 31 0
+ movl $1, %edi
+ call _Z1fi
+.LVL1:
+ # gdb.arch/amd64-tailcall-cxx1.cc:32
+ .loc 1 32 0
+ xorl %eax, %eax
+ addq $8, %rsp
+ .cfi_def_cfa_offset 8
+# SUCC: EXIT [100.0%]
+ ret
+ .cfi_endproc
+.LFE1:
+ .size main, .-main
+ .globl v
+ .bss
+ .align 4
+ .type v, @object
+ .size v, 4
+v:
+ .zero 4
+ .text
+.Letext0:
+ .section .debug_info,"",@progbits
+.Ldebug_info0:
+ .long 0xb4 # Length of Compilation Unit Info
+ .value 0x4 # DWARF version number
+ .long .Ldebug_abbrev0 # Offset Into Abbrev. Section
+ .byte 0x8 # Pointer Size (in bytes)
+ .uleb128 0x1 # (DIE (0xb) DW_TAG_compile_unit)
+ .long .LASF1 # DW_AT_producer: "GNU C++ 4.8.0 20130220 (Red Hat 4.8.0-0.14) -mtune=generic -march=x86-64 -g -O2"
+ .byte 0x4 # DW_AT_language
+ .long .LASF2 # DW_AT_name: "gdb.arch/amd64-tailcall-cxx1.cc"
+ .long .LASF3 # DW_AT_comp_dir: ""
+ .long .Ldebug_ranges0+0 # DW_AT_ranges
+ .quad 0 # DW_AT_low_pc
+ .long .Ldebug_line0 # DW_AT_stmt_list
+ .uleb128 0x2 # (DIE (0x29) DW_TAG_subprogram)
+ # DW_AT_external
+ .ascii "g\0" # DW_AT_name
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-cxx1.cc)
+ .byte 0x15 # DW_AT_decl_line
+ .long .LASF4 # DW_AT_linkage_name: "_Z1gi"
+ .quad .LFB0 # DW_AT_low_pc
+ .quad .LFE0-.LFB0 # DW_AT_high_pc
+ .uleb128 0x1 # DW_AT_frame_base
+ .byte 0x9c # DW_OP_call_frame_cfa
+ # DW_AT_GNU_all_call_sites
+ .long 0x54 # DW_AT_sibling
+ .uleb128 0x3 # (DIE (0x48) DW_TAG_formal_parameter)
+ .ascii "x\0" # DW_AT_name
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-cxx1.cc)
+ .byte 0x15 # DW_AT_decl_line
+ .long 0x54 # DW_AT_type
+ .uleb128 0x1 # DW_AT_location
+ .byte 0x55 # DW_OP_reg5
+ .byte 0 # end of children of DIE 0x29
+ .uleb128 0x4 # (DIE (0x54) DW_TAG_base_type)
+ .byte 0x4 # DW_AT_byte_size
+ .byte 0x5 # DW_AT_encoding
+ .ascii "int\0" # DW_AT_name
+ .uleb128 0x5 # (DIE (0x5b) DW_TAG_subprogram)
+ # DW_AT_external
+ .long .LASF0 # DW_AT_name: "main"
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-cxx1.cc)
+ .byte 0x1d # DW_AT_decl_line
+ .long 0x54 # DW_AT_type
+ .quad .LFB1 # DW_AT_low_pc
+ .quad .LFE1-.LFB1 # DW_AT_high_pc
+ .uleb128 0x1 # DW_AT_frame_base
+ .byte 0x9c # DW_OP_call_frame_cfa
+ # DW_AT_GNU_all_call_sites
+ .long 0x90 # DW_AT_sibling
+ .uleb128 0x6 # (DIE (0x7c) DW_TAG_GNU_call_site)
+ .quad .LVL1 # DW_AT_low_pc
+ .long 0xa8 # DW_AT_abstract_origin
+ .uleb128 0x7 # (DIE (0x89) DW_TAG_GNU_call_site_parameter)
+ .uleb128 0x1 # DW_AT_location
+ .byte 0x55 # DW_OP_reg5
+ .uleb128 0x1 # DW_AT_GNU_call_site_value
+ .byte 0x31 # DW_OP_lit1
+ .byte 0 # end of children of DIE 0x7c
+ .byte 0 # end of children of DIE 0x5b
+ .uleb128 0x8 # (DIE (0x90) DW_TAG_variable)
+ .ascii "v\0" # DW_AT_name
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-cxx1.cc)
+ .byte 0x12 # DW_AT_decl_line
+ .long 0xa3 # DW_AT_type
+ # DW_AT_external
+ .uleb128 0x9 # DW_AT_location
+ .byte 0x3 # DW_OP_addr
+ .quad v
+ .uleb128 0x9 # (DIE (0xa3) DW_TAG_volatile_type)
+ .long 0x54 # DW_AT_type
+ .uleb128 0xa # (DIE (0xa8) DW_TAG_subprogram)
+ # DW_AT_external
+ .ascii "f\0" # DW_AT_name
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-cxx1.cc)
+ .byte 0x1a # DW_AT_decl_line
+ .long .LASF5 # DW_AT_linkage_name: "_Z1fi"
+ # DW_AT_declaration
+ .uleb128 0xb # (DIE (0xb1) DW_TAG_formal_parameter)
+ .long 0x54 # DW_AT_type
+ .byte 0 # end of children of DIE 0xa8
+ .byte 0 # end of children of DIE 0xb
+ .section .debug_abbrev,"",@progbits
+.Ldebug_abbrev0:
+ .uleb128 0x1 # (abbrev code)
+ .uleb128 0x11 # (TAG: 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 0x55 # (DW_AT_ranges)
+ .uleb128 0x17 # (DW_FORM_sec_offset)
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x10 # (DW_AT_stmt_list)
+ .uleb128 0x17 # (DW_FORM_sec_offset)
+ .byte 0
+ .byte 0
+ .uleb128 0x2 # (abbrev code)
+ .uleb128 0x2e # (TAG: DW_TAG_subprogram)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x3f # (DW_AT_external)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0x8 # (DW_FORM_string)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x6e # (DW_AT_linkage_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x12 # (DW_AT_high_pc)
+ .uleb128 0x7 # (DW_FORM_data8)
+ .uleb128 0x40 # (DW_AT_frame_base)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x1 # (DW_AT_sibling)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0x3 # (abbrev code)
+ .uleb128 0x5 # (TAG: DW_TAG_formal_parameter)
+ .byte 0 # DW_children_no
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0x8 # (DW_FORM_string)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .uleb128 0x2 # (DW_AT_location)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .byte 0
+ .byte 0
+ .uleb128 0x4 # (abbrev code)
+ .uleb128 0x24 # (TAG: DW_TAG_base_type)
+ .byte 0 # DW_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 0
+ .byte 0
+ .uleb128 0x5 # (abbrev code)
+ .uleb128 0x2e # (TAG: DW_TAG_subprogram)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x3f # (DW_AT_external)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .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 0x7 # (DW_FORM_data8)
+ .uleb128 0x40 # (DW_AT_frame_base)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x1 # (DW_AT_sibling)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0x6 # (abbrev code)
+ .uleb128 0x4109 # (TAG: DW_TAG_GNU_call_site)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x31 # (DW_AT_abstract_origin)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0x7 # (abbrev code)
+ .uleb128 0x410a # (TAG: DW_TAG_GNU_call_site_parameter)
+ .byte 0 # DW_children_no
+ .uleb128 0x2 # (DW_AT_location)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .uleb128 0x2111 # (DW_AT_GNU_call_site_value)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .byte 0
+ .byte 0
+ .uleb128 0x8 # (abbrev code)
+ .uleb128 0x34 # (TAG: DW_TAG_variable)
+ .byte 0 # DW_children_no
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0x8 # (DW_FORM_string)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .uleb128 0x3f # (DW_AT_external)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x2 # (DW_AT_location)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .byte 0
+ .byte 0
+ .uleb128 0x9 # (abbrev code)
+ .uleb128 0x35 # (TAG: DW_TAG_volatile_type)
+ .byte 0 # DW_children_no
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0xa # (abbrev code)
+ .uleb128 0x2e # (TAG: DW_TAG_subprogram)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x3f # (DW_AT_external)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0x8 # (DW_FORM_string)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x6e # (DW_AT_linkage_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x3c # (DW_AT_declaration)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .byte 0
+ .byte 0
+ .uleb128 0xb # (abbrev code)
+ .uleb128 0x5 # (TAG: DW_TAG_formal_parameter)
+ .byte 0 # DW_children_no
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .byte 0
+ .section .debug_aranges,"",@progbits
+ .long 0x3c # Length of Address Ranges Info
+ .value 0x2 # DWARF Version
+ .long .Ldebug_info0 # Offset of Compilation Unit Info
+ .byte 0x8 # Size of Address
+ .byte 0 # Size of Segment Descriptor
+ .value 0 # Pad to 16 byte boundary
+ .value 0
+ .quad .Ltext0 # Address
+ .quad .Letext0-.Ltext0 # Length
+ .quad .LFB1 # Address
+ .quad .LFE1-.LFB1 # Length
+ .quad 0
+ .quad 0
+ .section .debug_ranges,"",@progbits
+.Ldebug_ranges0:
+ .quad .Ltext0 # Offset 0
+ .quad .Letext0
+ .quad .LFB1 # Offset 0x10
+ .quad .LFE1
+ .quad 0
+ .quad 0
+ .section .debug_line,"",@progbits
+.Ldebug_line0:
+ .section .debug_str,"MS",@progbits,1
+.LASF4:
+ .string "_Z1gi"
+.LASF3:
+ .string ""
+.LASF2:
+ .string "gdb.arch/amd64-tailcall-cxx1.cc"
+.LASF1:
+ .string "GNU C++ 4.8.0 20130220 (Red Hat 4.8.0-0.14) -mtune=generic -march=x86-64 -g -O2"
+.LASF0:
+ .string "main"
+.LASF5:
+ .string "_Z1fi"
+ .ident "GCC: (GNU) 4.8.0 20130220 (Red Hat 4.8.0-0.14)"
+ .section .note.GNU-stack,"",@progbits
diff --git a/gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.cc b/gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.cc
new file mode 100644
index 0000000..7af9936
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/amd64-tailcall-cxx1.cc
@@ -0,0 +1,32 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2013 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/>. */
+
+volatile int v;
+
+__attribute__ ((noinline, noclone)) void
+g (int x)
+{
+ v = x;
+}
+
+extern void f (int x);
+
+int
+main ()
+{
+ f (1);
+}
diff --git a/gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.S b/gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.S
new file mode 100644
index 0000000..8a26d6f
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.S
@@ -0,0 +1,276 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2012-2013 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 source file was generated by:
+ g++ -o gdb.arch/amd64-tailcall-cxx2.S gdb.arch/amd64-tailcall-cxx2.cc -Wall -S -dA -O2 -g
+ Fedora GCC was used here to also test the case of missing DW_AT_linkage_name.
+ */
+
+ .file "amd64-tailcall-cxx2.cc"
+ .text
+.Ltext0:
+ .p2align 4,,15
+ .globl _Z1fi
+ .type _Z1fi, @function
+_Z1fi:
+.LFB0:
+ .file 1 "gdb.arch/amd64-tailcall-cxx2.cc"
+ # gdb.arch/amd64-tailcall-cxx2.cc:22
+ .loc 1 22 0
+ .cfi_startproc
+.LVL0:
+# BLOCK 2 freq:10000 seq:0
+# PRED: ENTRY [100.0%] (FALLTHRU)
+ # gdb.arch/amd64-tailcall-cxx2.cc:23
+ .loc 1 23 0
+ addl $1, %edi
+.LVL1:
+ jmp _Z1gi
+.LVL2:
+# SUCC: EXIT [100.0%] (ABNORMAL,SIBCALL)
+ .cfi_endproc
+.LFE0:
+ .size _Z1fi, .-_Z1fi
+.Letext0:
+ .section .debug_info,"",@progbits
+.Ldebug_info0:
+ .long 0x84 # Length of Compilation Unit Info
+ .value 0x4 # DWARF version number
+ .long .Ldebug_abbrev0 # Offset Into Abbrev. Section
+ .byte 0x8 # Pointer Size (in bytes)
+ .uleb128 0x1 # (DIE (0xb) DW_TAG_compile_unit)
+ .long .LASF0 # DW_AT_producer: "GNU C++ 4.8.0 20130220 (Red Hat 4.8.0-0.14) -mtune=generic -march=x86-64 -g -O2"
+ .byte 0x4 # DW_AT_language
+ .long .LASF1 # DW_AT_name: "gdb.arch/amd64-tailcall-cxx2.cc"
+ .long .LASF2 # DW_AT_comp_dir: ""
+ .quad .Ltext0 # DW_AT_low_pc
+ .quad .Letext0-.Ltext0 # DW_AT_high_pc
+ .long .Ldebug_line0 # DW_AT_stmt_list
+ .uleb128 0x2 # (DIE (0x2d) DW_TAG_subprogram)
+ # DW_AT_external
+ .ascii "f\0" # DW_AT_name
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-cxx2.cc)
+ .byte 0x15 # DW_AT_decl_line
+ .long .LASF3 # DW_AT_linkage_name: "_Z1fi"
+ .quad .LFB0 # DW_AT_low_pc
+ .quad .LFE0-.LFB0 # DW_AT_high_pc
+ .uleb128 0x1 # DW_AT_frame_base
+ .byte 0x9c # DW_OP_call_frame_cfa
+ # DW_AT_GNU_all_call_sites
+ .long 0x71 # DW_AT_sibling
+ .uleb128 0x3 # (DIE (0x4c) DW_TAG_formal_parameter)
+ .ascii "x\0" # DW_AT_name
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-cxx2.cc)
+ .byte 0x15 # DW_AT_decl_line
+ .long 0x71 # DW_AT_type
+ .long .LLST0 # DW_AT_location
+ .uleb128 0x4 # (DIE (0x59) DW_TAG_GNU_call_site)
+ .quad .LVL2 # DW_AT_low_pc
+ # DW_AT_GNU_tail_call
+ .long 0x78 # DW_AT_abstract_origin
+ .uleb128 0x5 # (DIE (0x66) DW_TAG_GNU_call_site_parameter)
+ .uleb128 0x1 # DW_AT_location
+ .byte 0x55 # DW_OP_reg5
+ .uleb128 0x5 # DW_AT_GNU_call_site_value
+ .byte 0xf3 # DW_OP_GNU_entry_value
+ .uleb128 0x1
+ .byte 0x55 # DW_OP_reg5
+ .byte 0x23 # DW_OP_plus_uconst
+ .uleb128 0x1
+ .byte 0 # end of children of DIE 0x59
+ .byte 0 # end of children of DIE 0x2d
+ .uleb128 0x6 # (DIE (0x71) DW_TAG_base_type)
+ .byte 0x4 # DW_AT_byte_size
+ .byte 0x5 # DW_AT_encoding
+ .ascii "int\0" # DW_AT_name
+ .uleb128 0x7 # (DIE (0x78) DW_TAG_subprogram)
+ # DW_AT_external
+ .ascii "g\0" # DW_AT_name
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-cxx2.cc)
+ .byte 0x12 # DW_AT_decl_line
+ .long .LASF4 # DW_AT_linkage_name: "_Z1gi"
+ # DW_AT_declaration
+ .uleb128 0x8 # (DIE (0x81) DW_TAG_formal_parameter)
+ .long 0x71 # DW_AT_type
+ .byte 0 # end of children of DIE 0x78
+ .byte 0 # end of children of DIE 0xb
+ .section .debug_abbrev,"",@progbits
+.Ldebug_abbrev0:
+ .uleb128 0x1 # (abbrev code)
+ .uleb128 0x11 # (TAG: 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 0x7 # (DW_FORM_data8)
+ .uleb128 0x10 # (DW_AT_stmt_list)
+ .uleb128 0x17 # (DW_FORM_sec_offset)
+ .byte 0
+ .byte 0
+ .uleb128 0x2 # (abbrev code)
+ .uleb128 0x2e # (TAG: DW_TAG_subprogram)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x3f # (DW_AT_external)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0x8 # (DW_FORM_string)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x6e # (DW_AT_linkage_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x12 # (DW_AT_high_pc)
+ .uleb128 0x7 # (DW_FORM_data8)
+ .uleb128 0x40 # (DW_AT_frame_base)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x1 # (DW_AT_sibling)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0x3 # (abbrev code)
+ .uleb128 0x5 # (TAG: DW_TAG_formal_parameter)
+ .byte 0 # DW_children_no
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0x8 # (DW_FORM_string)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .uleb128 0x2 # (DW_AT_location)
+ .uleb128 0x17 # (DW_FORM_sec_offset)
+ .byte 0
+ .byte 0
+ .uleb128 0x4 # (abbrev code)
+ .uleb128 0x4109 # (TAG: DW_TAG_GNU_call_site)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x2115 # (DW_AT_GNU_tail_call)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x31 # (DW_AT_abstract_origin)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0x5 # (abbrev code)
+ .uleb128 0x410a # (TAG: DW_TAG_GNU_call_site_parameter)
+ .byte 0 # DW_children_no
+ .uleb128 0x2 # (DW_AT_location)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .uleb128 0x2111 # (DW_AT_GNU_call_site_value)
+ .uleb128 0x18 # (DW_FORM_exprloc)
+ .byte 0
+ .byte 0
+ .uleb128 0x6 # (abbrev code)
+ .uleb128 0x24 # (TAG: DW_TAG_base_type)
+ .byte 0 # DW_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 0
+ .byte 0
+ .uleb128 0x7 # (abbrev code)
+ .uleb128 0x2e # (TAG: DW_TAG_subprogram)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x3f # (DW_AT_external)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0x8 # (DW_FORM_string)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x6e # (DW_AT_linkage_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x3c # (DW_AT_declaration)
+ .uleb128 0x19 # (DW_FORM_flag_present)
+ .byte 0
+ .byte 0
+ .uleb128 0x8 # (abbrev code)
+ .uleb128 0x5 # (TAG: DW_TAG_formal_parameter)
+ .byte 0 # DW_children_no
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .byte 0
+ .section .debug_loc,"",@progbits
+.Ldebug_loc0:
+.LLST0:
+ .quad .LVL0-.Ltext0 # Location list begin address (*.LLST0)
+ .quad .LVL1-.Ltext0 # Location list end address (*.LLST0)
+ .value 0x1 # Location expression size
+ .byte 0x55 # DW_OP_reg5
+ .quad .LVL1-.Ltext0 # Location list begin address (*.LLST0)
+ .quad .LVL2-1-.Ltext0 # Location list end address (*.LLST0)
+ .value 0x3 # Location expression size
+ .byte 0x75 # DW_OP_breg5
+ .sleb128 -1
+ .byte 0x9f # DW_OP_stack_value
+ .quad .LVL2-1-.Ltext0 # Location list begin address (*.LLST0)
+ .quad .LFE0-.Ltext0 # Location list end address (*.LLST0)
+ .value 0x4 # Location expression size
+ .byte 0xf3 # DW_OP_GNU_entry_value
+ .uleb128 0x1
+ .byte 0x55 # DW_OP_reg5
+ .byte 0x9f # DW_OP_stack_value
+ .quad 0 # Location list terminator begin (*.LLST0)
+ .quad 0 # Location list terminator end (*.LLST0)
+ .section .debug_aranges,"",@progbits
+ .long 0x2c # Length of Address Ranges Info
+ .value 0x2 # DWARF Version
+ .long .Ldebug_info0 # Offset of Compilation Unit Info
+ .byte 0x8 # Size of Address
+ .byte 0 # Size of Segment Descriptor
+ .value 0 # Pad to 16 byte boundary
+ .value 0
+ .quad .Ltext0 # Address
+ .quad .Letext0-.Ltext0 # Length
+ .quad 0
+ .quad 0
+ .section .debug_line,"",@progbits
+.Ldebug_line0:
+ .section .debug_str,"MS",@progbits,1
+.LASF0:
+ .string "GNU C++ 4.8.0 20130220 (Red Hat 4.8.0-0.14) -mtune=generic -march=x86-64 -g -O2"
+.LASF2:
+ .string ""
+.LASF3:
+ .string "_Z1fi"
+.LASF1:
+ .string "gdb.arch/amd64-tailcall-cxx2.cc"
+.LASF4:
+ .string "_Z1gi"
+ .ident "GCC: (GNU) 4.8.0 20130220 (Red Hat 4.8.0-0.14)"
+ .section .note.GNU-stack,"",@progbits
diff --git a/gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.cc b/gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.cc
new file mode 100644
index 0000000..232f4fb
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/amd64-tailcall-cxx2.cc
@@ -0,0 +1,24 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2013 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/>. */
+
+extern void g (int x);
+
+__attribute__ ((noinline, noclone)) void
+f (int x)
+{
+ g (x + 1);
+}

845
gdb-entryval-2of2.patch Normal file
View File

@ -0,0 +1,845 @@
http://sourceware.org/ml/gdb-patches/2013-03/msg00062.html
Subject: [patch] entry-values: Fix if callee called noreturn function
Hi,
while debugging the previous bug I found this bug.
THIS_PC found below is then passed to get_pc_function_start.
get_pc_function_start cannot handle PC which has address of the end of the
function.
No regressions on {x86_64,x86_64-m32,i686}-fedora19pre-linux-gnu.
I will check it in.
Thanks,
Jan
gdb/
2013-03-02 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix entry-values if the callee called a noreturn function.
* dwarf2-frame-tailcall.c (dwarf2_tailcall_sniffer_first): Use
get_frame_address_in_block. Add new comment.
gdb/testsuite/
2013-03-02 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix entry-values if the callee called a noreturn function.
* gdb.arch/amd64-tailcall-noret.S: New file.
* gdb.arch/amd64-tailcall-noret.c: New file.
* gdb.arch/amd64-tailcall-noret.exp: New file.
diff --git a/gdb/dwarf2-frame-tailcall.c b/gdb/dwarf2-frame-tailcall.c
index b5f95c3..b82a051 100644
--- a/gdb/dwarf2-frame-tailcall.c
+++ b/gdb/dwarf2-frame-tailcall.c
@@ -374,7 +374,9 @@ dwarf2_tailcall_sniffer_first (struct frame_info *this_frame,
gdb_assert (*tailcall_cachep == NULL);
- this_pc = get_frame_pc (this_frame);
+ /* PC may be after the function if THIS_FRAME calls noreturn function,
+ get_frame_address_in_block will decrease it by 1 in such case. */
+ this_pc = get_frame_address_in_block (this_frame);
/* Catch any unwinding errors. */
TRY_CATCH (except, RETURN_MASK_ERROR)
diff --git a/gdb/testsuite/gdb.arch/amd64-tailcall-noret.S b/gdb/testsuite/gdb.arch/amd64-tailcall-noret.S
new file mode 100644
index 0000000..25397e9
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/amd64-tailcall-noret.S
@@ -0,0 +1,694 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2013 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 source file was generated by:
+ gcc -o gdb.arch/amd64-tailcall-noret.S gdb.arch/amd64-tailcall-noret.c -Wall -S -dA -O2 -g
+ */
+
+ .file "amd64-tailcall-noret.c"
+ .text
+.Ltext0:
+ .section .text.unlikely,"ax",@progbits
+ .type noret, @function
+noret:
+.LFB9:
+ .file 1 "gdb.arch/amd64-tailcall-noret.c"
+ # gdb.arch/amd64-tailcall-noret.c:24
+ .loc 1 24 0
+ .cfi_startproc
+.LVL0:
+# BLOCK 2 freq:10000 seq:0
+# PRED: ENTRY [100.0%] (fallthru)
+ pushq %rax
+.LCFI0:
+ .cfi_def_cfa_offset 16
+ # gdb.arch/amd64-tailcall-noret.c:25
+ .loc 1 25 0
+ call abort
+.LVL1:
+# SUCC:
+ .cfi_endproc
+.LFE9:
+ .size noret, .-noret
+ .text
+ .p2align 4,,15
+ .type mayret, @function
+mayret:
+.LFB10:
+ # gdb.arch/amd64-tailcall-noret.c:30
+ .loc 1 30 0
+ .cfi_startproc
+.LVL2:
+# BLOCK 2 freq:10000 seq:0
+# PRED: ENTRY [100.0%] (fallthru)
+ # gdb.arch/amd64-tailcall-noret.c:31
+ .loc 1 31 0
+ movl v(%rip), %eax
+ testl %eax, %eax
+# SUCC: 4 [0.0%] (can_fallthru) 3 [100.0%] (fallthru,can_fallthru)
+ jne .L8
+# BLOCK 3 freq:9996 seq:1
+# PRED: 2 [100.0%] (fallthru,can_fallthru)
+# SUCC: EXIT [100.0%]
+ rep
+ ret
+# BLOCK 4 freq:4 seq:2
+# PRED: 2 [0.0%] (can_fallthru)
+.L8:
+ # gdb.arch/amd64-tailcall-noret.c:30
+ .loc 1 30 0
+ pushq %rdx
+.LCFI1:
+ .cfi_def_cfa_offset 16
+ # gdb.arch/amd64-tailcall-noret.c:32
+ .loc 1 32 0
+ xorl %eax, %eax
+ call noret
+.LVL3:
+# SUCC:
+ .cfi_endproc
+.LFE10:
+ .size mayret, .-mayret
+ .p2align 4,,15
+ .type tailcall, @function
+tailcall:
+.LFB11:
+ # gdb.arch/amd64-tailcall-noret.c:37
+ .loc 1 37 0
+ .cfi_startproc
+.LVL4:
+# BLOCK 2 freq:10000 seq:0
+# PRED: ENTRY [100.0%] (fallthru)
+ # gdb.arch/amd64-tailcall-noret.c:38
+ .loc 1 38 0
+ jmp mayret
+.LVL5:
+# SUCC: EXIT [100.0%] (ab,sibcall)
+ .cfi_endproc
+.LFE11:
+ .size tailcall, .-tailcall
+ .section .text.startup,"ax",@progbits
+ .p2align 4,,15
+ .globl main
+ .type main, @function
+main:
+.LFB12:
+ # gdb.arch/amd64-tailcall-noret.c:43
+ .loc 1 43 0
+ .cfi_startproc
+# BLOCK 2 freq:10000 seq:0
+# PRED: ENTRY [100.0%] (fallthru)
+ subq $8, %rsp
+.LCFI2:
+ .cfi_def_cfa_offset 16
+ # gdb.arch/amd64-tailcall-noret.c:44
+ .loc 1 44 0
+ movl $1, %edi
+ call tailcall
+.LVL6:
+ # gdb.arch/amd64-tailcall-noret.c:46
+ .loc 1 46 0
+ xorl %eax, %eax
+ addq $8, %rsp
+.LCFI3:
+ .cfi_def_cfa_offset 8
+# SUCC: EXIT [100.0%]
+ ret
+ .cfi_endproc
+.LFE12:
+ .size main, .-main
+ .globl v
+ .data
+ .align 4
+ .type v, @object
+ .size v, 4
+v:
+ .long 1
+ .text
+.Letext0:
+ .file 2 "/usr/include/stdlib.h"
+ .section .debug_info,"",@progbits
+.Ldebug_info0:
+ .long 0x19d # Length of Compilation Unit Info
+ .value 0x2 # DWARF version number
+ .long .Ldebug_abbrev0 # Offset Into Abbrev. Section
+ .byte 0x8 # Pointer Size (in bytes)
+ .uleb128 0x1 # (DIE (0xb) DW_TAG_compile_unit)
+ .long .LASF14 # DW_AT_producer: "GNU C 4.7.3 20130221 (prerelease)"
+ .byte 0x1 # DW_AT_language
+ .long .LASF15 # DW_AT_name: "gdb.arch/amd64-tailcall-noret.c"
+ .long .LASF16 # DW_AT_comp_dir: ""
+ .long .Ldebug_ranges0+0 # DW_AT_ranges
+ .quad 0 # DW_AT_low_pc
+ .quad 0 # DW_AT_entry_pc
+ .long .Ldebug_line0 # DW_AT_stmt_list
+ .uleb128 0x2 # (DIE (0x31) DW_TAG_base_type)
+ .byte 0x8 # DW_AT_byte_size
+ .byte 0x7 # DW_AT_encoding
+ .long .LASF0 # DW_AT_name: "long unsigned int"
+ .uleb128 0x3 # (DIE (0x38) DW_TAG_base_type)
+ .byte 0x4 # DW_AT_byte_size
+ .byte 0x5 # DW_AT_encoding
+ .ascii "int\0" # DW_AT_name
+ .uleb128 0x2 # (DIE (0x3f) DW_TAG_base_type)
+ .byte 0x1 # DW_AT_byte_size
+ .byte 0x8 # DW_AT_encoding
+ .long .LASF1 # DW_AT_name: "unsigned char"
+ .uleb128 0x2 # (DIE (0x46) DW_TAG_base_type)
+ .byte 0x2 # DW_AT_byte_size
+ .byte 0x7 # DW_AT_encoding
+ .long .LASF2 # DW_AT_name: "short unsigned int"
+ .uleb128 0x2 # (DIE (0x4d) DW_TAG_base_type)
+ .byte 0x4 # DW_AT_byte_size
+ .byte 0x7 # DW_AT_encoding
+ .long .LASF3 # DW_AT_name: "unsigned int"
+ .uleb128 0x2 # (DIE (0x54) DW_TAG_base_type)
+ .byte 0x1 # DW_AT_byte_size
+ .byte 0x6 # DW_AT_encoding
+ .long .LASF4 # DW_AT_name: "signed char"
+ .uleb128 0x2 # (DIE (0x5b) DW_TAG_base_type)
+ .byte 0x2 # DW_AT_byte_size
+ .byte 0x5 # DW_AT_encoding
+ .long .LASF5 # DW_AT_name: "short int"
+ .uleb128 0x2 # (DIE (0x62) DW_TAG_base_type)
+ .byte 0x8 # DW_AT_byte_size
+ .byte 0x5 # DW_AT_encoding
+ .long .LASF6 # DW_AT_name: "long int"
+ .uleb128 0x2 # (DIE (0x69) DW_TAG_base_type)
+ .byte 0x8 # DW_AT_byte_size
+ .byte 0x7 # DW_AT_encoding
+ .long .LASF7 # DW_AT_name: "sizetype"
+ .uleb128 0x2 # (DIE (0x70) DW_TAG_base_type)
+ .byte 0x1 # DW_AT_byte_size
+ .byte 0x6 # DW_AT_encoding
+ .long .LASF8 # DW_AT_name: "char"
+ .uleb128 0x2 # (DIE (0x77) DW_TAG_base_type)
+ .byte 0x8 # DW_AT_byte_size
+ .byte 0x5 # DW_AT_encoding
+ .long .LASF9 # DW_AT_name: "long long int"
+ .uleb128 0x2 # (DIE (0x7e) DW_TAG_base_type)
+ .byte 0x8 # DW_AT_byte_size
+ .byte 0x7 # DW_AT_encoding
+ .long .LASF10 # DW_AT_name: "long long unsigned int"
+ .uleb128 0x4 # (DIE (0x85) DW_TAG_volatile_type)
+ .long 0x38 # DW_AT_type
+ .uleb128 0x5 # (DIE (0x8a) DW_TAG_subprogram)
+ .long .LASF11 # DW_AT_name: "noret"
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-noret.c)
+ .byte 0x17 # DW_AT_decl_line
+ .byte 0x1 # DW_AT_prototyped
+ .quad .LFB9 # DW_AT_low_pc
+ .quad .LFE9 # DW_AT_high_pc
+ .long .LLST0 # DW_AT_frame_base
+ .byte 0x1 # DW_AT_GNU_all_call_sites
+ .long 0xc7 # DW_AT_sibling
+ .uleb128 0x6 # (DIE (0xab) DW_TAG_formal_parameter)
+ .ascii "x\0" # DW_AT_name
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-noret.c)
+ .byte 0x17 # DW_AT_decl_line
+ .long 0x38 # DW_AT_type
+ .long .LLST1 # DW_AT_location
+ .uleb128 0x7 # (DIE (0xb8) DW_TAG_unspecified_parameters)
+ .uleb128 0x8 # (DIE (0xb9) DW_TAG_GNU_call_site)
+ .quad .LVL1 # DW_AT_low_pc
+ .long 0x195 # DW_AT_abstract_origin
+ .byte 0 # end of children of DIE 0x8a
+ .uleb128 0x5 # (DIE (0xc7) DW_TAG_subprogram)
+ .long .LASF12 # DW_AT_name: "mayret"
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-noret.c)
+ .byte 0x1d # DW_AT_decl_line
+ .byte 0x1 # DW_AT_prototyped
+ .quad .LFB10 # DW_AT_low_pc
+ .quad .LFE10 # DW_AT_high_pc
+ .long .LLST2 # DW_AT_frame_base
+ .byte 0x1 # DW_AT_GNU_all_call_sites
+ .long 0x103 # DW_AT_sibling
+ .uleb128 0x6 # (DIE (0xe8) DW_TAG_formal_parameter)
+ .ascii "x\0" # DW_AT_name
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-noret.c)
+ .byte 0x1d # DW_AT_decl_line
+ .long 0x38 # DW_AT_type
+ .long .LLST3 # DW_AT_location
+ .uleb128 0x8 # (DIE (0xf5) DW_TAG_GNU_call_site)
+ .quad .LVL3 # DW_AT_low_pc
+ .long 0x8a # DW_AT_abstract_origin
+ .byte 0 # end of children of DIE 0xc7
+ .uleb128 0x9 # (DIE (0x103) DW_TAG_subprogram)
+ .long .LASF13 # DW_AT_name: "tailcall"
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-noret.c)
+ .byte 0x24 # DW_AT_decl_line
+ .byte 0x1 # DW_AT_prototyped
+ .quad .LFB11 # DW_AT_low_pc
+ .quad .LFE11 # DW_AT_high_pc
+ .byte 0x2 # DW_AT_frame_base
+ .byte 0x77 # DW_OP_breg7
+ .sleb128 8
+ .byte 0x1 # DW_AT_GNU_all_call_sites
+ .long 0x147 # DW_AT_sibling
+ .uleb128 0x6 # (DIE (0x123) DW_TAG_formal_parameter)
+ .ascii "x\0" # DW_AT_name
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-noret.c)
+ .byte 0x24 # DW_AT_decl_line
+ .long 0x38 # DW_AT_type
+ .long .LLST4 # DW_AT_location
+ .uleb128 0xa # (DIE (0x130) DW_TAG_GNU_call_site)
+ .quad .LVL5 # DW_AT_low_pc
+ .byte 0x1 # DW_AT_GNU_tail_call
+ .long 0xc7 # DW_AT_abstract_origin
+ .uleb128 0xb # (DIE (0x13e) DW_TAG_GNU_call_site_parameter)
+ .byte 0x1 # DW_AT_location
+ .byte 0x55 # DW_OP_reg5
+ .byte 0x3 # DW_AT_GNU_call_site_value
+ .byte 0xf3 # DW_OP_GNU_entry_value
+ .uleb128 0x1
+ .byte 0x55 # DW_OP_reg5
+ .byte 0 # end of children of DIE 0x130
+ .byte 0 # end of children of DIE 0x103
+ .uleb128 0xc # (DIE (0x147) DW_TAG_subprogram)
+ .byte 0x1 # DW_AT_external
+ .long .LASF17 # DW_AT_name: "main"
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-noret.c)
+ .byte 0x2a # DW_AT_decl_line
+ .byte 0x1 # DW_AT_prototyped
+ .long 0x38 # DW_AT_type
+ .quad .LFB12 # DW_AT_low_pc
+ .quad .LFE12 # DW_AT_high_pc
+ .long .LLST5 # DW_AT_frame_base
+ .byte 0x1 # DW_AT_GNU_all_call_sites
+ .long 0x181 # DW_AT_sibling
+ .uleb128 0xd # (DIE (0x16d) DW_TAG_GNU_call_site)
+ .quad .LVL6 # DW_AT_low_pc
+ .long 0x103 # DW_AT_abstract_origin
+ .uleb128 0xb # (DIE (0x17a) DW_TAG_GNU_call_site_parameter)
+ .byte 0x1 # DW_AT_location
+ .byte 0x55 # DW_OP_reg5
+ .byte 0x1 # DW_AT_GNU_call_site_value
+ .byte 0x31 # DW_OP_lit1
+ .byte 0 # end of children of DIE 0x16d
+ .byte 0 # end of children of DIE 0x147
+ .uleb128 0xe # (DIE (0x181) DW_TAG_variable)
+ .ascii "v\0" # DW_AT_name
+ .byte 0x1 # DW_AT_decl_file (gdb.arch/amd64-tailcall-noret.c)
+ .byte 0x14 # DW_AT_decl_line
+ .long 0x85 # DW_AT_type
+ .byte 0x1 # DW_AT_external
+ .byte 0x9 # DW_AT_location
+ .byte 0x3 # DW_OP_addr
+ .quad v
+ .uleb128 0xf # (DIE (0x195) DW_TAG_subprogram)
+ .byte 0x1 # DW_AT_external
+ .long .LASF18 # DW_AT_name: "abort"
+ .byte 0x2 # DW_AT_decl_file (/usr/include/stdlib.h)
+ .value 0x202 # DW_AT_decl_line
+ .byte 0x1 # DW_AT_prototyped
+ .byte 0x1 # DW_AT_declaration
+ .byte 0 # end of children of DIE 0xb
+ .section .debug_abbrev,"",@progbits
+.Ldebug_abbrev0:
+ .uleb128 0x1 # (abbrev code)
+ .uleb128 0x11 # (TAG: 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 0x55 # (DW_AT_ranges)
+ .uleb128 0x6 # (DW_FORM_data4)
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x52 # (DW_AT_entry_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x10 # (DW_AT_stmt_list)
+ .uleb128 0x6 # (DW_FORM_data4)
+ .byte 0
+ .byte 0
+ .uleb128 0x2 # (abbrev code)
+ .uleb128 0x24 # (TAG: DW_TAG_base_type)
+ .byte 0 # DW_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 0xe # (DW_FORM_strp)
+ .byte 0
+ .byte 0
+ .uleb128 0x3 # (abbrev code)
+ .uleb128 0x24 # (TAG: DW_TAG_base_type)
+ .byte 0 # DW_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 0
+ .byte 0
+ .uleb128 0x4 # (abbrev code)
+ .uleb128 0x35 # (TAG: DW_TAG_volatile_type)
+ .byte 0 # DW_children_no
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0x5 # (abbrev code)
+ .uleb128 0x2e # (TAG: DW_TAG_subprogram)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x27 # (DW_AT_prototyped)
+ .uleb128 0xc # (DW_FORM_flag)
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x12 # (DW_AT_high_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x40 # (DW_AT_frame_base)
+ .uleb128 0x6 # (DW_FORM_data4)
+ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites)
+ .uleb128 0xc # (DW_FORM_flag)
+ .uleb128 0x1 # (DW_AT_sibling)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0x6 # (abbrev code)
+ .uleb128 0x5 # (TAG: DW_TAG_formal_parameter)
+ .byte 0 # DW_children_no
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0x8 # (DW_FORM_string)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .uleb128 0x2 # (DW_AT_location)
+ .uleb128 0x6 # (DW_FORM_data4)
+ .byte 0
+ .byte 0
+ .uleb128 0x7 # (abbrev code)
+ .uleb128 0x18 # (TAG: DW_TAG_unspecified_parameters)
+ .byte 0 # DW_children_no
+ .byte 0
+ .byte 0
+ .uleb128 0x8 # (abbrev code)
+ .uleb128 0x4109 # (TAG: DW_TAG_GNU_call_site)
+ .byte 0 # DW_children_no
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x31 # (DW_AT_abstract_origin)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0x9 # (abbrev code)
+ .uleb128 0x2e # (TAG: DW_TAG_subprogram)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x27 # (DW_AT_prototyped)
+ .uleb128 0xc # (DW_FORM_flag)
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x12 # (DW_AT_high_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x40 # (DW_AT_frame_base)
+ .uleb128 0xa # (DW_FORM_block1)
+ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites)
+ .uleb128 0xc # (DW_FORM_flag)
+ .uleb128 0x1 # (DW_AT_sibling)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0xa # (abbrev code)
+ .uleb128 0x4109 # (TAG: DW_TAG_GNU_call_site)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x2115 # (DW_AT_GNU_tail_call)
+ .uleb128 0xc # (DW_FORM_flag)
+ .uleb128 0x31 # (DW_AT_abstract_origin)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0xb # (abbrev code)
+ .uleb128 0x410a # (TAG: DW_TAG_GNU_call_site_parameter)
+ .byte 0 # DW_children_no
+ .uleb128 0x2 # (DW_AT_location)
+ .uleb128 0xa # (DW_FORM_block1)
+ .uleb128 0x2111 # (DW_AT_GNU_call_site_value)
+ .uleb128 0xa # (DW_FORM_block1)
+ .byte 0
+ .byte 0
+ .uleb128 0xc # (abbrev code)
+ .uleb128 0x2e # (TAG: DW_TAG_subprogram)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x3f # (DW_AT_external)
+ .uleb128 0xc # (DW_FORM_flag)
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x27 # (DW_AT_prototyped)
+ .uleb128 0xc # (DW_FORM_flag)
+ .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)
+ .uleb128 0x40 # (DW_AT_frame_base)
+ .uleb128 0x6 # (DW_FORM_data4)
+ .uleb128 0x2117 # (DW_AT_GNU_all_call_sites)
+ .uleb128 0xc # (DW_FORM_flag)
+ .uleb128 0x1 # (DW_AT_sibling)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0xd # (abbrev code)
+ .uleb128 0x4109 # (TAG: DW_TAG_GNU_call_site)
+ .byte 0x1 # DW_children_yes
+ .uleb128 0x11 # (DW_AT_low_pc)
+ .uleb128 0x1 # (DW_FORM_addr)
+ .uleb128 0x31 # (DW_AT_abstract_origin)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .byte 0
+ .byte 0
+ .uleb128 0xe # (abbrev code)
+ .uleb128 0x34 # (TAG: DW_TAG_variable)
+ .byte 0 # DW_children_no
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0x8 # (DW_FORM_string)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x49 # (DW_AT_type)
+ .uleb128 0x13 # (DW_FORM_ref4)
+ .uleb128 0x3f # (DW_AT_external)
+ .uleb128 0xc # (DW_FORM_flag)
+ .uleb128 0x2 # (DW_AT_location)
+ .uleb128 0xa # (DW_FORM_block1)
+ .byte 0
+ .byte 0
+ .uleb128 0xf # (abbrev code)
+ .uleb128 0x2e # (TAG: DW_TAG_subprogram)
+ .byte 0 # DW_children_no
+ .uleb128 0x3f # (DW_AT_external)
+ .uleb128 0xc # (DW_FORM_flag)
+ .uleb128 0x3 # (DW_AT_name)
+ .uleb128 0xe # (DW_FORM_strp)
+ .uleb128 0x3a # (DW_AT_decl_file)
+ .uleb128 0xb # (DW_FORM_data1)
+ .uleb128 0x3b # (DW_AT_decl_line)
+ .uleb128 0x5 # (DW_FORM_data2)
+ .uleb128 0x27 # (DW_AT_prototyped)
+ .uleb128 0xc # (DW_FORM_flag)
+ .uleb128 0x3c # (DW_AT_declaration)
+ .uleb128 0xc # (DW_FORM_flag)
+ .byte 0
+ .byte 0
+ .byte 0
+ .section .debug_loc,"",@progbits
+.Ldebug_loc0:
+.LLST0:
+ .quad .LFB9 # Location list begin address (*.LLST0)
+ .quad .LCFI0 # Location list end address (*.LLST0)
+ .value 0x2 # Location expression size
+ .byte 0x77 # DW_OP_breg7
+ .sleb128 8
+ .quad .LCFI0 # Location list begin address (*.LLST0)
+ .quad .LFE9 # Location list end address (*.LLST0)
+ .value 0x2 # Location expression size
+ .byte 0x77 # DW_OP_breg7
+ .sleb128 16
+ .quad 0 # Location list terminator begin (*.LLST0)
+ .quad 0 # Location list terminator end (*.LLST0)
+.LLST1:
+ .quad .LVL0 # Location list begin address (*.LLST1)
+ .quad .LVL1-1 # Location list end address (*.LLST1)
+ .value 0x1 # Location expression size
+ .byte 0x55 # DW_OP_reg5
+ .quad .LVL1-1 # Location list begin address (*.LLST1)
+ .quad .LFE9 # Location list end address (*.LLST1)
+ .value 0x4 # Location expression size
+ .byte 0xf3 # DW_OP_GNU_entry_value
+ .uleb128 0x1
+ .byte 0x55 # DW_OP_reg5
+ .byte 0x9f # DW_OP_stack_value
+ .quad 0 # Location list terminator begin (*.LLST1)
+ .quad 0 # Location list terminator end (*.LLST1)
+.LLST2:
+ .quad .LFB10 # Location list begin address (*.LLST2)
+ .quad .LCFI1 # Location list end address (*.LLST2)
+ .value 0x2 # Location expression size
+ .byte 0x77 # DW_OP_breg7
+ .sleb128 8
+ .quad .LCFI1 # Location list begin address (*.LLST2)
+ .quad .LFE10 # Location list end address (*.LLST2)
+ .value 0x2 # Location expression size
+ .byte 0x77 # DW_OP_breg7
+ .sleb128 16
+ .quad 0 # Location list terminator begin (*.LLST2)
+ .quad 0 # Location list terminator end (*.LLST2)
+.LLST3:
+ .quad .LVL2 # Location list begin address (*.LLST3)
+ .quad .LVL3-1 # Location list end address (*.LLST3)
+ .value 0x1 # Location expression size
+ .byte 0x55 # DW_OP_reg5
+ .quad .LVL3-1 # Location list begin address (*.LLST3)
+ .quad .LFE10 # Location list end address (*.LLST3)
+ .value 0x4 # Location expression size
+ .byte 0xf3 # DW_OP_GNU_entry_value
+ .uleb128 0x1
+ .byte 0x55 # DW_OP_reg5
+ .byte 0x9f # DW_OP_stack_value
+ .quad 0 # Location list terminator begin (*.LLST3)
+ .quad 0 # Location list terminator end (*.LLST3)
+.LLST4:
+ .quad .LVL4 # Location list begin address (*.LLST4)
+ .quad .LVL5-1 # Location list end address (*.LLST4)
+ .value 0x1 # Location expression size
+ .byte 0x55 # DW_OP_reg5
+ .quad .LVL5-1 # Location list begin address (*.LLST4)
+ .quad .LFE11 # Location list end address (*.LLST4)
+ .value 0x4 # Location expression size
+ .byte 0xf3 # DW_OP_GNU_entry_value
+ .uleb128 0x1
+ .byte 0x55 # DW_OP_reg5
+ .byte 0x9f # DW_OP_stack_value
+ .quad 0 # Location list terminator begin (*.LLST4)
+ .quad 0 # Location list terminator end (*.LLST4)
+.LLST5:
+ .quad .LFB12 # Location list begin address (*.LLST5)
+ .quad .LCFI2 # Location list end address (*.LLST5)
+ .value 0x2 # Location expression size
+ .byte 0x77 # DW_OP_breg7
+ .sleb128 8
+ .quad .LCFI2 # Location list begin address (*.LLST5)
+ .quad .LCFI3 # Location list end address (*.LLST5)
+ .value 0x2 # Location expression size
+ .byte 0x77 # DW_OP_breg7
+ .sleb128 16
+ .quad .LCFI3 # Location list begin address (*.LLST5)
+ .quad .LFE12 # Location list end address (*.LLST5)
+ .value 0x2 # Location expression size
+ .byte 0x77 # DW_OP_breg7
+ .sleb128 8
+ .quad 0 # Location list terminator begin (*.LLST5)
+ .quad 0 # Location list terminator end (*.LLST5)
+ .section .debug_aranges,"",@progbits
+ .long 0x4c # Length of Address Ranges Info
+ .value 0x2 # DWARF Version
+ .long .Ldebug_info0 # Offset of Compilation Unit Info
+ .byte 0x8 # Size of Address
+ .byte 0 # Size of Segment Descriptor
+ .value 0 # Pad to 16 byte boundary
+ .value 0
+ .quad .Ltext0 # Address
+ .quad .Letext0-.Ltext0 # Length
+ .quad .LFB9 # Address
+ .quad .LFE9-.LFB9 # Length
+ .quad .LFB12 # Address
+ .quad .LFE12-.LFB12 # Length
+ .quad 0
+ .quad 0
+ .section .debug_ranges,"",@progbits
+.Ldebug_ranges0:
+ .quad .Ltext0 # Offset 0
+ .quad .Letext0
+ .quad .LFB9 # Offset 0x10
+ .quad .LFE9
+ .quad .LFB12 # Offset 0x20
+ .quad .LFE12
+ .quad 0
+ .quad 0
+ .section .debug_line,"",@progbits
+.Ldebug_line0:
+ .section .debug_str,"MS",@progbits,1
+.LASF9:
+ .string "long long int"
+.LASF14:
+ .string "GNU C 4.7.3 20130221 (prerelease)"
+.LASF3:
+ .string "unsigned int"
+.LASF17:
+ .string "main"
+.LASF0:
+ .string "long unsigned int"
+.LASF10:
+ .string "long long unsigned int"
+.LASF16:
+ .string ""
+.LASF13:
+ .string "tailcall"
+.LASF1:
+ .string "unsigned char"
+.LASF8:
+ .string "char"
+.LASF6:
+ .string "long int"
+.LASF11:
+ .string "noret"
+.LASF2:
+ .string "short unsigned int"
+.LASF4:
+ .string "signed char"
+.LASF12:
+ .string "mayret"
+.LASF18:
+ .string "abort"
+.LASF5:
+ .string "short int"
+.LASF7:
+ .string "sizetype"
+.LASF15:
+ .string "gdb.arch/amd64-tailcall-noret.c"
+ .ident "GCC: (GNU) 4.7.3 20130221 (prerelease)"
+ .section .note.GNU-stack,"",@progbits
diff --git a/gdb/testsuite/gdb.arch/amd64-tailcall-noret.c b/gdb/testsuite/gdb.arch/amd64-tailcall-noret.c
new file mode 100644
index 0000000..6a84c76
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/amd64-tailcall-noret.c
@@ -0,0 +1,46 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2013 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 <stdlib.h>
+
+volatile int v = 1;
+
+static __attribute__ ((noinline, noclone, noreturn)) void
+noret (int x, ...)
+{
+ abort ();
+}
+
+static __attribute__ ((noinline, noclone)) void
+mayret (int x)
+{
+ if (v)
+ noret (x);
+}
+
+static __attribute__ ((noinline, noclone)) void
+tailcall (int x)
+{
+ mayret (x);
+}
+
+int
+main (void)
+{
+ tailcall (1);
+ return 0;
+}
diff --git a/gdb/testsuite/gdb.arch/amd64-tailcall-noret.exp b/gdb/testsuite/gdb.arch/amd64-tailcall-noret.exp
new file mode 100644
index 0000000..cd15596
--- /dev/null
+++ b/gdb/testsuite/gdb.arch/amd64-tailcall-noret.exp
@@ -0,0 +1,36 @@
+# Copyright (C) 2012-2013 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 opts {}
+standard_testfile .S
+
+if [info exists COMPILE] {
+ # make check RUNTESTFLAGS="gdb.arch/amd64-tailcall-noret.exp COMPILE=1"
+ standard_testfile
+ lappend opts debug optimize=-O2
+} elseif { ![istarget x86_64-*-* ] || ![is_lp64_target] } {
+ verbose "Skipping ${testfile}."
+ return
+}
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} $opts] } {
+ return -1
+}
+
+if ![runto noret] {
+ return -1
+}
+
+gdb_test "bt" "#0 +noret \\(x=1\\) at \[^\r\n\]*\r\n#1 +0x\[0-9a-f\]+ in mayret \\(x=x@entry=1\\) at \[^\r\n\]*\r\n#2 +0x\[0-9a-f\]+ in tailcall \\(x=x@entry=1\\) at \[^\r\n\]*\r\n#3 +0x\[0-9a-f\]+ in main \\(\\) at .*"

View File

@ -137,10 +137,10 @@ Content-Type: text/x-patch
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename=bitpos-tdep.patch
Index: gdb-7.5.50.20130118/gdb/alpha-tdep.c
Index: gdb-7.5.50.20130310/gdb/alpha-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/alpha-tdep.c 2013-01-18 23:36:59.954290362 +0100
+++ gdb-7.5.50.20130118/gdb/alpha-tdep.c 2013-01-18 23:37:12.465307566 +0100
--- gdb-7.5.50.20130310.orig/gdb/alpha-tdep.c 2013-03-10 16:44:34.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/alpha-tdep.c 2013-03-10 16:44:42.111599838 +0100
@@ -299,18 +299,18 @@ alpha_push_dummy_call (struct gdbarch *g
{
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@ -184,10 +184,10 @@ Index: gdb-7.5.50.20130118/gdb/alpha-tdep.c
memcpy (arg_reg_buffer + offset, contents, tlen);
offset += tlen;
contents += tlen;
Index: gdb-7.5.50.20130118/gdb/amd64-tdep.c
Index: gdb-7.5.50.20130310/gdb/amd64-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/amd64-tdep.c 2013-01-18 23:36:59.955290365 +0100
+++ gdb-7.5.50.20130118/gdb/amd64-tdep.c 2013-01-18 23:37:12.466307569 +0100
--- gdb-7.5.50.20130310.orig/gdb/amd64-tdep.c 2013-03-10 16:16:23.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/amd64-tdep.c 2013-03-10 16:44:42.112599838 +0100
@@ -616,7 +616,7 @@ amd64_return_value (struct gdbarch *gdba
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
@ -217,10 +217,10 @@ Index: gdb-7.5.50.20130118/gdb/amd64-tdep.c
enum amd64_reg_class class[2];
int needed_integer_regs = 0;
int needed_sse_regs = 0;
Index: gdb-7.5.50.20130118/gdb/amd64-windows-tdep.c
Index: gdb-7.5.50.20130310/gdb/amd64-windows-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/amd64-windows-tdep.c 2013-01-18 23:36:59.956290369 +0100
+++ gdb-7.5.50.20130118/gdb/amd64-windows-tdep.c 2013-01-18 23:37:12.466307569 +0100
--- gdb-7.5.50.20130310.orig/gdb/amd64-windows-tdep.c 2013-01-01 07:32:37.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/amd64-windows-tdep.c 2013-03-10 16:44:42.112599838 +0100
@@ -79,7 +79,7 @@ amd64_windows_return_value (struct gdbar
struct type *type, struct regcache *regcache,
gdb_byte *readbuf, const gdb_byte *writebuf)
@ -230,10 +230,10 @@ Index: gdb-7.5.50.20130118/gdb/amd64-windows-tdep.c
int regnum = -1;
/* See if our value is returned through a register. If it is, then
Index: gdb-7.5.50.20130118/gdb/arm-tdep.c
Index: gdb-7.5.50.20130310/gdb/arm-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/arm-tdep.c 2013-01-18 23:36:59.961290378 +0100
+++ gdb-7.5.50.20130118/gdb/arm-tdep.c 2013-01-18 23:37:12.469307573 +0100
--- gdb-7.5.50.20130310.orig/gdb/arm-tdep.c 2013-03-01 16:38:23.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/arm-tdep.c 2013-03-10 16:44:42.115599840 +0100
@@ -3496,7 +3496,7 @@ arm_vfp_cprc_reg_char (enum arm_vfp_cprc
array). Vectors and complex types are not currently supported,
matching the generic AAPCS support. */
@ -308,10 +308,10 @@ Index: gdb-7.5.50.20130118/gdb/arm-tdep.c
struct type *arg_type;
struct type *target_type;
enum type_code typecode;
Index: gdb-7.5.50.20130118/gdb/avr-tdep.c
Index: gdb-7.5.50.20130310/gdb/avr-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/avr-tdep.c 2013-01-18 23:36:59.963290385 +0100
+++ gdb-7.5.50.20130118/gdb/avr-tdep.c 2013-01-18 23:37:12.470307574 +0100
--- gdb-7.5.50.20130310.orig/gdb/avr-tdep.c 2013-03-01 16:38:24.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/avr-tdep.c 2013-03-10 16:44:42.116599840 +0100
@@ -1170,13 +1170,14 @@ avr_dummy_id (struct gdbarch *gdbarch, s
struct stack_item
@ -345,12 +345,12 @@ Index: gdb-7.5.50.20130118/gdb/avr-tdep.c
/* Calculate the potential last register needed. */
last_regnum = regnum - (len + (len & 1));
Index: gdb-7.5.50.20130118/gdb/bfin-tdep.c
Index: gdb-7.5.50.20130310/gdb/bfin-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/bfin-tdep.c 2013-01-18 23:36:59.963290385 +0100
+++ gdb-7.5.50.20130118/gdb/bfin-tdep.c 2013-01-18 23:37:12.470307574 +0100
--- gdb-7.5.50.20130310.orig/gdb/bfin-tdep.c 2013-03-01 16:38:24.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/bfin-tdep.c 2013-03-10 16:46:27.992669964 +0100
@@ -506,7 +506,7 @@ bfin_push_dummy_call (struct gdbarch *gd
char buf[4];
gdb_byte buf[4];
int i;
long reg_r0, reg_r1, reg_r2;
- int total_len = 0;
@ -367,10 +367,10 @@ Index: gdb-7.5.50.20130118/gdb/bfin-tdep.c
sp -= container_len;
write_memory (sp, value_contents_writeable (args[i]), container_len);
Index: gdb-7.5.50.20130118/gdb/cris-tdep.c
Index: gdb-7.5.50.20130310/gdb/cris-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/cris-tdep.c 2013-01-18 23:36:59.965290390 +0100
+++ gdb-7.5.50.20130118/gdb/cris-tdep.c 2013-01-18 23:37:12.471307578 +0100
--- gdb-7.5.50.20130310.orig/gdb/cris-tdep.c 2013-03-01 16:38:24.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/cris-tdep.c 2013-03-10 16:44:42.117599841 +0100
@@ -670,13 +670,13 @@ static CORE_ADDR cris_unwind_sp (struct
struct stack_item
@ -405,10 +405,10 @@ Index: gdb-7.5.50.20130118/gdb/cris-tdep.c
/* How may registers worth of storage do we need for this argument? */
reg_demand = (len / 4) + (len % 4 != 0 ? 1 : 0);
Index: gdb-7.5.50.20130118/gdb/h8300-tdep.c
Index: gdb-7.5.50.20130310/gdb/h8300-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/h8300-tdep.c 2013-01-18 23:36:59.966290392 +0100
+++ gdb-7.5.50.20130118/gdb/h8300-tdep.c 2013-01-18 23:37:12.472307583 +0100
--- gdb-7.5.50.20130310.orig/gdb/h8300-tdep.c 2013-01-01 07:32:44.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/h8300-tdep.c 2013-03-10 16:44:42.118599841 +0100
@@ -640,7 +640,7 @@ h8300_push_dummy_call (struct gdbarch *g
int struct_return, CORE_ADDR struct_addr)
{
@ -441,10 +441,10 @@ Index: gdb-7.5.50.20130118/gdb/h8300-tdep.c
for (offset = 0; offset < padded_len; offset += wordsize)
{
Index: gdb-7.5.50.20130118/gdb/hppa-tdep.c
Index: gdb-7.5.50.20130310/gdb/hppa-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/hppa-tdep.c 2013-01-18 23:36:59.966290392 +0100
+++ gdb-7.5.50.20130118/gdb/hppa-tdep.c 2013-01-18 23:37:44.228351370 +0100
--- gdb-7.5.50.20130310.orig/gdb/hppa-tdep.c 2013-03-01 16:38:24.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/hppa-tdep.c 2013-03-10 16:44:42.119599842 +0100
@@ -961,7 +961,7 @@ hppa64_push_dummy_call (struct gdbarch *
{
struct value *arg = args[i];
@ -463,10 +463,10 @@ Index: gdb-7.5.50.20130118/gdb/hppa-tdep.c
int regnum, offset;
if (len > 16)
Index: gdb-7.5.50.20130118/gdb/i386-darwin-tdep.c
Index: gdb-7.5.50.20130310/gdb/i386-darwin-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/i386-darwin-tdep.c 2013-01-18 23:36:59.967290394 +0100
+++ gdb-7.5.50.20130118/gdb/i386-darwin-tdep.c 2013-01-18 23:37:12.473307586 +0100
--- gdb-7.5.50.20130310.orig/gdb/i386-darwin-tdep.c 2013-02-12 20:03:54.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/i386-darwin-tdep.c 2013-03-10 16:44:42.119599842 +0100
@@ -166,7 +166,7 @@ i386_darwin_push_dummy_call (struct gdba
for (write_pass = 0; write_pass < 2; write_pass++)
@ -476,10 +476,10 @@ Index: gdb-7.5.50.20130118/gdb/i386-darwin-tdep.c
int num_m128 = 0;
if (struct_return)
Index: gdb-7.5.50.20130118/gdb/i386-tdep.c
Index: gdb-7.5.50.20130310/gdb/i386-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/i386-tdep.c 2013-01-18 23:36:59.969290398 +0100
+++ gdb-7.5.50.20130118/gdb/i386-tdep.c 2013-01-18 23:37:12.475307589 +0100
--- gdb-7.5.50.20130310.orig/gdb/i386-tdep.c 2013-03-10 16:16:23.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/i386-tdep.c 2013-03-10 16:44:42.120599842 +0100
@@ -2407,7 +2407,7 @@ i386_push_dummy_call (struct gdbarch *gd
gdb_byte buf[4];
int i;
@ -543,10 +543,10 @@ Index: gdb-7.5.50.20130118/gdb/i386-tdep.c
if (i386_fp_regnum_p (get_frame_arch (frame), regnum))
{
Index: gdb-7.5.50.20130118/gdb/ia64-tdep.c
Index: gdb-7.5.50.20130310/gdb/ia64-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/ia64-tdep.c 2013-01-18 23:36:59.970290400 +0100
+++ gdb-7.5.50.20130118/gdb/ia64-tdep.c 2013-01-18 23:37:12.476307589 +0100
--- gdb-7.5.50.20130310.orig/gdb/ia64-tdep.c 2013-03-10 16:16:23.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/ia64-tdep.c 2013-03-10 16:44:42.121599843 +0100
@@ -3974,8 +3974,10 @@ ia64_push_dummy_call (struct gdbarch *gd
int argno;
struct value *arg;
@ -560,10 +560,10 @@ Index: gdb-7.5.50.20130118/gdb/ia64-tdep.c
int floatreg;
ULONGEST bsp;
CORE_ADDR funcdescaddr, pc, global_pointer;
Index: gdb-7.5.50.20130118/gdb/iq2000-tdep.c
Index: gdb-7.5.50.20130310/gdb/iq2000-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/iq2000-tdep.c 2013-01-18 23:36:59.970290400 +0100
+++ gdb-7.5.50.20130118/gdb/iq2000-tdep.c 2013-01-18 23:37:12.476307589 +0100
--- gdb-7.5.50.20130310.orig/gdb/iq2000-tdep.c 2013-03-01 16:38:25.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/iq2000-tdep.c 2013-03-10 16:44:42.121599843 +0100
@@ -654,8 +654,9 @@ iq2000_push_dummy_call (struct gdbarch *
const bfd_byte *val;
bfd_byte buf[4];
@ -576,10 +576,10 @@ Index: gdb-7.5.50.20130118/gdb/iq2000-tdep.c
/* Used to copy struct arguments into the stack. */
CORE_ADDR struct_ptr;
Index: gdb-7.5.50.20130118/gdb/m32r-tdep.c
Index: gdb-7.5.50.20130310/gdb/m32r-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/m32r-tdep.c 2013-01-18 23:36:59.971290402 +0100
+++ gdb-7.5.50.20130118/gdb/m32r-tdep.c 2013-01-18 23:37:12.476307589 +0100
--- gdb-7.5.50.20130310.orig/gdb/m32r-tdep.c 2013-01-01 07:32:46.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/m32r-tdep.c 2013-03-10 16:44:42.121599843 +0100
@@ -695,7 +695,7 @@ m32r_push_dummy_call (struct gdbarch *gd
CORE_ADDR regval;
gdb_byte *val;
@ -589,10 +589,10 @@ Index: gdb-7.5.50.20130118/gdb/m32r-tdep.c
/* First force sp to a 4-byte alignment. */
sp = sp & ~3;
Index: gdb-7.5.50.20130118/gdb/m68k-tdep.c
Index: gdb-7.5.50.20130310/gdb/m68k-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/m68k-tdep.c 2013-01-18 23:36:59.971290402 +0100
+++ gdb-7.5.50.20130118/gdb/m68k-tdep.c 2013-01-18 23:39:06.474459041 +0100
--- gdb-7.5.50.20130310.orig/gdb/m68k-tdep.c 2013-01-01 07:32:46.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/m68k-tdep.c 2013-03-10 16:44:42.121599843 +0100
@@ -384,7 +384,7 @@ m68k_reg_struct_return_p (struct gdbarch
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
@ -615,10 +615,10 @@ Index: gdb-7.5.50.20130118/gdb/m68k-tdep.c
/* Non-scalars bigger than 4 bytes are left aligned, others are
right aligned. */
Index: gdb-7.5.50.20130118/gdb/m88k-tdep.c
Index: gdb-7.5.50.20130310/gdb/m88k-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/m88k-tdep.c 2013-01-18 23:36:59.971290402 +0100
+++ gdb-7.5.50.20130118/gdb/m88k-tdep.c 2013-01-18 23:37:12.477307590 +0100
--- gdb-7.5.50.20130310.orig/gdb/m88k-tdep.c 2013-01-01 07:32:47.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/m88k-tdep.c 2013-03-10 16:44:42.121599843 +0100
@@ -260,13 +260,13 @@ m88k_store_arguments (struct regcache *r
{
struct gdbarch *gdbarch = get_regcache_arch (regcache);
@ -646,10 +646,10 @@ Index: gdb-7.5.50.20130118/gdb/m88k-tdep.c
if (m88k_in_register_p (type))
{
Index: gdb-7.5.50.20130118/gdb/mep-tdep.c
Index: gdb-7.5.50.20130310/gdb/mep-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/mep-tdep.c 2013-01-18 23:36:59.972290404 +0100
+++ gdb-7.5.50.20130118/gdb/mep-tdep.c 2013-01-18 23:37:12.477307590 +0100
--- gdb-7.5.50.20130310.orig/gdb/mep-tdep.c 2013-03-01 16:38:25.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/mep-tdep.c 2013-03-10 16:44:42.122599843 +0100
@@ -2279,7 +2279,7 @@ push_large_arguments (CORE_ADDR sp, int
for (i = 0; i < argc; i++)
@ -659,10 +659,10 @@ Index: gdb-7.5.50.20130118/gdb/mep-tdep.c
if (arg_len > MEP_GPR_SIZE)
{
Index: gdb-7.5.50.20130118/gdb/mips-tdep.c
Index: gdb-7.5.50.20130310/gdb/mips-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/mips-tdep.c 2013-01-18 23:36:59.975290414 +0100
+++ gdb-7.5.50.20130118/gdb/mips-tdep.c 2013-01-18 23:37:12.479307599 +0100
--- gdb-7.5.50.20130310.orig/gdb/mips-tdep.c 2013-02-24 13:54:04.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/mips-tdep.c 2013-03-10 16:44:42.123599844 +0100
@@ -396,7 +396,7 @@ static void
mips_xfer_register (struct gdbarch *gdbarch, struct regcache *regcache,
int reg_num, int length,
@ -683,7 +683,7 @@ Index: gdb-7.5.50.20130118/gdb/mips-tdep.c
if (mips_debug && out != NULL)
{
int i;
@@ -4345,13 +4345,13 @@ mips_eabi_push_dummy_call (struct gdbarc
@@ -4346,13 +4346,13 @@ mips_eabi_push_dummy_call (struct gdbarc
gdb_byte valbuf[MAX_REGISTER_SIZE];
struct value *arg = args[argnum];
struct type *arg_type = check_typedef (value_type (arg));
@ -700,7 +700,7 @@ Index: gdb-7.5.50.20130118/gdb/mips-tdep.c
/* Function pointer arguments to mips16 code need to be made into
mips16 pointers. */
@@ -4636,7 +4636,7 @@ mips_eabi_return_value (struct gdbarch *
@@ -4637,7 +4637,7 @@ mips_eabi_return_value (struct gdbarch *
static int
mips_n32n64_fp_arg_chunk_p (struct gdbarch *gdbarch, struct type *arg_type,
@ -709,7 +709,7 @@ Index: gdb-7.5.50.20130118/gdb/mips-tdep.c
{
int i;
@@ -4651,7 +4651,7 @@ mips_n32n64_fp_arg_chunk_p (struct gdbar
@@ -4652,7 +4652,7 @@ mips_n32n64_fp_arg_chunk_p (struct gdbar
for (i = 0; i < TYPE_NFIELDS (arg_type); i++)
{
@ -718,7 +718,7 @@ Index: gdb-7.5.50.20130118/gdb/mips-tdep.c
struct type *field_type;
/* We're only looking at normal fields. */
@@ -4693,7 +4693,7 @@ mips_n32n64_push_dummy_call (struct gdba
@@ -4694,7 +4694,7 @@ mips_n32n64_push_dummy_call (struct gdba
int argreg;
int float_argreg;
int argnum;
@ -727,7 +727,7 @@ Index: gdb-7.5.50.20130118/gdb/mips-tdep.c
int stack_offset = 0;
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
CORE_ADDR func_addr = find_function_addr (function, NULL);
@@ -5044,11 +5044,11 @@ mips_n32n64_return_value (struct gdbarch
@@ -5045,11 +5045,11 @@ mips_n32n64_return_value (struct gdbarch
: MIPS_V0_REGNUM);
field < TYPE_NFIELDS (type); field++, regnum += 2)
{
@ -743,7 +743,7 @@ Index: gdb-7.5.50.20130118/gdb/mips-tdep.c
if (TYPE_LENGTH (TYPE_FIELD_TYPE (type, field)) == 16)
{
/* A 16-byte long double field goes in two consecutive
@@ -5090,8 +5090,8 @@ mips_n32n64_return_value (struct gdbarch
@@ -5091,8 +5091,8 @@ mips_n32n64_return_value (struct gdbarch
if (offset + xfer > TYPE_LENGTH (type))
xfer = TYPE_LENGTH (type) - offset;
if (mips_debug)
@ -754,7 +754,7 @@ Index: gdb-7.5.50.20130118/gdb/mips-tdep.c
mips_xfer_register (gdbarch, regcache,
gdbarch_num_regs (gdbarch) + regnum,
xfer, BFD_ENDIAN_UNKNOWN, readbuf, writebuf,
@@ -5149,7 +5149,7 @@ mips_o32_push_dummy_call (struct gdbarch
@@ -5150,7 +5150,7 @@ mips_o32_push_dummy_call (struct gdbarch
int argreg;
int float_argreg;
int argnum;
@ -763,7 +763,7 @@ Index: gdb-7.5.50.20130118/gdb/mips-tdep.c
int stack_offset = 0;
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
CORE_ADDR func_addr = find_function_addr (function, NULL);
@@ -5213,13 +5213,13 @@ mips_o32_push_dummy_call (struct gdbarch
@@ -5214,13 +5214,13 @@ mips_o32_push_dummy_call (struct gdbarch
const gdb_byte *val;
struct value *arg = args[argnum];
struct type *arg_type = check_typedef (value_type (arg));
@ -780,7 +780,7 @@ Index: gdb-7.5.50.20130118/gdb/mips-tdep.c
val = value_contents (arg);
@@ -5677,8 +5677,8 @@ mips_o64_push_dummy_call (struct gdbarch
@@ -5678,8 +5678,8 @@ mips_o64_push_dummy_call (struct gdbarch
int argreg;
int float_argreg;
int argnum;
@ -791,7 +791,7 @@ Index: gdb-7.5.50.20130118/gdb/mips-tdep.c
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
CORE_ADDR func_addr = find_function_addr (function, NULL);
@@ -5739,13 +5739,13 @@ mips_o64_push_dummy_call (struct gdbarch
@@ -5740,13 +5740,13 @@ mips_o64_push_dummy_call (struct gdbarch
gdb_byte valbuf[MAX_REGISTER_SIZE];
struct value *arg = args[argnum];
struct type *arg_type = check_typedef (value_type (arg));
@ -808,10 +808,10 @@ Index: gdb-7.5.50.20130118/gdb/mips-tdep.c
val = value_contents (arg);
Index: gdb-7.5.50.20130118/gdb/mn10300-tdep.c
Index: gdb-7.5.50.20130310/gdb/mn10300-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/mn10300-tdep.c 2013-01-18 23:36:59.976290416 +0100
+++ gdb-7.5.50.20130118/gdb/mn10300-tdep.c 2013-01-18 23:37:12.479307599 +0100
--- gdb-7.5.50.20130310.orig/gdb/mn10300-tdep.c 2013-03-01 16:38:25.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/mn10300-tdep.c 2013-03-10 16:44:42.123599844 +0100
@@ -1228,7 +1228,7 @@ mn10300_push_dummy_call (struct gdbarch
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
const int push_size = register_size (gdbarch, E_PC_REGNUM);
@ -821,10 +821,10 @@ Index: gdb-7.5.50.20130118/gdb/mn10300-tdep.c
int stack_offset = 0;
int argnum;
char *val, valbuf[MAX_REGISTER_SIZE];
Index: gdb-7.5.50.20130118/gdb/mt-tdep.c
Index: gdb-7.5.50.20130310/gdb/mt-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/mt-tdep.c 2013-01-18 23:36:59.976290416 +0100
+++ gdb-7.5.50.20130118/gdb/mt-tdep.c 2013-01-18 23:37:12.479307599 +0100
--- gdb-7.5.50.20130310.orig/gdb/mt-tdep.c 2013-01-01 07:32:47.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/mt-tdep.c 2013-03-10 16:44:42.124599844 +0100
@@ -783,9 +783,9 @@ mt_push_dummy_call (struct gdbarch *gdba
gdb_byte buf[MT_MAX_STRUCT_SIZE];
int argreg = MT_1ST_ARGREG;
@ -837,10 +837,10 @@ Index: gdb-7.5.50.20130118/gdb/mt-tdep.c
int i, j;
/* First handle however many args we can fit into MT_1ST_ARGREG thru
Index: gdb-7.5.50.20130118/gdb/ppc-sysv-tdep.c
Index: gdb-7.5.50.20130310/gdb/ppc-sysv-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/ppc-sysv-tdep.c 2013-01-18 23:36:59.977290417 +0100
+++ gdb-7.5.50.20130118/gdb/ppc-sysv-tdep.c 2013-01-18 23:37:12.480307602 +0100
--- gdb-7.5.50.20130310.orig/gdb/ppc-sysv-tdep.c 2013-01-23 21:03:18.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/ppc-sysv-tdep.c 2013-03-10 16:44:42.124599844 +0100
@@ -68,7 +68,7 @@ ppc_sysv_abi_push_dummy_call (struct gdb
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
int opencl_abi = ppc_sysv_use_opencl_abi (value_type (function));
@ -897,10 +897,10 @@ Index: gdb-7.5.50.20130118/gdb/ppc-sysv-tdep.c
if (len < tdep->wordsize)
write_memory (gparam + tdep->wordsize - len, val, len);
else
Index: gdb-7.5.50.20130118/gdb/rl78-tdep.c
Index: gdb-7.5.50.20130310/gdb/rl78-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/rl78-tdep.c 2013-01-18 23:36:59.977290417 +0100
+++ gdb-7.5.50.20130118/gdb/rl78-tdep.c 2013-01-18 23:37:12.480307602 +0100
--- gdb-7.5.50.20130310.orig/gdb/rl78-tdep.c 2013-01-01 07:32:50.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/rl78-tdep.c 2013-03-10 16:44:42.124599844 +0100
@@ -1019,8 +1019,8 @@ rl78_push_dummy_call (struct gdbarch *gd
for (i = nargs - 1; i >= 0; i--)
{
@ -912,10 +912,10 @@ Index: gdb-7.5.50.20130118/gdb/rl78-tdep.c
sp -= container_len;
write_memory (rl78_make_data_address (sp),
Index: gdb-7.5.50.20130118/gdb/rs6000-aix-tdep.c
Index: gdb-7.5.50.20130310/gdb/rs6000-aix-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/rs6000-aix-tdep.c 2013-01-18 23:36:59.978290418 +0100
+++ gdb-7.5.50.20130118/gdb/rs6000-aix-tdep.c 2013-01-18 23:37:12.480307602 +0100
--- gdb-7.5.50.20130310.orig/gdb/rs6000-aix-tdep.c 2013-01-01 07:32:50.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/rs6000-aix-tdep.c 2013-03-10 16:44:42.125599845 +0100
@@ -198,9 +198,9 @@ rs6000_push_dummy_call (struct gdbarch *
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@ -937,10 +937,10 @@ Index: gdb-7.5.50.20130118/gdb/rs6000-aix-tdep.c
if (argbytes)
{
Index: gdb-7.5.50.20130118/gdb/s390-tdep.c
Index: gdb-7.5.50.20130310/gdb/s390-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/s390-tdep.c 2013-01-18 23:36:59.979290420 +0100
+++ gdb-7.5.50.20130118/gdb/s390-tdep.c 2013-01-18 23:37:12.480307602 +0100
--- gdb-7.5.50.20130310.orig/gdb/s390-tdep.c 2013-01-01 07:32:50.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/s390-tdep.c 2013-03-10 16:44:42.125599845 +0100
@@ -2482,7 +2482,7 @@ is_float_like (struct type *type)
@ -959,10 +959,10 @@ Index: gdb-7.5.50.20130118/gdb/s390-tdep.c
if (s390_function_arg_pass_by_reference (type))
{
Index: gdb-7.5.50.20130118/gdb/score-tdep.c
Index: gdb-7.5.50.20130310/gdb/score-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/score-tdep.c 2013-01-18 23:36:59.979290420 +0100
+++ gdb-7.5.50.20130118/gdb/score-tdep.c 2013-01-18 23:37:12.481307604 +0100
--- gdb-7.5.50.20130310.orig/gdb/score-tdep.c 2013-03-01 16:38:26.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/score-tdep.c 2013-03-10 16:44:42.125599845 +0100
@@ -515,7 +515,7 @@ score_push_dummy_call (struct gdbarch *g
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
int argnum;
@ -972,10 +972,10 @@ Index: gdb-7.5.50.20130118/gdb/score-tdep.c
CORE_ADDR stack_offset = 0;
CORE_ADDR addr = 0;
Index: gdb-7.5.50.20130118/gdb/sh-tdep.c
Index: gdb-7.5.50.20130310/gdb/sh-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/sh-tdep.c 2013-01-18 23:36:59.980290423 +0100
+++ gdb-7.5.50.20130118/gdb/sh-tdep.c 2013-01-18 23:37:12.481307604 +0100
--- gdb-7.5.50.20130310.orig/gdb/sh-tdep.c 2013-01-01 07:32:50.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/sh-tdep.c 2013-03-10 16:44:42.126599845 +0100
@@ -807,7 +807,7 @@ sh_skip_prologue (struct gdbarch *gdbarc
static int
sh_use_struct_convention (int renesas_abi, struct type *type)
@ -1014,10 +1014,10 @@ Index: gdb-7.5.50.20130118/gdb/sh-tdep.c
int pass_on_stack = 0;
int last_reg_arg = INT_MAX;
Index: gdb-7.5.50.20130118/gdb/sh64-tdep.c
Index: gdb-7.5.50.20130310/gdb/sh64-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/sh64-tdep.c 2013-01-18 23:36:59.980290423 +0100
+++ gdb-7.5.50.20130118/gdb/sh64-tdep.c 2013-01-18 23:37:12.482307606 +0100
--- gdb-7.5.50.20130310.orig/gdb/sh64-tdep.c 2013-03-01 16:38:26.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/sh64-tdep.c 2013-03-10 16:44:42.126599845 +0100
@@ -1058,7 +1058,7 @@ sh64_push_dummy_call (struct gdbarch *gd
CORE_ADDR struct_addr)
{
@ -1036,10 +1036,10 @@ Index: gdb-7.5.50.20130118/gdb/sh64-tdep.c
int argreg_size;
int fp_args[12];
Index: gdb-7.5.50.20130118/gdb/sparc-tdep.c
Index: gdb-7.5.50.20130310/gdb/sparc-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/sparc-tdep.c 2013-01-18 23:36:59.981290427 +0100
+++ gdb-7.5.50.20130118/gdb/sparc-tdep.c 2013-01-18 23:37:12.482307606 +0100
--- gdb-7.5.50.20130310.orig/gdb/sparc-tdep.c 2013-03-10 16:44:33.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/sparc-tdep.c 2013-03-10 16:44:42.127599846 +0100
@@ -471,7 +471,7 @@ sparc32_store_arguments (struct regcache
for (i = 0; i < nargs; i++)
{
@ -1049,10 +1049,10 @@ Index: gdb-7.5.50.20130118/gdb/sparc-tdep.c
if (sparc_structure_or_union_p (type)
|| (sparc_floating_p (type) && len == 16)
Index: gdb-7.5.50.20130118/gdb/sparc64-tdep.c
Index: gdb-7.5.50.20130310/gdb/sparc64-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/sparc64-tdep.c 2013-01-18 23:36:59.982290430 +0100
+++ gdb-7.5.50.20130118/gdb/sparc64-tdep.c 2013-01-18 23:37:12.482307606 +0100
--- gdb-7.5.50.20130310.orig/gdb/sparc64-tdep.c 2013-01-01 07:32:51.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/sparc64-tdep.c 2013-03-10 16:44:42.127599846 +0100
@@ -639,7 +639,8 @@ sparc64_16_byte_align_p (struct type *ty
static void
@ -1108,10 +1108,10 @@ Index: gdb-7.5.50.20130118/gdb/sparc64-tdep.c
int regnum = -1;
gdb_byte buf[16];
Index: gdb-7.5.50.20130118/gdb/spu-tdep.c
Index: gdb-7.5.50.20130310/gdb/spu-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/spu-tdep.c 2013-01-18 23:36:59.982290430 +0100
+++ gdb-7.5.50.20130118/gdb/spu-tdep.c 2013-01-18 23:37:12.483307607 +0100
--- gdb-7.5.50.20130310.orig/gdb/spu-tdep.c 2013-01-01 07:32:51.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/spu-tdep.c 2013-03-10 16:44:42.127599846 +0100
@@ -1373,7 +1373,7 @@ spu_push_dummy_call (struct gdbarch *gdb
struct value *arg = args[i];
struct type *type = check_typedef (value_type (arg));
@ -1130,10 +1130,10 @@ Index: gdb-7.5.50.20130118/gdb/spu-tdep.c
int preferred_slot;
if (spu_scalar_value_p (type))
Index: gdb-7.5.50.20130118/gdb/tic6x-tdep.c
Index: gdb-7.5.50.20130310/gdb/tic6x-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/tic6x-tdep.c 2013-01-18 23:36:59.983290432 +0100
+++ gdb-7.5.50.20130118/gdb/tic6x-tdep.c 2013-01-18 23:39:27.770484516 +0100
--- gdb-7.5.50.20130310.orig/gdb/tic6x-tdep.c 2013-03-01 16:38:27.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/tic6x-tdep.c 2013-03-10 16:44:42.128599846 +0100
@@ -896,7 +896,7 @@ tic6x_push_dummy_call (struct gdbarch *g
int argreg = 0;
int argnum;
@ -1171,24 +1171,24 @@ Index: gdb-7.5.50.20130118/gdb/tic6x-tdep.c
addr = sp + stack_offset;
write_memory (addr, val, len);
Index: gdb-7.5.50.20130118/gdb/tilegx-tdep.c
Index: gdb-7.5.50.20130310/gdb/tilegx-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/tilegx-tdep.c 2013-01-18 23:36:59.983290432 +0100
+++ gdb-7.5.50.20130118/gdb/tilegx-tdep.c 2013-01-18 23:37:12.483307607 +0100
--- gdb-7.5.50.20130310.orig/gdb/tilegx-tdep.c 2013-03-02 02:34:40.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/tilegx-tdep.c 2013-03-10 16:45:31.857629100 +0100
@@ -291,7 +291,7 @@ tilegx_push_dummy_call (struct gdbarch *
CORE_ADDR stack_dest = sp;
int argreg = TILEGX_R0_REGNUM;
int i, j;
- int typelen, slacklen, alignlen;
+ LONGEST typelen, slacklen, alignlen;
static const gdb_byte two_zero_words[8] = { 0 };
static const gdb_byte four_zero_words[16] = { 0 };
/* If struct_return is 1, then the struct return address will
Index: gdb-7.5.50.20130118/gdb/v850-tdep.c
Index: gdb-7.5.50.20130310/gdb/v850-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/v850-tdep.c 2013-01-18 23:36:59.984290434 +0100
+++ gdb-7.5.50.20130118/gdb/v850-tdep.c 2013-01-18 23:37:12.484307608 +0100
@@ -808,7 +808,7 @@ v850_push_dummy_call (struct gdbarch *gd
--- gdb-7.5.50.20130310.orig/gdb/v850-tdep.c 2013-03-02 19:26:30.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/v850-tdep.c 2013-03-10 16:44:42.128599846 +0100
@@ -817,7 +817,7 @@ v850_push_dummy_call (struct gdbarch *gd
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
int argreg;
int argnum;
@ -1197,7 +1197,7 @@ Index: gdb-7.5.50.20130118/gdb/v850-tdep.c
int stack_offset;
/* The offset onto the stack at which we will start copying parameters
@@ -833,7 +833,7 @@ v850_push_dummy_call (struct gdbarch *gd
@@ -842,7 +842,7 @@ v850_push_dummy_call (struct gdbarch *gd
in four registers available. Loop thru args from first to last. */
for (argnum = 0; argnum < nargs; argnum++)
{
@ -1206,10 +1206,10 @@ Index: gdb-7.5.50.20130118/gdb/v850-tdep.c
gdb_byte *val;
gdb_byte valbuf[v850_reg_size];
Index: gdb-7.5.50.20130118/gdb/vax-tdep.c
Index: gdb-7.5.50.20130310/gdb/vax-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/vax-tdep.c 2013-01-18 23:36:59.984290434 +0100
+++ gdb-7.5.50.20130118/gdb/vax-tdep.c 2013-01-18 23:37:12.484307608 +0100
--- gdb-7.5.50.20130310.orig/gdb/vax-tdep.c 2013-03-10 16:44:34.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/vax-tdep.c 2013-03-10 16:44:42.128599846 +0100
@@ -115,7 +115,7 @@ vax_store_arguments (struct regcache *re
struct gdbarch *gdbarch = get_regcache_arch (regcache);
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@ -1228,10 +1228,10 @@ Index: gdb-7.5.50.20130118/gdb/vax-tdep.c
sp -= (len + 3) & ~3;
count += (len + 3) / 4;
Index: gdb-7.5.50.20130118/gdb/xstormy16-tdep.c
Index: gdb-7.5.50.20130310/gdb/xstormy16-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/xstormy16-tdep.c 2013-01-18 23:36:59.984290434 +0100
+++ gdb-7.5.50.20130118/gdb/xstormy16-tdep.c 2013-01-18 23:37:12.484307608 +0100
--- gdb-7.5.50.20130310.orig/gdb/xstormy16-tdep.c 2013-03-01 16:38:27.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/xstormy16-tdep.c 2013-03-10 16:46:05.888653201 +0100
@@ -235,8 +235,9 @@ xstormy16_push_dummy_call (struct gdbarc
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
CORE_ADDR stack_dest = sp;
@ -1242,12 +1242,12 @@ Index: gdb-7.5.50.20130118/gdb/xstormy16-tdep.c
+ LONGEST j;
+ LONGEST typelen;
const gdb_byte *val;
char buf[xstormy16_pc_size];
gdb_byte buf[xstormy16_pc_size];
Index: gdb-7.5.50.20130118/gdb/xtensa-tdep.c
Index: gdb-7.5.50.20130310/gdb/xtensa-tdep.c
===================================================================
--- gdb-7.5.50.20130118.orig/gdb/xtensa-tdep.c 2013-01-18 23:36:59.985290436 +0100
+++ gdb-7.5.50.20130118/gdb/xtensa-tdep.c 2013-01-18 23:37:12.484307608 +0100
--- gdb-7.5.50.20130310.orig/gdb/xtensa-tdep.c 2013-01-01 07:41:29.000000000 +0100
+++ gdb-7.5.50.20130310/gdb/xtensa-tdep.c 2013-03-10 16:44:42.129599847 +0100
@@ -1653,8 +1653,7 @@ xtensa_store_return_value (struct type *
if (len > (callsize > 8 ? 8 : 16))

View File

@ -27,14 +27,14 @@
Summary: A GNU source-level debugger for C, C++, Fortran, Go and other languages
Name: %{?scl_prefix}gdb
%global snap 20130215
%global snap 20130310
# See timestamp of source gnulib installed into gdb/gnulib/ .
%global snapgnulib 20121213
Version: 7.5.50.20130215
Version: 7.5.50.20130310
# 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: 9%{?dist}
Release: 10%{?dist}
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain
Group: Development/Debuggers
@ -557,6 +557,11 @@ Patch816: gdb-rhbz795424-bitpos-25of25.patch
Patch817: gdb-rhbz795424-bitpos-25of25-test.patch
Patch818: gdb-rhbz795424-bitpos-lazyvalue.patch
# Fix various entry-values sub-optimal results.
# =push
Patch825: gdb-entryval-1of2.patch
Patch826: gdb-entryval-2of2.patch
%if 0%{!?rhel:1} || 0%{?rhel} > 6
# RL_STATE_FEDORA_GDB would not be found for:
# Patch642: gdb-readline62-ask-more-rh.patch
@ -869,6 +874,8 @@ find -name "*.info*"|xargs rm -f
%patch816 -p1
%patch817 -p1
%patch818 -p1
%patch825 -p1
%patch826 -p1
%patch393 -p1
%if 0%{!?el5:1} || 0%{?scl:1}
@ -1370,6 +1377,10 @@ fi
%endif # 0%{!?el5:1} || "%{_target_cpu}" == "noarch"
%changelog
* Sun Mar 10 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130310-10.fc19
- Rebase to FSF GDB 7.5.50.20130310 (pre-7.6 snapshot).
- Fix various entry-values sub-optimal results.
* Mon Feb 25 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.5.50.20130215-9.fc19
- testsuite: Fix gdb.arch/powerpc-power6.exp testcase (IBM, RH BZ 890900).

View File

@ -1,2 +1,2 @@
4981307aa9619bbec5b73261e4e41c8d gdb-libstdc++-v3-python-r155978.tar.bz2
8d4d5baf06acf7c95211302efffb16ad gdb-7.5.50.20130215.tar.bz2
d9769486fba1789e609685be0a383b88 gdb-7.5.50.20130310.tar.bz2