patches/gdb/6.3/650-debian_vsyscall-gdb-support.patch
changeset 330 447b203edc2e
parent 329 419d959441ed
child 331 0c05f9ea3254
     1.1 --- a/patches/gdb/6.3/650-debian_vsyscall-gdb-support.patch	Tue Aug 14 19:32:22 2007 +0000
     1.2 +++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.3 @@ -1,245 +0,0 @@
     1.4 -Status: Checked in to HEAD after 6.3.
     1.5 -
     1.6 -2004-11-07  Andrew Cagney  <cagney@redhat.com>
     1.7 -	    Daniel Jacobowitz  <dan@debian.org>
     1.8 -	    Roland McGrath  <roland@redhat.com>
     1.9 -
    1.10 -	* Makefile.in (symfile-mem.o): Update dependencies.
    1.11 -	* i386-linux-tdep.c (i386_linux_dwarf_signal_frame_p): New.
    1.12 -	(i386_linux_init_abi): Call dwarf2_frame_set_signal_frame_p.
    1.13 -	* inf-ptrace.c (inf_ptrace_attach): Call
    1.14 -	observer_notify_inferior_created.
    1.15 -	* inftarg.c (child_attach): Likewise.
    1.16 -	* symfile-mem.c: Include "observer.h", "auxv.h", and "elf/common.h".
    1.17 -	(symbol_file_add_from_memory): Take NAME argument.  Use it for
    1.18 -	the new BFD's filename.
    1.19 -	(add_symbol_file_from_memory_command): Update call to
    1.20 -	symbol_file_add_from_memory.
    1.21 -	(struct symbol_file_add_from_memory_args, add_vsyscall_page)
    1.22 -	(symbol_file_add_from_memory_wrapper): New.
    1.23 -	(_initialize_symfile_mem): Register add_vsyscall_page as an
    1.24 -	inferior_created observer.
    1.25 -
    1.26 -Index: gdb-6.3/gdb/i386-linux-tdep.c
    1.27 -===================================================================
    1.28 ---- gdb-6.3.orig/gdb/i386-linux-tdep.c	2004-08-06 16:58:28.000000000 -0400
    1.29 -+++ gdb-6.3/gdb/i386-linux-tdep.c	2004-11-10 00:55:06.669398770 -0500
    1.30 -@@ -27,6 +27,7 @@
    1.31 - #include "inferior.h"
    1.32 - #include "osabi.h"
    1.33 - #include "reggroups.h"
    1.34 -+#include "dwarf2-frame.h"
    1.35 - 
    1.36 - #include "gdb_string.h"
    1.37 - 
    1.38 -@@ -244,6 +245,27 @@ i386_linux_sigtramp_p (struct frame_info
    1.39 - 	  || strcmp ("__restore_rt", name) == 0);
    1.40 - }
    1.41 - 
    1.42 -+/* Return one if the unwound PC from NEXT_FRAME is in a signal trampoline
    1.43 -+   which may have DWARF-2 CFI.  */
    1.44 -+
    1.45 -+static int
    1.46 -+i386_linux_dwarf_signal_frame_p (struct gdbarch *gdbarch,
    1.47 -+				 struct frame_info *next_frame)
    1.48 -+{
    1.49 -+  CORE_ADDR pc = frame_pc_unwind (next_frame);
    1.50 -+  char *name;
    1.51 -+
    1.52 -+  find_pc_partial_function (pc, &name, NULL, NULL);
    1.53 -+
    1.54 -+  /* If a vsyscall DSO is in use, the signal trampolines may have these
    1.55 -+     names.  */
    1.56 -+  if (name && (strcmp (name, "__kernel_sigreturn") == 0
    1.57 -+	       || strcmp (name, "__kernel_rt_sigreturn") == 0))
    1.58 -+    return 1;
    1.59 -+
    1.60 -+  return 0;
    1.61 -+}
    1.62 -+
    1.63 - /* Offset to struct sigcontext in ucontext, from <asm/ucontext.h>.  */
    1.64 - #define I386_LINUX_UCONTEXT_SIGCONTEXT_OFFSET 20
    1.65 - 
    1.66 -@@ -414,6 +436,8 @@ i386_linux_init_abi (struct gdbarch_info
    1.67 - 
    1.68 -   /* GNU/Linux uses the dynamic linker included in the GNU C Library.  */
    1.69 -   set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
    1.70 -+
    1.71 -+  dwarf2_frame_set_signal_frame_p (gdbarch, i386_linux_dwarf_signal_frame_p);
    1.72 - }
    1.73 - 
    1.74 - /* Provide a prototype to silence -Wmissing-prototypes.  */
    1.75 -Index: gdb-6.3/gdb/inf-ptrace.c
    1.76 -===================================================================
    1.77 ---- gdb-6.3.orig/gdb/inf-ptrace.c	2004-10-15 09:29:33.000000000 -0400
    1.78 -+++ gdb-6.3/gdb/inf-ptrace.c	2004-11-10 00:53:43.697615843 -0500
    1.79 -@@ -220,6 +220,10 @@ inf_ptrace_attach (char *args, int from_
    1.80 - 
    1.81 -   inferior_ptid = pid_to_ptid (pid);
    1.82 -   push_target (ptrace_ops_hack);
    1.83 -+
    1.84 -+  /* Do this first, before anything has had a chance to query the
    1.85 -+     inferior's symbol table or similar.  */
    1.86 -+  observer_notify_inferior_created (&current_target, from_tty);
    1.87 - }
    1.88 - 
    1.89 - static void
    1.90 -Index: gdb-6.3/gdb/inftarg.c
    1.91 -===================================================================
    1.92 ---- gdb-6.3.orig/gdb/inftarg.c	2004-10-08 16:29:47.000000000 -0400
    1.93 -+++ gdb-6.3/gdb/inftarg.c	2004-11-10 00:53:43.711613107 -0500
    1.94 -@@ -211,6 +211,10 @@ child_attach (char *args, int from_tty)
    1.95 -   
    1.96 -   inferior_ptid = pid_to_ptid (pid);
    1.97 -   push_target (&deprecated_child_ops);
    1.98 -+
    1.99 -+  /* Do this first, before anything has had a chance to query the
   1.100 -+     inferior's symbol table or similar.  */
   1.101 -+  observer_notify_inferior_created (&current_target, from_tty);
   1.102 - }
   1.103 - 
   1.104 - #if !defined(CHILD_POST_ATTACH)
   1.105 -Index: gdb-6.3/gdb/symfile-mem.c
   1.106 -===================================================================
   1.107 ---- gdb-6.3.orig/gdb/symfile-mem.c	2004-07-17 10:24:07.000000000 -0400
   1.108 -+++ gdb-6.3/gdb/symfile-mem.c	2004-11-10 00:53:43.722610958 -0500
   1.109 -@@ -52,13 +52,19 @@
   1.110 - #include "target.h"
   1.111 - #include "value.h"
   1.112 - #include "symfile.h"
   1.113 -+#include "observer.h"
   1.114 -+#include "auxv.h"
   1.115 -+#include "elf/common.h"
   1.116 - 
   1.117 - 
   1.118 - /* Read inferior memory at ADDR to find the header of a loaded object file
   1.119 -    and read its in-core symbols out of inferior memory.  TEMPL is a bfd
   1.120 --   representing the target's format.  */
   1.121 -+   representing the target's format.  NAME is the name to use for this
   1.122 -+   symbol file in messages; it can be NULL or a malloc-allocated string
   1.123 -+   which will be attached to the BFD.  */
   1.124 - static struct objfile *
   1.125 --symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, int from_tty)
   1.126 -+symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, char *name,
   1.127 -+			     int from_tty)
   1.128 - {
   1.129 -   struct objfile *objf;
   1.130 -   struct bfd *nbfd;
   1.131 -@@ -75,7 +81,10 @@ symbol_file_add_from_memory (struct bfd 
   1.132 -   if (nbfd == NULL)
   1.133 -     error ("Failed to read a valid object file image from memory.");
   1.134 - 
   1.135 --  nbfd->filename = xstrdup ("shared object read from target memory");
   1.136 -+  if (name == NULL)
   1.137 -+    nbfd->filename = xstrdup ("shared object read from target memory");
   1.138 -+  else
   1.139 -+    nbfd->filename = name;
   1.140 - 
   1.141 -   if (!bfd_check_format (nbfd, bfd_object))
   1.142 -     {
   1.143 -@@ -129,7 +138,73 @@ add_symbol_file_from_memory_command (cha
   1.144 -     error ("\
   1.145 - Must use symbol-file or exec-file before add-symbol-file-from-memory.");
   1.146 - 
   1.147 --  symbol_file_add_from_memory (templ, addr, from_tty);
   1.148 -+  symbol_file_add_from_memory (templ, addr, NULL, from_tty);
   1.149 -+}
   1.150 -+
   1.151 -+/* Arguments for symbol_file_add_from_memory_wrapper.  */
   1.152 -+
   1.153 -+struct symbol_file_add_from_memory_args
   1.154 -+{
   1.155 -+  struct bfd *bfd;
   1.156 -+  CORE_ADDR sysinfo_ehdr;
   1.157 -+  char *name;
   1.158 -+  int from_tty;
   1.159 -+};
   1.160 -+
   1.161 -+/* Wrapper function for symbol_file_add_from_memory, for
   1.162 -+   catch_exceptions.  */
   1.163 -+
   1.164 -+static int
   1.165 -+symbol_file_add_from_memory_wrapper (struct ui_out *uiout, void *data)
   1.166 -+{
   1.167 -+  struct symbol_file_add_from_memory_args *args = data;
   1.168 -+
   1.169 -+  symbol_file_add_from_memory (args->bfd, args->sysinfo_ehdr, args->name,
   1.170 -+			       args->from_tty);
   1.171 -+  return 0;
   1.172 -+}
   1.173 -+
   1.174 -+/* Try to add the symbols for the vsyscall page, if there is one.  This function
   1.175 -+   is called via the inferior_created observer.  */
   1.176 -+
   1.177 -+static void
   1.178 -+add_vsyscall_page (struct target_ops *target, int from_tty)
   1.179 -+{
   1.180 -+  CORE_ADDR sysinfo_ehdr;
   1.181 -+
   1.182 -+  if (target_auxv_search (target, AT_SYSINFO_EHDR, &sysinfo_ehdr) > 0
   1.183 -+      && sysinfo_ehdr != (CORE_ADDR) 0)
   1.184 -+    {
   1.185 -+      struct bfd *bfd;
   1.186 -+      struct symbol_file_add_from_memory_args args;
   1.187 -+
   1.188 -+      if (core_bfd != NULL)
   1.189 -+	bfd = core_bfd;
   1.190 -+      else if (exec_bfd != NULL)
   1.191 -+	bfd = exec_bfd;
   1.192 -+      else
   1.193 -+       /* FIXME: cagney/2004-05-06: Should not require an existing
   1.194 -+	  BFD when trying to create a run-time BFD of the VSYSCALL
   1.195 -+	  page in the inferior.  Unfortunately that's the current
   1.196 -+	  interface so for the moment bail.  Introducing a
   1.197 -+	  ``bfd_runtime'' (a BFD created using the loaded image) file
   1.198 -+	  format should fix this.  */
   1.199 -+	{
   1.200 -+	  warning ("could not load vsyscall page because no executable was specified");
   1.201 -+	  warning ("try using the \"file\" command first");
   1.202 -+	  return;
   1.203 -+	}
   1.204 -+      args.bfd = bfd;
   1.205 -+      args.sysinfo_ehdr = sysinfo_ehdr;
   1.206 -+      xasprintf (&args.name, "system-supplied DSO at 0x%s",
   1.207 -+		 paddr_nz (sysinfo_ehdr));
   1.208 -+      /* Pass zero for FROM_TTY, because the action of loading the
   1.209 -+	 vsyscall DSO was not triggered by the user, even if the user
   1.210 -+	 typed "run" at the TTY.  */
   1.211 -+      args.from_tty = 0;
   1.212 -+      catch_exceptions (uiout, symbol_file_add_from_memory_wrapper,
   1.213 -+			&args, NULL, RETURN_MASK_ALL);
   1.214 -+    }
   1.215 - }
   1.216 - 
   1.217 - 
   1.218 -@@ -143,4 +218,7 @@ Load the symbols out of memory from a dy
   1.219 - Give an expression for the address of the file's shared object file header.",
   1.220 -            &cmdlist);
   1.221 - 
   1.222 -+  /* Want to know of each new inferior so that its vsyscall info can
   1.223 -+     be extracted.  */
   1.224 -+  observer_attach_inferior_created (add_vsyscall_page);
   1.225 - }
   1.226 -Index: gdb-6.3/gdb/Makefile.in
   1.227 -===================================================================
   1.228 ---- gdb-6.3.orig/gdb/Makefile.in	2004-11-10 00:29:00.000000000 -0500
   1.229 -+++ gdb-6.3/gdb/Makefile.in	2004-11-10 00:54:47.728100986 -0500
   1.230 -@@ -2020,7 +2020,7 @@ i386-linux-nat.o: i386-linux-nat.c $(def
   1.231 - i386-linux-tdep.o: i386-linux-tdep.c $(defs_h) $(gdbcore_h) $(frame_h) \
   1.232 - 	$(value_h) $(regcache_h) $(inferior_h) $(osabi_h) $(reggroups_h) \
   1.233 - 	$(gdb_string_h) $(i386_tdep_h) $(i386_linux_tdep_h) $(glibc_tdep_h) \
   1.234 --	$(solib_svr4_h)
   1.235 -+	$(solib_svr4_h) $(dwarf2_frame_h)
   1.236 - i386ly-tdep.o: i386ly-tdep.c $(defs_h) $(gdbcore_h) $(inferior_h) \
   1.237 - 	$(regcache_h) $(target_h) $(osabi_h) $(i386_tdep_h)
   1.238 - i386-nat.o: i386-nat.c $(defs_h) $(breakpoint_h) $(command_h) $(gdbcmd_h)
   1.239 -@@ -2606,7 +2606,8 @@ symfile.o: symfile.c $(defs_h) $(bfdlink
   1.240 - 	$(hashtab_h) $(readline_h) $(gdb_assert_h) $(block_h) \
   1.241 - 	$(gdb_string_h) $(gdb_stat_h)
   1.242 - symfile-mem.o: symfile-mem.c $(defs_h) $(symtab_h) $(gdbcore_h) \
   1.243 --	$(objfiles_h) $(gdbcmd_h) $(target_h) $(value_h) $(symfile_h)
   1.244 -+	$(objfiles_h) $(gdbcmd_h) $(target_h) $(value_h) $(symfile_h) \
   1.245 -+	$(observer_h) $(auxv_h) $(elf_common_h)
   1.246 - symmisc.o: symmisc.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(bfd_h) \
   1.247 - 	$(symfile_h) $(objfiles_h) $(breakpoint_h) $(command_h) \
   1.248 - 	$(gdb_obstack_h) $(language_h) $(bcache_h) $(block_h) $(gdb_regex_h) \