yann@96
|
1 |
Status: Checked in to HEAD after 6.3.
|
yann@96
|
2 |
|
yann@96
|
3 |
2004-11-07 Andrew Cagney <cagney@redhat.com>
|
yann@96
|
4 |
Daniel Jacobowitz <dan@debian.org>
|
yann@96
|
5 |
Roland McGrath <roland@redhat.com>
|
yann@96
|
6 |
|
yann@96
|
7 |
* Makefile.in (symfile-mem.o): Update dependencies.
|
yann@96
|
8 |
* i386-linux-tdep.c (i386_linux_dwarf_signal_frame_p): New.
|
yann@96
|
9 |
(i386_linux_init_abi): Call dwarf2_frame_set_signal_frame_p.
|
yann@96
|
10 |
* inf-ptrace.c (inf_ptrace_attach): Call
|
yann@96
|
11 |
observer_notify_inferior_created.
|
yann@96
|
12 |
* inftarg.c (child_attach): Likewise.
|
yann@96
|
13 |
* symfile-mem.c: Include "observer.h", "auxv.h", and "elf/common.h".
|
yann@96
|
14 |
(symbol_file_add_from_memory): Take NAME argument. Use it for
|
yann@96
|
15 |
the new BFD's filename.
|
yann@96
|
16 |
(add_symbol_file_from_memory_command): Update call to
|
yann@96
|
17 |
symbol_file_add_from_memory.
|
yann@96
|
18 |
(struct symbol_file_add_from_memory_args, add_vsyscall_page)
|
yann@96
|
19 |
(symbol_file_add_from_memory_wrapper): New.
|
yann@96
|
20 |
(_initialize_symfile_mem): Register add_vsyscall_page as an
|
yann@96
|
21 |
inferior_created observer.
|
yann@96
|
22 |
|
yann@96
|
23 |
Index: gdb-6.3/gdb/i386-linux-tdep.c
|
yann@96
|
24 |
===================================================================
|
yann@96
|
25 |
--- gdb-6.3.orig/gdb/i386-linux-tdep.c 2004-08-06 16:58:28.000000000 -0400
|
yann@96
|
26 |
+++ gdb-6.3/gdb/i386-linux-tdep.c 2004-11-10 00:55:06.669398770 -0500
|
yann@96
|
27 |
@@ -27,6 +27,7 @@
|
yann@96
|
28 |
#include "inferior.h"
|
yann@96
|
29 |
#include "osabi.h"
|
yann@96
|
30 |
#include "reggroups.h"
|
yann@96
|
31 |
+#include "dwarf2-frame.h"
|
yann@96
|
32 |
|
yann@96
|
33 |
#include "gdb_string.h"
|
yann@96
|
34 |
|
yann@96
|
35 |
@@ -244,6 +245,27 @@ i386_linux_sigtramp_p (struct frame_info
|
yann@96
|
36 |
|| strcmp ("__restore_rt", name) == 0);
|
yann@96
|
37 |
}
|
yann@96
|
38 |
|
yann@96
|
39 |
+/* Return one if the unwound PC from NEXT_FRAME is in a signal trampoline
|
yann@96
|
40 |
+ which may have DWARF-2 CFI. */
|
yann@96
|
41 |
+
|
yann@96
|
42 |
+static int
|
yann@96
|
43 |
+i386_linux_dwarf_signal_frame_p (struct gdbarch *gdbarch,
|
yann@96
|
44 |
+ struct frame_info *next_frame)
|
yann@96
|
45 |
+{
|
yann@96
|
46 |
+ CORE_ADDR pc = frame_pc_unwind (next_frame);
|
yann@96
|
47 |
+ char *name;
|
yann@96
|
48 |
+
|
yann@96
|
49 |
+ find_pc_partial_function (pc, &name, NULL, NULL);
|
yann@96
|
50 |
+
|
yann@96
|
51 |
+ /* If a vsyscall DSO is in use, the signal trampolines may have these
|
yann@96
|
52 |
+ names. */
|
yann@96
|
53 |
+ if (name && (strcmp (name, "__kernel_sigreturn") == 0
|
yann@96
|
54 |
+ || strcmp (name, "__kernel_rt_sigreturn") == 0))
|
yann@96
|
55 |
+ return 1;
|
yann@96
|
56 |
+
|
yann@96
|
57 |
+ return 0;
|
yann@96
|
58 |
+}
|
yann@96
|
59 |
+
|
yann@96
|
60 |
/* Offset to struct sigcontext in ucontext, from <asm/ucontext.h>. */
|
yann@96
|
61 |
#define I386_LINUX_UCONTEXT_SIGCONTEXT_OFFSET 20
|
yann@96
|
62 |
|
yann@96
|
63 |
@@ -414,6 +436,8 @@ i386_linux_init_abi (struct gdbarch_info
|
yann@96
|
64 |
|
yann@96
|
65 |
/* GNU/Linux uses the dynamic linker included in the GNU C Library. */
|
yann@96
|
66 |
set_gdbarch_skip_solib_resolver (gdbarch, glibc_skip_solib_resolver);
|
yann@96
|
67 |
+
|
yann@96
|
68 |
+ dwarf2_frame_set_signal_frame_p (gdbarch, i386_linux_dwarf_signal_frame_p);
|
yann@96
|
69 |
}
|
yann@96
|
70 |
|
yann@96
|
71 |
/* Provide a prototype to silence -Wmissing-prototypes. */
|
yann@96
|
72 |
Index: gdb-6.3/gdb/inf-ptrace.c
|
yann@96
|
73 |
===================================================================
|
yann@96
|
74 |
--- gdb-6.3.orig/gdb/inf-ptrace.c 2004-10-15 09:29:33.000000000 -0400
|
yann@96
|
75 |
+++ gdb-6.3/gdb/inf-ptrace.c 2004-11-10 00:53:43.697615843 -0500
|
yann@96
|
76 |
@@ -220,6 +220,10 @@ inf_ptrace_attach (char *args, int from_
|
yann@96
|
77 |
|
yann@96
|
78 |
inferior_ptid = pid_to_ptid (pid);
|
yann@96
|
79 |
push_target (ptrace_ops_hack);
|
yann@96
|
80 |
+
|
yann@96
|
81 |
+ /* Do this first, before anything has had a chance to query the
|
yann@96
|
82 |
+ inferior's symbol table or similar. */
|
yann@96
|
83 |
+ observer_notify_inferior_created (¤t_target, from_tty);
|
yann@96
|
84 |
}
|
yann@96
|
85 |
|
yann@96
|
86 |
static void
|
yann@96
|
87 |
Index: gdb-6.3/gdb/inftarg.c
|
yann@96
|
88 |
===================================================================
|
yann@96
|
89 |
--- gdb-6.3.orig/gdb/inftarg.c 2004-10-08 16:29:47.000000000 -0400
|
yann@96
|
90 |
+++ gdb-6.3/gdb/inftarg.c 2004-11-10 00:53:43.711613107 -0500
|
yann@96
|
91 |
@@ -211,6 +211,10 @@ child_attach (char *args, int from_tty)
|
yann@96
|
92 |
|
yann@96
|
93 |
inferior_ptid = pid_to_ptid (pid);
|
yann@96
|
94 |
push_target (&deprecated_child_ops);
|
yann@96
|
95 |
+
|
yann@96
|
96 |
+ /* Do this first, before anything has had a chance to query the
|
yann@96
|
97 |
+ inferior's symbol table or similar. */
|
yann@96
|
98 |
+ observer_notify_inferior_created (¤t_target, from_tty);
|
yann@96
|
99 |
}
|
yann@96
|
100 |
|
yann@96
|
101 |
#if !defined(CHILD_POST_ATTACH)
|
yann@96
|
102 |
Index: gdb-6.3/gdb/symfile-mem.c
|
yann@96
|
103 |
===================================================================
|
yann@96
|
104 |
--- gdb-6.3.orig/gdb/symfile-mem.c 2004-07-17 10:24:07.000000000 -0400
|
yann@96
|
105 |
+++ gdb-6.3/gdb/symfile-mem.c 2004-11-10 00:53:43.722610958 -0500
|
yann@96
|
106 |
@@ -52,13 +52,19 @@
|
yann@96
|
107 |
#include "target.h"
|
yann@96
|
108 |
#include "value.h"
|
yann@96
|
109 |
#include "symfile.h"
|
yann@96
|
110 |
+#include "observer.h"
|
yann@96
|
111 |
+#include "auxv.h"
|
yann@96
|
112 |
+#include "elf/common.h"
|
yann@96
|
113 |
|
yann@96
|
114 |
|
yann@96
|
115 |
/* Read inferior memory at ADDR to find the header of a loaded object file
|
yann@96
|
116 |
and read its in-core symbols out of inferior memory. TEMPL is a bfd
|
yann@96
|
117 |
- representing the target's format. */
|
yann@96
|
118 |
+ representing the target's format. NAME is the name to use for this
|
yann@96
|
119 |
+ symbol file in messages; it can be NULL or a malloc-allocated string
|
yann@96
|
120 |
+ which will be attached to the BFD. */
|
yann@96
|
121 |
static struct objfile *
|
yann@96
|
122 |
-symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, int from_tty)
|
yann@96
|
123 |
+symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr, char *name,
|
yann@96
|
124 |
+ int from_tty)
|
yann@96
|
125 |
{
|
yann@96
|
126 |
struct objfile *objf;
|
yann@96
|
127 |
struct bfd *nbfd;
|
yann@96
|
128 |
@@ -75,7 +81,10 @@ symbol_file_add_from_memory (struct bfd
|
yann@96
|
129 |
if (nbfd == NULL)
|
yann@96
|
130 |
error ("Failed to read a valid object file image from memory.");
|
yann@96
|
131 |
|
yann@96
|
132 |
- nbfd->filename = xstrdup ("shared object read from target memory");
|
yann@96
|
133 |
+ if (name == NULL)
|
yann@96
|
134 |
+ nbfd->filename = xstrdup ("shared object read from target memory");
|
yann@96
|
135 |
+ else
|
yann@96
|
136 |
+ nbfd->filename = name;
|
yann@96
|
137 |
|
yann@96
|
138 |
if (!bfd_check_format (nbfd, bfd_object))
|
yann@96
|
139 |
{
|
yann@96
|
140 |
@@ -129,7 +138,73 @@ add_symbol_file_from_memory_command (cha
|
yann@96
|
141 |
error ("\
|
yann@96
|
142 |
Must use symbol-file or exec-file before add-symbol-file-from-memory.");
|
yann@96
|
143 |
|
yann@96
|
144 |
- symbol_file_add_from_memory (templ, addr, from_tty);
|
yann@96
|
145 |
+ symbol_file_add_from_memory (templ, addr, NULL, from_tty);
|
yann@96
|
146 |
+}
|
yann@96
|
147 |
+
|
yann@96
|
148 |
+/* Arguments for symbol_file_add_from_memory_wrapper. */
|
yann@96
|
149 |
+
|
yann@96
|
150 |
+struct symbol_file_add_from_memory_args
|
yann@96
|
151 |
+{
|
yann@96
|
152 |
+ struct bfd *bfd;
|
yann@96
|
153 |
+ CORE_ADDR sysinfo_ehdr;
|
yann@96
|
154 |
+ char *name;
|
yann@96
|
155 |
+ int from_tty;
|
yann@96
|
156 |
+};
|
yann@96
|
157 |
+
|
yann@96
|
158 |
+/* Wrapper function for symbol_file_add_from_memory, for
|
yann@96
|
159 |
+ catch_exceptions. */
|
yann@96
|
160 |
+
|
yann@96
|
161 |
+static int
|
yann@96
|
162 |
+symbol_file_add_from_memory_wrapper (struct ui_out *uiout, void *data)
|
yann@96
|
163 |
+{
|
yann@96
|
164 |
+ struct symbol_file_add_from_memory_args *args = data;
|
yann@96
|
165 |
+
|
yann@96
|
166 |
+ symbol_file_add_from_memory (args->bfd, args->sysinfo_ehdr, args->name,
|
yann@96
|
167 |
+ args->from_tty);
|
yann@96
|
168 |
+ return 0;
|
yann@96
|
169 |
+}
|
yann@96
|
170 |
+
|
yann@96
|
171 |
+/* Try to add the symbols for the vsyscall page, if there is one. This function
|
yann@96
|
172 |
+ is called via the inferior_created observer. */
|
yann@96
|
173 |
+
|
yann@96
|
174 |
+static void
|
yann@96
|
175 |
+add_vsyscall_page (struct target_ops *target, int from_tty)
|
yann@96
|
176 |
+{
|
yann@96
|
177 |
+ CORE_ADDR sysinfo_ehdr;
|
yann@96
|
178 |
+
|
yann@96
|
179 |
+ if (target_auxv_search (target, AT_SYSINFO_EHDR, &sysinfo_ehdr) > 0
|
yann@96
|
180 |
+ && sysinfo_ehdr != (CORE_ADDR) 0)
|
yann@96
|
181 |
+ {
|
yann@96
|
182 |
+ struct bfd *bfd;
|
yann@96
|
183 |
+ struct symbol_file_add_from_memory_args args;
|
yann@96
|
184 |
+
|
yann@96
|
185 |
+ if (core_bfd != NULL)
|
yann@96
|
186 |
+ bfd = core_bfd;
|
yann@96
|
187 |
+ else if (exec_bfd != NULL)
|
yann@96
|
188 |
+ bfd = exec_bfd;
|
yann@96
|
189 |
+ else
|
yann@96
|
190 |
+ /* FIXME: cagney/2004-05-06: Should not require an existing
|
yann@96
|
191 |
+ BFD when trying to create a run-time BFD of the VSYSCALL
|
yann@96
|
192 |
+ page in the inferior. Unfortunately that's the current
|
yann@96
|
193 |
+ interface so for the moment bail. Introducing a
|
yann@96
|
194 |
+ ``bfd_runtime'' (a BFD created using the loaded image) file
|
yann@96
|
195 |
+ format should fix this. */
|
yann@96
|
196 |
+ {
|
yann@96
|
197 |
+ warning ("could not load vsyscall page because no executable was specified");
|
yann@96
|
198 |
+ warning ("try using the \"file\" command first");
|
yann@96
|
199 |
+ return;
|
yann@96
|
200 |
+ }
|
yann@96
|
201 |
+ args.bfd = bfd;
|
yann@96
|
202 |
+ args.sysinfo_ehdr = sysinfo_ehdr;
|
yann@96
|
203 |
+ xasprintf (&args.name, "system-supplied DSO at 0x%s",
|
yann@96
|
204 |
+ paddr_nz (sysinfo_ehdr));
|
yann@96
|
205 |
+ /* Pass zero for FROM_TTY, because the action of loading the
|
yann@96
|
206 |
+ vsyscall DSO was not triggered by the user, even if the user
|
yann@96
|
207 |
+ typed "run" at the TTY. */
|
yann@96
|
208 |
+ args.from_tty = 0;
|
yann@96
|
209 |
+ catch_exceptions (uiout, symbol_file_add_from_memory_wrapper,
|
yann@96
|
210 |
+ &args, NULL, RETURN_MASK_ALL);
|
yann@96
|
211 |
+ }
|
yann@96
|
212 |
}
|
yann@96
|
213 |
|
yann@96
|
214 |
|
yann@96
|
215 |
@@ -143,4 +218,7 @@ Load the symbols out of memory from a dy
|
yann@96
|
216 |
Give an expression for the address of the file's shared object file header.",
|
yann@96
|
217 |
&cmdlist);
|
yann@96
|
218 |
|
yann@96
|
219 |
+ /* Want to know of each new inferior so that its vsyscall info can
|
yann@96
|
220 |
+ be extracted. */
|
yann@96
|
221 |
+ observer_attach_inferior_created (add_vsyscall_page);
|
yann@96
|
222 |
}
|
yann@96
|
223 |
Index: gdb-6.3/gdb/Makefile.in
|
yann@96
|
224 |
===================================================================
|
yann@96
|
225 |
--- gdb-6.3.orig/gdb/Makefile.in 2004-11-10 00:29:00.000000000 -0500
|
yann@96
|
226 |
+++ gdb-6.3/gdb/Makefile.in 2004-11-10 00:54:47.728100986 -0500
|
yann@96
|
227 |
@@ -2020,7 +2020,7 @@ i386-linux-nat.o: i386-linux-nat.c $(def
|
yann@96
|
228 |
i386-linux-tdep.o: i386-linux-tdep.c $(defs_h) $(gdbcore_h) $(frame_h) \
|
yann@96
|
229 |
$(value_h) $(regcache_h) $(inferior_h) $(osabi_h) $(reggroups_h) \
|
yann@96
|
230 |
$(gdb_string_h) $(i386_tdep_h) $(i386_linux_tdep_h) $(glibc_tdep_h) \
|
yann@96
|
231 |
- $(solib_svr4_h)
|
yann@96
|
232 |
+ $(solib_svr4_h) $(dwarf2_frame_h)
|
yann@96
|
233 |
i386ly-tdep.o: i386ly-tdep.c $(defs_h) $(gdbcore_h) $(inferior_h) \
|
yann@96
|
234 |
$(regcache_h) $(target_h) $(osabi_h) $(i386_tdep_h)
|
yann@96
|
235 |
i386-nat.o: i386-nat.c $(defs_h) $(breakpoint_h) $(command_h) $(gdbcmd_h)
|
yann@96
|
236 |
@@ -2606,7 +2606,8 @@ symfile.o: symfile.c $(defs_h) $(bfdlink
|
yann@96
|
237 |
$(hashtab_h) $(readline_h) $(gdb_assert_h) $(block_h) \
|
yann@96
|
238 |
$(gdb_string_h) $(gdb_stat_h)
|
yann@96
|
239 |
symfile-mem.o: symfile-mem.c $(defs_h) $(symtab_h) $(gdbcore_h) \
|
yann@96
|
240 |
- $(objfiles_h) $(gdbcmd_h) $(target_h) $(value_h) $(symfile_h)
|
yann@96
|
241 |
+ $(objfiles_h) $(gdbcmd_h) $(target_h) $(value_h) $(symfile_h) \
|
yann@96
|
242 |
+ $(observer_h) $(auxv_h) $(elf_common_h)
|
yann@96
|
243 |
symmisc.o: symmisc.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(bfd_h) \
|
yann@96
|
244 |
$(symfile_h) $(objfiles_h) $(breakpoint_h) $(command_h) \
|
yann@96
|
245 |
$(gdb_obstack_h) $(language_h) $(bcache_h) $(block_h) $(gdb_regex_h) \
|