gdb/
[external/binutils.git] / gdb / corefile.c
1 /* Core dump and executable file functions above target vector, for GDB.
2
3    Copyright (C) 1986, 1987, 1989, 1991, 1992, 1993, 1994, 1996, 1997, 1998,
4    1999, 2000, 2001, 2003, 2006, 2007, 2008, 2009, 2010
5    Free Software Foundation, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "gdb_string.h"
24 #include <errno.h>
25 #include <signal.h>
26 #include <fcntl.h>
27 #include "inferior.h"
28 #include "symtab.h"
29 #include "command.h"
30 #include "gdbcmd.h"
31 #include "bfd.h"
32 #include "target.h"
33 #include "gdbcore.h"
34 #include "dis-asm.h"
35 #include "gdb_stat.h"
36 #include "completer.h"
37 #include "exceptions.h"
38
39 /* Local function declarations.  */
40
41 extern void _initialize_core (void);
42 static void call_extra_exec_file_hooks (char *filename);
43
44 /* You can have any number of hooks for `exec_file_command' command to
45    call.  If there's only one hook, it is set in exec_file_display
46    hook.  If there are two or more hooks, they are set in
47    exec_file_extra_hooks[], and deprecated_exec_file_display_hook is
48    set to a function that calls all of them.  This extra complexity is
49    needed to preserve compatibility with old code that assumed that
50    only one hook could be set, and which called
51    deprecated_exec_file_display_hook directly.  */
52
53 typedef void (*hook_type) (char *);
54
55 hook_type deprecated_exec_file_display_hook;    /* the original hook */
56 static hook_type *exec_file_extra_hooks;        /* array of additional hooks */
57 static int exec_file_hook_count = 0;    /* size of array */
58
59 /* Binary file diddling handle for the core file.  */
60
61 bfd *core_bfd = NULL;
62
63 /* corelow.c target (if included for this gdb target).  */
64
65 struct target_ops *core_target;
66 \f
67
68 /* Backward compatability with old way of specifying core files.  */
69
70 void
71 core_file_command (char *filename, int from_tty)
72 {
73   dont_repeat ();               /* Either way, seems bogus. */
74
75   if (core_target == NULL)
76     error (_("GDB can't read core files on this machine."));
77
78   if (!filename)
79     (core_target->to_detach) (core_target, filename, from_tty);
80   else
81     (core_target->to_open) (filename, from_tty);
82 }
83 \f
84
85 /* If there are two or more functions that wish to hook into
86    exec_file_command, this function will call all of the hook
87    functions.  */
88
89 static void
90 call_extra_exec_file_hooks (char *filename)
91 {
92   int i;
93
94   for (i = 0; i < exec_file_hook_count; i++)
95     (*exec_file_extra_hooks[i]) (filename);
96 }
97
98 /* Call this to specify the hook for exec_file_command to call back.
99    This is called from the x-window display code.  */
100
101 void
102 specify_exec_file_hook (void (*hook) (char *))
103 {
104   hook_type *new_array;
105
106   if (deprecated_exec_file_display_hook != NULL)
107     {
108       /* There's already a hook installed.  Arrange to have both it
109        * and the subsequent hooks called. */
110       if (exec_file_hook_count == 0)
111         {
112           /* If this is the first extra hook, initialize the hook array.  */
113           exec_file_extra_hooks = (hook_type *) xmalloc (sizeof (hook_type));
114           exec_file_extra_hooks[0] = deprecated_exec_file_display_hook;
115           deprecated_exec_file_display_hook = call_extra_exec_file_hooks;
116           exec_file_hook_count = 1;
117         }
118
119       /* Grow the hook array by one and add the new hook to the end.
120          Yes, it's inefficient to grow it by one each time but since
121          this is hardly ever called it's not a big deal.  */
122       exec_file_hook_count++;
123       new_array =
124         (hook_type *) xrealloc (exec_file_extra_hooks,
125                                 exec_file_hook_count * sizeof (hook_type));
126       exec_file_extra_hooks = new_array;
127       exec_file_extra_hooks[exec_file_hook_count - 1] = hook;
128     }
129   else
130     deprecated_exec_file_display_hook = hook;
131 }
132
133 /* The exec file must be closed before running an inferior.
134    If it is needed again after the inferior dies, it must
135    be reopened.  */
136
137 void
138 close_exec_file (void)
139 {
140 #if 0                           /* FIXME */
141   if (exec_bfd)
142     bfd_tempclose (exec_bfd);
143 #endif
144 }
145
146 void
147 reopen_exec_file (void)
148 {
149 #if 0                           /* FIXME */
150   if (exec_bfd)
151     bfd_reopen (exec_bfd);
152 #else
153   char *filename;
154   int res;
155   struct stat st;
156   struct cleanup *cleanups;
157
158   /* Don't do anything if there isn't an exec file. */
159   if (exec_bfd == NULL)
160     return;
161
162   /* If the timestamp of the exec file has changed, reopen it. */
163   filename = xstrdup (bfd_get_filename (exec_bfd));
164   cleanups = make_cleanup (xfree, filename);
165   res = stat (filename, &st);
166
167   if (exec_bfd_mtime && exec_bfd_mtime != st.st_mtime)
168     exec_file_attach (filename, 0);
169   else
170     /* If we accessed the file since last opening it, close it now;
171        this stops GDB from holding the executable open after it
172        exits.  */
173     bfd_cache_close_all ();
174
175   do_cleanups (cleanups);
176 #endif
177 }
178 \f
179 /* If we have both a core file and an exec file,
180    print a warning if they don't go together.  */
181
182 void
183 validate_files (void)
184 {
185   if (exec_bfd && core_bfd)
186     {
187       if (!core_file_matches_executable_p (core_bfd, exec_bfd))
188         warning (_("core file may not match specified executable file."));
189       else if (bfd_get_mtime (exec_bfd) > bfd_get_mtime (core_bfd))
190         warning (_("exec file is newer than core file."));
191     }
192 }
193
194 /* Return the name of the executable file as a string.
195    ERR nonzero means get error if there is none specified;
196    otherwise return 0 in that case.  */
197
198 char *
199 get_exec_file (int err)
200 {
201   if (exec_bfd)
202     return bfd_get_filename (exec_bfd);
203   if (!err)
204     return NULL;
205
206   error (_("No executable file specified.\n\
207 Use the \"file\" or \"exec-file\" command."));
208   return NULL;
209 }
210 \f
211
212 /* Report a memory error by throwing a MEMORY_ERROR error.  */
213
214 void
215 memory_error (int status, CORE_ADDR memaddr)
216 {
217   if (status == EIO)
218     /* Actually, address between memaddr and memaddr + len was out of
219        bounds.  */
220     throw_error (MEMORY_ERROR,
221                  _("Cannot access memory at address %s"),
222                  paddress (target_gdbarch, memaddr));
223   else
224     throw_error (MEMORY_ERROR,
225                  _("Error accessing memory address %s: %s."),
226                  paddress (target_gdbarch, memaddr),
227                  safe_strerror (status));
228 }
229
230 /* Same as target_read_memory, but report an error if can't read.  */
231
232 void
233 read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
234 {
235   int status;
236
237   status = target_read_memory (memaddr, myaddr, len);
238   if (status != 0)
239     memory_error (status, memaddr);
240 }
241
242 /* Same as target_read_stack, but report an error if can't read.  */
243
244 void
245 read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, int len)
246 {
247   int status;
248
249   status = target_read_stack (memaddr, myaddr, len);
250   if (status != 0)
251     memory_error (status, memaddr);
252 }
253
254 /* Argument / return result struct for use with
255    do_captured_read_memory_integer().  MEMADDR and LEN are filled in
256    by gdb_read_memory_integer().  RESULT is the contents that were
257    successfully read from MEMADDR of length LEN.  */
258
259 struct captured_read_memory_integer_arguments
260 {
261   CORE_ADDR memaddr;
262   int len;
263   enum bfd_endian byte_order;
264   LONGEST result;
265 };
266
267 /* Helper function for gdb_read_memory_integer().  DATA must be a
268    pointer to a captured_read_memory_integer_arguments struct. 
269    Return 1 if successful.  Note that the catch_errors() interface
270    will return 0 if an error occurred while reading memory.  This
271    choice of return code is so that we can distinguish between
272    success and failure.  */
273
274 static int
275 do_captured_read_memory_integer (void *data)
276 {
277   struct captured_read_memory_integer_arguments *args = (struct captured_read_memory_integer_arguments*) data;
278   CORE_ADDR memaddr = args->memaddr;
279   int len = args->len;
280   enum bfd_endian byte_order = args->byte_order;
281
282   args->result = read_memory_integer (memaddr, len, byte_order);
283
284   return 1;
285 }
286
287 /* Read memory at MEMADDR of length LEN and put the contents in
288    RETURN_VALUE.  Return 0 if MEMADDR couldn't be read and non-zero
289    if successful.  */
290
291 int
292 safe_read_memory_integer (CORE_ADDR memaddr, int len, 
293                           enum bfd_endian byte_order,
294                           LONGEST *return_value)
295 {
296   int status;
297   struct captured_read_memory_integer_arguments args;
298
299   args.memaddr = memaddr;
300   args.len = len;
301   args.byte_order = byte_order;
302
303   status = catch_errors (do_captured_read_memory_integer, &args,
304                         "", RETURN_MASK_ALL);
305   if (status)
306     *return_value = args.result;
307
308   return status;
309 }
310
311 LONGEST
312 read_memory_integer (CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
313 {
314   gdb_byte buf[sizeof (LONGEST)];
315
316   read_memory (memaddr, buf, len);
317   return extract_signed_integer (buf, len, byte_order);
318 }
319
320 ULONGEST
321 read_memory_unsigned_integer (CORE_ADDR memaddr, int len, enum bfd_endian byte_order)
322 {
323   gdb_byte buf[sizeof (ULONGEST)];
324
325   read_memory (memaddr, buf, len);
326   return extract_unsigned_integer (buf, len, byte_order);
327 }
328
329 void
330 read_memory_string (CORE_ADDR memaddr, char *buffer, int max_len)
331 {
332   char *cp;
333   int i;
334   int cnt;
335
336   cp = buffer;
337   while (1)
338     {
339       if (cp - buffer >= max_len)
340         {
341           buffer[max_len - 1] = '\0';
342           break;
343         }
344       cnt = max_len - (cp - buffer);
345       if (cnt > 8)
346         cnt = 8;
347       read_memory (memaddr + (int) (cp - buffer), cp, cnt);
348       for (i = 0; i < cnt && *cp; i++, cp++)
349         ;                       /* null body */
350
351       if (i < cnt && !*cp)
352         break;
353     }
354 }
355
356 CORE_ADDR
357 read_memory_typed_address (CORE_ADDR addr, struct type *type)
358 {
359   gdb_byte *buf = alloca (TYPE_LENGTH (type));
360
361   read_memory (addr, buf, TYPE_LENGTH (type));
362   return extract_typed_address (buf, type);
363 }
364
365 /* Same as target_write_memory, but report an error if can't write.  */
366 void
367 write_memory (CORE_ADDR memaddr, const bfd_byte *myaddr, int len)
368 {
369   int status;
370
371   status = target_write_memory (memaddr, myaddr, len);
372   if (status != 0)
373     memory_error (status, memaddr);
374 }
375
376 /* Store VALUE at ADDR in the inferior as a LEN-byte unsigned integer.  */
377 void
378 write_memory_unsigned_integer (CORE_ADDR addr, int len, 
379                                enum bfd_endian byte_order,
380                                ULONGEST value)
381 {
382   gdb_byte *buf = alloca (len);
383
384   store_unsigned_integer (buf, len, byte_order, value);
385   write_memory (addr, buf, len);
386 }
387
388 /* Store VALUE at ADDR in the inferior as a LEN-byte signed integer.  */
389 void
390 write_memory_signed_integer (CORE_ADDR addr, int len, 
391                              enum bfd_endian byte_order,
392                              LONGEST value)
393 {
394   gdb_byte *buf = alloca (len);
395
396   store_signed_integer (buf, len, byte_order, value);
397   write_memory (addr, buf, len);
398 }
399 \f
400 /* The current default bfd target.  Points to storage allocated for
401    gnutarget_string.  */
402 char *gnutarget;
403
404 /* Same thing, except it is "auto" not NULL for the default case.  */
405 static char *gnutarget_string;
406 static void
407 show_gnutarget_string (struct ui_file *file, int from_tty,
408                        struct cmd_list_element *c, const char *value)
409 {
410   fprintf_filtered (file, _("The current BFD target is \"%s\".\n"), value);
411 }
412
413 static void set_gnutarget_command (char *, int, struct cmd_list_element *);
414
415 static void
416 set_gnutarget_command (char *ignore, int from_tty, struct cmd_list_element *c)
417 {
418   if (strcmp (gnutarget_string, "auto") == 0)
419     gnutarget = NULL;
420   else
421     gnutarget = gnutarget_string;
422 }
423
424 /* Set the gnutarget.  */
425 void
426 set_gnutarget (char *newtarget)
427 {
428   if (gnutarget_string != NULL)
429     xfree (gnutarget_string);
430   gnutarget_string = xstrdup (newtarget);
431   set_gnutarget_command (NULL, 0, NULL);
432 }
433
434 void
435 _initialize_core (void)
436 {
437   struct cmd_list_element *c;
438
439   c = add_cmd ("core-file", class_files, core_file_command, _("\
440 Use FILE as core dump for examining memory and registers.\n\
441 No arg means have no core file.  This command has been superseded by the\n\
442 `target core' and `detach' commands."), &cmdlist);
443   set_cmd_completer (c, filename_completer);
444
445   
446   add_setshow_string_noescape_cmd ("gnutarget", class_files,
447                                    &gnutarget_string, _("\
448 Set the current BFD target."), _("\
449 Show the current BFD target."), _("\
450 Use `set gnutarget auto' to specify automatic detection."),
451                                    set_gnutarget_command,
452                                    show_gnutarget_string,
453                                    &setlist, &showlist);
454
455   if (getenv ("GNUTARGET"))
456     set_gnutarget (getenv ("GNUTARGET"));
457   else
458     set_gnutarget ("auto");
459 }