diff --git a/.gitignore b/.gitignore index 0dc5293..a46cc98 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/gdb-6.6-buildid-locate-rpm.patch b/gdb-6.6-buildid-locate-rpm.patch index 0074db9..c24f309 100644 --- a/gdb-6.6-buildid-locate-rpm.patch +++ b/gdb-6.6-buildid-locate-rpm.patch @@ -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 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 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 diff --git a/gdb-6.6-buildid-locate-solib-missing-ids.patch b/gdb-6.6-buildid-locate-solib-missing-ids.patch index 9a6a15e..9ad7fcb 100644 --- a/gdb-6.6-buildid-locate-solib-missing-ids.patch +++ b/gdb-6.6-buildid-locate-solib-missing-ids.patch @@ -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 diff --git a/gdb-6.6-buildid-locate.patch b/gdb-6.6-buildid-locate.patch index b4ca895..a363d1f 100644 --- a/gdb-6.6-buildid-locate.patch +++ b/gdb-6.6-buildid-locate.patch @@ -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 diff --git a/gdb-archer.patch b/gdb-archer.patch index fd2862b..4060cc0 100644 --- a/gdb-archer.patch +++ b/gdb-archer.patch @@ -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 @@ diff --git a/gdb-entryval-1of2.patch b/gdb-entryval-1of2.patch new file mode 100644 index 0000000..01a31ec --- /dev/null +++ b/gdb-entryval-1of2.patch @@ -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=' 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>: Abbrev Number: 10 (DW_TAG_subprogram) + DW_AT_external : 1 + DW_AT_name : f + DW_AT_decl_file : 1 + DW_AT_decl_line : 26 + DW_AT_linkage_name: (indirect string, offset: 0x83): _Z1fi + 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 + + Fix entry-values in C++ across CUs. + * dwarf2loc.c (call_site_to_target_addr) : Use + lookup_minimal_symbol. Add a comment. + * dwarf2read.c + (read_call_site_scope) : Prefer + DW_AT_linkage_name. + +gdb/testsuite/ +2013-03-02 Jan Kratochvil + + 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 . ++ ++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 . */ ++ ++/* 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 . */ ++ ++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 . */ ++ ++/* 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 . */ ++ ++extern void g (int x); ++ ++__attribute__ ((noinline, noclone)) void ++f (int x) ++{ ++ g (x + 1); ++} + diff --git a/gdb-entryval-2of2.patch b/gdb-entryval-2of2.patch new file mode 100644 index 0000000..3c3c479 --- /dev/null +++ b/gdb-entryval-2of2.patch @@ -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 + + 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 + + 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 . */ ++ ++/* 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 . */ ++ ++#include ++ ++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 . ++ ++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 .*" + diff --git a/gdb-rhbz795424-bitpos-23of25.patch b/gdb-rhbz795424-bitpos-23of25.patch index 9e6b712..08e2cd4 100644 --- a/gdb-rhbz795424-bitpos-23of25.patch +++ b/gdb-rhbz795424-bitpos-23of25.patch @@ -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)) diff --git a/gdb.spec b/gdb.spec index 29136d1..7d4eb38 100644 --- a/gdb.spec +++ b/gdb.spec @@ -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 - 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 - 7.5.50.20130215-9.fc19 - testsuite: Fix gdb.arch/powerpc-power6.exp testcase (IBM, RH BZ 890900). diff --git a/sources b/sources index 2a782fe..e7a4c5c 100644 --- a/sources +++ b/sources @@ -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