Compare commits

...

18 Commits
master ... f19

Author SHA1 Message Date
Jan Kratochvil c940ffd764 Fix crash of -readnow /usr/lib/debug/usr/bin/gnatbind.debug (BZ 1069211). 2014-02-24 22:54:23 +01:00
Jan Kratochvil f487017596 [s390*,ppc*] Enable secondary targets s390* and ppc* (BZ 1056259). 2014-01-23 20:28:55 +01:00
Jan Kratochvil 02db2ebd8c [aarch64] Backport two breakpoint/watchpoint fixes. 2013-12-25 20:52:37 +01:00
Jan Kratochvil 93af7f4460 [rhel7] [--with testsuite] Remove gcc-java&co. BuildRequires. 2013-11-18 15:51:05 +01:00
Jan Kratochvil 2d024d18cd Fix explicit Class:: inside class scope (BZ 874817, Keith Seitz). 2013-11-09 18:05:11 +01:00
Jan Kratochvil 993e03d068 [aarch64] Backport two fixes (BZ 1026484). 2013-11-05 14:54:14 +01:00
Jan Kratochvil 1081c433bd Fix %{_bindir}gdb-add-index to also use -iex 'set auto-load no'. 2013-11-03 16:06:52 +01:00
Jan Kratochvil de5da8561d [rhel5] Fix /etc/gdbinit compatibility with python-2.4. 2013-10-30 12:49:53 +01:00
Sergio Durigan Junior d0d7de4406 - Fix the case when GDB leaks memory because value_struct_elt does not call
check_typedef.  (Doug Evans, BZ 15695, filed as RH BZ 1013453).
2013-10-01 00:05:48 -03:00
Jan Kratochvil bfd851884a Fix the version string to be GNU standards compliant (BZ 1004949). 2013-09-09 17:49:19 +02:00
Jan Kratochvil 841b118906 Remove --disablerepo='*' from BZ 554152 as it conflicts with BZ 981154.
- [ppc] Support Power8 CPU (IBM, BZ 731875).
- [rhel5] tps-srpmtest does not set %{rhel} (BZ 1002198, Miroslav Franc).
2013-08-31 20:14:31 +02:00
Jan Kratochvil 827765168c Load /etc/gdbinit.d/*.{gdb,py} files automatically (BZ 981520). 2013-08-30 22:36:12 +02:00
Jan Kratochvil 9823d71e51 Rebase to FSF GDB 7.6.1. 2013-08-30 22:27:48 +02:00
Jan Kratochvil 983a3bf47d Fix false warnings of new %pre during future upgrades (BZ 999645). 2013-08-30 19:09:22 +02:00
Jan Kratochvil a98c9ed4a5 New %pre to fix failed upgrade of the previous commit (BZ 999645). 2013-08-30 18:59:34 +02:00
Jan Kratochvil f8a9be3fb7 Fix /usr/share/gdb/auto-load/ need of filesystem symlinks (BZ 999645).
It needs: yum remove gdb-heap; yum reinstall gdb; yum install gdb-heap
2013-08-28 22:06:19 +02:00
Jan Kratochvil c736c63719 Make the previous commit rpm buildable. 2013-08-06 17:04:21 +02:00
Jan Kratochvil 256c78441d Fix yum install command when the binary RPM is missing (BZ 981154).
- Fix crash on 'enable count' (Simon Marchi, BZ 993118).
- Fix the changlog entry formatting for 6.3.0.0-0.1.
2013-08-06 16:28:17 +02:00
19 changed files with 2756 additions and 804 deletions

2
.gitignore vendored
View File

@ -1,2 +1,2 @@
/gdb-libstdc++-v3-python-r155978.tar.bz2
/gdb-7.6.tar.bz2
/gdb-7.6.1.tar.bz2

View File

@ -1,7 +1,7 @@
Index: gdb-7.5.91.20130407/gdb/event-top.c
Index: gdb-7.6/gdb/event-top.c
===================================================================
--- gdb-7.5.91.20130407.orig/gdb/event-top.c 2013-01-31 19:37:37.000000000 +0100
+++ gdb-7.5.91.20130407/gdb/event-top.c 2013-04-11 16:53:03.230280376 +0200
--- gdb-7.6.orig/gdb/event-top.c 2013-01-31 19:37:37.000000000 +0100
+++ gdb-7.6/gdb/event-top.c 2013-07-17 19:51:02.679357656 +0200
@@ -36,6 +36,7 @@
#include "continuations.h"
#include "gdbcmd.h" /* for dont_repeat() */
@ -28,10 +28,10 @@ Index: gdb-7.5.91.20130407/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.91.20130407/gdb/elfread.c
Index: gdb-7.6/gdb/elfread.c
===================================================================
--- gdb-7.5.91.20130407.orig/gdb/elfread.c 2013-04-11 16:53:00.000000000 +0200
+++ gdb-7.5.91.20130407/gdb/elfread.c 2013-04-11 16:53:03.231280376 +0200
--- gdb-7.6.orig/gdb/elfread.c 2013-07-17 19:51:02.639357629 +0200
+++ gdb-7.6/gdb/elfread.c 2013-07-17 19:51:50.738390068 +0200
@@ -49,6 +49,7 @@
#include "gdbcore.h"
#include "gdbcmd.h"
@ -40,7 +40,7 @@ Index: gdb-7.5.91.20130407/gdb/elfread.c
#include <sys/stat.h>
extern void _initialize_elfread (void);
@@ -1629,8 +1630,361 @@ build_id_to_filename (const struct elf_b
@@ -1682,8 +1683,360 @@ build_id_to_filename (const struct elf_b
return retval;
}
@ -258,8 +258,7 @@ Index: gdb-7.5.91.20130407/gdb/elfread.c
+
+ /* Base package name for `debuginfo-install'. We do not use the
+ `yum' command directly as the line
+ yum --disablerepo='*' --enablerepo='*debug*' \
+ install NAME-debuginfo.ARCH
+ yum --enablerepo='*debug*' install NAME-debuginfo.ARCH
+ would be more complicated than just:
+ debuginfo-install NAME-VERSION-RELEASE.ARCH
+ Do not supply the rpm base name (derived from .src.rpm name) as
@ -399,11 +398,11 @@ Index: gdb-7.5.91.20130407/gdb/elfread.c
+
/* This MISSING_FILEPAIR_HASH tracker is used only for the duplicite messages
- Try to install the hash file ...
+ yum --disablerepo='*' --enablerepo='*debug*' install ...
+ yum --enablerepo='*debug*' install ...
avoidance. */
struct missing_filepair
@@ -1684,11 +2038,17 @@ missing_filepair_change (void)
@@ -1737,11 +2090,17 @@ missing_filepair_change (void)
/* All their memory came just from missing_filepair_OBSTACK. */
missing_filepair_hash = NULL;
}
@ -421,7 +420,7 @@ Index: gdb-7.5.91.20130407/gdb/elfread.c
missing_filepair_change ();
}
@@ -1755,14 +2115,35 @@ debug_print_missing (const char *binary,
@@ -1808,14 +2167,34 @@ debug_print_missing (const char *binary,
*slot = missing_filepair;
@ -430,17 +429,17 @@ Index: gdb-7.5.91.20130407/gdb/elfread.c
+#ifdef HAVE_LIBRPM
+ if (missing_exec == MISSING_EXEC_NOT_TRIED)
+ {
+ char *exec_filename;
+ char *execfilename;
- fprintf_unfiltered (gdb_stdlog,
- _("Missing separate debuginfo for %s\n"), binary);
- if (debug != NULL)
- fprintf_unfiltered (gdb_stdlog, _("Try to install the hash file %s\n"),
- debug);
+ exec_filename = get_exec_file (0);
+ if (exec_filename != NULL)
+ execfilename = get_exec_file (0);
+ if (execfilename != NULL)
+ {
+ if (missing_rpm_enlist (exec_filename) == 0)
+ if (missing_rpm_enlist (execfilename) == 0)
+ missing_exec = MISSING_EXEC_NOT_FOUND;
+ else
+ missing_exec = MISSING_EXEC_ENLISTED;
@ -458,16 +457,15 @@ Index: gdb-7.5.91.20130407/gdb/elfread.c
+ _("Missing separate debuginfo for %s\n"), binary);
+ if (debug != NULL)
+ fprintf_unfiltered (gdb_stdlog, _("Try: %s %s\n"),
+ "yum --disablerepo='*' --enablerepo='*debug*'"
+ " install", debug);
+ "yum --enablerepo='*debug*' install", debug);
+ }
}
static char *
Index: gdb-7.5.91.20130407/gdb/symfile.h
Index: gdb-7.6/gdb/symfile.h
===================================================================
--- gdb-7.5.91.20130407.orig/gdb/symfile.h 2013-04-11 16:53:00.000000000 +0200
+++ gdb-7.5.91.20130407/gdb/symfile.h 2013-04-11 16:53:03.231280376 +0200
--- gdb-7.6.orig/gdb/symfile.h 2013-07-17 19:51:02.639357629 +0200
+++ gdb-7.6/gdb/symfile.h 2013-07-17 19:51:02.687357661 +0200
@@ -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);
@ -477,10 +475,10 @@ Index: gdb-7.5.91.20130407/gdb/symfile.h
/* From dwarf2read.c */
Index: gdb-7.5.91.20130407/gdb/testsuite/lib/gdb.exp
Index: gdb-7.6/gdb/testsuite/lib/gdb.exp
===================================================================
--- gdb-7.5.91.20130407.orig/gdb/testsuite/lib/gdb.exp 2013-04-11 16:53:00.000000000 +0200
+++ gdb-7.5.91.20130407/gdb/testsuite/lib/gdb.exp 2013-04-11 16:53:03.232280376 +0200
--- gdb-7.6.orig/gdb/testsuite/lib/gdb.exp 2013-07-17 19:51:02.640357629 +0200
+++ gdb-7.6/gdb/testsuite/lib/gdb.exp 2013-07-17 19:51:02.688357662 +0200
@@ -1482,7 +1482,7 @@ proc default_gdb_start { } {
warning "Couldn't set the width to 0."
}
@ -490,10 +488,10 @@ Index: gdb-7.5.91.20130407/gdb/testsuite/lib/gdb.exp
send_gdb "set build-id-verbose 0\n"
gdb_expect 10 {
-re "$gdb_prompt $" {
Index: gdb-7.5.91.20130407/gdb/testsuite/lib/mi-support.exp
Index: gdb-7.6/gdb/testsuite/lib/mi-support.exp
===================================================================
--- gdb-7.5.91.20130407.orig/gdb/testsuite/lib/mi-support.exp 2013-04-11 16:53:00.000000000 +0200
+++ gdb-7.5.91.20130407/gdb/testsuite/lib/mi-support.exp 2013-04-11 16:53:03.233280376 +0200
--- gdb-7.6.orig/gdb/testsuite/lib/mi-support.exp 2013-07-17 19:51:02.656357640 +0200
+++ gdb-7.6/gdb/testsuite/lib/mi-support.exp 2013-07-17 19:51:02.689357663 +0200
@@ -212,7 +212,7 @@ proc default_mi_gdb_start { args } {
warning "Couldn't set the width to 0."
}
@ -503,10 +501,10 @@ Index: gdb-7.5.91.20130407/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.91.20130407/gdb/tui/tui-interp.c
Index: gdb-7.6/gdb/tui/tui-interp.c
===================================================================
--- gdb-7.5.91.20130407.orig/gdb/tui/tui-interp.c 2013-01-01 07:41:30.000000000 +0100
+++ gdb-7.5.91.20130407/gdb/tui/tui-interp.c 2013-04-11 16:53:03.233280376 +0200
--- gdb-7.6.orig/gdb/tui/tui-interp.c 2013-01-01 07:41:30.000000000 +0100
+++ gdb-7.6/gdb/tui/tui-interp.c 2013-07-17 19:51:02.689357663 +0200
@@ -30,6 +30,7 @@
#include "tui/tui.h"
#include "tui/tui-io.h"
@ -515,10 +513,10 @@ Index: gdb-7.5.91.20130407/gdb/tui/tui-interp.c
/* Set to 1 when the TUI mode must be activated when we first start
gdb. */
Index: gdb-7.5.91.20130407/gdb/aclocal.m4
Index: gdb-7.6/gdb/aclocal.m4
===================================================================
--- gdb-7.5.91.20130407.orig/gdb/aclocal.m4 2013-01-17 12:06:26.000000000 +0100
+++ gdb-7.5.91.20130407/gdb/aclocal.m4 2013-04-11 16:53:03.234280376 +0200
--- gdb-7.6.orig/gdb/aclocal.m4 2013-01-17 12:06:26.000000000 +0100
+++ gdb-7.6/gdb/aclocal.m4 2013-07-17 19:51:02.689357663 +0200
@@ -11,6 +11,164 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@ -684,10 +682,10 @@ Index: gdb-7.5.91.20130407/gdb/aclocal.m4
# AM_CONDITIONAL -*- Autoconf -*-
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
Index: gdb-7.5.91.20130407/gdb/config.in
Index: gdb-7.6/gdb/config.in
===================================================================
--- gdb-7.5.91.20130407.orig/gdb/config.in 2012-12-09 19:39:58.000000000 +0100
+++ gdb-7.5.91.20130407/gdb/config.in 2013-04-11 16:53:03.234280376 +0200
--- gdb-7.6.orig/gdb/config.in 2012-12-09 19:39:58.000000000 +0100
+++ gdb-7.6/gdb/config.in 2013-07-17 19:51:02.689357663 +0200
@@ -33,6 +33,9 @@
/* Define to BFD's default target vector. */
#undef DEFAULT_BFD_VEC
@ -708,10 +706,10 @@ Index: gdb-7.5.91.20130407/gdb/config.in
/* Define to 1 if you have the <libunwind-ia64.h> header file. */
#undef HAVE_LIBUNWIND_IA64_H
Index: gdb-7.5.91.20130407/gdb/configure
Index: gdb-7.6/gdb/configure
===================================================================
--- gdb-7.5.91.20130407.orig/gdb/configure 2013-04-11 16:50:50.000000000 +0200
+++ gdb-7.5.91.20130407/gdb/configure 2013-04-11 16:53:13.077280119 +0200
--- gdb-7.6.orig/gdb/configure 2013-07-17 19:51:01.665356963 +0200
+++ gdb-7.6/gdb/configure 2013-07-17 19:51:02.691357664 +0200
@@ -686,6 +686,11 @@ PKGVERSION
HAVE_NATIVE_GCORE_TARGET
TARGET_OBS
@ -1259,10 +1257,10 @@ Index: gdb-7.5.91.20130407/gdb/configure
subdirs="$subdirs testsuite"
Index: gdb-7.5.91.20130407/gdb/configure.ac
Index: gdb-7.6/gdb/configure.ac
===================================================================
--- gdb-7.5.91.20130407.orig/gdb/configure.ac 2013-04-11 16:50:33.000000000 +0200
+++ gdb-7.5.91.20130407/gdb/configure.ac 2013-04-11 16:53:03.240280376 +0200
--- gdb-7.6.orig/gdb/configure.ac 2013-07-17 19:51:01.666356964 +0200
+++ gdb-7.6/gdb/configure.ac 2013-07-17 19:51:02.692357665 +0200
@@ -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,10 +1461,10 @@ Index: gdb-7.5.91.20130407/gdb/configure.ac
AC_CONFIG_SUBDIRS(testsuite)
# Check whether to support alternative target configurations
Index: gdb-7.5.91.20130407/gdb/corelow.c
Index: gdb-7.6/gdb/corelow.c
===================================================================
--- gdb-7.5.91.20130407.orig/gdb/corelow.c 2013-04-11 16:53:00.000000000 +0200
+++ gdb-7.5.91.20130407/gdb/corelow.c 2013-04-11 16:53:03.240280376 +0200
--- gdb-7.6.orig/gdb/corelow.c 2013-07-17 19:51:02.608357607 +0200
+++ gdb-7.6/gdb/corelow.c 2013-07-17 19:51:02.692357665 +0200
@@ -314,7 +314,7 @@ build_id_locate_exec (int from_tty)
symfile_objfile->flags |= OBJF_BUILD_ID_CORE_LOADED;
}

View File

@ -1,7 +1,7 @@
Index: gdb-7.5.50.20130310/gdb/corelow.c
Index: gdb-7.6/gdb/corelow.c
===================================================================
--- 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
--- gdb-7.6.orig/gdb/corelow.c 2013-01-31 19:37:37.000000000 +0100
+++ gdb-7.6/gdb/corelow.c 2013-08-06 16:57:14.832517976 +0200
@@ -46,6 +46,9 @@
#include "progspace.h"
#include "objfiles.h"
@ -23,7 +23,7 @@ Index: gdb-7.5.50.20130310/gdb/corelow.c
+{
+ CORE_ADDR at_entry;
+ struct elf_build_id *build_id;
+ char *exec_filename, *debug_filename;
+ char *execfilename, *debug_filename;
+ char *build_id_filename;
+ struct cleanup *back_to;
+
@ -44,14 +44,14 @@ Index: gdb-7.5.50.20130310/gdb/corelow.c
+ file - such .eh_frame would not be found if SYMFILE_OBJFILE would refer
+ directly to the separate debug info file. */
+
+ exec_filename = build_id_to_filename (build_id, &build_id_filename, 0);
+ execfilename = build_id_to_filename (build_id, &build_id_filename, 0);
+ make_cleanup (xfree, build_id_filename);
+
+ if (exec_filename != NULL)
+ if (execfilename != NULL)
+ {
+ make_cleanup (xfree, exec_filename);
+ exec_file_attach (exec_filename, from_tty);
+ symbol_file_add_main (exec_filename, from_tty);
+ make_cleanup (xfree, execfilename);
+ exec_file_attach (execfilename, from_tty);
+ symbol_file_add_main (execfilename, from_tty);
+ if (symfile_objfile != NULL)
+ symfile_objfile->flags |= OBJF_BUILD_ID_CORE_LOADED;
+ }
@ -93,11 +93,11 @@ Index: gdb-7.5.50.20130310/gdb/corelow.c
+ NULL, NULL, NULL,
+ &setlist, &showlist);
}
Index: gdb-7.5.50.20130310/gdb/doc/gdb.texinfo
Index: gdb-7.6/gdb/doc/gdb.texinfo
===================================================================
--- 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.
--- gdb-7.6.orig/gdb/doc/gdb.texinfo 2013-08-06 16:57:14.531517553 +0200
+++ gdb-7.6/gdb/doc/gdb.texinfo 2013-08-06 16:57:14.843517992 +0200
@@ -16831,6 +16831,27 @@ information files.
@end table
@ -125,10 +125,10 @@ Index: gdb-7.5.50.20130310/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.20130310/gdb/solib-svr4.c
Index: gdb-7.6/gdb/solib-svr4.c
===================================================================
--- 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
--- gdb-7.6.orig/gdb/solib-svr4.c 2013-01-31 14:52:52.000000000 +0100
+++ gdb-7.6/gdb/solib-svr4.c 2013-08-06 16:57:14.917518096 +0200
@@ -1224,9 +1224,52 @@ svr4_read_so_list (CORE_ADDR lm, struct
continue;
}
@ -185,10 +185,10 @@ Index: gdb-7.5.50.20130310/gdb/solib-svr4.c
xfree (buffer);
/* If this entry has no name, or its name matches the name
Index: gdb-7.5.50.20130310/gdb/elfread.c
Index: gdb-7.6/gdb/elfread.c
===================================================================
--- 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
--- gdb-7.6.orig/gdb/elfread.c 2013-03-18 10:20:02.000000000 +0100
+++ gdb-7.6/gdb/elfread.c 2013-08-06 16:57:19.548524529 +0200
@@ -45,6 +45,11 @@
#include "regcache.h"
#include "bcache.h"
@ -201,7 +201,7 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
extern void _initialize_elfread (void);
@@ -1067,10 +1072,59 @@ elf_gnu_ifunc_resolver_return_stop (stru
@@ -1068,10 +1073,59 @@ elf_gnu_ifunc_resolver_return_stop (stru
update_breakpoint_locations (b, sals, sals_end);
}
@ -263,7 +263,7 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
{
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)
@@ -1081,6 +1135,348 @@ build_id_bfd_get (bfd *abfd)
return elf_tdata (abfd)->build_id;
}
@ -612,7 +612,7 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
/* Return if FILENAME has NT_GNU_BUILD_ID matching the CHECK value. */
static int
@@ -1094,7 +1490,7 @@ build_id_verify (const char *filename, c
@@ -1095,7 +1491,7 @@ build_id_verify (const char *filename, c
if (abfd == NULL)
return 0;
@ -621,12 +621,46 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
if (found == NULL)
warning (_("File \"%s\" has no build-id, file skipped"), filename);
@@ -1110,17 +1506,18 @@ build_id_verify (const char *filename, c
return retval;
@@ -1112,16 +1508,53 @@ build_id_verify (const char *filename, c
}
-static char *
static char *
-build_id_to_debug_filename (const struct elf_build_id *build_id)
+link_resolve (const char *symlink, int level)
+{
+ char buf[PATH_MAX + 1], *target, *retval;
+ ssize_t got;
+
+ if (level > 10)
+ return xstrdup (symlink);
+
+ got = readlink (symlink, buf, sizeof (buf));
+ if (got < 0 || got >= sizeof (buf))
+ return xstrdup (symlink);
+ buf[got] = '\0';
+
+ if (IS_ABSOLUTE_PATH (buf))
+ target = xstrdup (buf);
+ else
+ {
+ char *dir = ldirname (symlink);
+
+ if (dir == NULL)
+ return xstrdup (symlink);
+ target = xstrprintf ("%s"
+#ifndef HAVE_DOS_BASED_FILE_SYSTEM
+ "/"
+#else /* HAVE_DOS_BASED_FILE_SYSTEM */
+ "\\"
+#endif /* HAVE_DOS_BASED_FILE_SYSTEM */
+ "%s", dir, buf);
+ }
+
+ retval = link_resolve (target, level + 1);
+ xfree (target);
+ return retval;
+}
+
+char *
+build_id_to_filename (const struct elf_build_id *build_id, char **link_return,
+ int add_debug_suffix)
@ -644,16 +678,19 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
/* Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
cause "/.build-id/..." lookups. */
@@ -1133,6 +1530,8 @@ build_id_to_debug_filename (const struct
@@ -1134,7 +1567,10 @@ build_id_to_debug_filename (const struct
size_t debugdir_len = strlen (debugdir);
const gdb_byte *data = build_id->data;
size_t size = build_id->size;
- char *s;
+ unsigned seqno;
+ struct stat statbuf_trash;
char *s;
+ /* Initialize it just to avoid a GCC false warning. */
+ char *s, *link0 = NULL, *link0_resolved;
memcpy (link, debugdir, debugdir_len);
@@ -1147,37 +1546,240 @@ build_id_to_debug_filename (const struct
s = &link[debugdir_len];
@@ -1148,37 +1584,256 @@ build_id_to_debug_filename (const struct
*s++ = '/';
while (size-- > 0)
s += sprintf (s, "%02x", (unsigned) *data++);
@ -682,14 +719,20 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
+ else
+ *s2 = 0;
+
+ if (!seqno)
+ {
+ /* If none of the real files is found report as missing file
+ always the non-.%u-suffixed file. */
+ link0 = xstrdup (link);
+ }
+
+ /* `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))
@ -703,29 +746,39 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
+ }
+
+ if (retval != NULL)
+ {
+ /* LINK_ALL is not used below in this non-NULL RETVAL case. */
+ xfree (link0);
+ break;
+ }
+
+ /* If the symlink has target request to install the target.
+ BASE-debuginfo.rpm contains the symlink but BASE.rpm may be missing.
+ https://bugzilla.redhat.com/show_bug.cgi?id=981154 */
+ link0_resolved = link_resolve (link0, 0);
+ xfree (link0);
- if (retval != NULL && !build_id_verify (retval, build_id))
+ if (link_all == NULL)
+ link_all = xstrdup (link0_resolved);
+ else
{
- xfree (retval);
- retval = NULL;
+ /* LINK_ALL is not used below in this non-NULL RETVAL case. */
+ break;
+ size_t len_orig = strlen (link_all);
+
+ link_all = xrealloc (link_all,
+ len_orig + 1 + strlen (link0_resolved) + 1);
+
+ /* Use whitespace instead of DIRNAME_SEPARATOR to be compatible with
+ its possible use as an argument for installation command. */
+ link_all[len_orig] = ' ';
+
+ strcpy (&link_all[len_orig + 1], link0_resolved);
}
+ if (link_all == NULL)
+ link_all = xstrdup (link);
+ else
+ {
+ size_t len_orig = strlen (link_all);
+
+ link_all = xrealloc (link_all, len_orig + 1 + strlen (link) + 1);
+
+ /* Use whitespace instead of DIRNAME_SEPARATOR to be compatible with
+ its possible use as an argument for installation command. */
+ link_all[len_orig] = ' ';
+
+ strcpy (&link_all[len_orig + 1], link);
+ }
+ xfree (link0_resolved);
+ }
+
+ if (link_return != NULL)
+ {
if (retval != NULL)
@ -905,7 +958,7 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
/* Prevent looping on a stripped .debug file. */
if (build_id_name != NULL
&& filename_cmp (build_id_name, objfile->name) == 0)
@@ -1187,7 +1789,7 @@ find_separate_debug_file_by_buildid (str
@@ -1188,7 +1843,7 @@ find_separate_debug_file_by_buildid (str
xfree (build_id_name);
}
else if (build_id_name != NULL)
@ -914,7 +967,7 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
}
return NULL;
}
@@ -1425,9 +2027,10 @@ elf_symfile_read (struct objfile *objfil
@@ -1426,9 +2081,10 @@ elf_symfile_read (struct objfile *objfil
&& objfile->separate_debug_objfile == NULL
&& objfile->separate_debug_objfile_backlink == NULL)
{
@ -927,7 +980,7 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
if (debugfile == NULL)
debugfile = find_separate_debug_file_by_debuglink (objfile);
@@ -1441,6 +2044,12 @@ elf_symfile_read (struct objfile *objfil
@@ -1442,6 +2098,12 @@ elf_symfile_read (struct objfile *objfil
symbol_file_add_separate (abfd, symfile_flags, objfile);
do_cleanups (cleanup);
}
@ -940,7 +993,7 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
}
}
@@ -1760,4 +2369,16 @@ _initialize_elfread (void)
@@ -1761,4 +2423,16 @@ _initialize_elfread (void)
elf_objfile_gnu_ifunc_cache_data = register_objfile_data ();
gnu_ifunc_fns_p = &elf_gnu_ifunc_fns;
@ -957,10 +1010,10 @@ Index: gdb-7.5.50.20130310/gdb/elfread.c
+
+ observer_attach_executable_changed (debug_print_executable_changed);
}
Index: gdb-7.5.50.20130310/gdb/symfile.h
Index: gdb-7.6/gdb/symfile.h
===================================================================
--- 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
--- gdb-7.6.orig/gdb/symfile.h 2013-02-03 17:20:18.000000000 +0100
+++ gdb-7.6/gdb/symfile.h 2013-08-06 16:57:14.919518099 +0200
@@ -593,6 +593,12 @@ void free_symfile_segment_data (struct s
extern struct cleanup *increment_reading_symtab (void);
@ -974,10 +1027,10 @@ Index: gdb-7.5.50.20130310/gdb/symfile.h
/* From dwarf2read.c */
/* Names for a dwarf2 debugging section. The field NORMAL is the normal
Index: gdb-7.5.50.20130310/gdb/testsuite/lib/gdb.exp
Index: gdb-7.6/gdb/testsuite/lib/gdb.exp
===================================================================
--- 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
--- gdb-7.6.orig/gdb/testsuite/lib/gdb.exp 2013-08-06 16:57:14.298517226 +0200
+++ gdb-7.6/gdb/testsuite/lib/gdb.exp 2013-08-06 16:57:14.920518100 +0200
@@ -1482,6 +1482,16 @@ proc default_gdb_start { } {
warning "Couldn't set the width to 0."
}
@ -995,10 +1048,10 @@ Index: gdb-7.5.50.20130310/gdb/testsuite/lib/gdb.exp
return 0;
}
Index: gdb-7.5.50.20130310/gdb/testsuite/lib/mi-support.exp
Index: gdb-7.6/gdb/testsuite/lib/mi-support.exp
===================================================================
--- 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
--- gdb-7.6.orig/gdb/testsuite/lib/mi-support.exp 2013-01-22 00:57:59.000000000 +0100
+++ gdb-7.6/gdb/testsuite/lib/mi-support.exp 2013-08-06 16:57:14.920518100 +0200
@@ -212,6 +212,16 @@ proc default_mi_gdb_start { args } {
warning "Couldn't set the width to 0."
}
@ -1016,10 +1069,10 @@ Index: gdb-7.5.50.20130310/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.20130310/gdb/objfiles.h
Index: gdb-7.6/gdb/objfiles.h
===================================================================
--- 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
--- gdb-7.6.orig/gdb/objfiles.h 2013-02-28 20:00:31.000000000 +0100
+++ gdb-7.6/gdb/objfiles.h 2013-08-06 16:57:14.920518100 +0200
@@ -432,6 +432,10 @@ struct objfile
#define OBJF_MAINLINE (1 << 5)
@ -1031,10 +1084,10 @@ Index: gdb-7.5.50.20130310/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.20130310/gdb/testsuite/gdb.base/corefile.exp
Index: gdb-7.6/gdb/testsuite/gdb.base/corefile.exp
===================================================================
--- 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
--- gdb-7.6.orig/gdb/testsuite/gdb.base/corefile.exp 2013-01-01 07:33:25.000000000 +0100
+++ gdb-7.6/gdb/testsuite/gdb.base/corefile.exp 2013-08-06 16:57:14.921518102 +0200
@@ -256,3 +256,33 @@ if ![is_remote target] {
gdb_exit

View File

@ -1,209 +0,0 @@
http://sourceware.org/ml/gdb-cvs/2013-06/msg00034.html
### src/gdb/ChangeLog 2013/06/05 20:43:53 1.15689
### src/gdb/ChangeLog 2013/06/05 22:28:51 1.15690
## -1,3 +1,14 @@
+2013-06-05 Doug Evans <dje@google.com>
+ Keith Seitz <keiths@redhat.com>
+
+ PR 15519
+ * cp-namespace.c (find_symbol_in_baseclass): Call
+ cp_lookup_symbol_in_namespace instead of cp_lookup_symbol_namespace.
+ Check result of call to lookup_symbol_static.
+ Call lookup_static_symbol_aux unconditionally.
+ Call check_typedef on base types before accessing them.
+ (cp_lookup_nested_symbol): Fix comment.
+
2013-06-05 Luis Machado <lgustavo@codesourcery.com>
* gnu-v3-abi.c (gnuv3_skip_trampoline): Handle thunk
--- src/gdb/cp-namespace.c 2013/05/30 17:29:06 1.67
+++ src/gdb/cp-namespace.c 2013/06/05 22:28:51 1.68
@@ -720,36 +720,40 @@
for (i = 0; i < TYPE_N_BASECLASSES (parent_type); ++i)
{
size_t len;
+ struct type *base_type = TYPE_BASECLASS (parent_type, i);
const char *base_name = TYPE_BASECLASS_NAME (parent_type, i);
if (base_name == NULL)
continue;
/* Search this particular base class. */
- sym = cp_lookup_symbol_namespace (base_name, name, block, VAR_DOMAIN);
+ sym = cp_lookup_symbol_in_namespace (base_name, name, block,
+ VAR_DOMAIN, 0);
if (sym != NULL)
break;
+ /* Now search all static file-level symbols. We have to do this for
+ things like typedefs in the class. First search in this symtab,
+ what we want is possibly there. */
len = strlen (base_name) + 2 + strlen (name) + 1;
concatenated_name = xrealloc (concatenated_name, len);
xsnprintf (concatenated_name, len, "%s::%s", base_name, name);
sym = lookup_symbol_static (concatenated_name, block, VAR_DOMAIN);
+ if (sym != NULL)
+ break;
- /* If there is currently no BLOCK, e.g., the inferior hasn't yet
- been started, then try searching all STATIC_BLOCK symbols in
- all objfiles. */
- if (block == NULL)
- {
- sym = lookup_static_symbol_aux (concatenated_name, VAR_DOMAIN);
- if (sym != NULL)
- break;
- }
+ /* Nope. We now have to search all static blocks in all objfiles,
+ even if block != NULL, because there's no guarantees as to which
+ symtab the symbol we want is in. */
+ sym = lookup_static_symbol_aux (concatenated_name, VAR_DOMAIN);
+ if (sym != NULL)
+ break;
/* If this class has base classes, search them next. */
- if (TYPE_N_BASECLASSES (TYPE_BASECLASS (parent_type, i)) > 0)
+ CHECK_TYPEDEF (base_type);
+ if (TYPE_N_BASECLASSES (base_type) > 0)
{
- sym = find_symbol_in_baseclass (TYPE_BASECLASS (parent_type, i),
- name, block);
+ sym = find_symbol_in_baseclass (base_type, name, block);
if (sym != NULL)
break;
}
@@ -797,8 +801,8 @@
if (sym != NULL)
return sym;
- /* Now search all static file-level symbols. Not strictly
- correct, but more useful than an error. We do not try to
+ /* Now search all static file-level symbols. We have to do this
+ for things like typedefs in the class. We do not try to
guess any imported namespace as even the fully specified
namespace search is already not C++ compliant and more
assumptions could make it too magic. */
### src/gdb/testsuite/ChangeLog 2013/06/05 20:38:37 1.3685
### src/gdb/testsuite/ChangeLog 2013/06/05 22:28:51 1.3686
## -1,3 +1,11 @@
+2013-06-05 Doug Evans <dje@google.com>
+ Keith Seitz <keiths@redhat.com>
+
+ * gdb.cp/derivation2.cc: New file.
+ * gdb.cp/derivation.cc (main): Call foo2.
+ * gdb.cp/derivation.exp: Add tests for typedefs in another
+ file, and when there's an active block.
+
2013-06-05 Luis Machado <lgustavo@codesourcery.com>
* gdb.cp/virtfunc.exp (make_one_vtable_result): Handle extra output
--- src/gdb/testsuite/gdb.cp/derivation2.cc
+++ src/gdb/testsuite/gdb.cp/derivation2.cc 2013-06-10 12:35:14.881272247 +0000
@@ -0,0 +1,49 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2013 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/* A copy of some classes in derivation.cc so that we can test symbol lookup
+ in other CUs. */
+
+class A2 {
+public:
+ typedef int value_type;
+ value_type a;
+
+ A2()
+ {
+ a=1;
+ }
+};
+
+class D2 : public A2 {
+public:
+ value_type d;
+
+ D2()
+ {
+ d=7;
+ }
+};
+
+void
+foo2 ()
+{
+ D2 d2_instance;
+ d2_instance.a = 42;
+ d2_instance.d = 43;
+}
--- src/gdb/testsuite/gdb.cp/derivation.cc 2013/01/01 06:33:27 1.5
+++ src/gdb/testsuite/gdb.cp/derivation.cc 2013/06/05 22:28:51 1.6
@@ -16,6 +16,8 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+extern void foo2 (); /* from derivation2.cc */
+
namespace N {
typedef double value_type;
struct Base { typedef int value_type; };
@@ -306,9 +308,7 @@
N::Derived::value_type d = 1;
N::value_type n = 3.0;
dobj.doit ();
+ foo2 ();
return 0;
}
-
-
-
--- src/gdb/testsuite/gdb.cp/derivation.exp 2013/01/01 06:33:27 1.24
+++ src/gdb/testsuite/gdb.cp/derivation.exp 2013/06/05 22:28:51 1.25
@@ -32,14 +32,15 @@
load_lib "cp-support.exp"
-standard_testfile .cc
+standard_testfile derivation.cc derivation2.cc
-if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+if {[prepare_for_testing $testfile.exp $testfile \
+ [list $srcfile $srcfile2] {debug c++}]} {
return -1
}
# Check inheritance of typedefs.
-foreach klass {"A" "D" "E" "F"} {
+foreach klass {"A" "D" "E" "F" "A2" "D2"} {
gdb_test "ptype ${klass}::value_type" "type = int"
gdb_test "whatis ${klass}::value_type" "type = int"
gdb_test "p (${klass}::value_type) 0" " = 0"
@@ -57,6 +58,13 @@
continue
}
+# Check inheritance of typedefs again, but this time with an active block.
+foreach klass {"A" "D" "A2" "D2"} {
+ gdb_test "ptype ${klass}::value_type" "type = int"
+ gdb_test "whatis ${klass}::value_type" "type = int"
+ gdb_test "p (${klass}::value_type) 0" " = 0"
+}
+
gdb_test "up" ".*main.*" "up from marker1"
# Print class types and values.

View File

@ -1,58 +0,0 @@
http://sourceware.org/ml/gdb-cvs/2013-06/msg00044.html
### src/gdb/testsuite/ChangeLog 2013/06/06 19:00:13 1.3688
### src/gdb/testsuite/ChangeLog 2013/06/06 19:02:26 1.3689
## -1,3 +1,7 @@
+2013-06-06 Doug Evans <dje@google.com>
+
+ * gdb.cp/derivation.exp: Make tests have unique names.
+
2013-06-06 Tom Tromey <tromey@redhat.com>
* gdb.base/dump.exp (capture_value): Don't put expression into
--- src/gdb/testsuite/gdb.cp/derivation.exp 2013/06/05 22:28:51 1.25
+++ src/gdb/testsuite/gdb.cp/derivation.exp 2013/06/06 19:02:27 1.26
@@ -40,15 +40,17 @@
}
# Check inheritance of typedefs.
-foreach klass {"A" "D" "E" "F" "A2" "D2"} {
- gdb_test "ptype ${klass}::value_type" "type = int"
- gdb_test "whatis ${klass}::value_type" "type = int"
- gdb_test "p (${klass}::value_type) 0" " = 0"
-}
-foreach klass {"Z" "ZZ"} {
- gdb_test "ptype ${klass}::value_type" "type = float"
- gdb_test "whatis ${klass}::value_type" "type = float"
- gdb_test "p (${klass}::value_type) 0" " = 0"
+with_test_prefix "before run" {
+ foreach klass {"A" "D" "E" "F" "A2" "D2"} {
+ gdb_test "ptype ${klass}::value_type" "type = int"
+ gdb_test "whatis ${klass}::value_type" "type = int"
+ gdb_test "p (${klass}::value_type) 0" " = 0"
+ }
+ foreach klass {"Z" "ZZ"} {
+ gdb_test "ptype ${klass}::value_type" "type = float"
+ gdb_test "whatis ${klass}::value_type" "type = float"
+ gdb_test "p (${klass}::value_type) 0" " = 0"
+ }
}
# Set it up at a breakpoint so we can play with the variable values.
@@ -59,10 +61,12 @@
}
# Check inheritance of typedefs again, but this time with an active block.
-foreach klass {"A" "D" "A2" "D2"} {
- gdb_test "ptype ${klass}::value_type" "type = int"
- gdb_test "whatis ${klass}::value_type" "type = int"
- gdb_test "p (${klass}::value_type) 0" " = 0"
+with_test_prefix "at marker1" {
+ foreach klass {"A" "D" "A2" "D2"} {
+ gdb_test "ptype ${klass}::value_type" "type = int"
+ gdb_test "whatis ${klass}::value_type" "type = int"
+ gdb_test "p (${klass}::value_type) 0" " = 0"
+ }
}
gdb_test "up" ".*main.*" "up from marker1"

View File

@ -0,0 +1,86 @@
http://sourceware.org/ml/gdb-patches/2013-06/msg00788.html
Subject: [PATCH] "enable count" user input error handling (PR gdb/15678)
Typing "enable count" by itself crashes GDB. Also, if you omit the
breakpoint number/range, the error message is not very clear:
(gdb) enable count 2
warning: bad breakpoint number at or near ''
(gdb) enable count
Segmentation fault (core dumped)
With this patch, the error messages are slightly more helpful:
(gdb) enable count 2
Argument required (one or more breakpoint numbers).
(gdb) enable count
Argument required (hit count).
They are not as helpful to the user as I would like, but it's better
than crashing. Suggestions are welcome.
Simon
gdb/ChangeLog:
2013-06-26 Simon Marchi <simon.marchi@ericsson.com>
* breakpoint.c (map_breakpoint_numbers): Check for empty args
string.
(enable_count_command): Check args for NULL value.
gdb/testsuite/ChangeLog:
2013-06-26 Simon Marchi <simon.marchi@ericsson.com>
* gdb.base/ena-dis-br.exp: Test "enable count" for bad user input.
---
gdb/breakpoint.c | 9 +++++++--
gdb/testsuite/gdb.base/ena-dis-br.exp | 8 ++++++++
2 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c
index ccd05d9..5a0c5ab 100644
--- a/gdb/breakpoint.c
+++ b/gdb/breakpoint.c
@@ -14389,7 +14389,7 @@ map_breakpoint_numbers (char *args, void (*function) (struct breakpoint *,
int match;
struct get_number_or_range_state state;
- if (args == 0)
+ if (args == 0 || *args == '\0')
error_no_arg (_("one or more breakpoint numbers"));
init_number_or_range (&state, args);
@@ -14713,7 +14713,12 @@ do_map_enable_count_breakpoint (struct breakpoint *bpt, void *countptr)
static void
enable_count_command (char *args, int from_tty)
{
- int count = get_number (&args);
+ int count;
+
+ if (args == NULL)
+ error_no_arg (_("hit count"));
+
+ count = get_number (&args);
map_breakpoint_numbers (args, do_map_enable_count_breakpoint, &count);
}
diff --git a/gdb/testsuite/gdb.base/ena-dis-br.exp b/gdb/testsuite/gdb.base/ena-dis-br.exp
index b08b709..82aef64 100644
--- a/gdb/testsuite/gdb.base/ena-dis-br.exp
+++ b/gdb/testsuite/gdb.base/ena-dis-br.exp
@@ -173,6 +173,14 @@ set bp [break_at $bp_location7 "line $bp_location7"]
set bp2 [break_at marker1 " line ($bp_location15|$bp_location16)"]
+gdb_test "enable count" \
+ "Argument required \\(hit count\\)\\." \
+ "enable count missing arguments"
+
+gdb_test "enable count 2" \
+ "Argument required \\(one or more breakpoint numbers\\)\\." \
+ "enable count missing last argument"
+
gdb_test_no_output "enable count 2 $bp" "disable break with count"
gdb_test "continue" \

View File

@ -169,7 +169,7 @@ Index: gdb-7.5.91.20130407/gdb/gdb-add-index
+dir="${file%/*}"
+
+# We don't care if gdb gives an error.
+gdb -nx --batch-silent -ex "file $file" -ex "save gdb-index $dir"
+gdb -nx -iex 'set auto-load no' --batch-silent -ex "file $file" -ex "save gdb-index $dir"
+
+if test -f "${file}.gdb-index"; then
+ objcopy --add-section .gdb_index="${file}.gdb-index" --set-section-flags .gdb_index=readonly "$file" "$file"

View File

@ -0,0 +1,451 @@
commit adde2bff0757e89175ede493f03b86953d0d9352
Author: Doug Evans <xdje42@gmail.com>
Date: Thu Feb 20 09:13:53 2014 -0800
Fix PR symtab/16581
* dwarf2read.c (struct die_info): New member in_process.
(reset_die_in_process): New function.
(process_die): Set it at the start, reset when returning.
(inherit_abstract_dies): Only call process_die if origin_child_die
not already being processed.
testsuite/
* gdb.dwarf2/dw2-icycle.S: New file.
* gdb.dwarf2/dw2-icycle.c: New file.
* gdb.dwarf2/dw2-icycle.exp: New file.
### a/gdb/ChangeLog
### b/gdb/ChangeLog
## -1,3 +1,14 @@
+2014-02-20 lin zuojian <manjian2006@gmail.com>
+ Joel Brobecker <brobecker@adacore.com>
+ Doug Evans <xdje42@gmail.com>
+
+ PR symtab/16581
+ * dwarf2read.c (struct die_info): New member in_process.
+ (reset_die_in_process): New function.
+ (process_die): Set it at the start, reset when returning.
+ (inherit_abstract_dies): Only call process_die if origin_child_die
+ not already being processed.
+
2014-02-20 Joel Brobecker <brobecker@adacore.com>
* windows-nat.c (handle_unload_dll): Add function documentation.
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -1225,6 +1225,9 @@ struct die_info
type derived from this DIE. */
unsigned char building_fullname : 1;
+ /* True if this die is in process. PR 16581. */
+ unsigned char in_process : 1;
+
/* Abbrev number */
unsigned int abbrev;
@@ -8008,11 +8011,28 @@ process_imported_unit_die (struct die_info *die, struct dwarf2_cu *cu)
}
}
+/* Reset the in_process bit of a die. */
+
+static void
+reset_die_in_process (void *arg)
+{
+ struct die_info *die = arg;
+ die->in_process = 0;
+}
+
/* Process a die and its children. */
static void
process_die (struct die_info *die, struct dwarf2_cu *cu)
{
+ struct cleanup *in_process;
+
+ /* We should only be processing those not already in process. */
+ gdb_assert (!die->in_process);
+
+ die->in_process = 1;
+ in_process = make_cleanup (reset_die_in_process,die);
+
switch (die->tag)
{
case DW_TAG_padding:
@@ -7278,6 +7298,8 @@ process_die (struct die_info *die, struc
new_symbol (die, NULL, cu);
break;
}
+
+ do_cleanups (in_process);
}
/* A helper function for dwarf2_compute_name which determines whether DIE
@@ -10967,8 +10989,12 @@ inherit_abstract_dies (struct die_info *die, struct dwarf2_cu *cu)
if (offsetp >= offsets_end
|| offsetp->sect_off > origin_child_die->offset.sect_off)
{
- /* Found that ORIGIN_CHILD_DIE is really not referenced. */
- process_die (origin_child_die, origin_cu);
+ /* Found that ORIGIN_CHILD_DIE is really not referenced.
+ Check whether we're already processing ORIGIN_CHILD_DIE.
+ This can happen with mutually referenced abstract_origins.
+ PR 16581. */
+ if (!origin_child_die->in_process)
+ process_die (origin_child_die, origin_cu);
}
origin_child_die = sibling_die (origin_child_die);
}
### a/gdb/testsuite/ChangeLog
### b/gdb/testsuite/ChangeLog
## -1,3 +1,12 @@
+2014-02-20 lin zuojian <manjian2006@gmail.com>
+ Joel Brobecker <brobecker@adacore.com>
+ Doug Evans <xdje42@gmail.com>
+
+ PR symtab/16581
+ * gdb.dwarf2/dw2-icycle.S: New file.
+ * gdb.dwarf2/dw2-icycle.c: New file.
+ * gdb.dwarf2/dw2-icycle.exp: New file.
+
2014-02-19 Siva Chandra Reddy <sivachandra@google.com>
* gdb.python/py-value-cc.cc: Improve test case to enable testing
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-icycle.S
@@ -0,0 +1,258 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2014 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+ .text
+
+.Ltext0:
+ .type p__top__middle__inside.3062, @function
+p__top__middle__inside.3062:
+.LFB4:
+ .file 1 "p.adb"
+ .4byte 0
+.LBE6:
+
+ .globl p__top
+ .type p__top, @function
+p__top:
+.LFB2:
+ .4byte 0
+.LFE2:
+.Letext0:
+
+ .section .debug_info,"",@progbits
+.Ldebug_info0:
+ .4byte .Ledebug_info0 - .Lsdebug_info0 /* Length of CU Info */
+.Lsdebug_info0:
+ .2byte 0x4 /* DWARF version number */
+ .4byte .Ldebug_abbrev0 /* Offset Into Abbrev. Section */
+ .byte 0x4 /* Pointer Size (in bytes) */
+ .uleb128 0x1 /* (DIE (0xb) DW_TAG_compile_unit) */
+ .ascii "GNU Ada 4.9.0 20140126\0" /* DW_AT_producer */
+ .byte 0xd /* DW_AT_language */
+ .ascii "p.adb\0" /* DW_AT_name */
+ .ascii "/tmp\0" /* DW_AT_comp_dir */
+ .4byte .Ltext0 /* DW_AT_low_pc */
+ .4byte .Letext0-.Ltext0 /* DW_AT_high_pc */
+.S0x142:
+ .uleb128 0x8 /* (DIE (0x142) DW_TAG_base_type) */
+ .byte 0x4 /* DW_AT_byte_size */
+ .byte 0x5 /* DW_AT_encoding */
+ .ascii "integer\0" /* DW_AT_name */
+
+ .uleb128 0x13 /* (DIE (0x1b4) DW_TAG_subprogram) */
+ /* DW_AT_external */
+ .ascii "p__top\0" /* DW_AT_name */
+ .byte 0x1 /* DW_AT_decl_file (p.adb) */
+ .byte 0x3 /* DW_AT_decl_line */
+ .4byte .LFB2 /* DW_AT_low_pc */
+ .4byte .LFE2-.LFB2 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_AT_frame_base */
+ .byte 0x9c /* DW_OP_call_frame_cfa */
+ /* DW_AT_GNU_all_call_sites */
+ .4byte .S0x4fc - .Ldebug_info0 /* DW_AT_sibling */
+.S0x1e0:
+ .uleb128 0x15 /* (DIE (0x1e0) DW_TAG_subprogram) */
+ .ascii "p__top__middle\0" /* DW_AT_name */
+ .byte 0x1 /* DW_AT_decl_file (p.adb) */
+ .byte 0x4 /* DW_AT_decl_line */
+ .byte 0x1 /* DW_AT_inline */
+ .4byte .S0x374 - .Ldebug_info0 /* DW_AT_sibling */
+.S0x202:
+ .uleb128 0x15 /* (DIE (0x202) DW_TAG_subprogram) */
+ .ascii "p__top__middle__inside\0" /* DW_AT_name */
+ .byte 0x1 /* DW_AT_decl_file (p.adb) */
+ .byte 0x5 /* DW_AT_decl_line */
+ .byte 0x1 /* DW_AT_inline */
+ .4byte .S0x225 - .Ldebug_info0 /* DW_AT_sibling */
+ .byte 0 /* end of children of DIE 0x202 */
+.S0x225:
+ .uleb128 0x18 /* (DIE (0x225) DW_TAG_subprogram) */
+ .4byte .S0x202 - .Ldebug_info0 /* DW_AT_abstract_origin */
+ .4byte .LFB4 /* DW_AT_low_pc */
+ .4byte .LBE6-.LFB4 /* DW_AT_high_pc */
+ .uleb128 0x1 /* DW_AT_frame_base */
+ .byte 0x9c /* DW_OP_call_frame_cfa */
+ .uleb128 0x1 /* DW_AT_static_link */
+ .byte 0x56 /* DW_OP_reg6 */
+ /* DW_AT_GNU_all_call_sites */
+ .uleb128 0x1a /* (DIE (0x247) DW_TAG_inlined_subroutine) */
+ .4byte .S0x1e0 - .Ldebug_info0 /* DW_AT_abstract_origin */
+ .4byte .LFB4 /* DW_AT_low_pc */
+ .4byte .LBE6-.LFB4 /* DW_AT_high_pc */
+ .byte 0x1 /* DW_AT_call_file (p.adb) */
+ .byte 0x14 /* DW_AT_call_line */
+ .4byte .S0x374 - .Ldebug_info0 /* DW_AT_sibling */
+ .byte 0 /* end of children of DIE 0x247 */
+ .byte 0 /* end of children of DIE 0x225 */
+ .byte 0 /* end of children of DIE 0x1e0 */
+.S0x374:
+ .uleb128 0x23 /* (DIE (0x382) DW_TAG_inlined_subroutine) */
+ .4byte .S0x1e0 - .Ldebug_info0 /* DW_AT_abstract_origin */
+ .4byte .LFB4 /* DW_AT_low_pc */
+ .4byte .LBE6-.LFB4 /* DW_AT_high_pc */
+ .byte 0x1 /* DW_AT_call_file (p.adb) */
+ .byte 0x1d /* DW_AT_call_line */
+ .byte 0 /* end of children of DIE 0x382 */
+ .byte 0 /* end of children of DIE 0x1b4 */
+.S0x4fc:
+ .uleb128 0x28 /* (DIE (0x52e) DW_TAG_subprogram) */
+ /* DW_AT_external */
+ .ascii "__gnat_rcheck_PE_Explicit_Raise\0" /* DW_AT_name */
+ /* DW_AT_artificial */
+ /* DW_AT_declaration */
+ .byte 0 /* end of children of DIE 0x52e */
+ .byte 0 /* end of children of DIE 0xb */
+.Ledebug_info0:
+
+ .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 0x8 /* (DW_FORM_string) */
+ .uleb128 0x13 /* (DW_AT_language) */
+ .uleb128 0xb /* (DW_FORM_data1) */
+ .uleb128 0x3 /* (DW_AT_name) */
+ .uleb128 0x8 /* (DW_FORM_string) */
+ .uleb128 0x1b /* (DW_AT_comp_dir) */
+ .uleb128 0x8 /* (DW_FORM_string) */
+ .uleb128 0x11 /* (DW_AT_low_pc) */
+ .uleb128 0x1 /* (DW_FORM_addr) */
+ .uleb128 0x12 /* (DW_AT_high_pc) */
+ .uleb128 0x6 /* (DW_FORM_data4) */
+ .byte 0
+ .byte 0
+ .uleb128 0x8 /* (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 0x13 /* (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 0x11 /* (DW_AT_low_pc) */
+ .uleb128 0x1 /* (DW_FORM_addr) */
+ .uleb128 0x12 /* (DW_AT_high_pc) */
+ .uleb128 0x6 /* (DW_FORM_data4) */
+ .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 0x15 /* (abbrev code) */
+ .uleb128 0x2e /* (TAG: DW_TAG_subprogram) */
+ .byte 0x1 /* DW_children_yes */
+ .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 0x20 /* (DW_AT_inline) */
+ .uleb128 0xb /* (DW_FORM_data1) */
+ .uleb128 0x1 /* (DW_AT_sibling) */
+ .uleb128 0x13 /* (DW_FORM_ref4) */
+ .byte 0
+ .byte 0
+ .uleb128 0x18 /* (abbrev code) */
+ .uleb128 0x2e /* (TAG: DW_TAG_subprogram) */
+ .byte 0x1 /* DW_children_yes */
+ .uleb128 0x31 /* (DW_AT_abstract_origin) */
+ .uleb128 0x13 /* (DW_FORM_ref4) */
+ .uleb128 0x11 /* (DW_AT_low_pc) */
+ .uleb128 0x1 /* (DW_FORM_addr) */
+ .uleb128 0x12 /* (DW_AT_high_pc) */
+ .uleb128 0x6 /* (DW_FORM_data4) */
+ .uleb128 0x40 /* (DW_AT_frame_base) */
+ .uleb128 0x18 /* (DW_FORM_exprloc) */
+ .uleb128 0x48 /* (DW_AT_static_link) */
+ .uleb128 0x18 /* (DW_FORM_exprloc) */
+ .uleb128 0x2117 /* (DW_AT_GNU_all_call_sites) */
+ .uleb128 0x19 /* (DW_FORM_flag_present) */
+ .byte 0
+ .byte 0
+ .uleb128 0x1a /* (abbrev code) */
+ .uleb128 0x1d /* (TAG: DW_TAG_inlined_subroutine) */
+ .byte 0x1 /* DW_children_yes */
+ .uleb128 0x31 /* (DW_AT_abstract_origin) */
+ .uleb128 0x13 /* (DW_FORM_ref4) */
+ .uleb128 0x11 /* (DW_AT_low_pc) */
+ .uleb128 0x1 /* (DW_FORM_addr) */
+ .uleb128 0x12 /* (DW_AT_high_pc) */
+ .uleb128 0x6 /* (DW_FORM_data4) */
+ .uleb128 0x58 /* (DW_AT_call_file) */
+ .uleb128 0xb /* (DW_FORM_data1) */
+ .uleb128 0x59 /* (DW_AT_call_line) */
+ .uleb128 0xb /* (DW_FORM_data1) */
+ .uleb128 0x1 /* (DW_AT_sibling) */
+ .uleb128 0x13 /* (DW_FORM_ref4) */
+ .byte 0
+ .byte 0
+ .uleb128 0x23 /* (abbrev code) */
+ .uleb128 0x1d /* (TAG: DW_TAG_inlined_subroutine) */
+ .byte 0x1 /* DW_children_yes */
+ .uleb128 0x31 /* (DW_AT_abstract_origin) */
+ .uleb128 0x13 /* (DW_FORM_ref4) */
+ .uleb128 0x11 /* (DW_AT_low_pc) */
+ .uleb128 0x1 /* (DW_FORM_addr) */
+ .uleb128 0x12 /* (DW_AT_high_pc) */
+ .uleb128 0x6 /* (DW_FORM_data4) */
+ .uleb128 0x58 /* (DW_AT_call_file) */
+ .uleb128 0xb /* (DW_FORM_data1) */
+ .uleb128 0x59 /* (DW_AT_call_line) */
+ .uleb128 0xb /* (DW_FORM_data1) */
+ .byte 0
+ .byte 0
+ .uleb128 0x28 /* (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 0x34 /* (DW_AT_artificial) */
+ .uleb128 0x19 /* (DW_FORM_flag_present) */
+ .uleb128 0x3c /* (DW_AT_declaration) */
+ .uleb128 0x19 /* (DW_FORM_flag_present) */
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+ .byte 0
+
+ .section .debug_line
+.Lline1_begin:
+ .byte 0
+
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-icycle.c
@@ -0,0 +1,24 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2004-2014 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* Dummy main function. */
+
+int
+main()
+{
+ return 0;
+}
--- /dev/null
+++ b/gdb/testsuite/gdb.dwarf2/dw2-icycle.exp
@@ -0,0 +1,46 @@
+# Copyright 2014 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This test exercises PR 16581.
+
+load_lib dwarf.exp
+
+# This test can only be run on targets which support DWARF-2 and use gas.
+if {![dwarf2_support]} {
+ return 0
+}
+
+standard_testfile .S .c
+
+if { [prepare_for_testing ${testfile}.exp ${testfile} \
+ [list $srcfile $srcfile2] {nodebug}] } {
+ return -1
+}
+
+# We are trying to verify that the partial symtab to symtab expansion
+# for the debugging info hand-coded in our assembly file does not cause
+# the debugger to crash (infinite recursion). To facilitate the test,
+# start the debugger with -readnow. This force expansion as soon as
+# the objfile is loaded.
+
+set saved_gdbflags $GDBFLAGS
+set GDBFLAGS "$GDBFLAGS -readnow"
+clean_restart ${testfile}
+set GDBFLAGS $saved_gdbflags
+
+# And just to be sure that the debugger did not crash after having
+# expanded our symbols, do a life-check.
+
+gdb_test "echo life check\\n" "life check"

View File

@ -0,0 +1,125 @@
http://sourceware.org/ml/gdb-patches/2014-02/msg00729.html
Subject: [patch] [testsuite] Fix dw2-icycle.exp -fsanitize=address GDB crash
--WIyZ46R2i8wDzkSu
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Hi Doug,
in fact obvious, I will check it in.
binutils readelf -wi:
<4><a2>: Abbrev Number: 26 (DW_TAG_inlined_subroutine)
<a3> DW_AT_abstract_origin: <0x5a>
<a7> DW_AT_low_pc : 0x400590
<ab> DW_AT_high_pc : 0x4
<af> DW_AT_call_file : 1
<b0> DW_AT_call_line : 20
<b1> DW_AT_sibling : <0xb8>
<2><b8>: Abbrev Number: 35 (DW_TAG_inlined_subroutine)
<b9> DW_AT_abstract_origin: <0x5a>
<bd> DW_AT_low_pc : 0x400590
<c1> DW_AT_high_pc : 0x4
<c5> DW_AT_call_file : 1
<c6> DW_AT_call_line : 29
<b1> DW_AT_sibling points to the next DIE - but that DIE is 2 levels
upwards - definitely not a sibling. This confuses GDB up to a crash:
==32143== ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6024000198ac at pc 0xb4d104 bp 0x7fff63e96e70 sp 0x7fff63e96e60
READ of size 1 at 0x6024000198ac thread T0
#0 0xb4d103 in read_unsigned_leb128 (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xb4d103)
#1 0xb15f3c in peek_die_abbrev (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xb15f3c)
#2 0xb46185 in load_partial_dies (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xb46185)
#3 0xb103fb in process_psymtab_comp_unit_reader (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xb103fb)
#4 0xb0d2a9 in init_cutu_and_read_dies (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xb0d2a9)
#5 0xb1115f in process_psymtab_comp_unit (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xb1115f)
#6 0xb1235f in dwarf2_build_psymtabs_hard (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xb1235f)
#7 0xb05536 in dwarf2_build_psymtabs (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0xb05536)
#8 0x86d5a5 in read_psyms (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x86d5a5)
#9 0x9b1c37 in require_partial_symbols (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x9b1c37)
#10 0x9bf2d0 in read_symbols (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x9bf2d0)
#11 0x9c014c in syms_from_objfile_1 (/home/jkratoch/redhat/gdb-clean/gdb/gdb+0x9c014c)
I have added === Delete all DW_AT_sibling ===:
https://sourceware.org/gdb/wiki/GDBTestcaseCookbook?action=diff&rev2=31&rev1=30
Jan
--WIyZ46R2i8wDzkSu
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline; filename="sibling.patch"
gdb/testsuite/
2014-02-24 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix dw2-icycle.exp -fsanitize=address GDB crash.
* gdb.dwarf2/dw2-icycle.S: Remove all DW_AT_sibling.
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-icycle.S b/gdb/testsuite/gdb.dwarf2/dw2-icycle.S
index 1f84e4a..938ff20 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-icycle.S
+++ b/gdb/testsuite/gdb.dwarf2/dw2-icycle.S
@@ -63,21 +63,18 @@ p__top:
.uleb128 0x1 /* DW_AT_frame_base */
.byte 0x9c /* DW_OP_call_frame_cfa */
/* DW_AT_GNU_all_call_sites */
- .4byte .S0x4fc - .Ldebug_info0 /* DW_AT_sibling */
.S0x1e0:
.uleb128 0x15 /* (DIE (0x1e0) DW_TAG_subprogram) */
.ascii "p__top__middle\0" /* DW_AT_name */
.byte 0x1 /* DW_AT_decl_file (p.adb) */
.byte 0x4 /* DW_AT_decl_line */
.byte 0x1 /* DW_AT_inline */
- .4byte .S0x374 - .Ldebug_info0 /* DW_AT_sibling */
.S0x202:
.uleb128 0x15 /* (DIE (0x202) DW_TAG_subprogram) */
.ascii "p__top__middle__inside\0" /* DW_AT_name */
.byte 0x1 /* DW_AT_decl_file (p.adb) */
.byte 0x5 /* DW_AT_decl_line */
.byte 0x1 /* DW_AT_inline */
- .4byte .S0x225 - .Ldebug_info0 /* DW_AT_sibling */
.byte 0 /* end of children of DIE 0x202 */
.S0x225:
.uleb128 0x18 /* (DIE (0x225) DW_TAG_subprogram) */
@@ -95,7 +92,6 @@ p__top:
.4byte .LBE6-.LFB4 /* DW_AT_high_pc */
.byte 0x1 /* DW_AT_call_file (p.adb) */
.byte 0x14 /* DW_AT_call_line */
- .4byte .S0x374 - .Ldebug_info0 /* DW_AT_sibling */
.byte 0 /* end of children of DIE 0x247 */
.byte 0 /* end of children of DIE 0x225 */
.byte 0 /* end of children of DIE 0x1e0 */
@@ -167,8 +163,6 @@ p__top:
.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 0x15 /* (abbrev code) */
@@ -182,8 +176,6 @@ p__top:
.uleb128 0xb /* (DW_FORM_data1) */
.uleb128 0x20 /* (DW_AT_inline) */
.uleb128 0xb /* (DW_FORM_data1) */
- .uleb128 0x1 /* (DW_AT_sibling) */
- .uleb128 0x13 /* (DW_FORM_ref4) */
.byte 0
.byte 0
.uleb128 0x18 /* (abbrev code) */
@@ -216,8 +208,6 @@ p__top:
.uleb128 0xb /* (DW_FORM_data1) */
.uleb128 0x59 /* (DW_AT_call_line) */
.uleb128 0xb /* (DW_FORM_data1) */
- .uleb128 0x1 /* (DW_AT_sibling) */
- .uleb128 0x13 /* (DW_FORM_ref4) */
.byte 0
.byte 0
.uleb128 0x23 /* (abbrev code) */
--WIyZ46R2i8wDzkSu--

View File

@ -0,0 +1,58 @@
http://sourceware.org/ml/gdb-patches/2014-02/msg00731.html
Subject: [patch] gdb_assert -> complaint for weird DWARF
--6TrnltStXW4iwmi0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Hi,
PR 16581:
GDB crash on inherit_abstract_dies infinite recursion
https://sourceware.org/bugzilla/show_bug.cgi?id=16581
fixed crash from an infinite recursion. But in rare cases the new code can
now gdb_assert() due to weird DWARF file.
I do not yet fully understand why the DWARF is as it is but just GDB should
never crash due to invalid DWARF anyway. The "invalid" DWARF I see only in
Fedora GCC build, not in FSF GCC build, more info at:
https://bugzilla.redhat.com/show_bug.cgi?id=1069382
http://people.redhat.com/jkratoch/gcc-debuginfo-4.8.2-7.fc20.x86_64-gnatbind.debug
Thanks,
Jan
--6TrnltStXW4iwmi0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline; filename="complaint.patch"
gdb/
2014-02-24 Jan Kratochvil <jan.kratochvil@redhat.com>
* dwarf2read.c (process_die): Change gdb_assert to complaint.
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 3eaa0b1..71f5d34 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -8029,7 +8029,13 @@ process_die (struct die_info *die, struct dwarf2_cu *cu)
struct cleanup *in_process;
/* We should only be processing those not already in process. */
- gdb_assert (!die->in_process);
+ if (die->in_process)
+ {
+ complaint (&symfile_complaints,
+ _("DIE at 0x%x attempted to be processed twice"),
+ die->offset.sect_off);
+ return;
+ }
die->in_process = 1;
in_process = make_cleanup (reset_die_in_process,die);
--6TrnltStXW4iwmi0--

299
gdb-implicit-this.patch Normal file
View File

@ -0,0 +1,299 @@
Index: gdb-7.6.1/gdb/c-exp.y
===================================================================
--- gdb-7.6.1.orig/gdb/c-exp.y 2013-11-09 17:29:19.336729300 +0100
+++ gdb-7.6.1/gdb/c-exp.y 2013-11-09 17:29:21.935727454 +0100
@@ -2890,6 +2890,30 @@ classify_inner_name (const struct block
{
case LOC_BLOCK:
case LOC_LABEL:
+ {
+ struct field_of_this_result fot;
+
+ /* We might have erroneously found a constructor where we wanted
+ a type name. The trick is ascertaining what the user wanted.
+ If cp_lookup_nested_symbol found a constructor, but it is for a
+ different type than CONTEXT, then this is really a type, not a
+ constructor. Look for the type and return that. */
+ memset (&fot, 0, sizeof (fot));
+ check_field (type, copy, &fot);
+ if (fot.fn_field != NULL
+ && TYPE_FN_FIELD_CONSTRUCTOR (fot.fn_field->fn_fields, 0)
+ && !types_equal (type, fot.type))
+ {
+ struct symbol *sym;
+
+ sym = lookup_symbol (copy, block, STRUCT_DOMAIN, NULL);
+ if (sym != NULL)
+ {
+ yylval.tsym.type = SYMBOL_TYPE (sym);
+ return TYPENAME;
+ }
+ }
+ }
return ERROR;
case LOC_TYPEDEF:
Index: gdb-7.6.1/gdb/symtab.c
===================================================================
--- gdb-7.6.1.orig/gdb/symtab.c 2013-11-09 17:29:19.338729298 +0100
+++ gdb-7.6.1/gdb/symtab.c 2013-11-09 17:29:21.936727453 +0100
@@ -1260,7 +1260,7 @@ lookup_language_this (const struct langu
return 1 if the component named NAME from the ultimate target
structure/union is defined, otherwise, return 0. */
-static int
+int
check_field (struct type *type, const char *name,
struct field_of_this_result *is_a_field_of_this)
{
Index: gdb-7.6.1/gdb/symtab.h
===================================================================
--- gdb-7.6.1.orig/gdb/symtab.h 2013-11-09 17:29:19.339729298 +0100
+++ gdb-7.6.1/gdb/symtab.h 2013-11-09 17:27:11.329820268 +0100
@@ -1318,4 +1318,9 @@ void iterate_over_symbols (const struct
struct cleanup *demangle_for_lookup (const char *name, enum language lang,
const char **result_name);
+/* See comment in symtab.c. */
+
+int check_field (struct type *type, const char *name,
+ struct field_of_this_result *is_a_field_of_this);
+
#endif /* !defined(SYMTAB_H) */
Index: gdb-7.6.1/gdb/valops.c
===================================================================
--- gdb-7.6.1.orig/gdb/valops.c 2013-11-09 17:29:19.340729297 +0100
+++ gdb-7.6.1/gdb/valops.c 2013-11-09 17:28:02.417784136 +0100
@@ -3401,10 +3401,35 @@ value_struct_elt_for_reference (struct t
return value_from_longest
(lookup_memberptr_type (TYPE_FIELD_TYPE (t, i), domain),
offset + (TYPE_FIELD_BITPOS (t, i) >> 3));
- else if (noside == EVAL_AVOID_SIDE_EFFECTS)
+ else if (noside != EVAL_NORMAL)
return allocate_value (TYPE_FIELD_TYPE (t, i));
else
- error (_("Cannot reference non-static field \"%s\""), name);
+ {
+ /* Try to evaluate NAME as a qualified name with implicit
+ this pointer. In this case, attempt to return the
+ equivalent to `this->*(&TYPE::NAME)'. */
+ v = value_of_this_silent (current_language);
+ if (v != NULL)
+ {
+ struct value *ptr;
+ long mem_offset;
+ struct type *type, *tmp;
+
+ ptr = value_aggregate_elt (domain, name, NULL, 1, noside);
+ type = check_typedef (value_type (ptr));
+ gdb_assert (type != NULL
+ && TYPE_CODE (type) == TYPE_CODE_MEMBERPTR);
+ tmp = lookup_pointer_type (TYPE_DOMAIN_TYPE (type));
+ v = value_cast_pointers (tmp, v, 1);
+ mem_offset = value_as_long (ptr);
+ tmp = lookup_pointer_type (TYPE_TARGET_TYPE (type));
+ result = value_from_pointer (tmp,
+ value_as_long (v) + mem_offset);
+ return value_ind (result);
+ }
+
+ error (_("Cannot reference non-static field \"%s\""), name);
+ }
}
}
Index: gdb-7.6.1/gdb/testsuite/gdb.cp/impl-this.cc
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.6.1/gdb/testsuite/gdb.cp/impl-this.cc 2013-11-09 17:29:21.938727452 +0100
@@ -0,0 +1,96 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2013 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifdef DEBUG
+#include <stdio.h>
+#endif
+
+class A
+{
+public:
+ int i;
+ int z;
+ A () : i (1), z (10) {}
+};
+
+class B : public virtual A
+{
+public:
+ int i;
+ B () : i (2) {}
+};
+
+class C : public virtual A
+{
+public:
+ int i;
+ int c;
+ C () : i (3), c (30) {}
+};
+
+class D : public B, public C
+{
+public:
+ int i;
+ int x;
+ D () : i (4), x (40) {}
+
+#ifdef DEBUG
+#define SUM(X) \
+ do \
+ { \
+ sum += (X); \
+ printf ("" #X " = %d\n", (X)); \
+ } \
+ while (0)
+#else
+#define SUM(X) sum += (X)
+#endif
+
+int
+f (void)
+ {
+ int sum = 0;
+
+ SUM (i);
+ SUM (D::i);
+ SUM (D::B::i);
+ SUM (B::i);
+ SUM (D::C::i);
+ SUM (C::i);
+ SUM (D::B::A::i);
+ SUM (B::A::i);
+ SUM (A::i);
+ SUM (D::C::A::i);
+ SUM (C::A::i);
+ SUM (D::x);
+ SUM (x);
+ SUM (D::C::c);
+ SUM (C::c);
+ SUM (c);
+
+ return sum;
+ }
+};
+
+int
+main (void)
+{
+ D d;
+
+ return d.f ();
+}
Index: gdb-7.6.1/gdb/testsuite/gdb.cp/impl-this.exp
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ gdb-7.6.1/gdb/testsuite/gdb.cp/impl-this.exp 2013-11-09 17:29:21.939727451 +0100
@@ -0,0 +1,89 @@
+# Copyright 2013 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This file is part of the gdb testsuite
+
+# Test expressions which assume an implicit "this" with a qualified
+# name.
+
+if {[skip_cplus_tests]} { continue }
+
+standard_testfile .cc
+
+if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug c++}]} {
+ return -1
+}
+
+# First test expressions when there is no context.
+gdb_test "print i" "No symbol \"i\" in current context."
+gdb_test "print D::i" "Cannot reference non-static field \"i\""
+gdb_test "print D::B::i" "Cannot reference non-static field \"i\""
+gdb_test "print B::i" "Cannot reference non-static field \"i\""
+gdb_test "print D::C::i" "Cannot reference non-static field \"i\""
+gdb_test "print C::i" "Cannot reference non-static field \"i\""
+gdb_test "print D::B::A::i" "Cannot reference non-static field \"i\""
+gdb_test "print B::A::i" "Cannot reference non-static field \"i\""
+gdb_test "print A::i" "Cannot reference non-static field \"i\""
+gdb_test "print D::C::A::i" "Cannot reference non-static field \"i\""
+gdb_test "print C::A::i" "Cannot reference non-static field \"i\""
+gdb_test "print D::x" "Cannot reference non-static field \"x\""
+gdb_test "print x" "No symbol \"x\" in current context."
+gdb_test "print D::C::c" "Cannot reference non-static field \"c\""
+gdb_test "print C::c" "Cannot reference non-static field \"c\""
+gdb_test "print c" "No symbol \"c\" in current context."
+
+# Run to D::f.
+if {![runto_main]} {
+ perror "couldn't run to main"
+ continue
+}
+
+gdb_breakpoint "D::f"
+gdb_continue_to_breakpoint "run to D::f"
+
+# Now test valid expressions in the class hierarchy for D.
+gdb_test "print i" "= 4"
+gdb_test "print D::i" "= 4"
+gdb_test "print D::B::i" "= 2"
+gdb_test "print B::i" "= 2"
+gdb_test "print D::C::i" "= 3"
+gdb_test "print C::i" "= 3"
+gdb_test "print D::B::A::i" "= 1"
+gdb_test "print B::A::i" "= 1"
+gdb_test "print A::i" "= 1"
+gdb_test "print D::C::A::i" "= 1"
+gdb_test "print C::A::i" "= 1"
+gdb_test "print D::x" "= 40"
+gdb_test "print x" "= 40"
+gdb_test "print D::C::c" "= 30"
+gdb_test "print C::c" "= 30"
+gdb_test "print c" "= 30"
+
+# Test some invalid expressions
+gdb_test "print D::B::c" "There is no field named c"
+gdb_test "print D::B::A::c" "There is no field named c"
+gdb_test "print D::C::A::c" "There is no field named c"
+gdb_test "print B::c" "There is no field named c"
+gdb_test "print B::A::c" "There is no field named c"
+gdb_test "print C::A::c" "There is no field named c"
+gdb_test "print D::B::x" "There is no field named x"
+gdb_test "print D::B::A::x" "There is no field named x"
+gdb_test "print B::x" "There is no field named x"
+gdb_test "print B::A::x" "There is no field named x"
+gdb_test "print D::C::x" "There is no field named x"
+gdb_test "print C::x" "There is no field named x"
+gdb_test "print D::C::A::x" "There is no field named x"
+gdb_test "print C::A::x" "There is no field named x"
+

731
gdb-power8-1of2.patch Normal file
View File

@ -0,0 +1,731 @@
[PATCH] Full POWER8 binutils support
http://sourceware.org/ml/binutils/2013-05/msg00235.html
http://sourceware.org/ml/binutils-cvs/2013-05/msg00095.html
### src/opcodes/ChangeLog 2013/05/17 12:57:15 1.1964
### src/opcodes/ChangeLog 2013/05/21 01:36:46 1.1965
## -1,3 +1,28 @@
+2013-05-20 Peter Bergner <bergner@vnet.ibm.com>
+
+ * ppc-dis.c (powerpc_init_dialect): Set default dialect to power8.
+ * ppc-opc.c (BHRBE, ST, SIX, PS, SXL, VXPS_MASK, XX1RB_MASK,
+ XLS_MASK, PPCVSX2): New defines.
+ (powerpc_opcodes) <bcdadd., bcdsub., bctar, bctar, bctarl, clrbhrb,
+ fmrgew, fmrgow, lqarx, lxsiwax, lxsiwzx, lxsspx, mfbhrbe,
+ mffprd, mffprwz, mfvrd, mfvrwz, mfvsrd, mfvsrwz, msgclrp, msgsndp,
+ mtfprd, mtfprwa, mtfprwz, mtsle, mtvrd, mtvrwa, mtvrwz, mtvsrd,
+ mtvsrwa, mtvsrwz, pbt., rfebb, stqcx., stxsiwx, stxsspx,
+ vaddcuq, vaddecuq, vaddeuqm, vaddudm, vadduqm, vbpermq, vcipher,
+ vcipherlast, vclzb, vclzd, vclzh, vclzw, vcmpequd, vcmpequd.,
+ vcmpgtsd, vcmpgtsd., vcmpgtud, vcmpgtud., veqv, vgbbd, vmaxsd,
+ vmaxud, vminsd, vminud, vmrgew, vmrgow, vmulesw, vmuleuw, vmulosw,
+ vmulouw, vmuluwm, vnand, vncipher, vncipherlast, vorc, vpermxor,
+ vpksdss, vpksdus, vpkudum, vpkudus, vpmsumb, vpmsumd, vpmsumh,
+ vpmsumw, vpopcntb, vpopcntd, vpopcnth, vpopcntw, vrld, vsbox,
+ vshasigmad, vshasigmaw, vsld, vsrad, vsrd, vsubcuq, vsubecuq,
+ vsubeuqm, vsubudm, vsubuqm, vupkhsw, vupklsw, waitasec, xsaddsp,
+ xscvdpspn, xscvspdpn, xscvsxdsp, xscvuxdsp, xsdivsp, xsmaddasp,
+ xsmaddmsp, xsmsubasp, xsmsubmsp, xsmulsp, xsnmaddasp, xsnmaddmsp,
+ xsnmsubasp, xsnmsubmsp, xsresp, xsrsp, xsrsqrtesp, xssqrtsp,
+ xssubsp, xxleqv, xxlnand, xxlorc>: New instructions.
+ <lxvx, stxvx>: New extended mnemonics.
+
2013-05-17 Alan Modra <amodra@gmail.com>
* ia64-raw.tbl: Replace non-ASCII char.
--- src/opcodes/ppc-dis.c 2013/01/11 02:25:36 1.62
+++ src/opcodes/ppc-dis.c 2013/05/21 01:36:46 1.63
@@ -315,10 +315,7 @@
dialect = (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_VLE);
break;
default:
- dialect = (PPC_OPCODE_PPC | PPC_OPCODE_ISEL | PPC_OPCODE_64
- | PPC_OPCODE_POWER4 | PPC_OPCODE_POWER5 | PPC_OPCODE_POWER6
- | PPC_OPCODE_POWER7 | PPC_OPCODE_ALTIVEC | PPC_OPCODE_VSX
- | PPC_OPCODE_ANY);
+ dialect = ppc_parse_cpu (dialect, &sticky, "power8") | PPC_OPCODE_ANY;
}
arg = info->disassembler_options;
--- src/opcodes/ppc-opc.c 2013/05/09 04:32:55 1.159
+++ src/opcodes/ppc-opc.c 2013/05/21 01:36:46 1.160
@@ -315,14 +315,18 @@
{ 0xfffc, 0, NULL, NULL,
PPC_OPERAND_PARENS | PPC_OPERAND_SIGNED | PPC_OPERAND_DS },
- /* The DUIS field in a XFX form instruction, 10 bits unsigned imediate */
+ /* The DUIS or BHRBE fields in a XFX form instruction, 10 bits
+ unsigned imediate */
#define DUIS DS + 1
+#define BHRBE DUIS
{ 0x3ff, 11, NULL, NULL, 0 },
/* The E field in a wrteei instruction. */
/* And the W bit in the pair singles instructions. */
+ /* And the ST field in a VX form instruction. */
#define E DUIS + 1
#define PSW E
+#define ST E
{ 0x1, 15, NULL, NULL, 0 },
/* The FL1 field in a POWER SC form instruction. */
@@ -695,8 +699,16 @@
#define UIMM3 UIMM + 1
{ 0x7, 16, NULL, NULL, 0 },
+ /* The SIX field in a VX form instruction. */
+#define SIX UIMM3 + 1
+ { 0xf, 11, NULL, NULL, 0 },
+
+ /* The PS field in a VX form instruction. */
+#define PS SIX + 1
+ { 0x1, 9, NULL, NULL, 0 },
+
/* The SHB field in a VA form instruction. */
-#define SHB UIMM3 + 1
+#define SHB PS + 1
{ 0xf, 6, NULL, NULL, 0 },
/* The other UIMM field in a half word EVX form instruction. */
@@ -751,8 +763,12 @@
#define S SP + 1
{ 0x1, 20, NULL, NULL, 0 },
+ /* The S field in a XL form instruction. */
+#define SXL S + 1
+ { 0x1, 11, NULL, NULL, PPC_OPERAND_OPTIONAL },
+
/* SH field starting at bit position 16. */
-#define SH16 S + 1
+#define SH16 SXL + 1
/* The DCM and DGM fields in a Z form instruction. */
#define DCM SH16
#define DGM DCM
@@ -2325,6 +2341,9 @@
/* A VX_MASK with a UIMM2 field. */
#define VXUIMM2_MASK (VX_MASK | (0x7 << 18))
+/* A VX_MASK with a PS field. */
+#define VXPS_MASK (VX_MASK & ~(0x1 << 9))
+
/* A VA form instruction. */
#define VXA(op, xop) (OP (op) | (((unsigned long)(xop)) & 0x03f))
@@ -2379,6 +2398,9 @@
/* The mask for an XX1 form instruction. */
#define XX1_MASK X (0x3f, 0x3ff)
+/* An XX1_MASK with the RB field fixed. */
+#define XX1RB_MASK (XX1_MASK | RB_MASK)
+
/* The mask for an XX2 form instruction. */
#define XX2_MASK (XX2 (0x3f, 0x1ff) | (0x1f << 16))
@@ -2516,6 +2538,9 @@
/* The mask for an XL form instruction. */
#define XL_MASK XLLK (0x3f, 0x3ff, 1)
+/* An XL_MASK with the RT, RA and RB fields fixed, but S bit clear. */
+#define XLS_MASK ((XL_MASK | RT_MASK | RA_MASK | RB_MASK) & ~(1 << 11))
+
/* An XL form instruction which explicitly sets the BO field. */
#define XLO(op, bo, xop, lk) \
(XLLK ((op), (xop), (lk)) | ((((unsigned long)(bo)) & 0x1f) << 21))
@@ -2699,6 +2724,7 @@
#define PPCVEC PPC_OPCODE_ALTIVEC
#define PPCVEC2 PPC_OPCODE_ALTIVEC2
#define PPCVSX PPC_OPCODE_VSX
+#define PPCVSX2 PPC_OPCODE_VSX
#define POWER PPC_OPCODE_POWER
#define POWER2 PPC_OPCODE_POWER | PPC_OPCODE_POWER2
#define PWR2COM PPC_OPCODE_POWER | PPC_OPCODE_POWER2 | PPC_OPCODE_COMMON
@@ -2845,6 +2871,7 @@
{"vperm", VXA(4, 43), VXA_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB, VC}},
{"vsldoi", VXA(4, 44), VXASHB_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB, SHB}},
{"ps_sel", A (4, 23,0), A_MASK, PPCPS, PPCNONE, {FRT, FRA, FRC, FRB}},
+{"vpermxor", VXA(4, 45), VXA_MASK, PPCVEC2, PPCNONE, {VD, VA, VB, VC}},
{"vmaddfp", VXA(4, 46), VXA_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VC, VB}},
{"ps_sel.", A (4, 23,1), A_MASK, PPCPS, PPCNONE, {FRT, FRA, FRC, FRB}},
{"vnmsubfp", VXA(4, 47), VXA_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VC, VB}},
@@ -2863,6 +2890,10 @@
{"ps_nmadd", A (4, 31,0), A_MASK, PPCPS, PPCNONE, {FRT, FRA, FRC, FRB}},
{"ps_nmadd.", A (4, 31,1), A_MASK, PPCPS, PPCNONE, {FRT, FRA, FRC, FRB}},
{"ps_cmpo0", X (4, 32), X_MASK|(3<<21), PPCPS, PPCNONE, {BF, FRA, FRB}},
+{"vaddeuqm", VXA(4, 60), VXA_MASK, PPCVEC2, PPCNONE, {VD, VA, VB, VC}},
+{"vaddecuq", VXA(4, 61), VXA_MASK, PPCVEC2, PPCNONE, {VD, VA, VB, VC}},
+{"vsubeuqm", VXA(4, 62), VXA_MASK, PPCVEC2, PPCNONE, {VD, VA, VB, VC}},
+{"vsubecuq", VXA(4, 63), VXA_MASK, PPCVEC2, PPCNONE, {VD, VA, VB, VC}},
{"vadduhm", VX (4, 64), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vmaxuh", VX (4, 66), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vrlh", VX (4, 68), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
@@ -2886,6 +2917,8 @@
{"vmaxuw", VX (4, 130), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vrlw", VX (4, 132), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vcmpequw", VXR(4, 134,0), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vmulouw", VX (4, 136), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
+{"vmuluwm", VX (4, 137), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vmrghw", VX (4, 140), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vpkuhus", VX (4, 142), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"ps_mr", XRC(4, 72,0), XRA_MASK, PPCPS, PPCNONE, {FRT, FRB}},
@@ -2893,12 +2926,17 @@
{"machhwsu", XO (4, 76,0,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"machhwsu.", XO (4, 76,0,1),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"ps_cmpo1", X (4, 96), X_MASK|(3<<21), PPCPS, PPCNONE, {BF, FRA, FRB}},
+{"vaddudm", VX (4, 192), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
+{"vmaxud", VX (4, 194), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
+{"vrld", VX (4, 196), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vcmpeqfp", VXR(4, 198,0), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vcmpequd", VXR(4, 199,0), VXR_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vpkuwus", VX (4, 206), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"machhws", XO (4, 108,0,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"machhws.", XO (4, 108,0,1),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"nmachhws", XO (4, 110,0,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"nmachhws.", XO (4, 110,0,1),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
+{"vadduqm", VX (4, 256), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vmaxsb", VX (4, 258), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vslb", VX (4, 260), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vmulosb", VX (4, 264), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
@@ -2911,6 +2949,7 @@
{"mulchwu.", XRC(4, 136,1), X_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"macchwu", XO (4, 140,0,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"macchwu.", XO (4, 140,0,1),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
+{"vaddcuq", VX (4, 320), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vmaxsh", VX (4, 322), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vslh", VX (4, 324), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vmulosh", VX (4, 328), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
@@ -2926,11 +2965,13 @@
{"vaddcuw", VX (4, 384), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vmaxsw", VX (4, 386), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vslw", VX (4, 388), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vmulosw", VX (4, 392), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vexptefp", VX (4, 394), VXVA_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VB}},
{"vmrglw", VX (4, 396), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vpkshss", VX (4, 398), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"macchwsu", XO (4, 204,0,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"macchwsu.", XO (4, 204,0,1),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
+{"vmaxsd", VX (4, 450), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vsl", VX (4, 452), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vcmpgefp", VXR(4, 454,0), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vlogefp", VX (4, 458), VXVA_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VB}},
@@ -3014,6 +3055,7 @@
{"evfsnabs", VX (4, 645), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA}},
{"evfsneg", VX (4, 646), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA}},
{"vcmpgtuw", VXR(4, 646,0), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vmuleuw", VX (4, 648), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evfsmul", VX (4, 648), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evfsdiv", VX (4, 649), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"vrfip", VX (4, 650), VXVA_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VB}},
@@ -3039,11 +3081,13 @@
{"cput", APU(4, 348,0), APU_RT_MASK, PPC405, PPCNONE, {RA, FSL}},
{"efsadd", VX (4, 704), VX_MASK, PPCEFS|PPCVLE, PPCNONE, {RS, RA, RB}},
{"efssub", VX (4, 705), VX_MASK, PPCEFS|PPCVLE, PPCNONE, {RS, RA, RB}},
+{"vminud", VX (4, 706), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"efsabs", VX (4, 708), VX_MASK, PPCEFS|PPCVLE, PPCNONE, {RS, RA}},
{"vsr", VX (4, 708), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"efsnabs", VX (4, 709), VX_MASK, PPCEFS|PPCVLE, PPCNONE, {RS, RA}},
{"efsneg", VX (4, 710), VX_MASK, PPCEFS|PPCVLE, PPCNONE, {RS, RA}},
{"vcmpgtfp", VXR(4, 710,0), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vcmpgtud", VXR(4, 711,0), VXR_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"efsmul", VX (4, 712), VX_MASK, PPCEFS|PPCVLE, PPCNONE, {RS, RA, RB}},
{"efsdiv", VX (4, 713), VX_MASK, PPCEFS|PPCVLE, PPCNONE, {RS, RA, RB}},
{"vrfim", VX (4, 714), VXVA_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VB}},
@@ -3163,12 +3207,16 @@
{"vminsw", VX (4, 898), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vsraw", VX (4, 900), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vcmpgtsw", VXR(4, 902,0), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vmulesw", VX (4, 904), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vctuxs", VX (4, 906), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VB, UIMM}},
{"vcfpuxws", VX (4, 906), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VB, UIMM}},
{"vspltisw", VX (4, 908), VXVB_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, SIMM}},
{"maclhwsu", XO (4, 460,0,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"maclhwsu.", XO (4, 460,0,1),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
+{"vminsd", VX (4, 962), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
+{"vsrad", VX (4, 964), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vcmpbfp", VXR(4, 966,0), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vcmpgtsd", VXR(4, 967,0), VXR_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vctsxs", VX (4, 970), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VB, UIMM}},
{"vcfpsxws", VX (4, 970), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VB, UIMM}},
{"vupklpx", VX (4, 974), VXVA_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VB}},
@@ -3177,6 +3225,7 @@
{"nmaclhws", XO (4, 494,0,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"nmaclhws.", XO (4, 494,0,1),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"vsububm", VX (4,1024), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"bcdadd.", VX (4,1025), VXPS_MASK, PPCVEC2, PPCNONE, {VD, VA, VB, PS}},
{"vavgub", VX (4,1026), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vabsdub", VX (4,1027), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evmhessf", VX (4,1027), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
@@ -3185,6 +3234,7 @@
{"udi0fcm.", APU(4, 515,0), APU_MASK, PPC405|PPC440, PPC476, {URT, URA, URB}},
{"udi0fcm", APU(4, 515,1), APU_MASK, PPC405|PPC440, PPC476, {URT, URA, URB}},
{"evmhossf", VX (4,1031), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
+{"vpmsumb", VX (4,1032), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evmheumi", VX (4,1032), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmhesmi", VX (4,1033), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"vmaxfp", VX (4,1034), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
@@ -3206,6 +3256,7 @@
{"evmhosmia", VX (4,1069), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmhosmfa", VX (4,1071), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"vsubuhm", VX (4,1088), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"bcdsub.", VX (4,1089), VXPS_MASK, PPCVEC2, PPCNONE, {VD, VA, VB, PS}},
{"vavguh", VX (4,1090), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"vabsduh", VX (4,1091), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vandc", VX (4,1092), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
@@ -3213,11 +3264,13 @@
{"udi1fcm.", APU(4, 547,0), APU_MASK, PPC405|PPC440, PPC476, {URT, URA, URB}},
{"udi1fcm", APU(4, 547,1), APU_MASK, PPC405|PPC440, PPC476, {URT, URA, URB}},
{"evmwhssf", VX (4,1095), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
+{"vpmsumh", VX (4,1096), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evmwlumi", VX (4,1096), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"vminfp", VX (4,1098), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"evmwhumi", VX (4,1100), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"vsro", VX (4,1100), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"evmwhsmi", VX (4,1101), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
+{"vpkudum", VX (4,1102), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evmwhsmf", VX (4,1103), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmwssf", VX (4,1107), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"machhwo", XO (4, 44,1,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
@@ -3243,6 +3296,7 @@
{"vabsduw", VX (4,1155), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vmr", VX (4,1156), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VBA}},
{"vor", VX (4,1156), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vpmsumw", VX (4,1160), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vcmpequw.", VXR(4, 134,1), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"udi2fcm.", APU(4, 579,0), APU_MASK, PPC405|PPC440, PPC476, {URT, URA, URB}},
{"udi2fcm", APU(4, 579,1), APU_MASK, PPC405|PPC440, PPC476, {URT, URA, URB}},
@@ -3250,6 +3304,7 @@
{"machhwsuo.", XO (4, 76,1,1),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"ps_merge10", XOPS(4,592,0), XOPS_MASK, PPCPS, PPCNONE, {FRT, FRA, FRB}},
{"ps_merge10.", XOPS(4,592,1), XOPS_MASK, PPCPS, PPCNONE, {FRT, FRA, FRB}},
+{"vsubudm", VX (4,1216), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evaddusiaaw", VX (4,1216), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA}},
{"evaddssiaaw", VX (4,1217), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA}},
{"evsubfusiaaw",VX (4,1218), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA}},
@@ -3259,18 +3314,22 @@
{"evdivws", VX (4,1222), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"vcmpeqfp.", VXR(4, 198,1), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"udi3fcm.", APU(4, 611,0), APU_MASK, PPC405|PPC440, PPC476, {URT, URA, URB}},
+{"vcmpequd.", VXR(4, 199,1), VXR_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"udi3fcm", APU(4, 611,1), APU_MASK, PPC405|PPC440, PPC476, {URT, URA, URB}},
{"evdivwu", VX (4,1223), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
+{"vpmsumd", VX (4,1224), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evaddumiaaw", VX (4,1224), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA}},
{"evaddsmiaaw", VX (4,1225), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA}},
{"evsubfumiaaw",VX (4,1226), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA}},
{"evsubfsmiaaw",VX (4,1227), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA}},
+{"vpkudus", VX (4,1230), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"machhwso", XO (4, 108,1,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"machhwso.", XO (4, 108,1,1),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"nmachhwso", XO (4, 110,1,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"nmachhwso.", XO (4, 110,1,1),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"ps_merge11", XOPS(4,624,0), XOPS_MASK, PPCPS, PPCNONE, {FRT, FRA, FRB}},
{"ps_merge11.", XOPS(4,624,1), XOPS_MASK, PPCPS, PPCNONE, {FRT, FRA, FRB}},
+{"vsubuqm", VX (4,1280), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evmheusiaaw", VX (4,1280), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmhessiaaw", VX (4,1281), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"vavgsb", VX (4,1282), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
@@ -3283,8 +3342,11 @@
{"udi4fcm", APU(4, 643,1), APU_MASK, PPC405|PPC440, PPC476, {URT, URA, URB}},
{"evmhossfaaw", VX (4,1287), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmheumiaaw", VX (4,1288), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
+{"vcipher", VX (4,1288), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
+{"vcipherlast", VX (4,1289), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evmhesmiaaw", VX (4,1289), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmhesmfaaw", VX (4,1291), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
+{"vgbbd", VX (4,1292), VXVA_MASK, PPCVEC2, PPCNONE, {VD, VB}},
{"evmhoumiaaw", VX (4,1292), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmhosmiaaw", VX (4,1293), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmhosmfaaw", VX (4,1295), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
@@ -3296,13 +3358,19 @@
{"evmhogumiaa", VX (4,1324), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmhogsmiaa", VX (4,1325), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmhogsmfaa", VX (4,1327), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
+{"vsubcuq", VX (4,1344), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evmwlusiaaw", VX (4,1344), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmwlssiaaw", VX (4,1345), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"vavgsh", VX (4,1346), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vorc", VX (4,1348), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"udi5fcm.", APU(4, 675,0), APU_MASK, PPC405|PPC440, PPC476, {URT, URA, URB}},
{"udi5fcm", APU(4, 675,1), APU_MASK, PPC405|PPC440, PPC476, {URT, URA, URB}},
+{"vncipher", VX (4,1352), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evmwlumiaaw", VX (4,1352), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
+{"vncipherlast",VX (4,1353), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evmwlsmiaaw", VX (4,1353), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
+{"vbpermq", VX (4,1356), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
+{"vpksdus", VX (4,1358), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evmwssfaa", VX (4,1363), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"macchwo", XO (4, 172,1,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"evmwumiaa", VX (4,1368), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
@@ -3316,6 +3384,7 @@
{"evmhessianw", VX (4,1409), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"vavgsw", VX (4,1410), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"evmhessfanw", VX (4,1411), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
+{"vnand", VX (4,1412), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evmhousianw", VX (4,1412), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmhossianw", VX (4,1413), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"udi6fcm.", APU(4, 707,0), APU_MASK, PPC405|PPC440, PPC476, {URT, URA, URB}},
@@ -3337,11 +3406,14 @@
{"evmhogsmfan", VX (4,1455), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmwlusianw", VX (4,1472), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmwlssianw", VX (4,1473), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
+{"vsld", VX (4,1476), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vcmpgefp.", VXR(4, 454,1), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"udi7fcm.", APU(4, 739,0), APU_MASK, PPC405|PPC440, PPC476, {URT, URA, URB}},
{"udi7fcm", APU(4, 739,1), APU_MASK, PPC405|PPC440, PPC476, {URT, URA, URB}},
+{"vsbox", VX (4,1480), VXVB_MASK, PPCVEC2, PPCNONE, {VD, VA}},
{"evmwlumianw", VX (4,1480), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"evmwlsmianw", VX (4,1481), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
+{"vpksdss", VX (4,1486), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"evmwssfan", VX (4,1491), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
{"macchwso", XO (4, 236,1,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"evmwumian", VX (4,1496), VX_MASK, PPCSPE|PPCVLE, PPCNONE, {RS, RA, RB}},
@@ -3362,15 +3434,25 @@
{"vsum4shs", VX (4,1608), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"udi9fcm.", APU(4, 804,0), APU_MASK, PPC440, PPC476, {URT, URA, URB}},
{"udi9fcm", APU(4, 804,1), APU_MASK, PPC440, PPC476, {URT, URA, URB}},
+{"vupkhsw", VX (4,1614), VXVA_MASK, PPCVEC2, PPCNONE, {VD, VB}},
{"vsubuws", VX (4,1664), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vshasigmaw", VX (4,1666), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, ST, SIX}},
+{"veqv", VX (4,1668), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vcmpgtuw.", VXR(4, 646,1), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"udi10fcm.", APU(4, 835,0), APU_MASK, PPC440, PPC476, {URT, URA, URB}},
{"udi10fcm", APU(4, 835,1), APU_MASK, PPC440, PPC476, {URT, URA, URB}},
{"vsum2sws", VX (4,1672), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vmrgow", VX (4,1676), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
+{"vshasigmad", VX (4,1730), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, ST, SIX}},
+{"vsrd", VX (4,1732), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"vcmpgtfp.", VXR(4, 710,1), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"udi11fcm.", APU(4, 867,0), APU_MASK, PPC440, PPC476, {URT, URA, URB}},
+{"vcmpgtud.", VXR(4, 711,1), VXR_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"udi11fcm", APU(4, 867,1), APU_MASK, PPC440, PPC476, {URT, URA, URB}},
+{"vupklsw", VX (4,1742), VXVA_MASK, PPCVEC2, PPCNONE, {VD, VB}},
{"vsubsbs", VX (4,1792), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vclzb", VX (4,1794), VXVA_MASK, PPCVEC2, PPCNONE, {VD, VB}},
+{"vpopcntb", VX (4,1795), VXVA_MASK, PPCVEC2, PPCNONE, {VD, VB}},
{"vcmpgtsb.", VXR(4, 774,1), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"udi12fcm.", APU(4, 899,0), APU_MASK, PPC440, PPC476, {URT, URA, URB}},
{"udi12fcm", APU(4, 899,1), APU_MASK, PPC440, PPC476, {URT, URA, URB}},
@@ -3378,6 +3460,8 @@
{"maclhwuo", XO (4, 396,1,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"maclhwuo.", XO (4, 396,1,1),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"vsubshs", VX (4,1856), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vclzh", VX (4,1858), VXVA_MASK, PPCVEC2, PPCNONE, {VD, VB}},
+{"vpopcnth", VX (4,1859), VXVA_MASK, PPCVEC2, PPCNONE, {VD, VB}},
{"vcmpgtsh.", VXR(4, 838,1), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"udi13fcm.", APU(4, 931,0), APU_MASK, PPC440, PPC476, {URT, URA, URB}},
{"udi13fcm", APU(4, 931,1), APU_MASK, PPC440, PPC476, {URT, URA, URB}},
@@ -3386,14 +3470,20 @@
{"nmaclhwo", XO (4, 430,1,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"nmaclhwo.", XO (4, 430,1,1),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"vsubsws", VX (4,1920), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vclzw", VX (4,1922), VXVA_MASK, PPCVEC2, PPCNONE, {VD, VB}},
+{"vpopcntw", VX (4,1923), VXVA_MASK, PPCVEC2, PPCNONE, {VD, VB}},
{"vcmpgtsw.", VXR(4, 902,1), VXR_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
{"udi14fcm.", APU(4, 963,0), APU_MASK, PPC440, PPC476, {URT, URA, URB}},
{"udi14fcm", APU(4, 963,1), APU_MASK, PPC440, PPC476, {URT, URA, URB}},
{"vsumsws", VX (4,1928), VX_MASK, PPCVEC|PPCVLE, PPCNONE, {VD, VA, VB}},
+{"vmrgew", VX (4,1932), VX_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"maclhwsuo", XO (4, 460,1,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"maclhwsuo.", XO (4, 460,1,1),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
+{"vclzd", VX (4,1986), VXVA_MASK, PPCVEC2, PPCNONE, {VD, VB}},
+{"vpopcntd", VX (4,1987), VXVA_MASK, PPCVEC2, PPCNONE, {VD, VB}},
{"vcmpbfp.", VXR(4, 966,1), VXR_MASK, PPCVEC, PPCNONE, {VD, VA, VB}},
{"udi15fcm.", APU(4, 995,0), APU_MASK, PPC440, PPC476, {URT, URA, URB}},
+{"vcmpgtsd.", VXR(4, 967,1), VXR_MASK, PPCVEC2, PPCNONE, {VD, VA, VB}},
{"udi15fcm", APU(4, 995,1), APU_MASK, PPC440, PPC476, {URT, URA, URB}},
{"maclhwso", XO (4, 492,1,0),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
{"maclhwso.", XO (4, 492,1,1),XO_MASK, MULHW|PPCVLE, PPCNONE, {RT, RA, RB}},
@@ -3965,6 +4055,8 @@
{"crandc", XL(19,129), XL_MASK, COM, PPCNONE, {BT, BA, BB}},
+{"rfebb", XL(19,146), XLS_MASK, POWER8, PPCNONE, {SXL}},
+
{"isync", XL(19,150), 0xffffffff, PPCCOM, PPCNONE, {0}},
{"ics", XL(19,150), 0xffffffff, PWRCOM, PPCNONE, {0}},
@@ -4148,6 +4240,13 @@
{"bcctrl", XLLK(19,528,1), XLBH_MASK, PPCCOM, PPCNONE, {BO, BI, BH}},
{"bccl", XLLK(19,528,1), XLBB_MASK, PWRCOM, PPCNONE, {BO, BI}},
+{"bctar-", XLYLK(19,560,0,0), XLYBB_MASK, POWER8, PPCNONE, {BOE, BI}},
+{"bctarl-", XLYLK(19,560,0,1), XLYBB_MASK, POWER8, PPCNONE, {BOE, BI}},
+{"bctar+", XLYLK(19,560,1,0), XLYBB_MASK, POWER8, PPCNONE, {BOE, BI}},
+{"bctarl+", XLYLK(19,560,1,1), XLYBB_MASK, POWER8, PPCNONE, {BOE, BI}},
+{"bctar", XLLK(19,560,0), XLBH_MASK, POWER8, PPCNONE, {BO, BI, BH}},
+{"bctarl", XLLK(19,560,1), XLBH_MASK, POWER8, PPCNONE, {BO, BI, BH}},
+
{"rlwimi", M(20,0), M_MASK, PPCCOM, PPCNONE, {RA, RS, SH, MBE, ME}},
{"rlimi", M(20,0), M_MASK, PWRCOM, PPCNONE, {RA, RS, SH, MBE, ME}},
@@ -4276,6 +4375,8 @@
{"mulhwu", XO(31,11,0,0), XO_MASK, PPC|PPCVLE, PPCNONE, {RT, RA, RB}},
{"mulhwu.", XO(31,11,0,1), XO_MASK, PPC|PPCVLE, PPCNONE, {RT, RA, RB}},
+{"lxsiwzx", X(31,12), XX1_MASK, PPCVSX2, PPCNONE, {XT6, RA0, RB}},
+
{"isellt", X(31,15), X_MASK, PPCISEL, PPCNONE, {RT, RA0, RB}},
{"tlbilxlpid", XTO(31,18,0), XTO_MASK, E500MC|PPCA2, PPCNONE, {0}},
@@ -4316,6 +4417,9 @@
{"maskg.", XRC(31,29,1), X_MASK, M601, PPCA2, {RA, RS, RB}},
{"ldepx", X(31,29), X_MASK, E500MC|PPCA2|PPCVLE, PPCNONE, {RT, RA0, RB}},
+
+{"waitasec", X(31,30), XRTRARB_MASK,POWER8, PPCNONE, {0}},
+
{"lwepx", X(31,31), X_MASK, E500MC|PPCA2|PPCVLE, PPCNONE, {RT, RA0, RB}},
{"cmplw", XOPL(31,32,0), XCMPL_MASK, PPCCOM|PPCVLE, PPCNONE, {OBF, RA, RB}},
@@ -4335,6 +4439,8 @@
{"addg6s", XO(31,74,0,0), XO_MASK, POWER6, PPCNONE, {RT, RA, RB}},
+{"lxsiwax", X(31,76), XX1_MASK, PPCVSX2, PPCNONE, {XT6, RA0, RB}},
+
{"iseleq", X(31,79), X_MASK, PPCISEL, PPCNONE, {RT, RA0, RB}},
{"isel", XISEL(31,15), XISEL_MASK, PPCISEL|TITAN|PPCVLE, PPCNONE, {RT, RA0, RB, CRB}},
@@ -4344,6 +4450,9 @@
{"subf.", XO(31,40,0,1), XO_MASK, PPC|PPCVLE, PPCNONE, {RT, RA, RB}},
{"sub.", XO(31,40,0,1), XO_MASK, PPC|PPCVLE, PPCNONE, {RT, RB, RA}},
+{"mfvsrd", X(31,51), XX1RB_MASK, PPCVSX2, PPCNONE, {RA, XS6}},
+{"mffprd", X(31,51), XX1RB_MASK|1, PPCVSX2, PPCNONE, {RA, FRS}},
+{"mfvrd", X(31,51)|1, XX1RB_MASK|1, PPCVSX2, PPCNONE, {RA, VS}},
{"eratilx", X(31,51), X_MASK, PPCA2, PPCNONE, {ERAT_T, RA, RB}},
{"lbarx", X(31,52), XEH_MASK, POWER7|PPCVLE, PPCNONE, {RT, RA0, RB, EH}},
@@ -4421,6 +4530,10 @@
{"mtsrdin", X(31,114), XRA_MASK, PPC64, PPCNONE, {RS, RB}},
+{"mffprwz", X(31,115), XX1RB_MASK|1, PPCVSX2, PPCNONE, {RA, FRS}},
+{"mfvrwz", X(31,115)|1, XX1RB_MASK|1, PPCVSX2, PPCNONE, {RA, VS}},
+{"mfvsrwz", X(31,115), XX1RB_MASK, PPCVSX2, PPCNONE, {RA, XS6}},
+
{"lharx", X(31,116), XEH_MASK, POWER7|PPCVLE, PPCNONE, {RT, RA0, RB, EH}},
{"clf", X(31,118), XTO_MASK, POWER, PPCNONE, {RA, RB}},
@@ -4453,6 +4566,9 @@
{"adde.", XO(31,138,0,1), XO_MASK, PPCCOM|PPCVLE, PPCNONE, {RT, RA, RB}},
{"ae.", XO(31,138,0,1), XO_MASK, PWRCOM, PPCNONE, {RT, RA, RB}},
+{"stxsiwx", X(31,140), XX1_MASK, PPCVSX2, PPCNONE, {XS6, RA0, RB}},
+
+{"msgsndp", XRTRA(31,142,0,0), XRTRA_MASK, POWER8, PPCNONE, {RB}},
{"dcbtstlse", X(31,142), X_MASK, PPCCHLK, E500MC, {CT, RA0, RB}},
{"mtcr", XFXM(31,144,0xff,0), XRARB_MASK, COM, PPCNONE, {RS}},
@@ -4461,6 +4577,8 @@
{"mtmsr", X(31,146), XRLARB_MASK, COM|PPCVLE, PPCNONE, {RS, A_L}},
+{"mtsle", X(31,147), XRTLRARB_MASK, POWER8, PPCNONE, {L}},
+
{"eratsx", XRC(31,147,0), X_MASK, PPCA2, PPCNONE, {RT, RA0, RB}},
{"eratsx.", XRC(31,147,1), X_MASK, PPCA2, PPCNONE, {RT, RA0, RB}},
@@ -4490,14 +4608,19 @@
{"stvehx", X(31,167), X_MASK, PPCVEC, PPCNONE, {VS, RA0, RB}},
{"sthfcmx", APU(31,167,0), APU_MASK, PPC405, PPCNONE, {FCRT, RA, RB}},
+{"msgclrp", XRTRA(31,174,0,0), XRTRA_MASK, POWER8, PPCNONE, {RB}},
{"dcbtlse", X(31,174), X_MASK, PPCCHLK, E500MC, {CT, RA0, RB}},
{"mtmsrd", X(31,178), XRLARB_MASK, PPC64, PPCNONE, {RS, A_L}},
+{"mtvsrd", X(31,179), XX1RB_MASK, PPCVSX2, PPCNONE, {XT6, RA}},
+{"mtfprd", X(31,179), XX1RB_MASK|1, PPCVSX2, PPCNONE, {FRT, RA}},
+{"mtvrd", X(31,179)|1, XX1RB_MASK|1, PPCVSX2, PPCNONE, {VD, RA}},
{"eratre", X(31,179), X_MASK, PPCA2, PPCNONE, {RT, RA, WS}},
{"stdux", X(31,181), X_MASK, PPC64|PPCVLE, PPCNONE, {RS, RAS, RB}},
+{"stqcx.", XRC(31,182,1), X_MASK, POWER8, PPCNONE, {RSQ, RA0, RB}},
{"wchkall", X(31,182), X_MASK, PPCA2, PPCNONE, {OBF}},
{"stwux", X(31,183), X_MASK, PPCCOM|PPCVLE, PPCNONE, {RS, RAS, RB}},
@@ -4527,6 +4650,9 @@
{"mtsr", X(31,210), XRB_MASK|(1<<20), COM, NON32, {SR, RS}},
+{"mtfprwa", X(31,211), XX1RB_MASK|1, PPCVSX2, PPCNONE, {FRT, RA}},
+{"mtvrwa", X(31,211)|1, XX1RB_MASK|1, PPCVSX2, PPCNONE, {VD, RA}},
+{"mtvsrwa", X(31,211), XX1RB_MASK, PPCVSX2, PPCNONE, {XT6, RA}},
{"eratwe", X(31,211), X_MASK, PPCA2, PPCNONE, {RS, RA, WS}},
{"ldawx.", XRC(31,212,1), X_MASK, PPCA2, PPCNONE, {RT, RA0, RB}},
@@ -4571,6 +4697,10 @@
{"mtsrin", X(31,242), XRA_MASK, PPC, NON32, {RS, RB}},
{"mtsri", X(31,242), XRA_MASK, POWER, NON32, {RS, RB}},
+{"mtfprwz", X(31,243), XX1RB_MASK|1, PPCVSX2, PPCNONE, {FRT, RA}},
+{"mtvrwz", X(31,243)|1, XX1RB_MASK|1, PPCVSX2, PPCNONE, {VD, RA}},
+{"mtvsrwz", X(31,243), XX1RB_MASK, PPCVSX2, PPCNONE, {XT6, RA}},
+
{"dcbtstt", XRT(31,246,0x10), XRT_MASK, POWER7, PPCNONE, {RA0, RB}},
{"dcbtst", X(31,246), X_MASK, POWER4, PPCNONE, {RA0, RB, CT}},
{"dcbtst", X(31,246), X_MASK, PPC|PPCVLE, POWER4, {CT, RA0, RB}},
@@ -4608,6 +4738,8 @@
{"mfapidi", X(31,275), X_MASK, BOOKE, TITAN, {RT, RA}},
+{"lqarx", X(31,276), XEH_MASK, POWER8, PPCNONE, {RTQ, RAX, RBX, EH}},
+
{"lscbx", XRC(31,277,0), X_MASK, M601, PPCNONE, {RT, RA, RB}},
{"lscbx.", XRC(31,277,1), X_MASK, M601, PPCNONE, {RT, RA, RB}},
@@ -4629,6 +4761,8 @@
{"lvexhx", X(31,293), X_MASK, PPCVEC2, PPCNONE, {VD, RA0, RB}},
{"lvepx", X(31,295), X_MASK, PPCVEC2|PPCVLE, PPCNONE, {VD, RA0, RB}},
+{"mfbhrbe", X(31,302), X_MASK, POWER8, PPCNONE, {RT, BHRBE}},
+
{"tlbie", X(31,306), XRTLRA_MASK, PPC, TITAN, {RB, L}},
{"tlbi", X(31,306), XRT_MASK, POWER, PPCNONE, {RA0, RB}},
@@ -4937,6 +5071,8 @@
{"slbmte", X(31,402), XRA_MASK, PPC64, PPCNONE, {RS, RB}},
+{"pbt.", XRC(31,404,1), X_MASK, POWER8, PPCNONE, {RS, RA0, RB}},
+
{"icswx", XRC(31,406,0), X_MASK, POWER7|PPCA2, PPCNONE, {RS, RA, RB}},
{"icswx.", XRC(31,406,1), X_MASK, POWER7|PPCA2, PPCNONE, {RS, RA, RB}},
@@ -4958,6 +5094,8 @@
{"divwe", XO(31,427,0,0), XO_MASK, POWER7|PPCA2, PPCNONE, {RT, RA, RB}},
{"divwe.", XO(31,427,0,1), XO_MASK, POWER7|PPCA2, PPCNONE, {RT, RA, RB}},
+{"clrbhrb", X(31,430), 0xffffffff, POWER8, PPCNONE, {0}},
+
{"slbie", X(31,434), XRTRA_MASK, PPC64, PPCNONE, {RB}},
{"ecowx", X(31,438), X_MASK, PPC, TITAN, {RT, RA0, RB}},
@@ -5246,6 +5384,8 @@
{"addco.", XO(31,10,1,1), XO_MASK, PPCCOM|PPCVLE, PPCNONE, {RT, RA, RB}},
{"ao.", XO(31,10,1,1), XO_MASK, PWRCOM, PPCNONE, {RT, RA, RB}},
+{"lxsspx", X(31,524), XX1_MASK, PPCVSX2, PPCNONE, {XT6, RA0, RB}},
+
{"clcs", X(31,531), XRB_MASK, M601, PPCNONE, {RT, RA}},
{"ldbrx", X(31,532), X_MASK, CELL|POWER7|PPCA2, PPCNONE, {RT, RA0, RB}},
@@ -5340,6 +5480,8 @@
{"stvlx", X(31,647), X_MASK, CELL, PPCNONE, {VS, RA0, RB}},
{"stbfcmux", APU(31,647,0), APU_MASK, PPC405, PPCNONE, {FCRT, RA, RB}},
+{"stxsspx", X(31,652), XX1_MASK, PPCVSX2, PPCNONE, {XS6, RA0, RB}},
+
{"tbegin.", XRC(31,654,1), XRTLRARB_MASK,PPCHTM, PPCNONE, {HTM_R}},
{"subfeo", XO(31,136,1,0), XO_MASK, PPCCOM|PPCVLE, PPCNONE, {RT, RA, RB}},
@@ -5525,6 +5667,7 @@
{"divo.", XO(31,331,1,1), XO_MASK, M601, PPCNONE, {RT, RA, RB}},
{"lxvd2x", X(31,844), XX1_MASK, PPCVSX, PPCNONE, {XT6, RA0, RB}},
+{"lxvx", X(31,844), XX1_MASK, PPCVSX, PPCNONE, {XT6, RA0, RB}},
{"tabortwci.", XRC(31,846,1), X_MASK, PPCHTM, PPCNONE, {TO, RA, HTM_SI}},
@@ -5636,6 +5779,7 @@
{"divwuo.", XO(31,459,1,1), XO_MASK, PPC|PPCVLE, PPCNONE, {RT, RA, RB}},
{"stxvd2x", X(31,972), XX1_MASK, PPCVSX, PPCNONE, {XS6, RA0, RB}},
+{"stxvx", X(31,972), XX1_MASK, PPCVSX, PPCNONE, {XS6, RA0, RB}},
{"tlbld", X(31,978), XRTRA_MASK, PPC, PPC403|BOOKE|PPCA2|PPC476, {RB}},
{"tlbwehi", XTLB(31,978,0), XTLB_MASK, PPC403, PPCNONE, {RT, RA}},
@@ -5868,14 +6012,25 @@
{"fcfidus", XRC(59,974,0), XRA_MASK, POWER7|PPCA2, PPCNONE, {FRT, FRB}},
{"fcfidus.", XRC(59,974,1), XRA_MASK, POWER7|PPCA2, PPCNONE, {FRT, FRB}},
+{"xsaddsp", XX3(60,0), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
+{"xsmaddasp", XX3(60,1), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
{"xxsldwi", XX3(60,2), XX3SHW_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6, SHW}},
{"xxsel", XX4(60,3), XX4_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6, XC6}},
+{"xssubsp", XX3(60,8), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
+{"xsmaddmsp", XX3(60,9), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
{"xxspltd", XX3(60,10), XX3DM_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6S, DMEX}},
{"xxmrghd", XX3(60,10), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xxswapd", XX3(60,10)|(2<<8), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6S}},
{"xxmrgld", XX3(60,10)|(3<<8), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xxpermdi", XX3(60,10), XX3DM_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6, DM}},
+{"xsrsqrtesp", XX2(60,10), XX2_MASK, PPCVSX2, PPCNONE, {XT6, XB6}},
+{"xssqrtsp", XX2(60,11), XX2_MASK, PPCVSX2, PPCNONE, {XT6, XB6}},
+{"xsmulsp", XX3(60,16), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
+{"xsmsubasp", XX3(60,17), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
{"xxmrghw", XX3(60,18), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
+{"xsdivsp", XX3(60,24), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
+{"xsmsubmsp", XX3(60,25), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
+{"xsresp", XX2(60,26), XX2_MASK, PPCVSX2, PPCNONE, {XT6, XB6}},
{"xsadddp", XX3(60,32), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xsmaddadp", XX3(60,33), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xscmpudp", XX3(60,35), XX3BF_MASK, PPCVSX, PPCNONE, {BF, XA6, XB6}},
@@ -5929,14 +6084,18 @@
{"xvmsubmdp", XX3(60,121), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xsrdpim", XX2(60,121), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
{"xvtdivdp", XX3(60,125), XX3BF_MASK, PPCVSX, PPCNONE, {BF, XA6, XB6}},
+{"xsnmaddasp", XX3(60,129), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
{"xxland", XX3(60,130), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xvcvspuxws", XX2(60,136), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
+{"xsnmaddmsp", XX3(60,137), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
{"xvrspi", XX2(60,137), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
{"xxlandc", XX3(60,138), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xvrsqrtesp", XX2(60,138), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
{"xvsqrtsp", XX2(60,139), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
+{"xsnmsubasp", XX3(60,145), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
{"xxlor", XX3(60,146), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xvcvspsxws", XX2(60,152), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
+{"xsnmsubmsp", XX3(60,153), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
{"xvrspiz", XX2(60,153), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
{"xxlxor", XX3(60,154), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xvresp", XX2(60,154), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
@@ -5949,12 +6108,15 @@
{"xsnmaddmdp", XX3(60,169), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xvrspip", XX2(60,169), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
{"xvtsqrtsp", XX2(60,170), XX2BF_MASK, PPCVSX, PPCNONE, {BF, XB6}},
+{"xxlorc", XX3(60,170), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
{"xvrspic", XX2(60,171), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
{"xscpsgndp", XX3(60,176), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xsnmsubadp", XX3(60,177), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
+{"xxlnand", XX3(60,178), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
{"xvcvsxwsp", XX2(60,184), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
{"xsnmsubmdp", XX3(60,185), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xvrspim", XX2(60,185), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
+{"xxleqv", XX3(60,186), XX3_MASK, PPCVSX2, PPCNONE, {XT6, XA6, XB6}},
{"xvmaxsp", XX3(60,192), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xvnmaddasp", XX3(60,193), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xvminsp", XX3(60,200), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
@@ -5985,8 +6147,13 @@
{"xvnmsubmdp", XX3(60,249), XX3_MASK, PPCVSX, PPCNONE, {XT6, XA6, XB6}},
{"xvrdpim", XX2(60,249), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
{"xscvdpsp", XX2(60,265), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
+{"xscvdpspn", XX2(60,267), XX2_MASK, PPCVSX2, PPCNONE, {XT6, XB6}},
+{"xsrsp", XX2(60,281), XX2_MASK, PPCVSX2, PPCNONE, {XT6, XB6}},
+{"xscvuxdsp", XX2(60,296), XX2_MASK, PPCVSX2, PPCNONE, {XT6, XB6}},
+{"xscvsxdsp", XX2(60,312), XX2_MASK, PPCVSX2, PPCNONE, {XT6, XB6}},
{"xscvdpuxds", XX2(60,328), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
{"xscvspdp", XX2(60,329), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
+{"xscvspdpn", XX2(60,331), XX2_MASK, PPCVSX2, PPCNONE, {XT6, XB6}},
{"xscvdpsxds", XX2(60,344), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
{"xsabsdp", XX2(60,345), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
{"xscvuxddp", XX2(60,360), XX2_MASK, PPCVSX, PPCNONE, {XT6, XB6}},
@@ -6222,6 +6389,8 @@
{"denbcdq", XRC(63,834,0), X_MASK, POWER6, PPCNONE, {S, FRTp, FRBp}},
{"denbcdq.", XRC(63,834,1), X_MASK, POWER6, PPCNONE, {S, FRTp, FRBp}},
+{"fmrgow", X(63,838), X_MASK, PPCVSX2, PPCNONE, {FRT, FRA, FRB}},
+
{"fcfid", XRC(63,846,0), XRA_MASK, PPC64, PPCNONE, {FRT, FRB}},
{"fcfid", XRC(63,846,0), XRA_MASK, PPC476, PPCNONE, {FRT, FRB}},
{"fcfid.", XRC(63,846,1), XRA_MASK, PPC64, PPCNONE, {FRT, FRB}},
@@ -6236,6 +6405,8 @@
{"fctiduz", XRC(63,943,0), XRA_MASK, POWER7|PPCA2, PPCNONE, {FRT, FRB}},
{"fctiduz.", XRC(63,943,1), XRA_MASK, POWER7|PPCA2, PPCNONE, {FRT, FRB}},
+{"fmrgew", X(63,966), X_MASK, PPCVSX2, PPCNONE, {FRT, FRA, FRB}},
+
{"fcfidu", XRC(63,974,0), XRA_MASK, POWER7|PPCA2, PPCNONE, {FRT, FRB}},
{"fcfidu.", XRC(63,974,1), XRA_MASK, POWER7|PPCA2, PPCNONE, {FRT, FRB}},
};

60
gdb-power8-2of2.patch Normal file
View File

@ -0,0 +1,60 @@
[PATCH] Enable hw watchpoint with longer ranges using DAWR on Power
http://sourceware.org/ml/gdb-patches/2013-07/msg00085.html
http://sourceware.org/ml/gdb-cvs/2013-07/msg00097.html
### src/gdb/ChangeLog 2013/07/22 11:42:30 1.15812
### src/gdb/ChangeLog 2013/07/22 13:17:51 1.15813
## -1,3 +1,9 @@
+2013-07-22 Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com>
+
+ * ppc-linux-nat.c (PPC_DEBUG_FEATURE_DATA_BP_DAWR): New define.
+ (ppc_linux_region_ok_for_hw_watchpoint): Add checking to use the new
+ DAWR interface for longer ranges hardware watchpoint (up to 512 bytes).
+
2013-07-22 Phil Muldoon <pmuldoon@redhat.com>
* top.c (print_gdb_version): Add help, apropos description and
--- gdb-7.6/gdb/ppc-linux-nat.c.orig 2013-07-24 17:39:30.434549279 +0200
+++ gdb-7.6/gdb/ppc-linux-nat.c 2013-07-24 17:41:31.337706502 +0200
@@ -178,7 +178,11 @@ struct ppc_hw_breakpoint
(1<<((n)+PPC_BREAKPOINT_CONDITION_BE_SHIFT))
#endif /* PPC_PTRACE_GETHWDBGINFO */
-
+/* Feature defined on Linux kernel v3.9: DAWR interface, that enables wider
+ watchpoint (up to 512 bytes). */
+#ifndef PPC_DEBUG_FEATURE_DATA_BP_DAWR
+#define PPC_DEBUG_FEATURE_DATA_BP_DAWR 0x10
+#endif /* PPC_DEBUG_FEATURE_DATA_BP_DAWR */
/* Similarly for the general-purpose (gp0 -- gp31)
and floating-point registers (fp0 -- fp31). */
@@ -1503,6 +1507,7 @@ ppc_linux_region_ok_for_hw_watchpoint (C
to determine the hardcoded watchable region for watchpoints. */
if (have_ptrace_booke_interface ())
{
+ int region_size;
/* Embedded DAC-based processors, like the PowerPC 440 have ranged
watchpoints and can watch any access within an arbitrary memory
region. This is useful to watch arrays and structs, for instance. It
@@ -1511,11 +1516,17 @@ ppc_linux_region_ok_for_hw_watchpoint (C
&& booke_debug_info.features & PPC_DEBUG_FEATURE_DATA_BP_RANGE
&& ppc_linux_get_hwcap () & PPC_FEATURE_BOOKE)
return 2;
+ /* Check if the processor provides DAWR interface. */
+ if (booke_debug_info.features & PPC_DEBUG_FEATURE_DATA_BP_DAWR)
+ /* DAWR interface allows to watch up to 512 byte wide ranges which
+ can't cross a 512 byte boundary. */
+ region_size = 512;
+ else
+ region_size = booke_debug_info.data_bp_alignment;
/* Server processors provide one hardware watchpoint and addr+len should
fall in the watchable region provided by the ptrace interface. */
- if (booke_debug_info.data_bp_alignment
- && (addr + len > (addr & ~(booke_debug_info.data_bp_alignment - 1))
- + booke_debug_info.data_bp_alignment))
+ if (region_size
+ && (addr + len > (addr & ~(region_size - 1)) + region_size))
return 0;
}
/* addr+len must fall in the 8 byte watchable region for DABR-based

View File

@ -0,0 +1,136 @@
https://sourceware.org/ml/gdb-patches/2013-07/msg00469.html
Hi.
This patch adds the missing calls to check_typedef
and adds a testcase to show the issue.
The PR is not closeable yet, but the remaining issues are more cleanups
than actual bug fixes.
Regression tested on amd64-linux.
I will check this in in a few days if there are no objections.
[The multiple calls to check_typedef (value_type (*argp)) are
bothersome, but the code is simpler this way, and I expect
resolving the rest of the issues in 15695 to potentially change this
code significantly.]
---
commit cbb25189b69e501ddca64917d810b54bb1466c93
Author: Doug Evans <dje@google.com>
Date: Thu Aug 1 23:59:47 2013 +0000
PR symtab/15695
* valops.c (value_struct_elt): Add missing call to check_typedef.
(value_find_oload_method_list): Ditto.
testsuite/
* gdb.base/func-ptr.exp: New file.
* gdb.base/func-ptr.c: New file.
2013-08-01 Doug Evans <dje@google.com>
PR symtab/15695
* valops.c (value_struct_elt): Add missing call to check_typedef.
(value_find_oload_method_list): Ditto.
2013-08-01 Doug Evans <dje@google.com>
PR symtab/15695
* gdb.base/func-ptr.exp: New file.
* gdb.base/func-ptr.c: New file.
Index: gdb-7.6.1/gdb/testsuite/gdb.base/func-ptr.c
===================================================================
--- /dev/null
+++ gdb-7.6.1/gdb/testsuite/gdb.base/func-ptr.c
@@ -0,0 +1,30 @@
+/* This testcase is part of GDB, the GNU debugger.
+
+ Copyright 2013 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+void
+bar ()
+{
+}
+
+typedef void foo (void);
+foo *pbar = bar;
+
+int
+main ()
+{
+ return 0;
+}
Index: gdb-7.6.1/gdb/testsuite/gdb.base/func-ptr.exp
===================================================================
--- /dev/null
+++ gdb-7.6.1/gdb/testsuite/gdb.base/func-ptr.exp
@@ -0,0 +1,30 @@
+# Copyright 2013 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+# This testcase exercises bug 15695.
+# Trying to print foo->bar if foo is a pointer to a typedef of a pointer
+# to a function will put gdb into an infinite loop.
+
+if { [prepare_for_testing func-ptr.exp "func-ptr" {func-ptr.c} {debug}] } {
+ return -1
+}
+
+if ![runto_main] {
+ fail "Can't run to main"
+ return 0
+}
+
+# This would put gdb into an infinite loop.
+gdb_test "print pbar->baz" "Attempt to extract .*"
Index: gdb-7.6.1/gdb/valops.c
===================================================================
--- gdb-7.6.1.orig/gdb/valops.c
+++ gdb-7.6.1/gdb/valops.c
@@ -2450,7 +2450,7 @@ value_struct_elt (struct value **argp, s
{
*argp = value_ind (*argp);
/* Don't coerce fn pointer to fn and then back again! */
- if (TYPE_CODE (value_type (*argp)) != TYPE_CODE_FUNC)
+ if (TYPE_CODE (check_typedef (value_type (*argp))) != TYPE_CODE_FUNC)
*argp = coerce_array (*argp);
t = check_typedef (value_type (*argp));
}
@@ -2614,7 +2614,7 @@ value_find_oload_method_list (struct val
{
*argp = value_ind (*argp);
/* Don't coerce fn pointer to fn and then back again! */
- if (TYPE_CODE (value_type (*argp)) != TYPE_CODE_FUNC)
+ if (TYPE_CODE (check_typedef (value_type (*argp))) != TYPE_CODE_FUNC)
*argp = coerce_array (*argp);
t = check_typedef (value_type (*argp));
}

File diff suppressed because it is too large Load Diff

View File

@ -1202,100 +1202,6 @@ http://sourceware.org/ml/gdb-cvs/2013-04/msg00070.html
http://sourceware.org/bugzilla/show_bug.cgi?id=15413
http://sourceware.org/ml/gdb-cvs/2013-05/msg00063.html
### src/gdb/ChangeLog 2013/04/26 14:13:13 1.15260.2.50
### src/gdb/ChangeLog 2013/05/07 17:04:56 1.15260.2.51
## -1,3 +1,10 @@
+2013-05-07 Sergio Durigan Junior <sergiodj@redhat.com>
+
+ PR breakpoints/15413:
+ * breakpoint.c (condition_completer): Simplify the code to
+ disconsider multiple locations of breakpoints when completing the
+ "condition" command.
+
2013-04-26 Joel Brobecker <brobecker@adacore.com>
* version.in: Set version to 7.6.0.20130426-cvs.
--- src/gdb/breakpoint.c 2013/04/25 08:15:34 1.745.2.5
+++ src/gdb/breakpoint.c 2013/05/07 17:04:57 1.745.2.6
@@ -1015,27 +1015,14 @@
len = strlen (text);
ALL_BREAKPOINTS (b)
- {
- int single = b->loc->next == NULL;
- struct bp_location *loc;
- int count = 1;
-
- for (loc = b->loc; loc; loc = loc->next)
- {
- char location[50];
-
- if (single)
- xsnprintf (location, sizeof (location), "%d", b->number);
- else
- xsnprintf (location, sizeof (location), "%d.%d", b->number,
- count);
+ {
+ char number[50];
- if (strncmp (location, text, len) == 0)
- VEC_safe_push (char_ptr, result, xstrdup (location));
+ xsnprintf (number, sizeof (number), "%d", b->number);
- ++count;
- }
- }
+ if (strncmp (number, text, len) == 0)
+ VEC_safe_push (char_ptr, result, xstrdup (number));
+ }
return result;
}
### src/gdb/testsuite/ChangeLog 2013/05/03 16:26:32 1.3580.2.20
### src/gdb/testsuite/ChangeLog 2013/05/07 17:04:57 1.3580.2.21
## -1,3 +1,11 @@
+2013-05-07 Sergio Durigan Junior <sergiodj@redhat.com>
+
+ PR breakpoints/15413:
+ * gdb.base/pending.exp: Add test for completion of the "condition"
+ command for pending breakpoints.
+ * gdb.linespec/linespec.ex: Add test for completion of the
+ "condition" command when dealing with multiple locations.
+
2013-05-03 Hafiz Abid Qadeer <abidh@codesourcery.com>
* status-stop.exp (test_tstart_tstart): Check for error
--- src/gdb/testsuite/gdb.base/pending.exp 2013/01/01 06:33:26 1.27
+++ src/gdb/testsuite/gdb.base/pending.exp 2013/05/07 17:04:57 1.27.2.1
@@ -55,6 +55,9 @@
}
}
+# Complete the condition (PR 15413).
+gdb_test "complete condition " "condition 1"
+
gdb_test "info break" \
"Num Type\[ \]+Disp Enb Address\[ \]+What.*
\[0-9\]+\[\t \]+breakpoint keep y.*PENDING.*pendfunc1.*" \
--- src/gdb/testsuite/gdb.linespec/linespec.exp 2013/01/01 06:41:24 1.6
+++ src/gdb/testsuite/gdb.linespec/linespec.exp 2013/05/07 17:04:57 1.6.2.1
@@ -63,6 +63,10 @@
"Breakpoint $decimal at $hex: dupname:label. \[(\]2 locations\[)\]" \
"multi-location break using duplicate function name and label"
+# Testing if the "condition" command completes only the breakpoints,
+# not the locations.
+gdb_test "complete condition " "condition $decimal\r\ncondition $decimal\r\ncondition $decimal"
+
gdb_test_no_output "set breakpoint pending off" \
"disable pending breakpoints for linespec tests"
https://bugzilla.redhat.com/show_bug.cgi?id=967915
http://sourceware.org/ml/gdb-cvs/2013-05/msg00146.html
@ -1341,3 +1247,209 @@ http://sourceware.org/ml/gdb-cvs/2013-05/msg00146.html
return 0;
}
/* addr+len must fall in the 8 byte watchable region for DABR-based
commit 1aa4cd774ca674ee6061e2068a410bb67c8bc812
Author: Andrew Pinski <apinski@cavium.com>
Date: Thu Sep 12 07:14:37 2013 +0000
2013-09-12 Andrew Pinski <apinski@cavium.com>
* aarch64-linux-nat.c (aarch64_linux_set_debug_regs): Zero out regs.
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index fa3de16..903dcba 100644
### a/gdb/ChangeLog
### b/gdb/ChangeLog
## -1,3 +1,7 @@
+2013-09-12 Andrew Pinski <apinski@cavium.com>
+
+ * aarch64-linux-nat.c (aarch64_linux_set_debug_regs): Zero out regs.
+
2013-09-10 Andreas Arnez <arnez@linux.vnet.ibm.com>
* config/s390/s390.mh (NATDEPFILES): Add linux-waitpid.o.
diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c
index 846f156..f685619 100644
--- a/gdb/aarch64-linux-nat.c
+++ b/gdb/aarch64-linux-nat.c
@@ -312,6 +312,7 @@ aarch64_linux_set_debug_regs (const struct aarch64_debug_reg_state *state,
const CORE_ADDR *addr;
const unsigned int *ctrl;
+ memset (&regs, 0, sizeof (regs));
iov.iov_base = &regs;
iov.iov_len = sizeof (regs);
count = watchpoint ? aarch64_num_wp_regs : aarch64_num_bp_regs;
commit 05feb1933f80f2d55e132adc657d3152947af3d1
Author: Will Newton <willnewton@sourceware.org>
Date: Thu Oct 10 10:40:42 2013 +0000
gdb/aarch64-linux-tdep.c: Call linux_init_abi.
If we are running on a Linux platform we should call linux_init_abi
in order to get all the useful hooks it enables.
gdb/ChangeLog:
2013-10-10 Will Newton <will.newton@linaro.org>
* aarch64-linux-tdep.c (aarch64_linux_init_abi): Call
linux_init_abi.
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 4372579..7a41967 100644
### a/gdb/ChangeLog
### b/gdb/ChangeLog
## -1,3 +1,8 @@
+2013-10-10 Will Newton <will.newton@linaro.org>
+
+ * aarch64-linux-tdep.c (aarch64_linux_init_abi): Call
+ linux_init_abi.
+
2013-10-10 Joel Brobecker <brobecker@adacore.com>
* cli/cli-cmds.c (show_baud_rate): Moved to serial.c as
diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c
index 8e66425..bcfcce2 100644
--- a/gdb/aarch64-linux-tdep.c
+++ b/gdb/aarch64-linux-tdep.c
@@ -270,6 +270,8 @@ aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
tdep->lowest_pc = 0x8000;
+ linux_init_abi (info, gdbarch);
+
set_solib_svr4_fetch_link_map_offsets (gdbarch,
svr4_lp64_fetch_link_map_offsets);
pre-req for:
[PATCH, AArch64] Fix bug in hardware watchpoint/breakpoint handling
commit c623a6ef72a8d7dbbb646345f75646710cb9bb68
Author: Will Newton <willnewton@sourceware.org>
Date: Mon Sep 16 14:22:19 2013 +0000
gdbserver, aarch64: Zero out regs in aarch64_linux_set_debug_regs.
Apply the same fix that was applied to aarch64-linux-nat.c.
2013-09-16 Will Newton <will.newton@linaro.org>
* linux-aarch64-low.c (aarch64_linux_set_debug_regs): Zero
out regs.
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index 73191f4..1082e78 100644
### a/gdb/gdbserver/ChangeLog
### b/gdb/gdbserver/ChangeLog
## -1,3 +1,8 @@
+2013-09-16 Will Newton <will.newton@linaro.org>
+
+ * linux-aarch64-low.c (aarch64_linux_set_debug_regs): Zero
+ out regs.
+
2013-09-06 Pedro Alves <palves@redhat.com>
* Makefile.in (gdb_proc_service_h, regdef_h, regcache_h)
diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c
index e37f602..93246b3 100644
--- a/gdb/gdbserver/linux-aarch64-low.c
+++ b/gdb/gdbserver/linux-aarch64-low.c
@@ -600,6 +600,7 @@ aarch64_linux_set_debug_regs (const struct aarch64_debug_reg_state *state,
const CORE_ADDR *addr;
const unsigned int *ctrl;
+ memset (&regs, 0, sizeof (regs));
iov.iov_base = &regs;
iov.iov_len = sizeof (regs);
count = watchpoint ? aarch64_num_wp_regs : aarch64_num_bp_regs;
[PATCH, AArch64] Fix bug in hardware watchpoint/breakpoint handling
https://sourceware.org/ml/gdb-patches/2013-12/msg00707.html
commit f45c82da381e0ce5ce51b7fb24d0d28611d266b8
Author: Yufeng Zhang <yufeng.zhang@arm.com>
Date: Wed Dec 18 16:47:33 2013 +0000
gdb/
* aarch64-linux-nat.c (aarch64_linux_set_debug_regs): Set
iov.iov_len with the real length in use.
gdb/gdbserver/
* linux-aarch64-low.c (aarch64_linux_set_debug_regs): Set
iov.iov_len with the real length in use.
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 7d9308f..513c593 100644
### a/gdb/ChangeLog
### b/gdb/ChangeLog
## -1,3 +1,8 @@
+2013-12-18 Yufeng Zhang <yufeng.zhang@arm.com>
+
+ * aarch64-linux-nat.c (aarch64_linux_set_debug_regs): Set
+ iov.iov_len with the real length in use.
+
2013-12-18 Yao Qi <yao@codesourcery.com>
* target.h (target_xfer_partial_ftype): New typedef.
diff --git a/gdb/aarch64-linux-nat.c b/gdb/aarch64-linux-nat.c
index 256725b..7d76833 100644
--- a/gdb/aarch64-linux-nat.c
+++ b/gdb/aarch64-linux-nat.c
@@ -314,10 +314,13 @@ aarch64_linux_set_debug_regs (const struct aarch64_debug_reg_state *state,
memset (&regs, 0, sizeof (regs));
iov.iov_base = &regs;
- iov.iov_len = sizeof (regs);
count = watchpoint ? aarch64_num_wp_regs : aarch64_num_bp_regs;
addr = watchpoint ? state->dr_addr_wp : state->dr_addr_bp;
ctrl = watchpoint ? state->dr_ctrl_wp : state->dr_ctrl_bp;
+ if (count == 0)
+ return;
+ iov.iov_len = (offsetof (struct user_hwdebug_state, dbg_regs[count - 1])
+ + sizeof (regs.dbg_regs [count - 1]));
for (i = 0; i < count; i++)
{
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index c73840f..2847796 100644
### a/gdb/gdbserver/ChangeLog
### b/gdb/gdbserver/ChangeLog
## -1,3 +1,8 @@
+2013-12-18 Yufeng Zhang <yufeng.zhang@arm.com>
+
+ * linux-aarch64-low.c (aarch64_linux_set_debug_regs): Set
+ iov.iov_len with the real length in use.
+
2013-12-13 Joel Brobecker <brobecker@adacore.com>
* Makefile.in (safe-ctype.o, lbasename.o): New rules.
diff --git a/gdb/gdbserver/linux-aarch64-low.c b/gdb/gdbserver/linux-aarch64-low.c
index 93246b3..c2d271a 100644
--- a/gdb/gdbserver/linux-aarch64-low.c
+++ b/gdb/gdbserver/linux-aarch64-low.c
@@ -602,10 +602,13 @@ aarch64_linux_set_debug_regs (const struct aarch64_debug_reg_state *state,
memset (&regs, 0, sizeof (regs));
iov.iov_base = &regs;
- iov.iov_len = sizeof (regs);
count = watchpoint ? aarch64_num_wp_regs : aarch64_num_bp_regs;
addr = watchpoint ? state->dr_addr_wp : state->dr_addr_bp;
ctrl = watchpoint ? state->dr_ctrl_wp : state->dr_ctrl_bp;
+ if (count == 0)
+ return;
+ iov.iov_len = (offsetof (struct user_hwdebug_state, dbg_regs[count - 1])
+ + sizeof (regs.dbg_regs [count - 1]));
for (i = 0; i < count; i++)
{

137
gdb.spec
View File

@ -11,8 +11,9 @@
%global dist .el5
%global el5 1
%endif
# RHEL-5 Brew does not set %{el5}.
# RHEL-5 Brew does not set %{el5}, BZ 1002198 tps-srpmtest does not set %{rhel}.
%if "%{?dist}" == ".el5"
%global rhel 5
%global el5 1
%endif
@ -32,11 +33,11 @@ Name: %{?scl_prefix}gdb
%global snapsrc 20130312
# See timestamp of source gnulib installed into gdb/gnulib/ .
%global snapgnulib 20121213
Version: 7.6
Version: 7.6.1
# 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: 32%{?dist}
Release: 50%{?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
@ -578,10 +579,26 @@ Patch834: gdb-vdso-gcore.patch
#=drop
Patch835: gdb-psymtab-expand.patch
# Fix C++ lookups performance regression (Doug Evans, BZ 972677).
# [ppc] Support Power8 CPU (IBM, BZ 731875).
#=drop
Patch838: gdb-cxx-performance-1of2.patch
Patch839: gdb-cxx-performance-2of2.patch
Patch840: gdb-power8-1of2.patch
Patch841: gdb-power8-2of2.patch
# Fix crash on 'enable count' (Simon Marchi, BZ 993118).
Patch843: gdb-enable-count-crash.patch
# Fix the case when GDB leaks memory because value_struct_elt
# does not call check_typedef. (Doug Evans, BZ 15695, filed as
# RH BZ 1013453).
Patch844: gdb-rhbz1013453-value-struct-elt-memory-leak.patch
# Fix explicit Class:: inside class scope (BZ 874817, Keith Seitz).
Patch845: gdb-implicit-this.patch
# Fix crash of -readnow /usr/lib/debug/usr/bin/gnatbind.debug (BZ 1069211).
Patch850: gdb-gnat-dwarf-crash-1of3.patch
Patch851: gdb-gnat-dwarf-crash-2of3.patch
Patch852: gdb-gnat-dwarf-crash-3of3.patch
%if 0%{!?rhel:1} || 0%{?rhel} > 6
# RL_STATE_FEDORA_GDB would not be found for:
@ -649,7 +666,10 @@ ExclusiveArch: noarch i386 x86_64 ppc ppc64 ia64 s390 s390x
BuildRequires: sharutils dejagnu
# gcc-objc++ is not covered by the GDB testsuite.
BuildRequires: gcc gcc-c++ gcc-gfortran gcc-java gcc-objc
BuildRequires: gcc gcc-c++ gcc-gfortran gcc-objc
%if 0%{!?rhel:1} || 0%{?rhel} < 7
BuildRequires: gcc-java libgcj%{bits_local} libgcj%{bits_other}
%endif
%if 0%{!?rhel:1} || 0%{?rhel} > 6
BuildRequires: gcc-go
%endif
@ -680,7 +700,6 @@ BuildRequires: glibc-devel%{bits_local} glibc-devel%{bits_other}
BuildRequires: libgcc%{bits_local} libgcc%{bits_other}
# libstdc++-devel of matching bits is required only for g++ -static.
BuildRequires: libstdc++%{bits_local} libstdc++%{bits_other}
BuildRequires: libgcj%{bits_local} libgcj%{bits_other}
%if 0%{!?rhel:1} || 0%{?rhel} > 6
BuildRequires: libgo-devel%{bits_local} libgo-devel%{bits_other}
%endif
@ -906,8 +925,14 @@ find -name "*.info*"|xargs rm -f
%patch832 -p1
%patch834 -p1
%patch835 -p1
%patch838 -p1
%patch839 -p1
%patch840 -p1
%patch841 -p1
%patch843 -p1
%patch844 -p1
%patch845 -p1
%patch850 -p1
%patch851 -p1
%patch852 -p1
%patch836 -p1
%patch837 -p1
@ -942,9 +967,9 @@ find -name "*.orig" | xargs rm -f
# Change the version that gets printed at GDB startup, so it is RH specific.
cat > gdb/version.in << _FOO
%if 0%{!?rhel:1}
Fedora (%{version}-%{release})
Fedora %{version}-%{release}
%else # !0%{!?rhel:1}
Red Hat Enterprise Linux (%{version}-%{release})
Red Hat Enterprise Linux %{version}-%{release}
%endif # !0%{!?rhel:1}
_FOO
@ -1055,6 +1080,7 @@ $(: It breaks RHEL-5 by %{_target_platform} being noarch-redhat-linux-gnu ) \
%ifarch noarch
$(:)
%else
--enable-targets=s390-linux-gnu,powerpc-linux-gnu \
%{_target_platform}
%endif
%endif
@ -1252,8 +1278,8 @@ done
%endif # 0%{?_enable_debug_packages:1} && 0%{!?_without_python:1}
mkdir $RPM_BUILD_ROOT%{_datadir}/gdb/auto-load
%if 0%{?rhel:1} && 0%{?rhel} <= 6
%if 0%{!?_without_python:1}
%if 0%{?rhel:1} && 0%{?rhel} <= 6
# Temporarily now:
for LIB in lib lib64;do
LIBPATH="$RPM_BUILD_ROOT%{_datadir}/gdb/auto-load%{_root_prefix}/$LIB"
@ -1275,8 +1301,15 @@ for i in `find $RPM_BUILD_ROOT%{_datadir}/gdb/python -name "*.py"` \
# Files come from gdb-archer.patch and can be also further patched.
touch -r $RPM_BUILD_DIR/%{gdb_src}/gdb/ChangeLog $i
done
%else # 0%{!?rhel:1} || 0%{?rhel} > 6
# BZ 999645: /usr/share/gdb/auto-load/ needs filesystem symlinks
mkdir -p $RPM_BUILD_ROOT%{_datadir}/gdb/auto-load
for i in $(echo bin lib $(basename %{_libdir}) sbin|tr ' ' '\n'|sort -u);do
ln -s $(echo %{_root_prefix}|sed 's#^/*##')/$i \
$RPM_BUILD_ROOT%{_datadir}/gdb/auto-load/$i
done
%endif # 0%{!?rhel:1} || 0%{?rhel} > 6
%endif # 0%{!?_without_python:1}
%endif # 0%{?rhel:1} && 0%{?rhel} <= 6
# gdb-add-index cannot be run even for SCL package on RHEL<=6.
%if 0%{?rhel:1} && 0%{?rhel} <= 6
@ -1382,6 +1415,18 @@ rm -rf $RPM_BUILD_ROOT
%endif # %{have_inproctrace}
%endif
%pre
for i in $(echo bin lib $(basename %{_libdir}) sbin|tr ' ' '\n'|sort -u);do
src="%{_datadir}/gdb/auto-load/$i"
dst="%{_datadir}/gdb/auto-load/%{_root_prefix}/$i"
if test -d $src -a ! -L $src;then
if ! rmdir 2>/dev/null $src;then
mv -n $src/* $dst/
rmdir $src
fi
fi
done
# It would break RHEL-5 by leaving excessive files for the doc subpackage.
%endif # !noarch
%if 0%{!?el5:1} || "%{_target_cpu}" == "noarch"
@ -1417,6 +1462,66 @@ fi
%endif # 0%{!?el5:1} || "%{_target_cpu}" == "noarch"
%changelog
* Mon Feb 24 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.1-50.fc19
- Fix crash of -readnow /usr/lib/debug/usr/bin/gnatbind.debug (BZ 1069211).
* Thu Jan 23 2014 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.1-49.fc19
- [s390*,ppc*] Enable secondary targets s390* and ppc* (BZ 1056259).
* Wed Dec 25 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.1-48.fc19
- [aarch64] Backport two breakpoint/watchpoint fixes.
* Mon Nov 18 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.1-47.fc19
- [rhel7] [--with testsuite] Remove gcc-java&co. BuildRequires.
* Sat Nov 9 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.1-46.fc19
- Fix explicit Class:: inside class scope (BZ 874817, Keith Seitz).
* Tue Nov 5 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.1-45.fc19
- [aarch64] Backport two fixes (BZ 1026484).
* Sun Nov 3 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.1-44.fc19
- Fix %{_bindir}gdb-add-index to also use -iex 'set auto-load no'.
* Wed Oct 30 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.1-43.fc19
- [rhel5] Fix /etc/gdbinit compatibility with python-2.4.
* Mon Sep 30 2013 Sergio Durigan Junior <sergiodj@redhat.com> - 7.6.1-42.fc19
- Fix the case when GDB leaks memory because value_struct_elt does not call
check_typedef. (Doug Evans, BZ 15695, filed as RH BZ 1013453).
* Mon Sep 9 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.1-41.fc19
- Fix the version string to be GNU standards compliant (BZ 1004949).
* Sat Aug 31 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.1-40.fc19
- Remove --disablerepo='*' from BZ 554152 as it conflicts with BZ 981154.
- [ppc] Support Power8 CPU (IBM, BZ 731875).
- [rhel5] tps-srpmtest does not set %%{rhel} (BZ 1002198, Miroslav Franc).
* Fri Aug 30 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.1-39.fc19
- Load /etc/gdbinit.d/*.{gdb,py} files automatically (BZ 981520).
* Fri Aug 30 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6.1-38.fc19
- Rebase to FSF GDB 7.6.1.
* Fri Aug 30 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-37.fc19
- Fix false warnings of new %%pre during future upgrades (BZ 999645).
* Fri Aug 30 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-36.fc19
- New %%pre to fix failed upgrade of the previous commit (BZ 999645).
* Wed Aug 28 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-35.fc19
- Fix /usr/share/gdb/auto-load/ need of filesystem symlinks (BZ 999645).
It needs: yum remove gdb-heap; yum reinstall gdb; yum install gdb-heap
* Tue Aug 6 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-34.fc19
- Make the previous commit rpm buildable.
* Tue Aug 6 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-33.fc19
- Fix yum install command when the binary RPM is missing (BZ 981154).
- Fix crash on 'enable count' (Simon Marchi, BZ 993118).
- Fix the changlog entry formatting for 6.3.0.0-0.1.
* Mon Jun 10 2013 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.6-32.fc19
- [scl] Disable Python frame filters on scl.
- Update libraries opening performance fix from upstream.
@ -3744,8 +3849,8 @@ prelink base addresses. Fixes BZ 175075, BZ 190545.
- Enable PPC CFI, remove merged ppc patches.
* Wed Jan 12 2005 Elena Zannoni <ezannoni@redhat.com> - 6.3.0.0-0.1
Andrew Cagney <cagney@redhat.com>
Jeff Johnston <jjohnstn@redhat.com>
- commit co-authors Andrew Cagney <cagney@redhat.com> and
Jeff Johnston <jjohnstn@redhat.com>.
- Various fixes to complete the import and merge.
* Wed Dec 01 2004 Andrew Cagney <cagney@redhat.com> - 6.3.0.0

11
gdbinit
View File

@ -1,4 +1,9 @@
# System-wide GDB initialization file.
# FIXME: provide a wildcard.
source %{_sysconfdir}/gdbinit.d/gdb-heap.py
python
import glob
# glob.iglob is not available in python-2.4 (RHEL-5).
for f in glob.glob('%{_sysconfdir}/gdbinit.d/*.gdb'):
gdb.execute('source %s' % f)
for f in glob.glob('%{_sysconfdir}/gdbinit.d/*.py'):
gdb.execute('source %s' % f)
end

View File

@ -1,2 +1,2 @@
4981307aa9619bbec5b73261e4e41c8d gdb-libstdc++-v3-python-r155978.tar.bz2
fda57170e4d11cdde74259ca575412a8 gdb-7.6.tar.bz2
fbc4dab4181e6e9937075b43a4ce2732 gdb-7.6.1.tar.bz2