Blame gdb-7.6.patch

Packit Service 501009
Packit Service 501009
# When this file is updated in an existing source tree, it gets re-applied
Packit Service 501009
# during the next build using "patch -N --fuzz=0", which ignores patches
Packit Service 501009
# that have already been applied.  However, if a gdb file has been modified
Packit Service 501009
# multiple times, the subsequent patching may fail to recognize that a 
Packit Service 501009
# given patch has been previously applied, and will attempt to re-apply it.
Packit Service 501009
# To prevent any uninintended consequences, this file also acts as a 
Packit Service 501009
# shell script that can restore any gdb file to its original state prior 
Packit Service 501009
# to all subsequent patch applications.  
Packit Service 501009
Packit Service 501009
# The gdb-7.6-ppc64le-support.patch will have modified both files below
Packit Service 501009
# during the initial build, so continue previous behavior.
Packit Service 501009
Packit Service 501009
if [ "$1" = "PPC64" ]
Packit Service 501009
then
Packit Service 501009
  exit 0
Packit Service 501009
fi
Packit Service 501009
 
Packit Service 501009
tar xvzmf gdb-7.6.tar.gz \
Packit Service 501009
	gdb-7.6/gdb/symtab.c \
Packit Service 501009
	gdb-7.6/gdb/printcmd.c
Packit Service 501009
Packit Service 501009
exit 0
Packit Service 501009
Packit Service 501009
--- gdb-7.6/libiberty/Makefile.in.orig
Packit Service 501009
+++ gdb-7.6/libiberty/Makefile.in
Packit Service 501009
@@ -175,6 +175,7 @@ REQUIRED_OFILES =							\
Packit Service 501009
 	./getruntime.$(objext) ./hashtab.$(objext) ./hex.$(objext)	\
Packit Service 501009
 	./lbasename.$(objext) ./lrealpath.$(objext)			\
Packit Service 501009
 	./make-relative-prefix.$(objext) ./make-temp-file.$(objext)	\
Packit Service 501009
+	./mkstemps.$(objext)						\
Packit Service 501009
 	./objalloc.$(objext)						\
Packit Service 501009
 	./obstack.$(objext)						\
Packit Service 501009
 	./partition.$(objext) ./pexecute.$(objext) ./physmem.$(objext)	\
Packit Service 501009
@@ -206,7 +207,7 @@ CONFIGURED_OFILES = ./asprintf.$(objext)
Packit Service 501009
 	./index.$(objext) ./insque.$(objext)				\
Packit Service 501009
 	./memchr.$(objext) ./memcmp.$(objext) ./memcpy.$(objext) 	\
Packit Service 501009
 	./memmem.$(objext) ./memmove.$(objext)				\
Packit Service 501009
-	 ./mempcpy.$(objext) ./memset.$(objext) ./mkstemps.$(objext)	\
Packit Service 501009
+	 ./mempcpy.$(objext) ./memset.$(objext) 			\
Packit Service 501009
 	./pex-djgpp.$(objext) ./pex-msdos.$(objext)			\
Packit Service 501009
 	 ./pex-unix.$(objext) ./pex-win32.$(objext)			\
Packit Service 501009
 	 ./putenv.$(objext)						\
Packit Service 501009
--- gdb-7.6/opcodes/i386-dis.c.orig
Packit Service 501009
+++ gdb-7.6/opcodes/i386-dis.c
Packit Service 501009
@@ -11510,6 +11510,10 @@ print_insn (bfd_vma pc, disassemble_info
Packit Service 501009
       threebyte = *++codep;
Packit Service 501009
       dp = &dis386_twobyte[threebyte];
Packit Service 501009
       need_modrm = twobyte_has_modrm[*codep];
Packit Service 501009
+      if (dp->name && ((strcmp(dp->name, "ud2a") == 0) || (strcmp(dp->name, "ud2") == 0))) {
Packit Service 501009
+        extern int kernel_BUG_encoding_bytes(void);
Packit Service 501009
+        codep += kernel_BUG_encoding_bytes();
Packit Service 501009
+      }
Packit Service 501009
       codep++;
Packit Service 501009
     }
Packit Service 501009
   else
Packit Service 501009
--- gdb-7.6/gdb/dwarf2read.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/dwarf2read.c
Packit Service 501009
@@ -2670,7 +2670,11 @@ read_index_from_section (struct objfile
Packit Service 501009
      indices.  */
Packit Service 501009
   if (version < 4)
Packit Service 501009
     {
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+      static int warning_printed = 1;
Packit Service 501009
+#else
Packit Service 501009
       static int warning_printed = 0;
Packit Service 501009
+#endif
Packit Service 501009
       if (!warning_printed)
Packit Service 501009
 	{
Packit Service 501009
 	  warning (_("Skipping obsolete .gdb_index section in %s."),
Packit Service 501009
@@ -2689,7 +2693,11 @@ read_index_from_section (struct objfile
Packit Service 501009
      "set use-deprecated-index-sections on".  */
Packit Service 501009
   if (version < 6 && !deprecated_ok)
Packit Service 501009
     {
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+      static int warning_printed = 1;
Packit Service 501009
+#else
Packit Service 501009
       static int warning_printed = 0;
Packit Service 501009
+#endif
Packit Service 501009
       if (!warning_printed)
Packit Service 501009
 	{
Packit Service 501009
 	  warning (_("\
Packit Service 501009
--- gdb-7.6/gdb/amd64-linux-nat.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/amd64-linux-nat.c
Packit Service 501009
@@ -45,6 +45,17 @@
Packit Service 501009
 /* ezannoni-2003-07-09: I think this is fixed.  The extraneous defs have
Packit Service 501009
    been removed from ptrace.h in the kernel.  However, better safe than
Packit Service 501009
    sorry.  */
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+/*
Packit Service 501009
+ * When compiling within a 2.6.25-based Fedora build environment with
Packit Service 501009
+ * gcc 4.3, four new "typedef unsigned int u32;" declarations were
Packit Service 501009
+ * required due to a new ptrace_bts_config structure declaration in
Packit Service 501009
+ * "asm-x86/ptrace-abi.h" that used u32 members, but u32 is defined in
Packit Service 501009
+ * "asm-x86/types.h" within a __KERNEL__ section.  They've been changed
Packit Service 501009
+ * to __u32, but this patch remains for building in that environment.
Packit Service 501009
+ */
Packit Service 501009
+typedef unsigned int u32;
Packit Service 501009
+#endif
Packit Service 501009
 #include <asm/ptrace.h>
Packit Service 501009
 #include <sys/reg.h>
Packit Service 501009
 #include "gdb_proc_service.h"
Packit Service 501009
--- gdb-7.6/gdb/symfile.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/symfile.c
Packit Service 501009
@@ -693,7 +693,26 @@ default_symfile_offsets (struct objfile
Packit Service 501009
       for (cur_sec = abfd->sections; cur_sec != NULL; cur_sec = cur_sec->next)
Packit Service 501009
 	/* We do not expect this to happen; just skip this step if the
Packit Service 501009
 	   relocatable file has a section with an assigned VMA.  */
Packit Service 501009
-	if (bfd_section_vma (abfd, cur_sec) != 0)
Packit Service 501009
+	if (bfd_section_vma (abfd, cur_sec) != 0
Packit Service 501009
+           /*
Packit Service 501009
+            *  Kernel modules may have some non-zero VMAs, i.e., like the
Packit Service 501009
+            *  __ksymtab and __ksymtab_gpl sections in this example:
Packit Service 501009
+            *     
Packit Service 501009
+            *    Section Headers:
Packit Service 501009
+            *      [Nr] Name              Type             Address           Offset
Packit Service 501009
+            *           Size              EntSize          Flags  Link  Info  Align
Packit Service 501009
+            *      ...
Packit Service 501009
+            *      [ 8] __ksymtab         PROGBITS         0000000000000060  0000ad90
Packit Service 501009
+            *           0000000000000010  0000000000000000   A       0     0     16
Packit Service 501009
+            *      [ 9] .rela__ksymtab    RELA             0000000000000000  0000ada0
Packit Service 501009
+            *           0000000000000030  0000000000000018          43     8     8
Packit Service 501009
+            *      [10] __ksymtab_gpl     PROGBITS         0000000000000070  0000add0
Packit Service 501009
+            *           00000000000001a0  0000000000000000   A       0     0     16
Packit Service 501009
+            *      ...
Packit Service 501009
+            *
Packit Service 501009
+            *  but they should be treated as if they are NULL.
Packit Service 501009
+            */
Packit Service 501009
+	    && strncmp (bfd_get_section_name (abfd, cur_sec), "__k", 3) != 0)
Packit Service 501009
 	  break;
Packit Service 501009
 
Packit Service 501009
       if (cur_sec == NULL)
Packit Service 501009
@@ -1122,6 +1141,12 @@ symbol_file_add_with_addrs_or_offsets (b
Packit Service 501009
     error (_("Not confirmed."));
Packit Service 501009
 
Packit Service 501009
   objfile = allocate_objfile (abfd, flags | (mainline ? OBJF_MAINLINE : 0));
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  if (add_flags & SYMFILE_MAINLINE) {
Packit Service 501009
+    extern struct objfile *gdb_kernel_objfile;
Packit Service 501009
+    gdb_kernel_objfile = objfile;
Packit Service 501009
+  }
Packit Service 501009
+#endif
Packit Service 501009
 
Packit Service 501009
   if (parent)
Packit Service 501009
     add_separate_debug_objfile (objfile, parent);
Packit Service 501009
@@ -1484,6 +1509,9 @@ find_separate_debug_file (const char *di
Packit Service 501009
   VEC (char_ptr) *debugdir_vec;
Packit Service 501009
   struct cleanup *back_to;
Packit Service 501009
   int ix;
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  extern int check_specified_module_tree(char *, char *);
Packit Service 501009
+#endif
Packit Service 501009
 
Packit Service 501009
   /* Set I to max (strlen (canon_dir), strlen (dir)).  */
Packit Service 501009
   i = strlen (dir);
Packit Service 501009
@@ -1513,6 +1541,15 @@ find_separate_debug_file (const char *di
Packit Service 501009
   if (separate_debug_file_exists (debugfile, crc32, objfile))
Packit Service 501009
     return debugfile;
Packit Service 501009
 
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+{
Packit Service 501009
+  if (check_specified_module_tree(objfile->name, debugfile) &&
Packit Service 501009
+      separate_debug_file_exists(debugfile, crc32, objfile)) {
Packit Service 501009
+        return debugfile;
Packit Service 501009
+  }
Packit Service 501009
+}
Packit Service 501009
+#endif
Packit Service 501009
+
Packit Service 501009
   /* Then try in the global debugfile directories.
Packit Service 501009
 
Packit Service 501009
      Keep backward compatibility so that DEBUG_FILE_DIRECTORY being "" will
Packit Service 501009
@@ -1583,6 +1620,10 @@ find_separate_debug_file_by_debuglink (s
Packit Service 501009
   char *debugfile;
Packit Service 501009
   unsigned long crc32;
Packit Service 501009
   struct cleanup *cleanups;
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  char *name_copy;
Packit Service 501009
+  extern char *check_specified_kernel_debug_file();
Packit Service 501009
+#endif
Packit Service 501009
 
Packit Service 501009
   debuglink = get_debug_link_info (objfile, &crc32);
Packit Service 501009
 
Packit Service 501009
@@ -1635,6 +1676,12 @@ find_separate_debug_file_by_debuglink (s
Packit Service 501009
     }
Packit Service 501009
 
Packit Service 501009
   do_cleanups (cleanups);
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  if (debugfile == NULL) {
Packit Service 501009
+       name_copy = check_specified_kernel_debug_file();
Packit Service 501009
+       return (name_copy ? xstrdup(name_copy) : NULL);
Packit Service 501009
+  }
Packit Service 501009
+#endif
Packit Service 501009
   return debugfile;
Packit Service 501009
 }
Packit Service 501009
 
Packit Service 501009
@@ -2409,8 +2456,10 @@ add_symbol_file_command (char *args, int
Packit Service 501009
 	 so we can't determine what section names are valid.  */
Packit Service 501009
     }
Packit Service 501009
 
Packit Service 501009
+#ifndef CRASH_MERGE
Packit Service 501009
   if (from_tty && (!query ("%s", "")))
Packit Service 501009
     error (_("Not confirmed."));
Packit Service 501009
+#endif
Packit Service 501009
 
Packit Service 501009
   symbol_file_add (filename, from_tty ? SYMFILE_VERBOSE : 0,
Packit Service 501009
                    section_addrs, flags);
Packit Service 501009
@@ -3690,6 +3739,15 @@ bfd_byte *
Packit Service 501009
 symfile_relocate_debug_section (struct objfile *objfile,
Packit Service 501009
                                 asection *sectp, bfd_byte *buf)
Packit Service 501009
 {
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  /* Executable files have all the relocations already resolved.
Packit Service 501009
+   * Handle files linked with --emit-relocs.
Packit Service 501009
+   * http://sources.redhat.com/ml/gdb/2006-08/msg00137.html
Packit Service 501009
+   */
Packit Service 501009
+  bfd *abfd = objfile->obfd;
Packit Service 501009
+  if ((abfd->flags & EXEC_P) != 0)
Packit Service 501009
+    return NULL;
Packit Service 501009
+#endif
Packit Service 501009
   gdb_assert (objfile->sf->sym_relocate);
Packit Service 501009
 
Packit Service 501009
   return (*objfile->sf->sym_relocate) (objfile, sectp, buf);
Packit Service 501009
--- gdb-7.6/gdb/cli/cli-cmds.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/cli/cli-cmds.c
Packit Service 501009
@@ -466,6 +466,10 @@ show_script_ext_mode (struct ui_file *fi
Packit Service 501009
    If SEARCH_PATH is non-zero, and the file isn't found in cwd,
Packit Service 501009
    search for it in the source search path.  */
Packit Service 501009
 
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+static int crash_from_tty = 0;
Packit Service 501009
+#endif
Packit Service 501009
+
Packit Service 501009
 int
Packit Service 501009
 find_and_open_script (const char *script_file, int search_path,
Packit Service 501009
 		      FILE **streamp, char **full_pathp)
Packit Service 501009
@@ -508,6 +512,32 @@ find_and_open_script (const char *script
Packit Service 501009
       return 0;
Packit Service 501009
     }
Packit Service 501009
 
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  /*
Packit Service 501009
+   * Only allow trusted versions of .gdbinit files to be
Packit Service 501009
+   * sourced during session initialization.
Packit Service 501009
+   */
Packit Service 501009
+  if (crash_from_tty == -1)
Packit Service 501009
+    {
Packit Service 501009
+      struct stat statbuf;
Packit Service 501009
+      FILE *stream = *streamp;
Packit Service 501009
+      int fd = fileno (stream);
Packit Service 501009
+      if (fstat (fd, &statbuf) < 0)
Packit Service 501009
+        {
Packit Service 501009
+          perror_with_name (*full_pathp);
Packit Service 501009
+          fclose (stream);
Packit Service 501009
+          return 0;
Packit Service 501009
+        }
Packit Service 501009
+      if (statbuf.st_uid != getuid () || (statbuf.st_mode & S_IWOTH))
Packit Service 501009
+        {
Packit Service 501009
+          extern void untrusted_file(FILE *, char *);
Packit Service 501009
+          untrusted_file(NULL, *full_pathp);
Packit Service 501009
+          fclose (stream);
Packit Service 501009
+          return 0;
Packit Service 501009
+        }
Packit Service 501009
+    }
Packit Service 501009
+#endif
Packit Service 501009
+
Packit Service 501009
   return 1;
Packit Service 501009
 }
Packit Service 501009
 
Packit Service 501009
@@ -566,7 +596,11 @@ source_script_with_search (const char *f
Packit Service 501009
          If the source command was invoked interactively, throw an
Packit Service 501009
 	 error.  Otherwise (e.g. if it was invoked by a script),
Packit Service 501009
 	 silently ignore the error.  */
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+      if (from_tty > 0)
Packit Service 501009
+#else
Packit Service 501009
       if (from_tty)
Packit Service 501009
+#endif
Packit Service 501009
 	perror_with_name (file);
Packit Service 501009
       else
Packit Service 501009
 	return;
Packit Service 501009
@@ -589,7 +623,14 @@ source_script_with_search (const char *f
Packit Service 501009
 void
Packit Service 501009
 source_script (char *file, int from_tty)
Packit Service 501009
 {
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  crash_from_tty = from_tty;
Packit Service 501009
+#endif
Packit Service 501009
   source_script_with_search (file, from_tty, 0);
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  crash_from_tty = 0;
Packit Service 501009
+#endif
Packit Service 501009
+
Packit Service 501009
 }
Packit Service 501009
 
Packit Service 501009
 /* Return the source_verbose global variable to its previous state
Packit Service 501009
--- gdb-7.6/gdb/psymtab.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/psymtab.c
Packit Service 501009
@@ -305,10 +305,14 @@ find_pc_sect_psymtab (struct objfile *ob
Packit Service 501009
 		      struct minimal_symbol *msymbol)
Packit Service 501009
 {
Packit Service 501009
   struct partial_symtab *pst;
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  extern int gdb_line_number_callback(unsigned long, unsigned long, unsigned long);
Packit Service 501009
+#endif
Packit Service 501009
 
Packit Service 501009
   /* Try just the PSYMTABS_ADDRMAP mapping first as it has better granularity
Packit Service 501009
      than the later used TEXTLOW/TEXTHIGH one.  */
Packit Service 501009
 
Packit Service 501009
+#ifndef __i386__
Packit Service 501009
   if (objfile->psymtabs_addrmap != NULL)
Packit Service 501009
     {
Packit Service 501009
       pst = addrmap_find (objfile->psymtabs_addrmap, pc);
Packit Service 501009
@@ -343,6 +347,7 @@ find_pc_sect_psymtab (struct objfile *ob
Packit Service 501009
     }
Packit Service 501009
 
Packit Service 501009
  next:
Packit Service 501009
+#endif
Packit Service 501009
 
Packit Service 501009
   /* Existing PSYMTABS_ADDRMAP mapping is present even for PARTIAL_SYMTABs
Packit Service 501009
      which still have no corresponding full SYMTABs read.  But it is not
Packit Service 501009
@@ -361,7 +366,12 @@ find_pc_sect_psymtab (struct objfile *ob
Packit Service 501009
 
Packit Service 501009
 	best_pst = find_pc_sect_psymtab_closer (objfile, pc, section, pst,
Packit Service 501009
 						msymbol);
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+        if ((best_pst != NULL) &&
Packit Service 501009
+          gdb_line_number_callback(pc, pst->textlow, pst->texthigh))
Packit Service 501009
+#else
Packit Service 501009
 	if (best_pst != NULL)
Packit Service 501009
+#endif
Packit Service 501009
 	  return best_pst;
Packit Service 501009
       }
Packit Service 501009
 
Packit Service 501009
--- gdb-7.6/gdb/symtab.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/symtab.c
Packit Service 501009
@@ -1198,7 +1198,9 @@ demangle_for_lookup (const char *name, e
Packit Service 501009
    doesn't affect these calls since they are looking for a known
Packit Service 501009
    variable and thus can probably assume it will never hit the C++
Packit Service 501009
    code).  */
Packit Service 501009
-
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+static void gdb_bait_and_switch(char *, struct symbol *);
Packit Service 501009
+#endif
Packit Service 501009
 struct symbol *
Packit Service 501009
 lookup_symbol_in_language (const char *name, const struct block *block,
Packit Service 501009
 			   const domain_enum domain, enum language lang,
Packit Service 501009
@@ -1212,17 +1214,30 @@ lookup_symbol_in_language (const char *n
Packit Service 501009
 				 is_a_field_of_this);
Packit Service 501009
   do_cleanups (cleanup);
Packit Service 501009
 
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  if (returnval && (domain == VAR_DOMAIN))
Packit Service 501009
+	gdb_bait_and_switch((char *)modified_name, returnval);
Packit Service 501009
+#endif
Packit Service 501009
+
Packit Service 501009
   return returnval;
Packit Service 501009
 }
Packit Service 501009
 
Packit Service 501009
 /* Behave like lookup_symbol_in_language, but performed with the
Packit Service 501009
    current language.  */
Packit Service 501009
 
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+static struct block *gdb_get_crash_block(void);
Packit Service 501009
+#endif
Packit Service 501009
+
Packit Service 501009
 struct symbol *
Packit Service 501009
 lookup_symbol (const char *name, const struct block *block,
Packit Service 501009
 	       domain_enum domain,
Packit Service 501009
 	       struct field_of_this_result *is_a_field_of_this)
Packit Service 501009
 {
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  if (!block)
Packit Service 501009
+    block = gdb_get_crash_block();
Packit Service 501009
+#endif
Packit Service 501009
   return lookup_symbol_in_language (name, block, domain,
Packit Service 501009
 				    current_language->la_language,
Packit Service 501009
 				    is_a_field_of_this);
Packit Service 501009
@@ -5100,3 +5115,662 @@ When enabled, debugging messages are pri
Packit Service 501009
 
Packit Service 501009
   observer_attach_executable_changed (symtab_observer_executable_changed);
Packit Service 501009
 }
Packit Service 501009
+
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+#include "gdb-stabs.h"
Packit Service 501009
+#include "version.h"
Packit Service 501009
+#define GDB_COMMON
Packit Service 501009
+#include "../../defs.h"
Packit Service 501009
+
Packit Service 501009
+static void get_member_data(struct gnu_request *, struct type *);
Packit Service 501009
+static void dump_enum(struct type *, struct gnu_request *);
Packit Service 501009
+static void eval_enum(struct type *, struct gnu_request *);
Packit Service 501009
+static void gdb_get_line_number(struct gnu_request *);
Packit Service 501009
+static void gdb_get_datatype(struct gnu_request *);
Packit Service 501009
+static void gdb_get_symbol_type(struct gnu_request *);
Packit Service 501009
+static void gdb_command_exists(struct gnu_request *);
Packit Service 501009
+static void gdb_debug_command(struct gnu_request *);
Packit Service 501009
+static void gdb_function_numargs(struct gnu_request *);
Packit Service 501009
+static void gdb_add_symbol_file(struct gnu_request *);
Packit Service 501009
+static void gdb_delete_symbol_file(struct gnu_request *);
Packit Service 501009
+static void gdb_patch_symbol_values(struct gnu_request *);
Packit Service 501009
+extern void replace_ui_file_FILE(struct ui_file *, FILE *);
Packit Service 501009
+static void get_user_print_option_address(struct gnu_request *);
Packit Service 501009
+extern int get_frame_offset(CORE_ADDR);
Packit Service 501009
+static void gdb_set_crash_block(struct gnu_request *);
Packit Service 501009
+void gdb_command_funnel(struct gnu_request *);
Packit Service 501009
+
Packit Service 501009
+struct objfile *gdb_kernel_objfile = { 0 };
Packit Service 501009
+
Packit Service 501009
+static ulong gdb_merge_flags = 0;
Packit Service 501009
+#define KERNEL_SYMBOLS_PATCHED (0x1)
Packit Service 501009
+
Packit Service 501009
+#undef STREQ
Packit Service 501009
+#define STREQ(A, B)      (A && B && (strcmp(A, B) == 0))
Packit Service 501009
+
Packit Service 501009
+/*
Packit Service 501009
+ *  All commands from above come through here.
Packit Service 501009
+ */
Packit Service 501009
+void
Packit Service 501009
+gdb_command_funnel(struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+        struct symbol *sym;
Packit Service 501009
+
Packit Service 501009
+	if (req->command != GNU_VERSION) {
Packit Service 501009
+        	replace_ui_file_FILE(gdb_stdout, req->fp);
Packit Service 501009
+        	replace_ui_file_FILE(gdb_stderr, req->fp);
Packit Service 501009
+		do_cleanups(all_cleanups());
Packit Service 501009
+	}
Packit Service 501009
+
Packit Service 501009
+	switch (req->command)
Packit Service 501009
+	{
Packit Service 501009
+	case GNU_VERSION:
Packit Service 501009
+		req->buf = (char *)version;
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+        case GNU_PASS_THROUGH:
Packit Service 501009
+                execute_command(req->buf, 
Packit Service 501009
+			req->flags & GNU_FROM_TTY_OFF ? FALSE : TRUE); 
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	case GNU_USER_PRINT_OPTION:
Packit Service 501009
+		get_user_print_option_address(req);
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	case GNU_RESOLVE_TEXT_ADDR:
Packit Service 501009
+                sym = find_pc_function(req->addr);
Packit Service 501009
+                if (!sym || TYPE_CODE(sym->type) != TYPE_CODE_FUNC) 
Packit Service 501009
+                        req->flags |= GNU_COMMAND_FAILED;
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+        case GNU_DISASSEMBLE:
Packit Service 501009
+		if (req->addr2)
Packit Service 501009
+                	sprintf(req->buf, "disassemble 0x%lx 0x%lx", 
Packit Service 501009
+				req->addr, req->addr2); 
Packit Service 501009
+		else
Packit Service 501009
+                	sprintf(req->buf, "disassemble 0x%lx", req->addr); 
Packit Service 501009
+                execute_command(req->buf, TRUE);
Packit Service 501009
+                break;
Packit Service 501009
+
Packit Service 501009
+	case GNU_ADD_SYMBOL_FILE:
Packit Service 501009
+		gdb_add_symbol_file(req);
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	case GNU_DELETE_SYMBOL_FILE:
Packit Service 501009
+		gdb_delete_symbol_file(req);
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	case GNU_GET_LINE_NUMBER:
Packit Service 501009
+		gdb_get_line_number(req);
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	case GNU_GET_DATATYPE:
Packit Service 501009
+		gdb_get_datatype(req);
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	case GNU_GET_SYMBOL_TYPE:
Packit Service 501009
+		gdb_get_symbol_type(req);
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	case GNU_COMMAND_EXISTS:
Packit Service 501009
+		gdb_command_exists(req);
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	case GNU_ALPHA_FRAME_OFFSET:
Packit Service 501009
+		req->value = 0;
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	case GNU_FUNCTION_NUMARGS:
Packit Service 501009
+		gdb_function_numargs(req);
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	case GNU_DEBUG_COMMAND:
Packit Service 501009
+		gdb_debug_command(req);
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	case GNU_PATCH_SYMBOL_VALUES:
Packit Service 501009
+		gdb_patch_symbol_values(req);
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	case GNU_SET_CRASH_BLOCK:
Packit Service 501009
+		gdb_set_crash_block(req);
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	default:
Packit Service 501009
+		req->flags |= GNU_COMMAND_FAILED;
Packit Service 501009
+		break;
Packit Service 501009
+	}
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+/*
Packit Service 501009
+ *  Given a PC value, return the file and line number.
Packit Service 501009
+ */
Packit Service 501009
+static void
Packit Service 501009
+gdb_get_line_number(struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+        struct symtab_and_line sal;
Packit Service 501009
+	struct symbol *sym;
Packit Service 501009
+        CORE_ADDR pc;
Packit Service 501009
+
Packit Service 501009
+#define LASTCHAR(s)      (s[strlen(s)-1])
Packit Service 501009
+
Packit Service 501009
+	/*
Packit Service 501009
+	 * Prime the addrmap pump.
Packit Service 501009
+	 */
Packit Service 501009
+	if (req->name)
Packit Service 501009
+		sym = lookup_symbol(req->name, 0, VAR_DOMAIN, 0);
Packit Service 501009
+
Packit Service 501009
+        pc = req->addr;
Packit Service 501009
+
Packit Service 501009
+        sal = find_pc_line(pc, 0);
Packit Service 501009
+
Packit Service 501009
+	if (!sal.symtab) {
Packit Service 501009
+		req->buf[0] = '\0';
Packit Service 501009
+		return;
Packit Service 501009
+	}
Packit Service 501009
+
Packit Service 501009
+        if (sal.symtab->filename && sal.symtab->dirname) {
Packit Service 501009
+                if (sal.symtab->filename[0] == '/')
Packit Service 501009
+                        sprintf(req->buf, "%s: %d",
Packit Service 501009
+                                sal.symtab->filename, sal.line);
Packit Service 501009
+                else
Packit Service 501009
+                        sprintf(req->buf, "%s%s%s: %d",
Packit Service 501009
+                                sal.symtab->dirname,
Packit Service 501009
+                                LASTCHAR(sal.symtab->dirname) == '/' ? "" : "/",
Packit Service 501009
+                                sal.symtab->filename, sal.line);
Packit Service 501009
+        }
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+
Packit Service 501009
+/*
Packit Service 501009
+ *  General purpose routine for determining datatypes.
Packit Service 501009
+ */
Packit Service 501009
+
Packit Service 501009
+static void
Packit Service 501009
+gdb_get_datatype(struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+ 	register struct cleanup *old_chain = NULL;
Packit Service 501009
+  	register struct type *type;
Packit Service 501009
+	register struct type *typedef_type;
Packit Service 501009
+  	struct expression *expr;
Packit Service 501009
+	struct symbol *sym;
Packit Service 501009
+        register int i;
Packit Service 501009
+        struct field *nextfield;
Packit Service 501009
+	struct value *val;
Packit Service 501009
+
Packit Service 501009
+	if (gdb_CRASHDEBUG(2))
Packit Service 501009
+		console("gdb_get_datatype [%s] (a)\n", req->name);
Packit Service 501009
+
Packit Service 501009
+	req->typecode = TYPE_CODE_UNDEF;
Packit Service 501009
+
Packit Service 501009
+	/*
Packit Service 501009
+	 *  lookup_symbol() will pick up struct and union names.
Packit Service 501009
+	 */
Packit Service 501009
+	sym = lookup_symbol(req->name, 0, STRUCT_DOMAIN, 0);
Packit Service 501009
+	if (sym) {
Packit Service 501009
+                req->typecode = TYPE_CODE(sym->type);
Packit Service 501009
+                req->length = TYPE_LENGTH(sym->type);
Packit Service 501009
+		if (req->member)
Packit Service 501009
+			get_member_data(req, sym->type);
Packit Service 501009
+			
Packit Service 501009
+		if (TYPE_CODE(sym->type) == TYPE_CODE_ENUM) {
Packit Service 501009
+			if (req->flags & GNU_PRINT_ENUMERATORS) 
Packit Service 501009
+				dump_enum(sym->type, req);
Packit Service 501009
+		}
Packit Service 501009
+
Packit Service 501009
+		return;
Packit Service 501009
+	}
Packit Service 501009
+
Packit Service 501009
+	/*
Packit Service 501009
+	 *  Otherwise parse the expression.
Packit Service 501009
+	 */
Packit Service 501009
+	if (gdb_CRASHDEBUG(2))
Packit Service 501009
+		console("gdb_get_datatype [%s] (b)\n", req->name);
Packit Service 501009
+
Packit Service 501009
+        expr = parse_expression(req->name);
Packit Service 501009
+
Packit Service 501009
+        old_chain = make_cleanup(free_current_contents, &expr;;
Packit Service 501009
+
Packit Service 501009
+
Packit Service 501009
+	switch (expr->elts[0].opcode)
Packit Service 501009
+	{
Packit Service 501009
+	case OP_VAR_VALUE:
Packit Service 501009
+		if (gdb_CRASHDEBUG(2))
Packit Service 501009
+        		console("expr->elts[0].opcode: OP_VAR_VALUE\n");
Packit Service 501009
+		type = expr->elts[2].symbol->type;
Packit Service 501009
+		if (req->flags & GNU_VAR_LENGTH_TYPECODE) {
Packit Service 501009
+			req->typecode = TYPE_CODE(type);
Packit Service 501009
+			req->length = TYPE_LENGTH(type);
Packit Service 501009
+		}
Packit Service 501009
+		if (TYPE_CODE(type) == TYPE_CODE_ENUM) {
Packit Service 501009
+			req->typecode = TYPE_CODE(type);
Packit Service 501009
+			req->value = SYMBOL_VALUE(expr->elts[2].symbol);
Packit Service 501009
+			req->tagname = (char *)TYPE_TAG_NAME(type);
Packit Service 501009
+			if (!req->tagname) {
Packit Service 501009
+				val = evaluate_type(expr);
Packit Service 501009
+				eval_enum(value_type(val), req);
Packit Service 501009
+			}
Packit Service 501009
+		}
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+  	case OP_TYPE:
Packit Service 501009
+		if (gdb_CRASHDEBUG(2))
Packit Service 501009
+        		console("expr->elts[0].opcode: OP_TYPE\n");
Packit Service 501009
+    		type = expr->elts[1].type;
Packit Service 501009
+
Packit Service 501009
+		req->typecode = TYPE_CODE(type);
Packit Service 501009
+		req->length = TYPE_LENGTH(type);
Packit Service 501009
+
Packit Service 501009
+        	if (TYPE_CODE(type) == TYPE_CODE_TYPEDEF) {
Packit Service 501009
+			req->is_typedef = TYPE_CODE_TYPEDEF;
Packit Service 501009
+                	if ((typedef_type = check_typedef(type))) {
Packit Service 501009
+                        	req->typecode = TYPE_CODE(typedef_type);
Packit Service 501009
+                        	req->length = TYPE_LENGTH(typedef_type);
Packit Service 501009
+				type = typedef_type;
Packit Service 501009
+			}
Packit Service 501009
+		} 
Packit Service 501009
+
Packit Service 501009
+                if (TYPE_CODE(type) == TYPE_CODE_ENUM) {
Packit Service 501009
+			if (req->is_typedef)
Packit Service 501009
+                        if (req->flags & GNU_PRINT_ENUMERATORS) {
Packit Service 501009
+				if (req->is_typedef)
Packit Service 501009
+					fprintf_filtered(gdb_stdout,
Packit Service 501009
+						"typedef ");
Packit Service 501009
+                                dump_enum(type, req);
Packit Service 501009
+			}
Packit Service 501009
+		}
Packit Service 501009
+
Packit Service 501009
+                if (req->member) 
Packit Service 501009
+                	get_member_data(req, type); 
Packit Service 501009
+		
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	default:
Packit Service 501009
+		if (gdb_CRASHDEBUG(2))
Packit Service 501009
+			console("expr->elts[0].opcode: %d (?)\n",
Packit Service 501009
+				expr->elts[0].opcode);
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	} 
Packit Service 501009
+
Packit Service 501009
+        do_cleanups(old_chain);
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+/*
Packit Service 501009
+ *  More robust enum list dump that gdb's, showing the value of each
Packit Service 501009
+ *  identifier, each on its own line.
Packit Service 501009
+ */
Packit Service 501009
+static void
Packit Service 501009
+dump_enum(struct type *type, struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+	register int i;
Packit Service 501009
+	int len;
Packit Service 501009
+	int lastval;
Packit Service 501009
+
Packit Service 501009
+        len = TYPE_NFIELDS (type);
Packit Service 501009
+        lastval = 0;
Packit Service 501009
+	if (TYPE_TAG_NAME(type))
Packit Service 501009
+        	fprintf_filtered(gdb_stdout, 
Packit Service 501009
+			"enum %s {\n", TYPE_TAG_NAME (type));
Packit Service 501009
+	else
Packit Service 501009
+		fprintf_filtered(gdb_stdout, "enum {\n");
Packit Service 501009
+
Packit Service 501009
+        for (i = 0; i < len; i++) {
Packit Service 501009
+        	fprintf_filtered(gdb_stdout, "  %s", 
Packit Service 501009
+			TYPE_FIELD_NAME (type, i));
Packit Service 501009
+                if (lastval != TYPE_FIELD_BITPOS (type, i)) {
Packit Service 501009
+                	fprintf_filtered (gdb_stdout, " = %d",
Packit Service 501009
+                        	TYPE_FIELD_BITPOS (type, i));
Packit Service 501009
+                        lastval = TYPE_FIELD_BITPOS (type, i);
Packit Service 501009
+                } else
Packit Service 501009
+                        fprintf_filtered(gdb_stdout, " = %d", lastval);
Packit Service 501009
+                fprintf_filtered(gdb_stdout, "\n");
Packit Service 501009
+                lastval++;
Packit Service 501009
+        }
Packit Service 501009
+	if (TYPE_TAG_NAME(type))
Packit Service 501009
+		fprintf_filtered(gdb_stdout, "};\n");
Packit Service 501009
+	else
Packit Service 501009
+		fprintf_filtered(gdb_stdout, "} %s;\n", req->name);
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+/*
Packit Service 501009
+ *  Given an enum type with no tagname, determine its value.
Packit Service 501009
+ */
Packit Service 501009
+static void
Packit Service 501009
+eval_enum(struct type *type, struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+        register int i;
Packit Service 501009
+        int len;
Packit Service 501009
+        int lastval;
Packit Service 501009
+
Packit Service 501009
+        len = TYPE_NFIELDS (type);
Packit Service 501009
+        lastval = 0;
Packit Service 501009
+
Packit Service 501009
+        for (i = 0; i < len; i++) {
Packit Service 501009
+                if (lastval != TYPE_FIELD_BITPOS (type, i)) {
Packit Service 501009
+                        lastval = TYPE_FIELD_BITPOS (type, i);
Packit Service 501009
+                } 
Packit Service 501009
+		if (STREQ(TYPE_FIELD_NAME(type, i), req->name)) {
Packit Service 501009
+			req->tagname = "(unknown)";
Packit Service 501009
+			req->value = lastval;
Packit Service 501009
+			return;
Packit Service 501009
+		}
Packit Service 501009
+                lastval++;
Packit Service 501009
+        }
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+/*
Packit Service 501009
+ *  Walk through a struct type's list of fields looking for the desired
Packit Service 501009
+ *  member field, and when found, return its relevant data.
Packit Service 501009
+ */
Packit Service 501009
+static void
Packit Service 501009
+get_member_data(struct gnu_request *req, struct type *type)
Packit Service 501009
+{
Packit Service 501009
+	register short i;
Packit Service 501009
+	struct field *nextfield;
Packit Service 501009
+	short nfields;
Packit Service 501009
+	struct type *typedef_type;
Packit Service 501009
+
Packit Service 501009
+	req->member_offset = -1;
Packit Service 501009
+
Packit Service 501009
+	nfields = TYPE_MAIN_TYPE(type)->nfields;
Packit Service 501009
+	nextfield = TYPE_MAIN_TYPE(type)->flds_bnds.fields;
Packit Service 501009
+
Packit Service 501009
+        if (nfields == 0) {
Packit Service 501009
+		struct type *newtype;
Packit Service 501009
+                newtype = lookup_transparent_type(req->name);
Packit Service 501009
+                if (newtype) {
Packit Service 501009
+                        console("get_member_data(%s.%s): switching type from %lx to %lx\n", 
Packit Service 501009
+				req->name, req->member, type, newtype);
Packit Service 501009
+                	nfields = TYPE_MAIN_TYPE(newtype)->nfields;
Packit Service 501009
+                	nextfield = TYPE_MAIN_TYPE(newtype)->flds_bnds.fields;
Packit Service 501009
+		}
Packit Service 501009
+        }
Packit Service 501009
+
Packit Service 501009
+	for (i = 0; i < nfields; i++) {
Packit Service 501009
+		if (STREQ(req->member, nextfield->name)) {
Packit Service 501009
+			req->member_offset = nextfield->loc.bitpos;
Packit Service 501009
+			req->member_length = TYPE_LENGTH(nextfield->type);
Packit Service 501009
+			req->member_typecode = TYPE_CODE(nextfield->type);
Packit Service 501009
+			if ((req->member_typecode == TYPE_CODE_TYPEDEF) &&
Packit Service 501009
+			    (typedef_type = check_typedef(nextfield->type))) 
Packit Service 501009
+        			req->member_length = TYPE_LENGTH(typedef_type);
Packit Service 501009
+			return;
Packit Service 501009
+		}
Packit Service 501009
+		nextfield++;
Packit Service 501009
+	}
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+/*
Packit Service 501009
+ *  Check whether a command exists.  If it doesn't, the command will be 
Packit Service 501009
+ *  returned indirectly via the error_hook.
Packit Service 501009
+ */
Packit Service 501009
+static void
Packit Service 501009
+gdb_command_exists(struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+        extern struct cmd_list_element *cmdlist;
Packit Service 501009
+        register struct cmd_list_element *c;
Packit Service 501009
+
Packit Service 501009
+        req->value = FALSE;
Packit Service 501009
+        c = lookup_cmd(&req->name, cmdlist, "", 0, 1);
Packit Service 501009
+        req->value = TRUE;
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+static void
Packit Service 501009
+gdb_function_numargs(struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+        struct symbol *sym;
Packit Service 501009
+
Packit Service 501009
+        sym = find_pc_function(req->pc);
Packit Service 501009
+
Packit Service 501009
+        if (!sym || TYPE_CODE(sym->type) != TYPE_CODE_FUNC) {
Packit Service 501009
+                req->flags |= GNU_COMMAND_FAILED;
Packit Service 501009
+                return;
Packit Service 501009
+        }
Packit Service 501009
+
Packit Service 501009
+	req->value = (ulong)TYPE_NFIELDS(sym->type);
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+struct load_module *gdb_current_load_module = NULL;
Packit Service 501009
+
Packit Service 501009
+static void 
Packit Service 501009
+gdb_add_symbol_file(struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+	register struct objfile *loaded_objfile = NULL;
Packit Service 501009
+	register struct objfile *objfile;
Packit Service 501009
+	register struct minimal_symbol *m;
Packit Service 501009
+	struct load_module *lm;
Packit Service 501009
+	int external, subsequent, found;
Packit Service 501009
+	off_t offset;
Packit Service 501009
+	ulong value, adjusted;
Packit Service 501009
+	struct symbol *sym;
Packit Service 501009
+	struct expression *expr;
Packit Service 501009
+	struct cleanup *old_chain;
Packit Service 501009
+	int i;
Packit Service 501009
+        int allsect = 0;
Packit Service 501009
+        char *secname;
Packit Service 501009
+        char buf[80];
Packit Service 501009
+    
Packit Service 501009
+	gdb_current_load_module = lm = (struct load_module *)req->addr;
Packit Service 501009
+
Packit Service 501009
+	req->name = lm->mod_namelist;
Packit Service 501009
+	gdb_delete_symbol_file(req);
Packit Service 501009
+
Packit Service 501009
+	if ((lm->mod_flags & MOD_NOPATCH) == 0) {
Packit Service 501009
+	        for (i = 0 ; i < lm->mod_sections; i++) {
Packit Service 501009
+	            if (STREQ(lm->mod_section_data[i].name, ".text") &&
Packit Service 501009
+	                (lm->mod_section_data[i].flags & SEC_FOUND))
Packit Service 501009
+	                    allsect = 1;
Packit Service 501009
+	        }
Packit Service 501009
+	
Packit Service 501009
+	        if (!allsect) {
Packit Service 501009
+	            sprintf(req->buf, "add-symbol-file %s 0x%lx %s", lm->mod_namelist,
Packit Service 501009
+	                    lm->mod_text_start ? lm->mod_text_start : lm->mod_base,
Packit Service 501009
+			    lm->mod_flags & MOD_DO_READNOW ? "-readnow" : "");
Packit Service 501009
+		    if (lm->mod_data_start) {
Packit Service 501009
+	                    sprintf(buf, " -s .data 0x%lx", lm->mod_data_start);
Packit Service 501009
+	                    strcat(req->buf, buf);
Packit Service 501009
+		    }
Packit Service 501009
+		    if (lm->mod_bss_start) {
Packit Service 501009
+	                    sprintf(buf, " -s .bss 0x%lx", lm->mod_bss_start);
Packit Service 501009
+	                    strcat(req->buf, buf);
Packit Service 501009
+		    }
Packit Service 501009
+		    if (lm->mod_rodata_start) {
Packit Service 501009
+	                    sprintf(buf, " -s .rodata 0x%lx", lm->mod_rodata_start);
Packit Service 501009
+	                    strcat(req->buf, buf);
Packit Service 501009
+		    }
Packit Service 501009
+	        } else {
Packit Service 501009
+	            sprintf(req->buf, "add-symbol-file %s 0x%lx %s", lm->mod_namelist,
Packit Service 501009
+	                    lm->mod_text_start, lm->mod_flags & MOD_DO_READNOW ?
Packit Service 501009
+			    "-readnow" : "");
Packit Service 501009
+	            for (i = 0; i < lm->mod_sections; i++) {
Packit Service 501009
+	                    secname = lm->mod_section_data[i].name;
Packit Service 501009
+	                    if ((lm->mod_section_data[i].flags & SEC_FOUND) &&
Packit Service 501009
+	                        !STREQ(secname, ".text")) {
Packit Service 501009
+	                            sprintf(buf, " -s %s 0x%lx", secname,
Packit Service 501009
+	                                lm->mod_section_data[i].offset + lm->mod_base);
Packit Service 501009
+	                            strcat(req->buf, buf);
Packit Service 501009
+	                    }
Packit Service 501009
+	            }
Packit Service 501009
+	        }
Packit Service 501009
+	}
Packit Service 501009
+
Packit Service 501009
+	if (gdb_CRASHDEBUG(1))
Packit Service 501009
+            fprintf_filtered(gdb_stdout, "%s\n", req->buf);
Packit Service 501009
+
Packit Service 501009
+       	execute_command(req->buf, FALSE);
Packit Service 501009
+
Packit Service 501009
+        ALL_OBJFILES(objfile) {
Packit Service 501009
+		if (same_file(objfile->name, lm->mod_namelist)) {
Packit Service 501009
+                        loaded_objfile = objfile;
Packit Service 501009
+			break;
Packit Service 501009
+		}
Packit Service 501009
+        }
Packit Service 501009
+
Packit Service 501009
+	if (!loaded_objfile)
Packit Service 501009
+                req->flags |= GNU_COMMAND_FAILED;
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+static void
Packit Service 501009
+gdb_delete_symbol_file(struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+        register struct objfile *objfile;
Packit Service 501009
+
Packit Service 501009
+        ALL_OBJFILES(objfile) {
Packit Service 501009
+                if (STREQ(objfile->name, req->name) || 
Packit Service 501009
+		    same_file(objfile->name, req->name)) {
Packit Service 501009
+                	free_objfile(objfile);
Packit Service 501009
+			break;
Packit Service 501009
+                }
Packit Service 501009
+        }
Packit Service 501009
+
Packit Service 501009
+	if (gdb_CRASHDEBUG(2)) {
Packit Service 501009
+		fprintf_filtered(gdb_stdout, "current object files:\n");
Packit Service 501009
+		ALL_OBJFILES(objfile) 
Packit Service 501009
+			fprintf_filtered(gdb_stdout, "  %s\n", objfile->name); 
Packit Service 501009
+	}
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+/*
Packit Service 501009
+ *  Walk through all minimal_symbols, patching their values with the
Packit Service 501009
+ *  correct addresses.
Packit Service 501009
+ */
Packit Service 501009
+static void 
Packit Service 501009
+gdb_patch_symbol_values(struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+	struct minimal_symbol *msymbol;
Packit Service 501009
+	struct objfile *objfile;
Packit Service 501009
+
Packit Service 501009
+	req->name = PATCH_KERNEL_SYMBOLS_START;
Packit Service 501009
+	patch_kernel_symbol(req);
Packit Service 501009
+
Packit Service 501009
+	ALL_MSYMBOLS (objfile, msymbol)
Packit Service 501009
+	{
Packit Service 501009
+		req->name = (char *)msymbol->ginfo.name;
Packit Service 501009
+		req->addr = (ulong)(&SYMBOL_VALUE_ADDRESS(msymbol));
Packit Service 501009
+		if (!patch_kernel_symbol(req)) {
Packit Service 501009
+			req->flags |= GNU_COMMAND_FAILED;
Packit Service 501009
+			break;
Packit Service 501009
+		}
Packit Service 501009
+	}
Packit Service 501009
+
Packit Service 501009
+	req->name = PATCH_KERNEL_SYMBOLS_STOP;
Packit Service 501009
+	patch_kernel_symbol(req);
Packit Service 501009
+
Packit Service 501009
+	clear_symtab_users(0);
Packit Service 501009
+	gdb_merge_flags |= KERNEL_SYMBOLS_PATCHED;
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+static void
Packit Service 501009
+gdb_get_symbol_type(struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+        struct expression *expr;
Packit Service 501009
+        struct value *val;
Packit Service 501009
+        struct cleanup *old_chain = NULL;
Packit Service 501009
+        struct type *type;
Packit Service 501009
+	struct type *target_type;
Packit Service 501009
+
Packit Service 501009
+	req->typecode = TYPE_CODE_UNDEF;
Packit Service 501009
+
Packit Service 501009
+        expr = parse_expression (req->name);
Packit Service 501009
+        old_chain = make_cleanup (free_current_contents, &expr;;
Packit Service 501009
+        val = evaluate_type (expr);
Packit Service 501009
+
Packit Service 501009
+        type = value_type(val);
Packit Service 501009
+
Packit Service 501009
+	req->type_name = (char *)TYPE_MAIN_TYPE(type)->name;
Packit Service 501009
+	req->typecode = TYPE_MAIN_TYPE(type)->code;
Packit Service 501009
+	req->length = type->length;
Packit Service 501009
+	target_type = TYPE_MAIN_TYPE(type)->target_type;
Packit Service 501009
+
Packit Service 501009
+	if (target_type) {
Packit Service 501009
+		req->target_typename = (char *)TYPE_MAIN_TYPE(target_type)->name;
Packit Service 501009
+		req->target_typecode = TYPE_MAIN_TYPE(target_type)->code;
Packit Service 501009
+		req->target_length = target_type->length;
Packit Service 501009
+	}
Packit Service 501009
+
Packit Service 501009
+	if (req->member) 
Packit Service 501009
+		get_member_data(req, type);
Packit Service 501009
+
Packit Service 501009
+        do_cleanups (old_chain);
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+static void
Packit Service 501009
+gdb_debug_command(struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+/*
Packit Service 501009
+ *  Only necessary on "patched" kernel symbol sessions, and called only by
Packit Service 501009
+ *  lookup_symbol(), pull a symbol value bait-and-switch operation by altering
Packit Service 501009
+ *  either a data symbol's address value or a text symbol's block start address.
Packit Service 501009
+ */
Packit Service 501009
+static void
Packit Service 501009
+gdb_bait_and_switch(char *name, struct symbol *sym)
Packit Service 501009
+{
Packit Service 501009
+	struct minimal_symbol *msym;
Packit Service 501009
+	struct block *block;
Packit Service 501009
+
Packit Service 501009
+	if ((gdb_merge_flags & KERNEL_SYMBOLS_PATCHED) && 
Packit Service 501009
+	    (msym = lookup_minimal_symbol(name, NULL, gdb_kernel_objfile))) {
Packit Service 501009
+                if (sym->aclass == LOC_BLOCK) {
Packit Service 501009
+                        block = (struct block *)SYMBOL_BLOCK_VALUE(sym);
Packit Service 501009
+                        BLOCK_START(block) = SYMBOL_VALUE_ADDRESS(msym);
Packit Service 501009
+                } else 
Packit Service 501009
+                        SYMBOL_VALUE_ADDRESS(sym) = SYMBOL_VALUE_ADDRESS(msym);
Packit Service 501009
+	} 
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+#include "valprint.h"
Packit Service 501009
+
Packit Service 501009
+void
Packit Service 501009
+get_user_print_option_address(struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+	extern struct value_print_options user_print_options;
Packit Service 501009
+
Packit Service 501009
+	req->addr = 0;
Packit Service 501009
+
Packit Service 501009
+        if (strcmp(req->name, "output_format") == 0)
Packit Service 501009
+                req->addr = (ulong)&user_print_options.output_format;
Packit Service 501009
+        if (strcmp(req->name, "print_max") == 0)
Packit Service 501009
+                req->addr = (ulong)&user_print_options.print_max;
Packit Service 501009
+        if (strcmp(req->name, "prettyprint_structs") == 0)
Packit Service 501009
+                req->addr = (ulong)&user_print_options.prettyprint_structs;
Packit Service 501009
+        if (strcmp(req->name, "prettyprint_arrays") == 0)
Packit Service 501009
+                req->addr = (ulong)&user_print_options.prettyprint_arrays;
Packit Service 501009
+        if (strcmp(req->name, "repeat_count_threshold") == 0)
Packit Service 501009
+                req->addr = (ulong)&user_print_options.repeat_count_threshold;
Packit Service 501009
+        if (strcmp(req->name, "stop_print_at_null") == 0)
Packit Service 501009
+                req->addr = (ulong)&user_print_options.stop_print_at_null;
Packit Service 501009
+        if (strcmp(req->name, "output_radix") == 0)
Packit Service 501009
+                req->addr = (ulong)&output_radix;
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+CORE_ADDR crash_text_scope;
Packit Service 501009
+
Packit Service 501009
+static void 
Packit Service 501009
+gdb_set_crash_block(struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+	if (!req->addr) {  /* debug */
Packit Service 501009
+		crash_text_scope = 0;
Packit Service 501009
+		return;
Packit Service 501009
+	}
Packit Service 501009
+
Packit Service 501009
+	if ((req->addr2 = (ulong)block_for_pc(req->addr)))
Packit Service 501009
+		crash_text_scope = req->addr;
Packit Service 501009
+	else {
Packit Service 501009
+		crash_text_scope = 0;
Packit Service 501009
+		req->flags |= GNU_COMMAND_FAILED;
Packit Service 501009
+	}
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+static struct block *
Packit Service 501009
+gdb_get_crash_block(void)
Packit Service 501009
+{
Packit Service 501009
+	if (crash_text_scope)
Packit Service 501009
+		return block_for_pc(crash_text_scope);
Packit Service 501009
+	else
Packit Service 501009
+		return NULL;
Packit Service 501009
+}
Packit Service 501009
+#endif
Packit Service 501009
--- gdb-7.6/gdb/c-typeprint.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/c-typeprint.c
Packit Service 501009
@@ -1097,7 +1097,8 @@ c_type_print_base (struct type *type, st
Packit Service 501009
 		  fprintf_filtered (stream, "static ");
Packit Service 501009
 		c_print_type (TYPE_FIELD_TYPE (type, i),
Packit Service 501009
 			      TYPE_FIELD_NAME (type, i),
Packit Service 501009
-			      stream, show - 1, level + 4,
Packit Service 501009
+			      stream, strlen(TYPE_FIELD_NAME (type, i)) ?
Packit Service 501009
+			      show - 1 : show, level + 4,
Packit Service 501009
 			      &local_flags);
Packit Service 501009
 		if (!field_is_static (&TYPE_FIELD (type, i))
Packit Service 501009
 		    && TYPE_FIELD_PACKED (type, i))
Packit Service 501009
--- gdb-7.6/gdb/xml-syscall.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/xml-syscall.c
Packit Service 501009
@@ -38,7 +38,11 @@
Packit Service 501009
 static void
Packit Service 501009
 syscall_warn_user (void)
Packit Service 501009
 {
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  static int have_warned = 1;
Packit Service 501009
+#else
Packit Service 501009
   static int have_warned = 0;
Packit Service 501009
+#endif
Packit Service 501009
   if (!have_warned)
Packit Service 501009
     {
Packit Service 501009
       have_warned = 1;
Packit Service 501009
--- gdb-7.6/gdb/exceptions.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/exceptions.c
Packit Service 501009
@@ -218,6 +218,10 @@ exceptions_state_mc_action_iter_1 (void)
Packit Service 501009
 
Packit Service 501009
 /* Return EXCEPTION to the nearest containing catch_errors().  */
Packit Service 501009
 
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+void (*error_hook) (void) ATTRIBUTE_NORETURN;
Packit Service 501009
+#endif
Packit Service 501009
+
Packit Service 501009
 void
Packit Service 501009
 throw_exception (struct gdb_exception exception)
Packit Service 501009
 {
Packit Service 501009
@@ -225,6 +229,13 @@ throw_exception (struct gdb_exception ex
Packit Service 501009
   immediate_quit = 0;
Packit Service 501009
 
Packit Service 501009
   do_cleanups (all_cleanups ());
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  if (error_hook) {
Packit Service 501009
+	fprintf_filtered(gdb_stderr, "%s\n", exception.message);
Packit Service 501009
+	(*error_hook)();
Packit Service 501009
+  } else
Packit Service 501009
+	fprintf_filtered(gdb_stderr, "gdb called without error_hook: %s\n", exception.message);
Packit Service 501009
+#endif
Packit Service 501009
 
Packit Service 501009
   /* Jump to the containing catch_errors() call, communicating REASON
Packit Service 501009
      to that call via setjmp's return value.  Note that REASON can't
Packit Service 501009
--- gdb-7.6/gdb/valprint.h.orig
Packit Service 501009
+++ gdb-7.6/gdb/valprint.h
Packit Service 501009
@@ -152,11 +152,17 @@ extern void print_function_pointer_addre
Packit Service 501009
 					    struct gdbarch *gdbarch,
Packit Service 501009
 					    CORE_ADDR address,
Packit Service 501009
 					    struct ui_file *stream);
Packit Service 501009
-
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+extern int valprint_read_string (CORE_ADDR addr, int len, int width,
Packit Service 501009
+			unsigned int fetchlimit,
Packit Service 501009
+			enum bfd_endian byte_order, gdb_byte **buffer,
Packit Service 501009
+			int *bytes_read);
Packit Service 501009
+#else
Packit Service 501009
 extern int read_string (CORE_ADDR addr, int len, int width,
Packit Service 501009
 			unsigned int fetchlimit,
Packit Service 501009
 			enum bfd_endian byte_order, gdb_byte **buffer,
Packit Service 501009
 			int *bytes_read);
Packit Service 501009
+#endif
Packit Service 501009
 
Packit Service 501009
 extern void val_print_optimized_out (struct ui_file *stream);
Packit Service 501009
 
Packit Service 501009
--- gdb-7.6/gdb/target.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/target.c
Packit Service 501009
@@ -1779,6 +1779,13 @@ target_xfer_partial (struct target_ops *
Packit Service 501009
 int
Packit Service 501009
 target_read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
Packit Service 501009
 {
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  extern int gdb_readmem_callback(unsigned long, void *, int, int);
Packit Service 501009
+  if (gdb_readmem_callback(memaddr, (void *)myaddr, len, 0))
Packit Service 501009
+        return 0;
Packit Service 501009
+  else
Packit Service 501009
+	return EIO;
Packit Service 501009
+#endif
Packit Service 501009
   /* Dispatch to the topmost target, not the flattened current_target.
Packit Service 501009
      Memory accesses check target->to_has_(all_)memory, and the
Packit Service 501009
      flattened target doesn't inherit those.  */
Packit Service 501009
@@ -1814,6 +1821,13 @@ target_read_stack (CORE_ADDR memaddr, gd
Packit Service 501009
 int
Packit Service 501009
 target_write_memory (CORE_ADDR memaddr, const gdb_byte *myaddr, ssize_t len)
Packit Service 501009
 {
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  extern int gdb_readmem_callback(unsigned long, void *, int, int);
Packit Service 501009
+  if (gdb_readmem_callback(memaddr, (void *)myaddr, len, 1))
Packit Service 501009
+        return 0;
Packit Service 501009
+  else
Packit Service 501009
+        return EIO;
Packit Service 501009
+#endif
Packit Service 501009
   /* Dispatch to the topmost target, not the flattened current_target.
Packit Service 501009
      Memory accesses check target->to_has_(all_)memory, and the
Packit Service 501009
      flattened target doesn't inherit those.  */
Packit Service 501009
--- gdb-7.6/gdb/printcmd.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/printcmd.c
Packit Service 501009
@@ -1001,11 +1001,62 @@ print_command_1 (char *exp, int voidprin
Packit Service 501009
 }
Packit Service 501009
 
Packit Service 501009
 static void
Packit Service 501009
+print_command_2 (char *exp, int inspect, int voidprint)
Packit Service 501009
+{
Packit Service 501009
+  struct expression *expr;
Packit Service 501009
+  struct cleanup *old_chain = 0;
Packit Service 501009
+  char format = 0;
Packit Service 501009
+  struct value *val;
Packit Service 501009
+  struct format_data fmt;
Packit Service 501009
+  int cleanup = 0;
Packit Service 501009
+
Packit Service 501009
+  if (exp && *exp == '/')
Packit Service 501009
+    {
Packit Service 501009
+      exp++;
Packit Service 501009
+      fmt = decode_format (&exp, last_format, 0);
Packit Service 501009
+      validate_format (fmt, "print");
Packit Service 501009
+      last_format = format = fmt.format;
Packit Service 501009
+    }
Packit Service 501009
+  else
Packit Service 501009
+    {
Packit Service 501009
+      fmt.count = 1;
Packit Service 501009
+      fmt.format = 0;
Packit Service 501009
+      fmt.size = 0;
Packit Service 501009
+      fmt.raw = 0;
Packit Service 501009
+    }
Packit Service 501009
+
Packit Service 501009
+  if (exp && *exp)
Packit Service 501009
+    {
Packit Service 501009
+      expr = parse_expression (exp);
Packit Service 501009
+      old_chain = make_cleanup (free_current_contents, &expr;;
Packit Service 501009
+      cleanup = 1;
Packit Service 501009
+      val = evaluate_expression (expr);
Packit Service 501009
+    }
Packit Service 501009
+  else
Packit Service 501009
+    val = access_value_history (0);
Packit Service 501009
+
Packit Service 501009
+    printf_filtered ("%d %d %d %d %d %d\n",
Packit Service 501009
+      TYPE_CODE (check_typedef(value_type (val))),
Packit Service 501009
+      TYPE_UNSIGNED (check_typedef(value_type (val))),
Packit Service 501009
+      TYPE_LENGTH (check_typedef(value_type(val))),
Packit Service 501009
+      value_offset (val), value_bitpos (val), value_bitsize(val));
Packit Service 501009
+
Packit Service 501009
+  if (cleanup)
Packit Service 501009
+    do_cleanups (old_chain);
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+static void
Packit Service 501009
 print_command (char *exp, int from_tty)
Packit Service 501009
 {
Packit Service 501009
   print_command_1 (exp, 1);
Packit Service 501009
 }
Packit Service 501009
 
Packit Service 501009
+static void
Packit Service 501009
+printm_command (char *exp, int from_tty)
Packit Service 501009
+{
Packit Service 501009
+  print_command_2 (exp, 0, 1);
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
 /* Same as print, except it doesn't print void results.  */
Packit Service 501009
 static void
Packit Service 501009
 call_command (char *exp, int from_tty)
Packit Service 501009
@@ -2593,6 +2644,12 @@ EXP may be preceded with /FMT, where FMT
Packit Service 501009
 but no count or size letter (see \"x\" command)."));
Packit Service 501009
   set_cmd_completer (c, expression_completer);
Packit Service 501009
   add_com_alias ("p", "print", class_vars, 1);
Packit Service 501009
+
Packit Service 501009
+  c = add_com ("printm", class_vars, printm_command, _("\
Packit Service 501009
+Similar to \"print\" command, but it used to print the type, size, offset,\n\
Packit Service 501009
+bitpos and bitsize of the expression EXP."));
Packit Service 501009
+  set_cmd_completer (c, expression_completer);
Packit Service 501009
+
Packit Service 501009
   add_com_alias ("inspect", "print", class_vars, 1);
Packit Service 501009
 
Packit Service 501009
   add_setshow_uinteger_cmd ("max-symbolic-offset", no_class,
Packit Service 501009
--- gdb-7.6/gdb/ui-file.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/ui-file.c
Packit Service 501009
@@ -671,6 +671,17 @@ gdb_fopen (char *name, char *mode)
Packit Service 501009
   return stdio_file_new (f, 1);
Packit Service 501009
 }
Packit Service 501009
 
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+void
Packit Service 501009
+replace_ui_file_FILE(struct ui_file *file, FILE *fp)
Packit Service 501009
+{
Packit Service 501009
+	struct stdio_file *stdio_file;
Packit Service 501009
+
Packit Service 501009
+	stdio_file = (struct stdio_file *)ui_file_data(file);
Packit Service 501009
+	stdio_file->file = fp;
Packit Service 501009
+}
Packit Service 501009
+#endif
Packit Service 501009
+
Packit Service 501009
 /* ``struct ui_file'' implementation that maps onto two ui-file objects.  */
Packit Service 501009
 
Packit Service 501009
 static ui_file_write_ftype tee_file_write;
Packit Service 501009
--- gdb-7.6/gdb/main.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/main.c
Packit Service 501009
@@ -806,7 +806,7 @@ captured_main (void *data)
Packit Service 501009
     {
Packit Service 501009
       print_gdb_version (gdb_stdout);
Packit Service 501009
       wrap_here ("");
Packit Service 501009
-      printf_filtered ("\n");
Packit Service 501009
+      printf_filtered ("\n\n");
Packit Service 501009
       exit (0);
Packit Service 501009
     }
Packit Service 501009
 
Packit Service 501009
@@ -853,6 +853,13 @@ captured_main (void *data)
Packit Service 501009
       }
Packit Service 501009
   }
Packit Service 501009
 
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+{
Packit Service 501009
+	extern void update_gdb_hooks(void);
Packit Service 501009
+	update_gdb_hooks();
Packit Service 501009
+}
Packit Service 501009
+#endif
Packit Service 501009
+
Packit Service 501009
   /* FIXME: cagney/2003-02-03: The big hack (part 2 of 2) that lets
Packit Service 501009
      GDB retain the old MI1 interpreter startup behavior.  Output the
Packit Service 501009
      copyright message after the interpreter is installed when it is
Packit Service 501009
@@ -880,7 +887,11 @@ captured_main (void *data)
Packit Service 501009
      processed; it sets global parameters, which are independent of
Packit Service 501009
      what file you are debugging or what directory you are in.  */
Packit Service 501009
   if (system_gdbinit && !inhibit_gdbinit)
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+    catch_command_errors (source_script, system_gdbinit, -1, RETURN_MASK_ALL);
Packit Service 501009
+#else
Packit Service 501009
     catch_command_errors (source_script, system_gdbinit, 0, RETURN_MASK_ALL);
Packit Service 501009
+#endif
Packit Service 501009
 
Packit Service 501009
   /* Read and execute $HOME/.gdbinit file, if it exists.  This is done
Packit Service 501009
      *before* all the command line arguments are processed; it sets
Packit Service 501009
@@ -888,7 +899,11 @@ captured_main (void *data)
Packit Service 501009
      debugging or what directory you are in.  */
Packit Service 501009
 
Packit Service 501009
   if (home_gdbinit && !inhibit_gdbinit && !inhibit_home_gdbinit)
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+    catch_command_errors (source_script, home_gdbinit, -1, RETURN_MASK_ALL);
Packit Service 501009
+#else
Packit Service 501009
     catch_command_errors (source_script, home_gdbinit, 0, RETURN_MASK_ALL);
Packit Service 501009
+#endif
Packit Service 501009
 
Packit Service 501009
   /* Process '-ix' and '-iex' options early.  */
Packit Service 501009
   for (i = 0; VEC_iterate (cmdarg_s, cmdarg_vec, i, cmdarg_p); i++)
Packit Service 501009
@@ -929,8 +944,12 @@ captured_main (void *data)
Packit Service 501009
          catch_command_errors returns non-zero on success!  */
Packit Service 501009
       if (catch_command_errors (exec_file_attach, execarg,
Packit Service 501009
 				!batch_flag, RETURN_MASK_ALL))
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+        catch_command_errors (symbol_file_add_main, symarg, 0, RETURN_MASK_ALL);
Packit Service 501009
+#else
Packit Service 501009
 	catch_command_errors (symbol_file_add_main, symarg,
Packit Service 501009
 			      !batch_flag, RETURN_MASK_ALL);
Packit Service 501009
+#endif
Packit Service 501009
     }
Packit Service 501009
   else
Packit Service 501009
     {
Packit Service 501009
@@ -992,8 +1011,12 @@ captured_main (void *data)
Packit Service 501009
 	{
Packit Service 501009
 	  auto_load_local_gdbinit_loaded = 1;
Packit Service 501009
 
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+          catch_command_errors (source_script, local_gdbinit, -1, RETURN_MASK_ALL);
Packit Service 501009
+#else
Packit Service 501009
 	  catch_command_errors (source_script, local_gdbinit, 0,
Packit Service 501009
 				RETURN_MASK_ALL);
Packit Service 501009
+#endif
Packit Service 501009
 	}
Packit Service 501009
     }
Packit Service 501009
 
Packit Service 501009
@@ -1039,6 +1062,12 @@ captured_main (void *data)
Packit Service 501009
   while (1)
Packit Service 501009
     {
Packit Service 501009
       catch_errors (captured_command_loop, 0, "", RETURN_MASK_ALL);
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+      {
Packit Service 501009
+        int console(char *, ...);
Packit Service 501009
+        console("<CAPTURED_MAIN WHILE LOOP>\n");
Packit Service 501009
+      }
Packit Service 501009
+#endif
Packit Service 501009
     }
Packit Service 501009
   /* No exit -- exit is through quit_command.  */
Packit Service 501009
 }
Packit Service 501009
@@ -1053,6 +1082,23 @@ gdb_main (struct captured_main_args *arg
Packit Service 501009
   return 1;
Packit Service 501009
 }
Packit Service 501009
 
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+/*
Packit Service 501009
+ *  NOTE: adapted from gdb.c, which is no longer built in; changed name of
Packit Service 501009
+ *        original main() to gdb_main_entry() for use as crash entry point
Packit Service 501009
+ */
Packit Service 501009
+int
Packit Service 501009
+gdb_main_entry (int argc, char **argv)
Packit Service 501009
+{
Packit Service 501009
+  struct captured_main_args args;
Packit Service 501009
+  memset (&args, 0, sizeof args);
Packit Service 501009
+  args.argc = argc;
Packit Service 501009
+  args.argv = argv;
Packit Service 501009
+  args.use_windows = 0;
Packit Service 501009
+  args.interpreter_p = INTERP_CONSOLE;
Packit Service 501009
+  return gdb_main (&args);
Packit Service 501009
+}
Packit Service 501009
+#endif
Packit Service 501009
 
Packit Service 501009
 /* Don't use *_filtered for printing help.  We don't want to prompt
Packit Service 501009
    for continue no matter how small the screen or how much we're going
Packit Service 501009
--- gdb-7.6/gdb/valprint.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/valprint.c
Packit Service 501009
@@ -1768,8 +1768,13 @@ partial_memory_read (CORE_ADDR memaddr,
Packit Service 501009
    this function instead?  */
Packit Service 501009
 
Packit Service 501009
 int
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+valprint_read_string (CORE_ADDR addr, int len, int width, unsigned int fetchlimit,
Packit Service 501009
+	     enum bfd_endian byte_order, gdb_byte **buffer, int *bytes_read)
Packit Service 501009
+#else
Packit Service 501009
 read_string (CORE_ADDR addr, int len, int width, unsigned int fetchlimit,
Packit Service 501009
 	     enum bfd_endian byte_order, gdb_byte **buffer, int *bytes_read)
Packit Service 501009
+#endif
Packit Service 501009
 {
Packit Service 501009
   int found_nul;		/* Non-zero if we found the nul char.  */
Packit Service 501009
   int errcode;			/* Errno returned from bad reads.  */
Packit Service 501009
@@ -2472,8 +2477,13 @@ val_print_string (struct type *elttype,
Packit Service 501009
   fetchlimit = (len == -1 ? options->print_max : min (len,
Packit Service 501009
 						      options->print_max));
Packit Service 501009
 
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  errcode = valprint_read_string (addr, len, width, fetchlimit, byte_order,
Packit Service 501009
+			 &buffer, &bytes_read);
Packit Service 501009
+#else
Packit Service 501009
   errcode = read_string (addr, len, width, fetchlimit, byte_order,
Packit Service 501009
 			 &buffer, &bytes_read);
Packit Service 501009
+#endif
Packit Service 501009
   old_chain = make_cleanup (xfree, buffer);
Packit Service 501009
 
Packit Service 501009
   addr += bytes_read;
Packit Service 501009
--- gdb-7.6/gdb/Makefile.in.orig
Packit Service 501009
+++ gdb-7.6/gdb/Makefile.in
Packit Service 501009
@@ -422,7 +422,7 @@ CONFIG_UNINSTALL = @CONFIG_UNINSTALL@
Packit Service 501009
 # It is also possible that you will need to add -I/usr/include/sys if
Packit Service 501009
 # your system doesn't have fcntl.h in /usr/include (which is where it
Packit Service 501009
 # should be according to Posix).
Packit Service 501009
-DEFS = @DEFS@
Packit Service 501009
+DEFS = -DCRASH_MERGE @DEFS@
Packit Service 501009
 GDB_CFLAGS = -I. -I$(srcdir) -I$(srcdir)/common -I$(srcdir)/config \
Packit Service 501009
 	-DLOCALEDIR="\"$(localedir)\"" $(DEFS)
Packit Service 501009
 
Packit Service 501009
@@ -934,7 +934,7 @@ COMMON_OBS = $(DEPFILES) $(CONFIG_OBS) $
Packit Service 501009
 
Packit Service 501009
 TSOBS = inflow.o
Packit Service 501009
 
Packit Service 501009
-SUBDIRS = doc @subdirs@ data-directory $(GNULIB_BUILDDIR)
Packit Service 501009
+SUBDIRS = build_no_subdirs
Packit Service 501009
 CLEANDIRS = $(SUBDIRS)
Packit Service 501009
 
Packit Service 501009
 # List of subdirectories in the build tree that must exist.
Packit Service 501009
@@ -969,8 +969,8 @@ generated_files = config.h observer.h ob
Packit Service 501009
 	$(COMPILE) $<
Packit Service 501009
 	$(POSTCOMPILE)
Packit Service 501009
 
Packit Service 501009
-all: gdb$(EXEEXT) $(CONFIG_ALL)
Packit Service 501009
-	@$(MAKE) $(FLAGS_TO_PASS) DO=all "DODIRS=`echo $(SUBDIRS) | sed 's/testsuite//'`" subdir_do
Packit Service 501009
+all: gdb$(EXEEXT)
Packit Service 501009
+	@$(MAKE) -s $(FLAGS_TO_PASS) DO=all "DODIRS=`echo $(SUBDIRS) | sed 's/testsuite//'`" subdir_do
Packit Service 501009
 
Packit Service 501009
 installcheck:
Packit Service 501009
 
Packit Service 501009
@@ -1172,15 +1172,16 @@ libgdb.a: $(LIBGDB_OBS)
Packit Service 501009
 
Packit Service 501009
 # Removing the old gdb first works better if it is running, at least on SunOS.
Packit Service 501009
 gdb$(EXEEXT): gdb.o $(LIBGDB_OBS) $(ADD_DEPS) $(CDEPS) $(TDEPLIBS)
Packit Service 501009
-	rm -f gdb$(EXEEXT)
Packit Service 501009
+	@rm -f gdb$(EXEEXT)
Packit Service 501009
+	@(cd ../..; make --no-print-directory GDB_FLAGS=-DGDB_7_6 library)
Packit Service 501009
 	$(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \
Packit Service 501009
-		-o gdb$(EXEEXT) gdb.o $(LIBGDB_OBS) \
Packit Service 501009
-		$(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES)
Packit Service 501009
+		-o $(shell /bin/cat mergeobj) $(LIBGDB_OBS) \
Packit Service 501009
+		$(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES) $(shell /bin/cat mergelibs)
Packit Service 501009
 
Packit Service 501009
 # Convenience rule to handle recursion.
Packit Service 501009
 $(LIBGNU) $(GNULIB_H): all-lib
Packit Service 501009
 all-lib: $(GNULIB_BUILDDIR)/Makefile
Packit Service 501009
-	@$(MAKE) $(FLAGS_TO_PASS) DO=all DODIRS=$(GNULIB_BUILDDIR) subdir_do
Packit Service 501009
+	@$(MAKE) $(FLAGS_TO_PASS) DO=all DODIRS=$(GNULIB_BUILDDIR) subdir_do -s
Packit Service 501009
 .PHONY: all-lib
Packit Service 501009
 
Packit Service 501009
 # Convenience rule to handle recursion.
Packit Service 501009
@@ -1389,12 +1390,12 @@ $(srcdir)/copying.c: @MAINTAINER_MODE_TR
Packit Service 501009
 	mv $(srcdir)/copying.tmp $(srcdir)/copying.c
Packit Service 501009
 
Packit Service 501009
 version.c: Makefile version.in
Packit Service 501009
-	rm -f version.c-tmp version.c
Packit Service 501009
-	echo '#include "version.h"' >> version.c-tmp
Packit Service 501009
-	echo 'const char version[] = "'"`sed q ${srcdir}/version.in`"'";' >> version.c-tmp
Packit Service 501009
-	echo 'const char host_name[] = "$(host_alias)";' >> version.c-tmp
Packit Service 501009
-	echo 'const char target_name[] = "$(target_alias)";' >> version.c-tmp
Packit Service 501009
-	mv version.c-tmp version.c
Packit Service 501009
+	@rm -f version.c-tmp version.c
Packit Service 501009
+	@echo '#include "version.h"' >> version.c-tmp
Packit Service 501009
+	@echo 'const char version[] = "'"`sed q ${srcdir}/version.in`"'";' >> version.c-tmp
Packit Service 501009
+	@echo 'const char host_name[] = "$(host_alias)";' >> version.c-tmp
Packit Service 501009
+	@echo 'const char target_name[] = "$(target_alias)";' >> version.c-tmp
Packit Service 501009
+	@mv version.c-tmp version.c
Packit Service 501009
 
Packit Service 501009
 observer.h: observer.sh doc/observer.texi
Packit Service 501009
 	${srcdir}/observer.sh h ${srcdir}/doc/observer.texi observer.h
Packit Service 501009
--- gdb-7.6/gdb/c-lang.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/c-lang.c
Packit Service 501009
@@ -307,7 +307,11 @@ c_get_string (struct value *value, gdb_b
Packit Service 501009
     {
Packit Service 501009
       CORE_ADDR addr = value_as_address (value);
Packit Service 501009
 
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+      err = valprint_read_string (addr, *length, width, fetchlimit,
Packit Service 501009
+#else
Packit Service 501009
       err = read_string (addr, *length, width, fetchlimit,
Packit Service 501009
+#endif
Packit Service 501009
 			 byte_order, buffer, length);
Packit Service 501009
       if (err)
Packit Service 501009
 	{
Packit Service 501009
--- gdb-7.6/readline/rltypedefs.h.orig
Packit Service 501009
+++ gdb-7.6/readline/rltypedefs.h
Packit Service 501009
@@ -31,10 +31,10 @@ extern "C" {
Packit Service 501009
 #if !defined (_FUNCTION_DEF)
Packit Service 501009
 #  define _FUNCTION_DEF
Packit Service 501009
 
Packit Service 501009
-typedef int Function ();
Packit Service 501009
-typedef void VFunction ();
Packit Service 501009
-typedef char *CPFunction ();
Packit Service 501009
-typedef char **CPPFunction ();
Packit Service 501009
+typedef int Function (void);
Packit Service 501009
+typedef void VFunction (void);
Packit Service 501009
+typedef char *CPFunction (void);
Packit Service 501009
+typedef char **CPPFunction (void);
Packit Service 501009
 
Packit Service 501009
 #endif /* _FUNCTION_DEF */
Packit Service 501009
 
Packit Service 501009
--- gdb-7.6/readline/readline.h.orig
Packit Service 501009
+++ gdb-7.6/readline/readline.h
Packit Service 501009
@@ -378,7 +378,7 @@ extern int rl_crlf PARAMS((void));
Packit Service 501009
 #if defined (USE_VARARGS) && defined (PREFER_STDARG)
Packit Service 501009
 extern int rl_message (const char *, ...)  __attribute__((__format__ (printf, 1, 2)));
Packit Service 501009
 #else
Packit Service 501009
-extern int rl_message ();
Packit Service 501009
+extern int rl_message (void);
Packit Service 501009
 #endif
Packit Service 501009
 
Packit Service 501009
 extern int rl_show_char PARAMS((int));
Packit Service 501009
--- gdb-7.6/readline/misc.c.orig
Packit Service 501009
+++ gdb-7.6/readline/misc.c
Packit Service 501009
@@ -405,7 +405,7 @@ _rl_history_set_point ()
Packit Service 501009
 
Packit Service 501009
 #if defined (VI_MODE)
Packit Service 501009
   if (rl_editing_mode == vi_mode && _rl_keymap != vi_insertion_keymap)
Packit Service 501009
-    rl_point = 0;
Packit Service 501009
+    rl_point = rl_end;
Packit Service 501009
 #endif /* VI_MODE */
Packit Service 501009
 
Packit Service 501009
   if (rl_editing_mode == emacs_mode)
Packit Service 501009
--- gdb-7.6/Makefile.in.orig
Packit Service 501009
+++ gdb-7.6/Makefile.in
Packit Service 501009
@@ -342,6 +342,9 @@ AR_FOR_BUILD = @AR_FOR_BUILD@
Packit Service 501009
 AS_FOR_BUILD = @AS_FOR_BUILD@
Packit Service 501009
 CC_FOR_BUILD = @CC_FOR_BUILD@
Packit Service 501009
 CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
Packit Service 501009
+ifeq (${CRASH_TARGET}, PPC64)
Packit Service 501009
+CFLAGS_FOR_BUILD += -m64 -fPIC
Packit Service 501009
+endif
Packit Service 501009
 CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
Packit Service 501009
 CXX_FOR_BUILD = @CXX_FOR_BUILD@
Packit Service 501009
 DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@
Packit Service 501009
@@ -407,6 +410,9 @@ GNATBIND = @GNATBIND@
Packit Service 501009
 GNATMAKE = @GNATMAKE@
Packit Service 501009
 
Packit Service 501009
 CFLAGS = @CFLAGS@
Packit Service 501009
+ifeq (${CRASH_TARGET}, PPC64)
Packit Service 501009
+CFLAGS += -m64 -fPIC
Packit Service 501009
+endif
Packit Service 501009
 LDFLAGS = @LDFLAGS@
Packit Service 501009
 LIBCFLAGS = $(CFLAGS)
Packit Service 501009
 CXXFLAGS = @CXXFLAGS@
Packit Service 501009
--- gdb-7.6/gdb/defs.h.orig
Packit Service 501009
+++ gdb-7.6/gdb/defs.h
Packit Service 501009
@@ -802,4 +802,8 @@ enum block_enum
Packit Service 501009
 
Packit Service 501009
 #include "utils.h"
Packit Service 501009
 
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+extern int gdb_main_entry(int, char **);
Packit Service 501009
+extern void replace_ui_file_FILE(struct ui_file *, FILE *);
Packit Service 501009
+#endif
Packit Service 501009
 #endif /* #ifndef DEFS_H */
Packit Service 501009
--- gdb-7.6/bfd/elflink.c.orig
Packit Service 501009
+++ gdb-7.6/bfd/elflink.c
Packit Service 501009
@@ -4730,7 +4730,7 @@ error_free_dyn:
Packit Service 501009
 	  struct elf_link_hash_entry *hlook;
Packit Service 501009
 	  asection *slook;
Packit Service 501009
 	  bfd_vma vlook;
Packit Service 501009
-	  size_t i, j, idx;
Packit Service 501009
+	  size_t i, j, idx = 0;
Packit Service 501009
 
Packit Service 501009
 	  hlook = weaks;
Packit Service 501009
 	  weaks = hlook->u.weakdef;
Packit Service 501009
--- gdb-7.6/gdb/s390-nat.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/s390-nat.c
Packit Service 501009
@@ -37,6 +37,8 @@
Packit Service 501009
 #include <sys/ucontext.h>
Packit Service 501009
 #include <elf.h>
Packit Service 501009
 
Packit Service 501009
+#include <sys/uio.h>
Packit Service 501009
+
Packit Service 501009
 #ifndef HWCAP_S390_HIGH_GPRS
Packit Service 501009
 #define HWCAP_S390_HIGH_GPRS 512
Packit Service 501009
 #endif
Packit Service 501009
--- gdb-7.6/gdb/printcmd.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/printcmd.c
Packit Service 501009
@@ -573,11 +573,21 @@ print_address_symbolic (struct gdbarch *
Packit Service 501009
   int unmapped = 0;
Packit Service 501009
   int offset = 0;
Packit Service 501009
   int line = 0;
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  extern int gdb_print_callback(unsigned long);
Packit Service 501009
+#endif
Packit Service 501009
 
Packit Service 501009
   /* Throw away both name and filename.  */
Packit Service 501009
   struct cleanup *cleanup_chain = make_cleanup (free_current_contents, &name);
Packit Service 501009
   make_cleanup (free_current_contents, &filename);
Packit Service 501009
 
Packit Service 501009
+#ifdef CRASH_MERGE
Packit Service 501009
+  if (!gdb_print_callback(addr)) {
Packit Service 501009
+	do_cleanups (cleanup_chain);
Packit Service 501009
+	return 0;
Packit Service 501009
+  }
Packit Service 501009
+#endif
Packit Service 501009
+
Packit Service 501009
   if (build_address_symbolic (gdbarch, addr, do_demangle, &name, &offset,
Packit Service 501009
 			      &filename, &line, &unmapped))
Packit Service 501009
     {
Packit Service 501009
--- gdb-7.6/bfd/bfd-in.h.orig
Packit Service 501009
+++ gdb-7.6/bfd/bfd-in.h
Packit Service 501009
@@ -294,9 +294,6 @@ typedef struct bfd_section *sec_ptr;
Packit Service 501009
 
Packit Service 501009
 #define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0)
Packit Service 501009
 
Packit Service 501009
-#define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (ptr)->lma = (val)), ((ptr)->user_set_vma = TRUE), TRUE)
Packit Service 501009
-#define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),TRUE)
Packit Service 501009
-#define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),TRUE)
Packit Service 501009
 /* Find the address one past the end of SEC.  */
Packit Service 501009
 #define bfd_get_section_limit(bfd, sec) \
Packit Service 501009
   (((bfd)->direction != write_direction && (sec)->rawsize != 0	\
Packit Service 501009
@@ -519,7 +516,6 @@ extern void warn_deprecated (const char
Packit Service 501009
 
Packit Service 501009
 #define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
Packit Service 501009
 
Packit Service 501009
-#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = bool), TRUE)
Packit Service 501009
 
Packit Service 501009
 extern bfd_boolean bfd_cache_close
Packit Service 501009
   (bfd *abfd);
Packit Service 501009
--- gdb-7.6/bfd/bfd-in2.h.orig
Packit Service 501009
+++ gdb-7.6/bfd/bfd-in2.h
Packit Service 501009
@@ -301,9 +301,6 @@ typedef struct bfd_section *sec_ptr;
Packit Service 501009
 
Packit Service 501009
 #define bfd_is_com_section(ptr) (((ptr)->flags & SEC_IS_COMMON) != 0)
Packit Service 501009
 
Packit Service 501009
-#define bfd_set_section_vma(bfd, ptr, val) (((ptr)->vma = (ptr)->lma = (val)), ((ptr)->user_set_vma = TRUE), TRUE)
Packit Service 501009
-#define bfd_set_section_alignment(bfd, ptr, val) (((ptr)->alignment_power = (val)),TRUE)
Packit Service 501009
-#define bfd_set_section_userdata(bfd, ptr, val) (((ptr)->userdata = (val)),TRUE)
Packit Service 501009
 /* Find the address one past the end of SEC.  */
Packit Service 501009
 #define bfd_get_section_limit(bfd, sec) \
Packit Service 501009
   (((bfd)->direction != write_direction && (sec)->rawsize != 0	\
Packit Service 501009
@@ -526,7 +523,6 @@ extern void warn_deprecated (const char
Packit Service 501009
 
Packit Service 501009
 #define bfd_get_symbol_leading_char(abfd) ((abfd)->xvec->symbol_leading_char)
Packit Service 501009
 
Packit Service 501009
-#define bfd_set_cacheable(abfd,bool) (((abfd)->cacheable = bool), TRUE)
Packit Service 501009
 
Packit Service 501009
 extern bfd_boolean bfd_cache_close
Packit Service 501009
   (bfd *abfd);
Packit Service 501009
@@ -1572,6 +1568,32 @@ struct relax_table {
Packit Service 501009
   int size;
Packit Service 501009
 };
Packit Service 501009
 
Packit Service 501009
+/* Note: the following are provided as inline functions rather than macros
Packit Service 501009
+   because not all callers use the return value.  A macro implementation
Packit Service 501009
+   would use a comma expression, eg: "((ptr)->foo = val, TRUE)" and some
Packit Service 501009
+   compilers will complain about comma expressions that have no effect.  */
Packit Service 501009
+static inline bfd_boolean
Packit Service 501009
+bfd_set_section_userdata (bfd * abfd ATTRIBUTE_UNUSED, asection * ptr, void * val)
Packit Service 501009
+{
Packit Service 501009
+  ptr->userdata = val;
Packit Service 501009
+  return TRUE;
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+static inline bfd_boolean
Packit Service 501009
+bfd_set_section_vma (bfd * abfd ATTRIBUTE_UNUSED, asection * ptr, bfd_vma val)
Packit Service 501009
+{
Packit Service 501009
+  ptr->vma = ptr->lma = val;
Packit Service 501009
+  ptr->user_set_vma = TRUE;
Packit Service 501009
+  return TRUE;
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+static inline bfd_boolean
Packit Service 501009
+bfd_set_section_alignment (bfd * abfd ATTRIBUTE_UNUSED, asection * ptr, unsigned int val)
Packit Service 501009
+{
Packit Service 501009
+  ptr->alignment_power = val;
Packit Service 501009
+  return TRUE;
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
 /* These sections are global, and are managed by BFD.  The application
Packit Service 501009
    and target back end are not permitted to change the values in
Packit Service 501009
    these sections.  */
Packit Service 501009
@@ -6095,6 +6117,14 @@ struct bfd
Packit Service 501009
   unsigned int selective_search : 1;
Packit Service 501009
 };
Packit Service 501009
 
Packit Service 501009
+/* See note beside bfd_set_section_userdata.  */
Packit Service 501009
+static inline bfd_boolean
Packit Service 501009
+bfd_set_cacheable (bfd * abfd, bfd_boolean val)
Packit Service 501009
+{
Packit Service 501009
+  abfd->cacheable = val;
Packit Service 501009
+  return TRUE;
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
 typedef enum bfd_error
Packit Service 501009
 {
Packit Service 501009
   bfd_error_no_error = 0,
Packit Service 501009
--- gdb-7.6/gdb/symtab.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/symtab.c
Packit Service 501009
@@ -5405,7 +5405,7 @@ dump_enum(struct type *type, struct gnu_
Packit Service 501009
 {
Packit Service 501009
 	register int i;
Packit Service 501009
 	int len;
Packit Service 501009
-	int lastval;
Packit Service 501009
+	long long lastval;
Packit Service 501009
 
Packit Service 501009
         len = TYPE_NFIELDS (type);
Packit Service 501009
         lastval = 0;
Packit Service 501009
@@ -5418,12 +5418,12 @@ dump_enum(struct type *type, struct gnu_
Packit Service 501009
         for (i = 0; i < len; i++) {
Packit Service 501009
         	fprintf_filtered(gdb_stdout, "  %s", 
Packit Service 501009
 			TYPE_FIELD_NAME (type, i));
Packit Service 501009
-                if (lastval != TYPE_FIELD_BITPOS (type, i)) {
Packit Service 501009
-                	fprintf_filtered (gdb_stdout, " = %d",
Packit Service 501009
-                        	TYPE_FIELD_BITPOS (type, i));
Packit Service 501009
-                        lastval = TYPE_FIELD_BITPOS (type, i);
Packit Service 501009
+                if (lastval != TYPE_FIELD_ENUMVAL (type, i)) {
Packit Service 501009
+                	fprintf_filtered (gdb_stdout, " = %s",
Packit Service 501009
+                        	plongest(TYPE_FIELD_ENUMVAL (type, i)));
Packit Service 501009
+                        lastval = TYPE_FIELD_ENUMVAL (type, i);
Packit Service 501009
                 } else
Packit Service 501009
-                        fprintf_filtered(gdb_stdout, " = %d", lastval);
Packit Service 501009
+                        fprintf_filtered(gdb_stdout, " = %s", plongest(lastval));
Packit Service 501009
                 fprintf_filtered(gdb_stdout, "\n");
Packit Service 501009
                 lastval++;
Packit Service 501009
         }
Packit Service 501009
--- gdb-7.6/gdb/aarch64-linux-nat.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/aarch64-linux-nat.c
Packit Service 501009
@@ -32,6 +32,7 @@
Packit Service 501009
 #include "elf/common.h"
Packit Service 501009
 
Packit Service 501009
 #include <sys/ptrace.h>
Packit Service 501009
+#include <asm/ptrace.h>
Packit Service 501009
 #include <sys/utsname.h>
Packit Service 501009
 
Packit Service 501009
 #include "gregset.h"
Packit Service 501009
--- gdb-7.6/sim/igen/Makefile.in.orig
Packit Service 501009
+++ gdb-7.6/sim/igen/Makefile.in
Packit Service 501009
@@ -117,7 +117,7 @@ IGEN_OBJS=\
Packit Service 501009
 	gen.o
Packit Service 501009
 
Packit Service 501009
 igen: igen.o $(IGEN_OBJS)
Packit Service 501009
-	$(CC_FOR_BUILD) $(BUILD_LDFLAGS) -o igen igen.o $(IGEN_OBJS) $(LIBIBERTY_LIB)
Packit Service 501009
+	$(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o igen igen.o $(IGEN_OBJS) $(LIBIBERTY_LIB)
Packit Service 501009
 
Packit Service 501009
 igen.o: igen.c misc.h filter_host.h lf.h table.h ld-decode.h ld-cache.h ld-insn.h filter.h gen-model.h gen-itable.h gen-icache.h gen-idecode.h gen-engine.h gen-semantics.h gen-support.h gen.h igen.h 
Packit Service 501009
 	$(CC_FOR_BUILD) $(BUILD_CFLAGS) -c $(srcdir)/igen.c
Packit Service 501009
--- gdb-7.6/sim/mips/cp1.c.orig
Packit Service 501009
+++ gdb-7.6/sim/mips/cp1.c
Packit Service 501009
@@ -1359,7 +1359,7 @@ fp_rsqrt2(sim_cpu *cpu,
Packit Service 501009
 /* Conversion operations.  */
Packit Service 501009
 
Packit Service 501009
 uword64
Packit Service 501009
-convert (sim_cpu *cpu,
Packit Service 501009
+sim_mips_convert (sim_cpu *cpu,
Packit Service 501009
 	 address_word cia,
Packit Service 501009
 	 int rm,
Packit Service 501009
 	 uword64 op,
Packit Service 501009
--- gdb-7.6/sim/mips/sim-main.h.orig
Packit Service 501009
+++ gdb-7.6/sim/mips/sim-main.h
Packit Service 501009
@@ -770,8 +770,8 @@ unsigned64 fp_nmadd (SIM_STATE, unsigned64 op1, unsigned64 op2,
Packit Service 501009
 unsigned64 fp_nmsub (SIM_STATE, unsigned64 op1, unsigned64 op2,
Packit Service 501009
 		     unsigned64 op3, FP_formats fmt);
Packit Service 501009
 #define NegMultiplySub(op1,op2,op3,fmt) fp_nmsub(SIM_ARGS, op1, op2, op3, fmt)
Packit Service 501009
-unsigned64 convert (SIM_STATE, int rm, unsigned64 op, FP_formats from, FP_formats to);
Packit Service 501009
-#define Convert(rm,op,from,to) convert (SIM_ARGS, rm, op, from, to)
Packit Service 501009
+unsigned64 sim_mips_convert (SIM_STATE, int rm, unsigned64 op, FP_formats from, FP_formats to);
Packit Service 501009
+#define Convert(rm,op,from,to) sim_mips_convert (SIM_ARGS, rm, op, from, to)
Packit Service 501009
 unsigned64 convert_ps (SIM_STATE, int rm, unsigned64 op, FP_formats from,
Packit Service 501009
 		       FP_formats to);
Packit Service 501009
 #define ConvertPS(rm,op,from,to) convert_ps (SIM_ARGS, rm, op, from, to)
Packit Service 501009
Packit Service 501009
--- gdb-7.6/readline/util.c
Packit Service 501009
+++ gdb-7.6/readline/util.c
Packit Service 501009
@@ -493,10 +493,13 @@ _rl_trace (va_alist)
Packit Service 501009
 
Packit Service 501009
   if (_rl_tracefp == 0)
Packit Service 501009
     _rl_tropen ();
Packit Service 501009
+  if (!_rl_tracefp)
Packit Service 501009
+    goto out;
Packit Service 501009
   vfprintf (_rl_tracefp, format, args);
Packit Service 501009
   fprintf (_rl_tracefp, "\n");
Packit Service 501009
   fflush (_rl_tracefp);
Packit Service 501009
 
Packit Service 501009
+out:
Packit Service 501009
   va_end (args);
Packit Service 501009
 }
Packit Service 501009
 
Packit Service 501009
@@ -509,16 +512,17 @@ _rl_tropen ()
Packit Service 501009
     fclose (_rl_tracefp);
Packit Service 501009
   sprintf (fnbuf, "/var/tmp/rltrace.%ld", getpid());
Packit Service 501009
   unlink(fnbuf);
Packit Service 501009
-  _rl_tracefp = fopen (fnbuf, "w+");
Packit Service 501009
+  _rl_tracefp = fopen (fnbuf, "w+xe");
Packit Service 501009
   return _rl_tracefp != 0;
Packit Service 501009
 }
Packit Service 501009
 
Packit Service 501009
 int
Packit Service 501009
 _rl_trclose ()
Packit Service 501009
 {
Packit Service 501009
-  int r;
Packit Service 501009
+  int r = 0;
Packit Service 501009
 
Packit Service 501009
-  r = fclose (_rl_tracefp);
Packit Service 501009
+  if (_rl_tracefp)
Packit Service 501009
+    r = fclose (_rl_tracefp);
Packit Service 501009
   _rl_tracefp = 0;
Packit Service 501009
   return r;
Packit Service 501009
 }
Packit Service 501009
--- gdb-7.6/gdb/symtab.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/symtab.c
Packit Service 501009
@@ -5447,9 +5447,9 @@ eval_enum(struct type *type, struct gnu_
Packit Service 501009
         lastval = 0;
Packit Service 501009
 
Packit Service 501009
         for (i = 0; i < len; i++) {
Packit Service 501009
-                if (lastval != TYPE_FIELD_BITPOS (type, i)) {
Packit Service 501009
-                        lastval = TYPE_FIELD_BITPOS (type, i);
Packit Service 501009
-                } 
Packit Service 501009
+		if (lastval != TYPE_FIELD_ENUMVAL (type, i))
Packit Service 501009
+			lastval = TYPE_FIELD_ENUMVAL (type, i);
Packit Service 501009
+
Packit Service 501009
 		if (STREQ(TYPE_FIELD_NAME(type, i), req->name)) {
Packit Service 501009
 			req->tagname = "(unknown)";
Packit Service 501009
 			req->value = lastval;
Packit Service 501009
--- gdb-7.6/gdb/symtab.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/symtab.c
Packit Service 501009
@@ -5236,6 +5236,12 @@ gdb_command_funnel(struct gnu_request *r
Packit Service 501009
 		gdb_set_crash_block(req);
Packit Service 501009
 		break;
Packit Service 501009
 
Packit Service 501009
+	case GNU_GET_FUNCTION_RANGE:
Packit Service 501009
+		sym = lookup_symbol(req->name, 0, VAR_DOMAIN, 0);
Packit Service 501009
+		if (!find_pc_partial_function(req->pc, NULL, &req->addr, &req->addr2))
Packit Service 501009
+			req->flags |= GNU_COMMAND_FAILED;
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
 	default:
Packit Service 501009
 		req->flags |= GNU_COMMAND_FAILED;
Packit Service 501009
 		break;
Packit Service 501009
--- gdb-7.6/opcodes/i386-dis.c.orig
Packit Service 501009
+++ gdb-7.6/opcodes/i386-dis.c
Packit Service 501009
@@ -11300,6 +11300,29 @@ get_sib (disassemble_info *info)
Packit Service 501009
     }
Packit Service 501009
 }
Packit Service 501009
 
Packit Service 501009
+static char *
Packit Service 501009
+check_for_extensions(struct dis_private *priv)
Packit Service 501009
+{
Packit Service 501009
+	unsigned char ModRM;
Packit Service 501009
+
Packit Service 501009
+	if ((priv->the_buffer[0] == 0x66) &&
Packit Service 501009
+	    (priv->the_buffer[1] == 0x0f) && 
Packit Service 501009
+	    (priv->the_buffer[2] == 0xae)) {
Packit Service 501009
+		ModRM = priv->the_buffer[3];
Packit Service 501009
+		if (ModRM == 0xf8)
Packit Service 501009
+			return "pcommit";
Packit Service 501009
+
Packit Service 501009
+		switch ((ModRM >> 3)) 
Packit Service 501009
+		{
Packit Service 501009
+		case 0x6:
Packit Service 501009
+			return "clwb";
Packit Service 501009
+		case 0x7: 
Packit Service 501009
+			return "clflushopt";
Packit Service 501009
+		}
Packit Service 501009
+	}
Packit Service 501009
+	return NULL;
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
 static int
Packit Service 501009
 print_insn (bfd_vma pc, disassemble_info *info)
Packit Service 501009
 {
Packit Service 501009
@@ -11312,6 +11335,7 @@ print_insn (bfd_vma pc, disassemble_info
Packit Service 501009
   struct dis_private priv;
Packit Service 501009
   int prefix_length;
Packit Service 501009
   int default_prefixes;
Packit Service 501009
+  char *extension;
Packit Service 501009
 
Packit Service 501009
   priv.orig_sizeflag = AFLAG | DFLAG;
Packit Service 501009
   if ((info->mach & bfd_mach_i386_i386) != 0)
Packit Service 501009
@@ -11575,6 +11599,7 @@ print_insn (bfd_vma pc, disassemble_info
Packit Service 501009
   need_vex = 0;
Packit Service 501009
   need_vex_reg = 0;
Packit Service 501009
   vex_w_done = 0;
Packit Service 501009
+  extension = NULL;
Packit Service 501009
 
Packit Service 501009
   if (dp->name == NULL && dp->op[0].bytemode == FLOATCODE)
Packit Service 501009
     {
Packit Service 501009
@@ -11610,9 +11635,14 @@ print_insn (bfd_vma pc, disassemble_info
Packit Service 501009
 	    name = prefix_name (all_prefixes[i], priv.orig_sizeflag);
Packit Service 501009
 	    if (name == NULL)
Packit Service 501009
 	      name = INTERNAL_DISASSEMBLER_ERROR;
Packit Service 501009
-	    (*info->fprintf_func) (info->stream, "%s", name);
Packit Service 501009
-	    return 1;
Packit Service 501009
-	  }
Packit Service 501009
+	    if ((extension = check_for_extensions(&priv))) {
Packit Service 501009
+    	      strcpy(obuf, extension);
Packit Service 501009
+	      obufp = &obuf[strlen(obuf)];
Packit Service 501009
+	    } else {
Packit Service 501009
+	      (*info->fprintf_func) (info->stream, "%s", name);
Packit Service 501009
+	      return 1;
Packit Service 501009
+	    }
Packit Service 501009
+	 }
Packit Service 501009
     }
Packit Service 501009
 
Packit Service 501009
   /* Check if the REX prefix is used.  */
Packit Service 501009
@@ -11637,7 +11667,7 @@ print_insn (bfd_vma pc, disassemble_info
Packit Service 501009
     all_prefixes[last_data_prefix] = 0;
Packit Service 501009
 
Packit Service 501009
   prefix_length = 0;
Packit Service 501009
-  for (i = 0; i < (int) ARRAY_SIZE (all_prefixes); i++)
Packit Service 501009
+  for (i = 0; !extension && i < (int) ARRAY_SIZE (all_prefixes); i++)
Packit Service 501009
     if (all_prefixes[i])
Packit Service 501009
       {
Packit Service 501009
 	const char *name;
Packit Service 501009
@@ -11655,7 +11685,8 @@ print_insn (bfd_vma pc, disassemble_info
Packit Service 501009
       return MAX_CODE_LENGTH;
Packit Service 501009
     }
Packit Service 501009
 
Packit Service 501009
-  obufp = mnemonicendp;
Packit Service 501009
+  if (!extension)
Packit Service 501009
+    obufp = mnemonicendp;
Packit Service 501009
   for (i = strlen (obuf) + prefix_length; i < 6; i++)
Packit Service 501009
     oappend (" ");
Packit Service 501009
   oappend (" ");
Packit Service 501009
--- gdb-7.6/bfd/coff-i386.c.orig
Packit Service 501009
+++ gdb-7.6/bfd/coff-i386.c
Packit Service 501009
@@ -141,7 +141,7 @@ coff_i386_reloc (bfd *abfd,
Packit Service 501009
 #define DOIT(x) \
Packit Service 501009
   x = ((x & ~howto->dst_mask) | (((x & howto->src_mask) + diff) & howto->dst_mask))
Packit Service 501009
 
Packit Service 501009
-    if (diff != 0)
Packit Service 501009
+  if (diff != 0)
Packit Service 501009
       {
Packit Service 501009
 	reloc_howto_type *howto = reloc_entry->howto;
Packit Service 501009
 	unsigned char *addr = (unsigned char *) data + reloc_entry->address;
Packit Service 501009
--- gdb-7.6/bfd/coff-x86_64.c.orig
Packit Service 501009
+++ gdb-7.6/bfd/coff-x86_64.c
Packit Service 501009
@@ -139,7 +139,7 @@ coff_amd64_reloc (bfd *abfd,
Packit Service 501009
 #define DOIT(x) \
Packit Service 501009
   x = ((x & ~howto->dst_mask) | (((x & howto->src_mask) + diff) & howto->dst_mask))
Packit Service 501009
 
Packit Service 501009
-    if (diff != 0)
Packit Service 501009
+  if (diff != 0)
Packit Service 501009
       {
Packit Service 501009
 	reloc_howto_type *howto = reloc_entry->howto;
Packit Service 501009
 	unsigned char *addr = (unsigned char *) data + reloc_entry->address;
Packit Service 501009
--- gdb-7.6/opcodes/arm-dis.c.orig
Packit Service 501009
+++ gdb-7.6/opcodes/arm-dis.c
Packit Service 501009
@@ -2103,7 +2103,7 @@ print_insn_coprocessor (bfd_vma pc,
Packit Service 501009
 
Packit Service 501009
 		    /* Is ``imm'' a negative number?  */
Packit Service 501009
 		    if (imm & 0x40)
Packit Service 501009
-		      imm |= (-1 << 7);
Packit Service 501009
+		      imm -= 0x80;
Packit Service 501009
 
Packit Service 501009
 		    func (stream, "%d", imm);
Packit Service 501009
 		  }
Packit Service 501009
diff -up gdb-7.6/bfd/elf64-ppc.c.orig gdb-7.6/bfd/elf64-ppc.c
Packit Service 501009
--- gdb-7.6/bfd/elf64-ppc.c.orig	2016-02-02 11:04:25.436527347 -0500
Packit Service 501009
+++ gdb-7.6/bfd/elf64-ppc.c	2016-02-02 11:11:51.926468454 -0500
Packit Service 501009
@@ -11743,7 +11743,7 @@ ppc64_elf_size_stubs (struct bfd_link_in
Packit Service 501009
 	     stub_sec = stub_sec->next)
Packit Service 501009
 	  if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
Packit Service 501009
 	    stub_sec->size = ((stub_sec->size + (1 << htab->plt_stub_align) - 1)
Packit Service 501009
-			      & (-1 << htab->plt_stub_align));
Packit Service 501009
+			      & -(1 << htab->plt_stub_align));
Packit Service 501009
 
Packit Service 501009
       for (stub_sec = htab->stub_bfd->sections;
Packit Service 501009
 	   stub_sec != NULL;
Packit Service 501009
@@ -12093,7 +12093,7 @@ ppc64_elf_build_stubs (bfd_boolean emit_
Packit Service 501009
 	 stub_sec = stub_sec->next)
Packit Service 501009
       if ((stub_sec->flags & SEC_LINKER_CREATED) == 0)
Packit Service 501009
 	stub_sec->size = ((stub_sec->size + (1 << htab->plt_stub_align) - 1)
Packit Service 501009
-			  & (-1 << htab->plt_stub_align));
Packit Service 501009
+			  & -(1 << htab->plt_stub_align));
Packit Service 501009
 
Packit Service 501009
   for (stub_sec = htab->stub_bfd->sections;
Packit Service 501009
        stub_sec != NULL;
Packit Service 501009
--- gdb-7.6/include/opcode/ppc.h.orig
Packit Service 501009
+++ gdb-7.6/include/opcode/ppc.h
Packit Service 501009
@@ -278,7 +278,7 @@ extern const unsigned int num_powerpc_op
Packit Service 501009
 /* Use with the shift field of a struct powerpc_operand to indicate
Packit Service 501009
      that BITM and SHIFT cannot be used to determine where the operand
Packit Service 501009
      goes in the insn.  */
Packit Service 501009
-#define PPC_OPSHIFT_INV (-1 << 31)
Packit Service 501009
+#define PPC_OPSHIFT_INV (-1U << 31)
Packit Service 501009
 
Packit Service 501009
 /* Values defined for the flags field of a struct powerpc_operand.  */
Packit Service 501009
 
Packit Service 501009
--- gdb-7.6/opcodes/mips-dis.c.orig
Packit Service 501009
+++ gdb-7.6/opcodes/mips-dis.c
Packit Service 501009
@@ -245,18 +245,6 @@ static const char * const mips_cp0_names
Packit Service 501009
   "c0_taglo",     "c0_taghi",     "c0_errorepc",  "$31"
Packit Service 501009
 };
Packit Service 501009
 
Packit Service 501009
-static const struct mips_cp0sel_name mips_cp0sel_names_mipsr5900[] =
Packit Service 501009
-{
Packit Service 501009
-  { 24, 2, "c0_iab"			},
Packit Service 501009
-  { 24, 3, "c0_iabm"		},
Packit Service 501009
-  { 24, 4, "c0_dab"			},
Packit Service 501009
-  { 24, 5, "c0_dabm"		},
Packit Service 501009
-  { 24, 6, "c0_dvb"			},
Packit Service 501009
-  { 24, 7, "c0_dvbm"		},
Packit Service 501009
-  { 25, 1, "c0_perfcnt,1"	},
Packit Service 501009
-  { 25, 2, "c0_perfcnt,2"	}
Packit Service 501009
-};
Packit Service 501009
-
Packit Service 501009
 static const char * const mips_cp0_names_mips3264[32] =
Packit Service 501009
 {
Packit Service 501009
   "c0_index",     "c0_random",    "c0_entrylo0",  "c0_entrylo1",
Packit Service 501009
--- gdb-7.6/gdb/ada-lang.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/ada-lang.c
Packit Service 501009
@@ -10503,7 +10503,7 @@ ada_evaluate_subexp (struct type *expect
Packit Service 501009
         }
Packit Service 501009
       else
Packit Service 501009
         arg1 = ada_value_struct_elt (arg1, &exp->elts[pc + 2].string, 0);
Packit Service 501009
-        arg1 = unwrap_value (arg1);
Packit Service 501009
+      arg1 = unwrap_value (arg1);
Packit Service 501009
         return ada_to_fixed_value (arg1);
Packit Service 501009
 
Packit Service 501009
     case OP_TYPE:
Packit Service 501009
--- gdb-7.6/gdb/linux-record.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/linux-record.c
Packit Service 501009
@@ -112,7 +112,7 @@ record_linux_sockaddr (struct regcache *
Packit Service 501009
                             "memory at addr = 0x%s len = %d.\n",
Packit Service 501009
                             phex_nz (len, tdep->size_pointer),
Packit Service 501009
                             tdep->size_int);
Packit Service 501009
-        return -1;
Packit Service 501009
+      return -1;
Packit Service 501009
     }
Packit Service 501009
   addrlen = (int) extract_unsigned_integer (a, tdep->size_int, byte_order);
Packit Service 501009
   if (addrlen <= 0 || addrlen > tdep->size_sockaddr)
Packit Service 501009
@@ -150,7 +150,7 @@ record_linux_msghdr (struct regcache *re
Packit Service 501009
                             "len = %d.\n",
Packit Service 501009
                             phex_nz (addr, tdep->size_pointer),
Packit Service 501009
                             tdep->size_msghdr);
Packit Service 501009
-        return -1;
Packit Service 501009
+      return -1;
Packit Service 501009
     }
Packit Service 501009
 
Packit Service 501009
   /* msg_name msg_namelen */
Packit Service 501009
@@ -186,7 +186,7 @@ record_linux_msghdr (struct regcache *re
Packit Service 501009
                                     "len = %d.\n",
Packit Service 501009
                                     phex_nz (addr,tdep->size_pointer),
Packit Service 501009
                                     tdep->size_iovec);
Packit Service 501009
-                return -1;
Packit Service 501009
+              return -1;
Packit Service 501009
             }
Packit Service 501009
           tmpaddr = (CORE_ADDR) extract_unsigned_integer (iov,
Packit Service 501009
                                                           tdep->size_pointer,
Packit Service 501009
@@ -948,7 +948,7 @@ Do you want to stop the program?"),
Packit Service 501009
                                         "memory at addr = 0x%s len = %d.\n",
Packit Service 501009
                                         OUTPUT_REG (tmpulongest, tdep->arg2),
Packit Service 501009
                                         tdep->size_ulong);
Packit Service 501009
-                    return -1;
Packit Service 501009
+                  return -1;
Packit Service 501009
                 }
Packit Service 501009
               tmpulongest = extract_unsigned_integer (a, tdep->size_ulong,
Packit Service 501009
                                                       byte_order);
Packit Service 501009
--- gdb-7.6/gdb/inflow.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/inflow.c
Packit Service 501009
@@ -391,7 +391,7 @@ terminal_ours_1 (int output_only)
Packit Service 501009
   if (tinfo->run_terminal != NULL || gdb_has_a_terminal () == 0)
Packit Service 501009
     return;
Packit Service 501009
 
Packit Service 501009
-    {
Packit Service 501009
+  {
Packit Service 501009
 #ifdef SIGTTOU
Packit Service 501009
       /* Ignore this signal since it will happen when we try to set the
Packit Service 501009
          pgrp.  */
Packit Service 501009
--- gdb-7.6/gdb/printcmd.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/printcmd.c
Packit Service 501009
@@ -1045,7 +1045,7 @@ print_command_2 (char *exp, int inspect,
Packit Service 501009
   else
Packit Service 501009
     val = access_value_history (0);
Packit Service 501009
 
Packit Service 501009
-    printf_filtered ("%d %d %d %d %d %d\n",
Packit Service 501009
+  printf_filtered ("%d %d %d %d %d %d\n",
Packit Service 501009
       TYPE_CODE (check_typedef(value_type (val))),
Packit Service 501009
       TYPE_UNSIGNED (check_typedef(value_type (val))),
Packit Service 501009
       TYPE_LENGTH (check_typedef(value_type(val))),
Packit Service 501009
--- gdb-7.6/gdb/c-typeprint.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/c-typeprint.c
Packit Service 501009
@@ -1293,7 +1293,7 @@ c_type_print_base (struct type *type, st
Packit Service 501009
 	      if (TYPE_NFIELDS (type) != 0 || TYPE_NFN_FIELDS (type) != 0)
Packit Service 501009
 		fprintf_filtered (stream, "\n");
Packit Service 501009
 
Packit Service 501009
-		for (i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); i++)
Packit Service 501009
+	      for (i = 0; i < TYPE_TYPEDEF_FIELD_COUNT (type); i++)
Packit Service 501009
 		  {
Packit Service 501009
 		    struct type *target = TYPE_TYPEDEF_FIELD_TYPE (type, i);
Packit Service 501009
 
Packit Service 501009
--- gdb-7.6/gdb/symtab.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/symtab.c
Packit Service 501009
@@ -5139,6 +5139,8 @@ static void get_user_print_option_addres
Packit Service 501009
 extern int get_frame_offset(CORE_ADDR);
Packit Service 501009
 static void gdb_set_crash_block(struct gnu_request *);
Packit Service 501009
 void gdb_command_funnel(struct gnu_request *);
Packit Service 501009
+static long lookup_struct_contents(struct gnu_request *);
Packit Service 501009
+static void iterate_datatypes(struct gnu_request *);
Packit Service 501009
 
Packit Service 501009
 struct objfile *gdb_kernel_objfile = { 0 };
Packit Service 501009
 
Packit Service 501009
@@ -5242,6 +5244,14 @@ gdb_command_funnel(struct gnu_request *r
Packit Service 501009
 			req->flags |= GNU_COMMAND_FAILED;
Packit Service 501009
 		break;
Packit Service 501009
 
Packit Service 501009
+	case GNU_LOOKUP_STRUCT_CONTENTS:
Packit Service 501009
+		req->value = lookup_struct_contents(req);
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
+	case GNU_GET_NEXT_DATATYPE:
Packit Service 501009
+		iterate_datatypes(req);
Packit Service 501009
+		break;
Packit Service 501009
+
Packit Service 501009
 	default:
Packit Service 501009
 		req->flags |= GNU_COMMAND_FAILED;
Packit Service 501009
 		break;
Packit Service 501009
@@ -5779,4 +5789,135 @@ gdb_get_crash_block(void)
Packit Service 501009
 	else
Packit Service 501009
 		return NULL;
Packit Service 501009
 }
Packit Service 501009
+
Packit Service 501009
+static long
Packit Service 501009
+lookup_struct_contents(struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+  int i;
Packit Service 501009
+  long r;
Packit Service 501009
+  struct field *f;
Packit Service 501009
+  struct main_type *m;
Packit Service 501009
+  const char *n;
Packit Service 501009
+  struct main_type *top_m = (struct main_type *)req->addr;
Packit Service 501009
+  char *type_name = req->type_name;
Packit Service 501009
+
Packit Service 501009
+  if (!top_m || !type_name)
Packit Service 501009
+    return 0;
Packit Service 501009
+
Packit Service 501009
+  for (i = 0; i < top_m->nfields; i++)
Packit Service 501009
+    {
Packit Service 501009
+      f = top_m->flds_bnds.fields + i;
Packit Service 501009
+      if (!f->type)
Packit Service 501009
+        continue;
Packit Service 501009
+      m = f->type->main_type;
Packit Service 501009
+
Packit Service 501009
+      // If the field is an array, check the target type -
Packit Service 501009
+      // it might be structure, or might not be.
Packit Service 501009
+      // - struct request_sock *syn_table[0];
Packit Service 501009
+      //   here m->target_type->main_type->code is expected
Packit Service 501009
+      //   to be TYPE_CODE_PTR
Packit Service 501009
+      // - struct list_head vec[TVN_SIZE];
Packit Service 501009
+      //   here m->target_type->main_type->code should be
Packit Service 501009
+      //   TYPE_CODE_STRUCT
Packit Service 501009
+      if (m->code == TYPE_CODE_ARRAY && m->target_type)
Packit Service 501009
+        m = m->target_type->main_type;
Packit Service 501009
+
Packit Service 501009
+      /* Here is a recursion.
Packit Service 501009
+       * If we have struct variable (not pointer),
Packit Service 501009
+       * scan this inner structure
Packit Service 501009
+       */
Packit Service 501009
+      if (m->code == TYPE_CODE_STRUCT) {
Packit Service 501009
+        req->addr = (ulong)m;
Packit Service 501009
+        r = lookup_struct_contents(req);
Packit Service 501009
+        req->addr = (ulong)top_m;
Packit Service 501009
+        if (r)
Packit Service 501009
+          return 1;
Packit Service 501009
+      }
Packit Service 501009
+
Packit Service 501009
+      if (m->code == TYPE_CODE_PTR && m->target_type)
Packit Service 501009
+        m = m->target_type->main_type;
Packit Service 501009
+      if (m->name)
Packit Service 501009
+        n = m->name;
Packit Service 501009
+      else if (m->tag_name)
Packit Service 501009
+        n = m->tag_name;
Packit Service 501009
+      else
Packit Service 501009
+        continue;
Packit Service 501009
+
Packit Service 501009
+      if (strstr(n, type_name))
Packit Service 501009
+        return 1;
Packit Service 501009
+    }
Packit Service 501009
+
Packit Service 501009
+  return 0;
Packit Service 501009
+}
Packit Service 501009
+
Packit Service 501009
+static void
Packit Service 501009
+iterate_datatypes (struct gnu_request *req)
Packit Service 501009
+{
Packit Service 501009
+  static struct block_iterator bi; // Keeping this static will simplify code
Packit Service 501009
+  struct block *b;
Packit Service 501009
+  int do_return = 0;
Packit Service 501009
+  struct global_iterator *gi = &req->global_iterator;
Packit Service 501009
+
Packit Service 501009
+  if (gi->finished)
Packit Service 501009
+    return;
Packit Service 501009
+
Packit Service 501009
+  if (gi->obj == NULL)
Packit Service 501009
+    {
Packit Service 501009
+      gi->obj = current_program_space->objfiles;
Packit Service 501009
+      gi->symtab = NULL;
Packit Service 501009
+      do_return = 1;  // The initial case - we don't need to make next step.
Packit Service 501009
+    }
Packit Service 501009
+
Packit Service 501009
+  for (; gi->obj; gi->obj = gi->obj->next, gi->symtab = NULL)
Packit Service 501009
+    {
Packit Service 501009
+      if (gi->symtab == NULL)
Packit Service 501009
+        {
Packit Service 501009
+          // Symtab `symtab` is nullified for every objfile
Packit Service 501009
+          if (gi->obj->sf)
Packit Service 501009
+            gi->obj->sf->qf->expand_all_symtabs(gi->obj);
Packit Service 501009
+          gi->symtab = gi->obj->symtabs;
Packit Service 501009
+          gi->sym = NULL;
Packit Service 501009
+        }
Packit Service 501009
+
Packit Service 501009
+      for (; gi->symtab; gi->symtab = gi->symtab->next, gi->block_index = -1)
Packit Service 501009
+        {
Packit Service 501009
+          if (!gi->symtab->primary)
Packit Service 501009
+            continue;
Packit Service 501009
+
Packit Service 501009
+          if (gi->block_index == -1)
Packit Service 501009
+            {
Packit Service 501009
+              gi->block_index = GLOBAL_BLOCK;
Packit Service 501009
+              gi->sym = NULL;
Packit Service 501009
+            }
Packit Service 501009
+          for (; gi->block_index <= STATIC_BLOCK; gi->block_index++, gi->sym = NULL)
Packit Service 501009
+            {
Packit Service 501009
+              if (!gi->sym)
Packit Service 501009
+                {
Packit Service 501009
+                  b = BLOCKVECTOR_BLOCK(BLOCKVECTOR(gi->symtab), gi->block_index);
Packit Service 501009
+                  gi->sym = block_iterator_first(b, &bi);
Packit Service 501009
+                }
Packit Service 501009
+              for (; gi->sym; gi->sym = block_iterator_next(&bi))
Packit Service 501009
+                {
Packit Service 501009
+                  QUIT;
Packit Service 501009
+
Packit Service 501009
+                  if (SYMBOL_CLASS (gi->sym) != LOC_TYPEDEF)
Packit Service 501009
+                    continue;
Packit Service 501009
+
Packit Service 501009
+                  // Iteration 1 (do_return == 0): initialization
Packit Service 501009
+                  // Iteration 2 (do_return == 1): iterate symbol
Packit Service 501009
+                  if (do_return++ == 0)
Packit Service 501009
+                    continue;
Packit Service 501009
+
Packit Service 501009
+                  // Yield the current symbol and its size
Packit Service 501009
+                  req->addr = (ulong)(gi->sym->type->main_type);
Packit Service 501009
+                  req->name = (char *)(gi->sym->ginfo.name);
Packit Service 501009
+                  req->length = gi->sym->type->length;
Packit Service 501009
+
Packit Service 501009
+                  return;
Packit Service 501009
+                }
Packit Service 501009
+            }
Packit Service 501009
+        }
Packit Service 501009
+    }
Packit Service 501009
+  gi->finished = 1; 
Packit Service 501009
+}
Packit Service 501009
 #endif
Packit Service 501009
--- gdb-7.6/bfd/elf64-s390.c.orig
Packit Service 501009
+++ gdb-7.6/bfd/elf64-s390.c
Packit Service 501009
@@ -323,10 +323,10 @@ elf_s390_reloc_name_lookup (bfd *abfd AT
Packit Service 501009
 	&& strcasecmp (elf_howto_table[i].name, r_name) == 0)
Packit Service 501009
       return &elf_howto_table[i];
Packit Service 501009
 
Packit Service 501009
-    if (strcasecmp (elf64_s390_vtinherit_howto.name, r_name) == 0)
Packit Service 501009
-      return &elf64_s390_vtinherit_howto;
Packit Service 501009
-    if (strcasecmp (elf64_s390_vtentry_howto.name, r_name) == 0)
Packit Service 501009
-      return &elf64_s390_vtentry_howto;
Packit Service 501009
+  if (strcasecmp (elf64_s390_vtinherit_howto.name, r_name) == 0)
Packit Service 501009
+    return &elf64_s390_vtinherit_howto;
Packit Service 501009
+  if (strcasecmp (elf64_s390_vtentry_howto.name, r_name) == 0)
Packit Service 501009
+    return &elf64_s390_vtentry_howto;
Packit Service 501009
 
Packit Service 501009
   return NULL;
Packit Service 501009
 }
Packit Service 501009
--- gdb-7.6/gdb/symtab.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/symtab.c
Packit Service 501009
@@ -5122,7 +5122,7 @@ When enabled, debugging messages are pri
Packit Service 501009
 #define GDB_COMMON
Packit Service 501009
 #include "../../defs.h"
Packit Service 501009
 
Packit Service 501009
-static void get_member_data(struct gnu_request *, struct type *);
Packit Service 501009
+static void get_member_data(struct gnu_request *, struct type *, long, int);
Packit Service 501009
 static void dump_enum(struct type *, struct gnu_request *);
Packit Service 501009
 static void eval_enum(struct type *, struct gnu_request *);
Packit Service 501009
 static void gdb_get_line_number(struct gnu_request *);
Packit Service 501009
@@ -5327,7 +5327,7 @@ gdb_get_datatype(struct gnu_request *req
Packit Service 501009
                 req->typecode = TYPE_CODE(sym->type);
Packit Service 501009
                 req->length = TYPE_LENGTH(sym->type);
Packit Service 501009
 		if (req->member)
Packit Service 501009
-			get_member_data(req, sym->type);
Packit Service 501009
+			get_member_data(req, sym->type, 0, 1);
Packit Service 501009
 			
Packit Service 501009
 		if (TYPE_CODE(sym->type) == TYPE_CODE_ENUM) {
Packit Service 501009
 			if (req->flags & GNU_PRINT_ENUMERATORS) 
Packit Service 501009
@@ -5397,7 +5397,7 @@ gdb_get_datatype(struct gnu_request *req
Packit Service 501009
 		}
Packit Service 501009
 
Packit Service 501009
                 if (req->member) 
Packit Service 501009
-                	get_member_data(req, type); 
Packit Service 501009
+                	get_member_data(req, type, 0, 1); 
Packit Service 501009
 		
Packit Service 501009
 		break;
Packit Service 501009
 
Packit Service 501009
@@ -5480,7 +5480,7 @@ eval_enum(struct type *type, struct gnu_
Packit Service 501009
  *  member field, and when found, return its relevant data.
Packit Service 501009
  */
Packit Service 501009
 static void
Packit Service 501009
-get_member_data(struct gnu_request *req, struct type *type)
Packit Service 501009
+get_member_data(struct gnu_request *req, struct type *type, long offset, int is_first)
Packit Service 501009
 {
Packit Service 501009
 	register short i;
Packit Service 501009
 	struct field *nextfield;
Packit Service 501009
@@ -5492,7 +5492,7 @@ get_member_data(struct gnu_request *req,
Packit Service 501009
 	nfields = TYPE_MAIN_TYPE(type)->nfields;
Packit Service 501009
 	nextfield = TYPE_MAIN_TYPE(type)->flds_bnds.fields;
Packit Service 501009
 
Packit Service 501009
-        if (nfields == 0) {
Packit Service 501009
+	if (nfields == 0 && is_first /* The first call */) {
Packit Service 501009
 		struct type *newtype;
Packit Service 501009
                 newtype = lookup_transparent_type(req->name);
Packit Service 501009
                 if (newtype) {
Packit Service 501009
@@ -5505,13 +5505,18 @@ get_member_data(struct gnu_request *req,
Packit Service 501009
 
Packit Service 501009
 	for (i = 0; i < nfields; i++) {
Packit Service 501009
 		if (STREQ(req->member, nextfield->name)) {
Packit Service 501009
-			req->member_offset = nextfield->loc.bitpos;
Packit Service 501009
+			req->member_offset = offset + nextfield->loc.bitpos;
Packit Service 501009
 			req->member_length = TYPE_LENGTH(nextfield->type);
Packit Service 501009
 			req->member_typecode = TYPE_CODE(nextfield->type);
Packit Service 501009
 			if ((req->member_typecode == TYPE_CODE_TYPEDEF) &&
Packit Service 501009
 			    (typedef_type = check_typedef(nextfield->type))) 
Packit Service 501009
         			req->member_length = TYPE_LENGTH(typedef_type);
Packit Service 501009
 			return;
Packit Service 501009
+		} else if (*nextfield->name == 0) { /* Anonymous struct/union */
Packit Service 501009
+			get_member_data(req, nextfield->type,
Packit Service 501009
+			    offset + nextfield->loc.bitpos, 0);
Packit Service 501009
+			if (req->member_offset != -1)
Packit Service 501009
+				return;
Packit Service 501009
 		}
Packit Service 501009
 		nextfield++;
Packit Service 501009
 	}
Packit Service 501009
@@ -5706,7 +5711,7 @@ gdb_get_symbol_type(struct gnu_request *
Packit Service 501009
 	}
Packit Service 501009
 
Packit Service 501009
 	if (req->member) 
Packit Service 501009
-		get_member_data(req, type);
Packit Service 501009
+		get_member_data(req, type, 0, 1);
Packit Service 501009
 
Packit Service 501009
         do_cleanups (old_chain);
Packit Service 501009
 }
Packit Service 501009
diff -up gdb-7.6/bfd/configure.orig gdb-7.6/bfd/configure
Packit Service 501009
--- gdb-7.6/bfd/configure.orig	2017-02-17 17:19:51.654898822 -0500
Packit Service 501009
+++ gdb-7.6/bfd/configure	2017-02-17 17:19:57.922038757 -0500
Packit Service 501009
@@ -12193,7 +12193,7 @@ fi
Packit Service 501009
 
Packit Service 501009
 NO_WERROR=
Packit Service 501009
 if test "${ERROR_ON_WARNING}" = yes ; then
Packit Service 501009
-    GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Werror"
Packit Service 501009
+    GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS"
Packit Service 501009
     NO_WERROR="-Wno-error"
Packit Service 501009
 fi
Packit Service 501009
 
Packit Service 501009
diff -up gdb-7.6/opcodes/configure.orig gdb-7.6/opcodes/configure
Packit Service 501009
--- gdb-7.6/opcodes/configure.orig	2017-02-17 17:19:08.849943016 -0500
Packit Service 501009
+++ gdb-7.6/opcodes/configure	2017-02-17 17:19:23.256264699 -0500
Packit Service 501009
@@ -11539,7 +11539,7 @@ fi
Packit Service 501009
 
Packit Service 501009
 NO_WERROR=
Packit Service 501009
 if test "${ERROR_ON_WARNING}" = yes ; then
Packit Service 501009
-    GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS -Werror"
Packit Service 501009
+    GCC_WARN_CFLAGS="$GCC_WARN_CFLAGS"
Packit Service 501009
     NO_WERROR="-Wno-error"
Packit Service 501009
 fi
Packit Service 501009
 
Packit Service 501009
--- gdb-7.6/gdb/symtab.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/symtab.c
Packit Service 501009
@@ -5266,6 +5266,7 @@ gdb_get_line_number(struct gnu_request *
Packit Service 501009
 {
Packit Service 501009
         struct symtab_and_line sal;
Packit Service 501009
 	struct symbol *sym;
Packit Service 501009
+	struct objfile *objfile;
Packit Service 501009
         CORE_ADDR pc;
Packit Service 501009
 
Packit Service 501009
 #define LASTCHAR(s)      (s[strlen(s)-1])
Packit Service 501009
@@ -5281,8 +5282,22 @@ gdb_get_line_number(struct gnu_request *
Packit Service 501009
         sal = find_pc_line(pc, 0);
Packit Service 501009
 
Packit Service 501009
 	if (!sal.symtab) {
Packit Service 501009
-		req->buf[0] = '\0';
Packit Service 501009
-		return;
Packit Service 501009
+		/*
Packit Service 501009
+		 *  If a module address line number can't be found, it's typically
Packit Service 501009
+		 *  due to its addrmap still containing offset values because its 
Packit Service 501009
+		 *  objfile doesn't have full symbols loaded.
Packit Service 501009
+		 */
Packit Service 501009
+		if (req->lm) {
Packit Service 501009
+			objfile = req->lm->loaded_objfile;
Packit Service 501009
+			if (!objfile_has_full_symbols(objfile) && objfile->sf) { 
Packit Service 501009
+				objfile->sf->qf->expand_all_symtabs(objfile);
Packit Service 501009
+				sal = find_pc_line(pc, 0);
Packit Service 501009
+			}
Packit Service 501009
+		}
Packit Service 501009
+		if (!sal.symtab) {
Packit Service 501009
+			req->buf[0] = '\0';
Packit Service 501009
+			return;
Packit Service 501009
+		}
Packit Service 501009
 	}
Packit Service 501009
 
Packit Service 501009
         if (sal.symtab->filename && sal.symtab->dirname) {
Packit Service 501009
@@ -5557,7 +5572,6 @@ struct load_module *gdb_current_load_mod
Packit Service 501009
 static void 
Packit Service 501009
 gdb_add_symbol_file(struct gnu_request *req)
Packit Service 501009
 {
Packit Service 501009
-	register struct objfile *loaded_objfile = NULL;
Packit Service 501009
 	register struct objfile *objfile;
Packit Service 501009
 	register struct minimal_symbol *m;
Packit Service 501009
 	struct load_module *lm;
Packit Service 501009
@@ -5576,6 +5590,7 @@ gdb_add_symbol_file(struct gnu_request *
Packit Service 501009
 
Packit Service 501009
 	req->name = lm->mod_namelist;
Packit Service 501009
 	gdb_delete_symbol_file(req);
Packit Service 501009
+	lm->loaded_objfile = NULL;
Packit Service 501009
 
Packit Service 501009
 	if ((lm->mod_flags & MOD_NOPATCH) == 0) {
Packit Service 501009
 	        for (i = 0 ; i < lm->mod_sections; i++) {
Packit Service 501009
@@ -5623,12 +5638,15 @@ gdb_add_symbol_file(struct gnu_request *
Packit Service 501009
 
Packit Service 501009
         ALL_OBJFILES(objfile) {
Packit Service 501009
 		if (same_file(objfile->name, lm->mod_namelist)) {
Packit Service 501009
-                        loaded_objfile = objfile;
Packit Service 501009
+			if (objfile->separate_debug_objfile)
Packit Service 501009
+				lm->loaded_objfile = objfile->separate_debug_objfile;
Packit Service 501009
+			else
Packit Service 501009
+				lm->loaded_objfile = objfile;
Packit Service 501009
 			break;
Packit Service 501009
 		}
Packit Service 501009
         }
Packit Service 501009
 
Packit Service 501009
-	if (!loaded_objfile)
Packit Service 501009
+	if (!lm->loaded_objfile)
Packit Service 501009
                 req->flags |= GNU_COMMAND_FAILED;
Packit Service 501009
 }
Packit Service 501009
 
Packit Service 501009
--- gdb-7.6/gdb/symtab.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/symtab.c
Packit Service 501009
@@ -5500,7 +5500,7 @@ get_member_data(struct gnu_request *req,
Packit Service 501009
 	register short i;
Packit Service 501009
 	struct field *nextfield;
Packit Service 501009
 	short nfields;
Packit Service 501009
-	struct type *typedef_type;
Packit Service 501009
+	struct type *typedef_type, *target_type;
Packit Service 501009
 
Packit Service 501009
 	req->member_offset = -1;
Packit Service 501009
 
Packit Service 501009
@@ -5523,6 +5523,13 @@ get_member_data(struct gnu_request *req,
Packit Service 501009
 			req->member_offset = offset + nextfield->loc.bitpos;
Packit Service 501009
 			req->member_length = TYPE_LENGTH(nextfield->type);
Packit Service 501009
 			req->member_typecode = TYPE_CODE(nextfield->type);
Packit Service 501009
+			req->member_main_type_name = (char *)TYPE_NAME(nextfield->type);
Packit Service 501009
+			req->member_main_type_tag_name = (char *)TYPE_TAG_NAME(nextfield->type);
Packit Service 501009
+			target_type = TYPE_TARGET_TYPE(nextfield->type);
Packit Service 501009
+			if (target_type) {
Packit Service 501009
+				req->member_target_type_name = (char *)TYPE_NAME(target_type);
Packit Service 501009
+				req->member_target_type_tag_name = (char *)TYPE_TAG_NAME(target_type);
Packit Service 501009
+			}
Packit Service 501009
 			if ((req->member_typecode == TYPE_CODE_TYPEDEF) &&
Packit Service 501009
 			    (typedef_type = check_typedef(nextfield->type))) 
Packit Service 501009
         			req->member_length = TYPE_LENGTH(typedef_type);
Packit Service 501009
Packit Service 501009
--- gdb-7.6/gdb/symtab.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/symtab.c
Packit Service 501009
@@ -5727,6 +5727,7 @@ gdb_get_symbol_type(struct gnu_request *
Packit Service 501009
 	req->type_name = (char *)TYPE_MAIN_TYPE(type)->name;
Packit Service 501009
 	req->typecode = TYPE_MAIN_TYPE(type)->code;
Packit Service 501009
 	req->length = type->length;
Packit Service 501009
+	req->type_tag_name = (char *)TYPE_TAG_NAME(type);
Packit Service 501009
 	target_type = TYPE_MAIN_TYPE(type)->target_type;
Packit Service 501009
 
Packit Service 501009
 	if (target_type) {
Packit Service 501009
--- gdb-7.6/gdb/common/linux-ptrace.c.orig
Packit Service 501009
+++ gdb-7.6/gdb/common/linux-ptrace.c
Packit Service 501009
@@ -108,14 +108,14 @@ linux_ptrace_test_ret_to_nx (void)
Packit Service 501009
 			".globl linux_ptrace_test_ret_to_nx_instr;"
Packit Service 501009
 			"linux_ptrace_test_ret_to_nx_instr:"
Packit Service 501009
 			"ret"
Packit Service 501009
-			: : "r" (return_address) : "%esp", "memory");
Packit Service 501009
+			: : "r" (return_address) : "memory");
Packit Service 501009
 #elif defined __x86_64__
Packit Service 501009
 	  asm volatile ("pushq %0;"
Packit Service 501009
 			".globl linux_ptrace_test_ret_to_nx_instr;"
Packit Service 501009
 			"linux_ptrace_test_ret_to_nx_instr:"
Packit Service 501009
 			"ret"
Packit Service 501009
 			: : "r" ((uint64_t) (uintptr_t) return_address)
Packit Service 501009
-			: "%rsp", "memory");
Packit Service 501009
+			: "memory");
Packit Service 501009
 #else
Packit Service 501009
 # error "!__i386__ && !__x86_64__"
Packit Service 501009
 #endif