878ab3b3900a073e7150200f657c772adab12ee9
[external/binutils.git] / gdb / corefile.c
1 /* Core dump and executable file functions above target vector, for GDB.
2
3    Copyright (C) 1986-2013 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include <string.h>
22 #include <errno.h>
23 #include <signal.h>
24 #include <fcntl.h>
25 #include "inferior.h"
26 #include "symtab.h"
27 #include "command.h"
28 #include "gdbcmd.h"
29 #include "bfd.h"
30 #include "target.h"
31 #include "gdbcore.h"
32 #include "dis-asm.h"
33 #include <sys/stat.h>
34 #include "completer.h"
35 #include "exceptions.h"
36 #include "observer.h"
37 #include "cli/cli-utils.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
57                                                    hooks.  */
58 static int exec_file_hook_count = 0;            /* Size of array.  */
59
60 /* Binary file diddling handle for the core file.  */
61
62 bfd *core_bfd = NULL;
63
64 /* corelow.c target.  It is never NULL after GDB initialization.  */
65
66 struct target_ops *core_target;
67 \f
68
69 /* Backward compatability with old way of specifying core files.  */
70
71 void
72 core_file_command (char *filename, int from_tty)
73 {
74   dont_repeat ();               /* Either way, seems bogus.  */
75
76   gdb_assert (core_target != NULL);
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
113              array.  */
114           exec_file_extra_hooks = (hook_type *)
115             xmalloc (sizeof (hook_type));
116           exec_file_extra_hooks[0] = deprecated_exec_file_display_hook;
117           deprecated_exec_file_display_hook = call_extra_exec_file_hooks;
118           exec_file_hook_count = 1;
119         }
120
121       /* Grow the hook array by one and add the new hook to the end.
122          Yes, it's inefficient to grow it by one each time but since
123          this is hardly ever called it's not a big deal.  */
124       exec_file_hook_count++;
125       new_array = (hook_type *)
126         xrealloc (exec_file_extra_hooks,
127                   exec_file_hook_count * sizeof (hook_type));
128       exec_file_extra_hooks = new_array;
129       exec_file_extra_hooks[exec_file_hook_count - 1] = hook;
130     }
131   else
132     deprecated_exec_file_display_hook = hook;
133 }
134
135 void
136 reopen_exec_file (void)
137 {
138   char *filename;
139   int res;
140   struct stat st;
141   struct cleanup *cleanups;
142
143   /* Don't do anything if there isn't an exec file.  */
144   if (exec_bfd == NULL)
145     return;
146
147   /* If the timestamp of the exec file has changed, reopen it.  */
148   filename = xstrdup (bfd_get_filename (exec_bfd));
149   cleanups = make_cleanup (xfree, filename);
150   res = stat (filename, &st);
151
152   if (exec_bfd_mtime && exec_bfd_mtime != st.st_mtime)
153     exec_file_attach (filename, 0);
154   else
155     /* If we accessed the file since last opening it, close it now;
156        this stops GDB from holding the executable open after it
157        exits.  */
158     bfd_cache_close_all ();
159
160   do_cleanups (cleanups);
161 }
162 \f
163 /* If we have both a core file and an exec file,
164    print a warning if they don't go together.  */
165
166 void
167 validate_files (void)
168 {
169   if (exec_bfd && core_bfd)
170     {
171       if (!core_file_matches_executable_p (core_bfd, exec_bfd))
172         warning (_("core file may not match specified executable file."));
173       else if (bfd_get_mtime (exec_bfd) > bfd_get_mtime (core_bfd))
174         warning (_("exec file is newer than core file."));
175     }
176 }
177
178 /* Return the name of the executable file as a string.
179    ERR nonzero means get error if there is none specified;
180    otherwise return 0 in that case.  */
181
182 char *
183 get_exec_file (int err)
184 {
185   if (exec_filename)
186     return exec_filename;
187   if (!err)
188     return NULL;
189
190   error (_("No executable file specified.\n\
191 Use the \"file\" or \"exec-file\" command."));
192   return NULL;
193 }
194 \f
195
196 char *
197 memory_error_message (enum target_xfer_error err,
198                       struct gdbarch *gdbarch, CORE_ADDR memaddr)
199 {
200   switch (err)
201     {
202     case TARGET_XFER_E_IO:
203       /* Actually, address between memaddr and memaddr + len was out of
204          bounds.  */
205       return xstrprintf (_("Cannot access memory at address %s"),
206                          paddress (gdbarch, memaddr));
207     case TARGET_XFER_E_UNAVAILABLE:
208       return xstrprintf (_("Memory at address %s unavailable."),
209                          paddress (gdbarch, memaddr));
210     default:
211       internal_error (__FILE__, __LINE__,
212                       "unhandled target_xfer_error: %s (%s)",
213                       target_xfer_error_to_string (err),
214                       plongest (err));
215     }
216 }
217
218 /* Report a memory error by throwing a suitable exception.  */
219
220 void
221 memory_error (enum target_xfer_error err, CORE_ADDR memaddr)
222 {
223   char *str;
224
225   /* Build error string.  */
226   str = memory_error_message (err, target_gdbarch (), memaddr);
227   make_cleanup (xfree, str);
228
229   /* Choose the right error to throw.  */
230   switch (err)
231     {
232     case TARGET_XFER_E_IO:
233       err = MEMORY_ERROR;
234       break;
235     case TARGET_XFER_E_UNAVAILABLE:
236       err = NOT_AVAILABLE_ERROR;
237       break;
238     }
239
240   /* Throw it.  */
241   throw_error (err, ("%s"), str);
242 }
243
244 /* Same as target_read_memory, but report an error if can't read.  */
245
246 void
247 read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
248 {
249   LONGEST xfered = 0;
250
251   while (xfered < len)
252     {
253       LONGEST xfer = target_xfer_partial (current_target.beneath,
254                                           TARGET_OBJECT_MEMORY, NULL,
255                                           myaddr + xfered, NULL,
256                                           memaddr + xfered, len - xfered);
257
258       if (xfer == 0)
259         memory_error (TARGET_XFER_E_IO, memaddr + xfered);
260       if (xfer < 0)
261         memory_error (xfer, memaddr + xfered);
262       xfered += xfer;
263       QUIT;
264     }
265 }
266
267 /* Same as target_read_stack, but report an error if can't read.  */
268
269 void
270 read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
271 {
272   int status;
273
274   status = target_read_stack (memaddr, myaddr, len);
275   if (status != 0)
276     memory_error (status, memaddr);
277 }
278
279 /* Argument / return result struct for use with
280    do_captured_read_memory_integer().  MEMADDR and LEN are filled in
281    by gdb_read_memory_integer().  RESULT is the contents that were
282    successfully read from MEMADDR of length LEN.  */
283
284 struct captured_read_memory_integer_arguments
285 {
286   CORE_ADDR memaddr;
287   int len;
288   enum bfd_endian byte_order;
289   LONGEST result;
290 };
291
292 /* Helper function for gdb_read_memory_integer().  DATA must be a
293    pointer to a captured_read_memory_integer_arguments struct.
294    Return 1 if successful.  Note that the catch_errors() interface
295    will return 0 if an error occurred while reading memory.  This
296    choice of return code is so that we can distinguish between
297    success and failure.  */
298
299 static int
300 do_captured_read_memory_integer (void *data)
301 {
302   struct captured_read_memory_integer_arguments *args
303     = (struct captured_read_memory_integer_arguments*) data;
304   CORE_ADDR memaddr = args->memaddr;
305   int len = args->len;
306   enum bfd_endian byte_order = args->byte_order;
307
308   args->result = read_memory_integer (memaddr, len, byte_order);
309
310   return 1;
311 }
312
313 /* Read memory at MEMADDR of length LEN and put the contents in
314    RETURN_VALUE.  Return 0 if MEMADDR couldn't be read and non-zero
315    if successful.  */
316
317 int
318 safe_read_memory_integer (CORE_ADDR memaddr, int len, 
319                           enum bfd_endian byte_order,
320                           LONGEST *return_value)
321 {
322   int status;
323   struct captured_read_memory_integer_arguments args;
324
325   args.memaddr = memaddr;
326   args.len = len;
327   args.byte_order = byte_order;
328
329   status = catch_errors (do_captured_read_memory_integer, &args,
330                          "", RETURN_MASK_ALL);
331   if (status)
332     *return_value = args.result;
333
334   return status;
335 }
336
337 LONGEST
338 read_memory_integer (CORE_ADDR memaddr, int len,
339                      enum bfd_endian byte_order)
340 {
341   gdb_byte buf[sizeof (LONGEST)];
342
343   read_memory (memaddr, buf, len);
344   return extract_signed_integer (buf, len, byte_order);
345 }
346
347 ULONGEST
348 read_memory_unsigned_integer (CORE_ADDR memaddr, int len,
349                               enum bfd_endian byte_order)
350 {
351   gdb_byte buf[sizeof (ULONGEST)];
352
353   read_memory (memaddr, buf, len);
354   return extract_unsigned_integer (buf, len, byte_order);
355 }
356
357 void
358 read_memory_string (CORE_ADDR memaddr, char *buffer, int max_len)
359 {
360   char *cp;
361   int i;
362   int cnt;
363
364   cp = buffer;
365   while (1)
366     {
367       if (cp - buffer >= max_len)
368         {
369           buffer[max_len - 1] = '\0';
370           break;
371         }
372       cnt = max_len - (cp - buffer);
373       if (cnt > 8)
374         cnt = 8;
375       read_memory (memaddr + (int) (cp - buffer), (gdb_byte *) cp, cnt);
376       for (i = 0; i < cnt && *cp; i++, cp++)
377         ;                       /* null body */
378
379       if (i < cnt && !*cp)
380         break;
381     }
382 }
383
384 CORE_ADDR
385 read_memory_typed_address (CORE_ADDR addr, struct type *type)
386 {
387   gdb_byte *buf = alloca (TYPE_LENGTH (type));
388
389   read_memory (addr, buf, TYPE_LENGTH (type));
390   return extract_typed_address (buf, type);
391 }
392
393 /* Same as target_write_memory, but report an error if can't
394    write.  */
395 void
396 write_memory (CORE_ADDR memaddr, 
397               const bfd_byte *myaddr, ssize_t len)
398 {
399   int status;
400
401   status = target_write_memory (memaddr, myaddr, len);
402   if (status != 0)
403     memory_error (status, memaddr);
404 }
405
406 /* Same as write_memory, but notify 'memory_changed' observers.  */
407
408 void
409 write_memory_with_notification (CORE_ADDR memaddr, const bfd_byte *myaddr,
410                                 ssize_t len)
411 {
412   write_memory (memaddr, myaddr, len);
413   observer_notify_memory_changed (current_inferior (), memaddr, len, myaddr);
414 }
415
416 /* Store VALUE at ADDR in the inferior as a LEN-byte unsigned
417    integer.  */
418 void
419 write_memory_unsigned_integer (CORE_ADDR addr, int len, 
420                                enum bfd_endian byte_order,
421                                ULONGEST value)
422 {
423   gdb_byte *buf = alloca (len);
424
425   store_unsigned_integer (buf, len, byte_order, value);
426   write_memory (addr, buf, len);
427 }
428
429 /* Store VALUE at ADDR in the inferior as a LEN-byte signed
430    integer.  */
431 void
432 write_memory_signed_integer (CORE_ADDR addr, int len, 
433                              enum bfd_endian byte_order,
434                              LONGEST value)
435 {
436   gdb_byte *buf = alloca (len);
437
438   store_signed_integer (buf, len, byte_order, value);
439   write_memory (addr, buf, len);
440 }
441 \f
442 /* The current default bfd target.  Points to storage allocated for
443    gnutarget_string.  */
444 char *gnutarget;
445
446 /* Same thing, except it is "auto" not NULL for the default case.  */
447 static char *gnutarget_string;
448 static void
449 show_gnutarget_string (struct ui_file *file, int from_tty,
450                        struct cmd_list_element *c,
451                        const char *value)
452 {
453   fprintf_filtered (file,
454                     _("The current BFD target is \"%s\".\n"), value);
455 }
456
457 static void set_gnutarget_command (char *, int,
458                                    struct cmd_list_element *);
459
460 static void
461 set_gnutarget_command (char *ignore, int from_tty,
462                        struct cmd_list_element *c)
463 {
464   char *gend = gnutarget_string + strlen (gnutarget_string);
465
466   gend = remove_trailing_whitespace (gnutarget_string, gend);
467   *gend = '\0';
468
469   if (strcmp (gnutarget_string, "auto") == 0)
470     gnutarget = NULL;
471   else
472     gnutarget = gnutarget_string;
473 }
474
475 /* A completion function for "set gnutarget".  */
476
477 static VEC (char_ptr) *
478 complete_set_gnutarget (struct cmd_list_element *cmd,
479                         const char *text, const char *word)
480 {
481   static const char **bfd_targets;
482
483   if (bfd_targets == NULL)
484     {
485       int last;
486
487       bfd_targets = bfd_target_list ();
488       for (last = 0; bfd_targets[last] != NULL; ++last)
489         ;
490
491       bfd_targets = xrealloc (bfd_targets, (last + 2) * sizeof (const char **));
492       bfd_targets[last] = "auto";
493       bfd_targets[last + 1] = NULL;
494     }
495
496   return complete_on_enum (bfd_targets, text, word);
497 }
498
499 /* Set the gnutarget.  */
500 void
501 set_gnutarget (char *newtarget)
502 {
503   if (gnutarget_string != NULL)
504     xfree (gnutarget_string);
505   gnutarget_string = xstrdup (newtarget);
506   set_gnutarget_command (NULL, 0, NULL);
507 }
508
509 void
510 _initialize_core (void)
511 {
512   struct cmd_list_element *c;
513
514   c = add_cmd ("core-file", class_files, core_file_command, _("\
515 Use FILE as core dump for examining memory and registers.\n\
516 No arg means have no core file.  This command has been superseded by the\n\
517 `target core' and `detach' commands."), &cmdlist);
518   set_cmd_completer (c, filename_completer);
519
520   
521   c = add_setshow_string_noescape_cmd ("gnutarget", class_files,
522                                        &gnutarget_string, _("\
523 Set the current BFD target."), _("\
524 Show the current BFD target."), _("\
525 Use `set gnutarget auto' to specify automatic detection."),
526                                        set_gnutarget_command,
527                                        show_gnutarget_string,
528                                        &setlist, &showlist);
529   set_cmd_completer (c, complete_set_gnutarget);
530
531   add_alias_cmd ("g", "gnutarget", class_files, 1, &setlist);
532
533   if (getenv ("GNUTARGET"))
534     set_gnutarget (getenv ("GNUTARGET"));
535   else
536     set_gnutarget ("auto");
537 }