⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 650-debian_vsyscall-gdb-support.patch

📁 這是一個實時嵌入式作業系統 實作了MCS51 ARM等MCU
💻 PATCH
字号:
Status: Checked in to HEAD after 6.3.2004-11-07  Andrew Cagney  <cagney@redhat.com>	    Daniel Jacobowitz  <dan@debian.org>	    Roland McGrath  <roland@redhat.com>	* Makefile.in (symfile-mem.o): Update dependencies.	* i386-linux-tdep.c (i386_linux_dwarf_signal_frame_p): New.	(i386_linux_init_abi): Call dwarf2_frame_set_signal_frame_p.	* inf-ptrace.c (inf_ptrace_attach): Call	observer_notify_inferior_created.	* inftarg.c (child_attach): Likewise.	* symfile-mem.c: Include "observer.h", "auxv.h", and "elf/common.h".	(symbol_file_add_from_memory): Take NAME argument.  Use it for	the new BFD's filename.	(add_symbol_file_from_memory_command): Update call to	symbol_file_add_from_memory.	(struct symbol_file_add_from_memory_args, add_vsyscall_page)	(symbol_file_add_from_memory_wrapper): New.	(_initialize_symfile_mem): Register add_vsyscall_page as an	inferior_created observer.Index: gdb-6.3/gdb/i386-linux-tdep.c===================================================================--- gdb-6.3.orig/gdb/i386-linux-tdep.c	2004-08-06 16:58:28.000000000 -0400+++ gdb-6.3/gdb/i386-linux-tdep.c	2004-11-10 00:55:06.669398770 -0500@@ -27,6 +27,7 @@ #include "inferior.h" #include "osabi.h" #include "reggroups.h"+#include "dwarf2-frame.h"  #include "gdb_string.h" @@ -244,6 +245,27 @@ i386_linux_sigtramp_p (struct frame_info 	  || strcmp ("__restore_rt", name) == 0); } +/* Return one if the unwound PC from NEXT_FRAME is in a signal trampoline+   which may have DWARF-2 CFI.  */++static int+i386_linux_dwarf_signal_frame_p (struct gdbarch *gdbarch,+				 struct frame_info *next_frame)+{+  CORE_ADDR pc = frame_pc_unwind (next_frame);+  char *name;++  find_pc_partial_function (pc, &name, NULL, NULL);++  /* If a vsyscall DSO is in use, the signal trampolines may have these+     names.  */+  if (name && (strcmp (name, "__kernel_sigreturn") == 0+	       || strcmp (name, "__kernel_rt_sigreturn") == 0))+    return 1;++  return 0;+}+ /* Offset to struct sigcontext in ucontext, from <asm/ucontext.h>.  */ #define I386_LINUX_UCONTEXT_SIGCONTEXT_OFFSET 20 @@ -414,6 +436,8 @@ i386_linux_init_abi (struct gdbarch_info    /* GNU/Linux uses the dynamic linker included in the GNU C Library.  */   set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);++  dwarf2_frame_set_signal_frame_p (gdbarch, i386_linux_dwarf_signal_frame_p); }  /* Provide a prototype to silence -Wmissing-prototypes.  */Index: gdb-6.3/gdb/inf-ptrace.c===================================================================--- gdb-6.3.orig/gdb/inf-ptrace.c	2004-10-15 09:29:33.000000000 -0400+++ gdb-6.3/gdb/inf-ptrace.c	2004-11-10 00:53:43.697615843 -0500@@ -220,6 +220,10 @@ inf_ptrace_attach (char *args, int from_    inferior_ptid = pid_to_ptid (pid);   push_target (ptrace_ops_hack);++  /* Do this first, before anything has had a chance to query the+     inferior's symbol table or similar.  */+  observer_notify_inferior_created (&current_target, from_tty); }  static voidIndex: gdb-6.3/gdb/inftarg.c===================================================================--- gdb-6.3.orig/gdb/inftarg.c	2004-10-08 16:29:47.000000000 -0400+++ gdb-6.3/gdb/inftarg.c	2004-11-10 00:53:43.711613107 -0500@@ -211,6 +211,10 @@ child_attach (char *args, int from_tty)      inferior_ptid = pid_to_ptid (pid);   push_target (&deprecated_child_ops);++  /* Do this first, before anything has had a chance to query the+     inferior's symbol table or similar.  */+  observer_notify_inferior_created (&current_target, from_tty); }  #if !defined(CHILD_POST_ATTACH)Index: gdb-6.3/gdb/symfile-mem.c===================================================================--- gdb-6.3.orig/gdb/symfile-mem.c	2004-07-17 10:24:07.000000000 -0400+++ gdb-6.3/gdb/symfile-mem.c	2004-11-10 00:53:43.722610958 -0500@@ -52,13 +52,19 @@ #include "target.h" #include "value.h" #include "symfile.h"+#include "observer.h"+#include "auxv.h"+#include "elf/common.h"   /* Read inferior memory at ADDR to find the header of a loaded object file    and read its in-core symbols out of inferior memory.  TEMPL is a bfd-   representing the target's format.  */+   representing the target's format.  NAME is the name to use for this+   symbol file in messages; it can be NULL or a malloc-allocated string+   which will be attached to the BFD.  */ static struct objfile *-symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, int from_tty)+symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, char *name,+			     int from_tty) {   struct objfile *objf;   struct bfd *nbfd;@@ -75,7 +81,10 @@ symbol_file_add_from_memory (struct bfd    if (nbfd == NULL)     error ("Failed to read a valid object file image from memory."); -  nbfd->filename = xstrdup ("shared object read from target memory");+  if (name == NULL)+    nbfd->filename = xstrdup ("shared object read from target memory");+  else+    nbfd->filename = name;    if (!bfd_check_format (nbfd, bfd_object))     {@@ -129,7 +138,73 @@ add_symbol_file_from_memory_command (cha     error ("\ Must use symbol-file or exec-file before add-symbol-file-from-memory."); -  symbol_file_add_from_memory (templ, addr, from_tty);+  symbol_file_add_from_memory (templ, addr, NULL, from_tty);+}++/* Arguments for symbol_file_add_from_memory_wrapper.  */++struct symbol_file_add_from_memory_args+{+  struct bfd *bfd;+  CORE_ADDR sysinfo_ehdr;+  char *name;+  int from_tty;+};++/* Wrapper function for symbol_file_add_from_memory, for+   catch_exceptions.  */++static int+symbol_file_add_from_memory_wrapper (struct ui_out *uiout, void *data)+{+  struct symbol_file_add_from_memory_args *args = data;++  symbol_file_add_from_memory (args->bfd, args->sysinfo_ehdr, args->name,+			       args->from_tty);+  return 0;+}++/* Try to add the symbols for the vsyscall page, if there is one.  This function+   is called via the inferior_created observer.  */++static void+add_vsyscall_page (struct target_ops *target, int from_tty)+{+  CORE_ADDR sysinfo_ehdr;++  if (target_auxv_search (target, AT_SYSINFO_EHDR, &sysinfo_ehdr) > 0+      && sysinfo_ehdr != (CORE_ADDR) 0)+    {+      struct bfd *bfd;+      struct symbol_file_add_from_memory_args args;++      if (core_bfd != NULL)+	bfd = core_bfd;+      else if (exec_bfd != NULL)+	bfd = exec_bfd;+      else+       /* FIXME: cagney/2004-05-06: Should not require an existing+	  BFD when trying to create a run-time BFD of the VSYSCALL+	  page in the inferior.  Unfortunately that's the current+	  interface so for the moment bail.  Introducing a+	  ``bfd_runtime'' (a BFD created using the loaded image) file+	  format should fix this.  */+	{+	  warning ("could not load vsyscall page because no executable was specified");+	  warning ("try using the \"file\" command first");+	  return;+	}+      args.bfd = bfd;+      args.sysinfo_ehdr = sysinfo_ehdr;+      xasprintf (&args.name, "system-supplied DSO at 0x%s",+		 paddr_nz (sysinfo_ehdr));+      /* Pass zero for FROM_TTY, because the action of loading the+	 vsyscall DSO was not triggered by the user, even if the user+	 typed "run" at the TTY.  */+      args.from_tty = 0;+      catch_exceptions (uiout, symbol_file_add_from_memory_wrapper,+			&args, NULL, RETURN_MASK_ALL);+    } }  @@ -143,4 +218,7 @@ Load the symbols out of memory from a dy Give an expression for the address of the file's shared object file header.",            &cmdlist); +  /* Want to know of each new inferior so that its vsyscall info can+     be extracted.  */+  observer_attach_inferior_created (add_vsyscall_page); }Index: gdb-6.3/gdb/Makefile.in===================================================================--- gdb-6.3.orig/gdb/Makefile.in	2004-11-10 00:29:00.000000000 -0500+++ gdb-6.3/gdb/Makefile.in	2004-11-10 00:54:47.728100986 -0500@@ -2020,7 +2020,7 @@ i386-linux-nat.o: i386-linux-nat.c $(def i386-linux-tdep.o: i386-linux-tdep.c $(defs_h) $(gdbcore_h) $(frame_h) \ 	$(value_h) $(regcache_h) $(inferior_h) $(osabi_h) $(reggroups_h) \ 	$(gdb_string_h) $(i386_tdep_h) $(i386_linux_tdep_h) $(glibc_tdep_h) \-	$(solib_svr4_h)+	$(solib_svr4_h) $(dwarf2_frame_h) i386ly-tdep.o: i386ly-tdep.c $(defs_h) $(gdbcore_h) $(inferior_h) \ 	$(regcache_h) $(target_h) $(osabi_h) $(i386_tdep_h) i386-nat.o: i386-nat.c $(defs_h) $(breakpoint_h) $(command_h) $(gdbcmd_h)@@ -2606,7 +2606,8 @@ symfile.o: symfile.c $(defs_h) $(bfdlink 	$(hashtab_h) $(readline_h) $(gdb_assert_h) $(block_h) \ 	$(gdb_string_h) $(gdb_stat_h) symfile-mem.o: symfile-mem.c $(defs_h) $(symtab_h) $(gdbcore_h) \-	$(objfiles_h) $(gdbcmd_h) $(target_h) $(value_h) $(symfile_h)+	$(objfiles_h) $(gdbcmd_h) $(target_h) $(value_h) $(symfile_h) \+	$(observer_h) $(auxv_h) $(elf_common_h) symmisc.o: symmisc.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(bfd_h) \ 	$(symfile_h) $(objfiles_h) $(breakpoint_h) $(command_h) \ 	$(gdb_obstack_h) $(language_h) $(bcache_h) $(block_h) $(gdb_regex_h) \

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -