Maxim Grigoriev stepping down as Xtensa maintainer
[external/binutils.git] / gdb / corefile.c
1 /* Core dump and executable file functions above target vector, for GDB.
2
3    Copyright (C) 1986-2017 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 <signal.h>
22 #include <fcntl.h>
23 #include "inferior.h"
24 #include "symtab.h"
25 #include "command.h"
26 #include "gdbcmd.h"
27 #include "bfd.h"
28 #include "target.h"
29 #include "gdbcore.h"
30 #include "dis-asm.h"
31 #include <sys/stat.h>
32 #include "completer.h"
33 #include "observer.h"
34 #include "cli/cli-utils.h"
35
36 /* Local function declarations.  */
37
38 extern void _initialize_core (void);
39
40 /* You can have any number of hooks for `exec_file_command' command to
41    call.  If there's only one hook, it is set in exec_file_display
42    hook.  If there are two or more hooks, they are set in
43    exec_file_extra_hooks[], and deprecated_exec_file_display_hook is
44    set to a function that calls all of them.  This extra complexity is
45    needed to preserve compatibility with old code that assumed that
46    only one hook could be set, and which called
47    deprecated_exec_file_display_hook directly.  */
48
49 typedef void (*hook_type) (const char *);
50
51 hook_type deprecated_exec_file_display_hook;    /* The original hook.  */
52 static hook_type *exec_file_extra_hooks;        /* Array of additional
53                                                    hooks.  */
54 static int exec_file_hook_count = 0;            /* Size of array.  */
55
56 /* Binary file diddling handle for the core file.  */
57
58 bfd *core_bfd = NULL;
59
60 /* corelow.c target.  It is never NULL after GDB initialization.  */
61
62 struct target_ops *core_target;
63 \f
64
65 /* Backward compatability with old way of specifying core files.  */
66
67 void
68 core_file_command (char *filename, int from_tty)
69 {
70   dont_repeat ();               /* Either way, seems bogus.  */
71
72   gdb_assert (core_target != NULL);
73
74   if (!filename)
75     (core_target->to_detach) (core_target, filename, from_tty);
76   else
77     (core_target->to_open) (filename, from_tty);
78 }
79 \f
80
81 /* If there are two or more functions that wish to hook into
82    exec_file_command, this function will call all of the hook
83    functions.  */
84
85 static void
86 call_extra_exec_file_hooks (const char *filename)
87 {
88   int i;
89
90   for (i = 0; i < exec_file_hook_count; i++)
91     (*exec_file_extra_hooks[i]) (filename);
92 }
93
94 /* Call this to specify the hook for exec_file_command to call back.
95    This is called from the x-window display code.  */
96
97 void
98 specify_exec_file_hook (void (*hook) (const char *))
99 {
100   hook_type *new_array;
101
102   if (deprecated_exec_file_display_hook != NULL)
103     {
104       /* There's already a hook installed.  Arrange to have both it
105          and the subsequent hooks called.  */
106       if (exec_file_hook_count == 0)
107         {
108           /* If this is the first extra hook, initialize the hook
109              array.  */
110           exec_file_extra_hooks = XNEW (hook_type);
111           exec_file_extra_hooks[0] = deprecated_exec_file_display_hook;
112           deprecated_exec_file_display_hook = call_extra_exec_file_hooks;
113           exec_file_hook_count = 1;
114         }
115
116       /* Grow the hook array by one and add the new hook to the end.
117          Yes, it's inefficient to grow it by one each time but since
118          this is hardly ever called it's not a big deal.  */
119       exec_file_hook_count++;
120       new_array = (hook_type *)
121         xrealloc (exec_file_extra_hooks,
122                   exec_file_hook_count * sizeof (hook_type));
123       exec_file_extra_hooks = new_array;
124       exec_file_extra_hooks[exec_file_hook_count - 1] = hook;
125     }
126   else
127     deprecated_exec_file_display_hook = hook;
128 }
129
130 void
131 reopen_exec_file (void)
132 {
133   char *filename;
134   int res;
135   struct stat st;
136   struct cleanup *cleanups;
137
138   /* Don't do anything if there isn't an exec file.  */
139   if (exec_bfd == NULL)
140     return;
141
142   /* If the timestamp of the exec file has changed, reopen it.  */
143   filename = xstrdup (bfd_get_filename (exec_bfd));
144   cleanups = make_cleanup (xfree, filename);
145   res = stat (filename, &st);
146
147   if (res == 0 && exec_bfd_mtime && exec_bfd_mtime != st.st_mtime)
148     exec_file_attach (filename, 0);
149   else
150     /* If we accessed the file since last opening it, close it now;
151        this stops GDB from holding the executable open after it
152        exits.  */
153     bfd_cache_close_all ();
154
155   do_cleanups (cleanups);
156 }
157 \f
158 /* If we have both a core file and an exec file,
159    print a warning if they don't go together.  */
160
161 void
162 validate_files (void)
163 {
164   if (exec_bfd && core_bfd)
165     {
166       if (!core_file_matches_executable_p (core_bfd, exec_bfd))
167         warning (_("core file may not match specified executable file."));
168       else if (bfd_get_mtime (exec_bfd) > bfd_get_mtime (core_bfd))
169         warning (_("exec file is newer than core file."));
170     }
171 }
172
173 /* See common/common-inferior.h.  */
174
175 char *
176 get_exec_file (int err)
177 {
178   if (exec_filename)
179     return exec_filename;
180   if (!err)
181     return NULL;
182
183   error (_("No executable file specified.\n\
184 Use the \"file\" or \"exec-file\" command."));
185   return NULL;
186 }
187 \f
188
189 char *
190 memory_error_message (enum target_xfer_status err,
191                       struct gdbarch *gdbarch, CORE_ADDR memaddr)
192 {
193   switch (err)
194     {
195     case TARGET_XFER_E_IO:
196       /* Actually, address between memaddr and memaddr + len was out of
197          bounds.  */
198       return xstrprintf (_("Cannot access memory at address %s"),
199                          paddress (gdbarch, memaddr));
200     case TARGET_XFER_UNAVAILABLE:
201       return xstrprintf (_("Memory at address %s unavailable."),
202                          paddress (gdbarch, memaddr));
203     default:
204       internal_error (__FILE__, __LINE__,
205                       "unhandled target_xfer_status: %s (%s)",
206                       target_xfer_status_to_string (err),
207                       plongest (err));
208     }
209 }
210
211 /* Report a memory error by throwing a suitable exception.  */
212
213 void
214 memory_error (enum target_xfer_status err, CORE_ADDR memaddr)
215 {
216   char *str;
217   enum errors exception = GDB_NO_ERROR;
218
219   /* Build error string.  */
220   str = memory_error_message (err, target_gdbarch (), memaddr);
221   make_cleanup (xfree, str);
222
223   /* Choose the right error to throw.  */
224   switch (err)
225     {
226     case TARGET_XFER_E_IO:
227       exception = MEMORY_ERROR;
228       break;
229     case TARGET_XFER_UNAVAILABLE:
230       exception = NOT_AVAILABLE_ERROR;
231       break;
232     }
233
234   /* Throw it.  */
235   throw_error (exception, ("%s"), str);
236 }
237
238 /* Helper function.  */
239
240 static void
241 read_memory_object (enum target_object object, CORE_ADDR memaddr,
242                     gdb_byte *myaddr, ssize_t len)
243 {
244   ULONGEST xfered = 0;
245
246   while (xfered < len)
247     {
248       enum target_xfer_status status;
249       ULONGEST xfered_len;
250
251       status = target_xfer_partial (current_target.beneath,
252                                     object, NULL,
253                                     myaddr + xfered, NULL,
254                                     memaddr + xfered, len - xfered,
255                                     &xfered_len);
256
257       if (status != TARGET_XFER_OK)
258         memory_error (status == TARGET_XFER_EOF ? TARGET_XFER_E_IO : status,
259                       memaddr + xfered);
260
261       xfered += xfered_len;
262       QUIT;
263     }
264 }
265
266 /* Same as target_read_memory, but report an error if can't read.  */
267
268 void
269 read_memory (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
270 {
271   read_memory_object (TARGET_OBJECT_MEMORY, memaddr, myaddr, len);
272 }
273
274 /* Same as target_read_stack, but report an error if can't read.  */
275
276 void
277 read_stack (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
278 {
279   read_memory_object (TARGET_OBJECT_STACK_MEMORY, memaddr, myaddr, len);
280 }
281
282 /* Same as target_read_code, but report an error if can't read.  */
283
284 void
285 read_code (CORE_ADDR memaddr, gdb_byte *myaddr, ssize_t len)
286 {
287   read_memory_object (TARGET_OBJECT_CODE_MEMORY, memaddr, myaddr, len);
288 }
289
290 /* Read memory at MEMADDR of length LEN and put the contents in
291    RETURN_VALUE.  Return 0 if MEMADDR couldn't be read and non-zero
292    if successful.  */
293
294 int
295 safe_read_memory_integer (CORE_ADDR memaddr, int len, 
296                           enum bfd_endian byte_order,
297                           LONGEST *return_value)
298 {
299   gdb_byte buf[sizeof (LONGEST)];
300
301   if (target_read_memory (memaddr, buf, len))
302     return 0;
303
304   *return_value = extract_signed_integer (buf, len, byte_order);
305   return 1;
306 }
307
308 /* Read memory at MEMADDR of length LEN and put the contents in
309    RETURN_VALUE.  Return 0 if MEMADDR couldn't be read and non-zero
310    if successful.  */
311
312 int
313 safe_read_memory_unsigned_integer (CORE_ADDR memaddr, int len,
314                                    enum bfd_endian byte_order,
315                                    ULONGEST *return_value)
316 {
317   gdb_byte buf[sizeof (ULONGEST)];
318
319   if (target_read_memory (memaddr, buf, len))
320     return 0;
321
322   *return_value = extract_unsigned_integer (buf, len, byte_order);
323   return 1;
324 }
325
326 LONGEST
327 read_memory_integer (CORE_ADDR memaddr, int len,
328                      enum bfd_endian byte_order)
329 {
330   gdb_byte buf[sizeof (LONGEST)];
331
332   read_memory (memaddr, buf, len);
333   return extract_signed_integer (buf, len, byte_order);
334 }
335
336 ULONGEST
337 read_memory_unsigned_integer (CORE_ADDR memaddr, int len,
338                               enum bfd_endian byte_order)
339 {
340   gdb_byte buf[sizeof (ULONGEST)];
341
342   read_memory (memaddr, buf, len);
343   return extract_unsigned_integer (buf, len, byte_order);
344 }
345
346 LONGEST
347 read_code_integer (CORE_ADDR memaddr, int len,
348                    enum bfd_endian byte_order)
349 {
350   gdb_byte buf[sizeof (LONGEST)];
351
352   read_code (memaddr, buf, len);
353   return extract_signed_integer (buf, len, byte_order);
354 }
355
356 ULONGEST
357 read_code_unsigned_integer (CORE_ADDR memaddr, int len,
358                             enum bfd_endian byte_order)
359 {
360   gdb_byte buf[sizeof (ULONGEST)];
361
362   read_code (memaddr, buf, len);
363   return extract_unsigned_integer (buf, len, byte_order);
364 }
365
366 void
367 read_memory_string (CORE_ADDR memaddr, char *buffer, int max_len)
368 {
369   char *cp;
370   int i;
371   int cnt;
372
373   cp = buffer;
374   while (1)
375     {
376       if (cp - buffer >= max_len)
377         {
378           buffer[max_len - 1] = '\0';
379           break;
380         }
381       cnt = max_len - (cp - buffer);
382       if (cnt > 8)
383         cnt = 8;
384       read_memory (memaddr + (int) (cp - buffer), (gdb_byte *) cp, cnt);
385       for (i = 0; i < cnt && *cp; i++, cp++)
386         ;                       /* null body */
387
388       if (i < cnt && !*cp)
389         break;
390     }
391 }
392
393 CORE_ADDR
394 read_memory_typed_address (CORE_ADDR addr, struct type *type)
395 {
396   gdb_byte *buf = (gdb_byte *) alloca (TYPE_LENGTH (type));
397
398   read_memory (addr, buf, TYPE_LENGTH (type));
399   return extract_typed_address (buf, type);
400 }
401
402 /* See gdbcore.h.  */
403
404 void
405 write_memory (CORE_ADDR memaddr, 
406               const bfd_byte *myaddr, ssize_t len)
407 {
408   int status;
409
410   status = target_write_memory (memaddr, myaddr, len);
411   if (status != 0)
412     memory_error (TARGET_XFER_E_IO, memaddr);
413 }
414
415 /* Same as write_memory, but notify 'memory_changed' observers.  */
416
417 void
418 write_memory_with_notification (CORE_ADDR memaddr, const bfd_byte *myaddr,
419                                 ssize_t len)
420 {
421   write_memory (memaddr, myaddr, len);
422   observer_notify_memory_changed (current_inferior (), memaddr, len, myaddr);
423 }
424
425 /* Store VALUE at ADDR in the inferior as a LEN-byte unsigned
426    integer.  */
427 void
428 write_memory_unsigned_integer (CORE_ADDR addr, int len, 
429                                enum bfd_endian byte_order,
430                                ULONGEST value)
431 {
432   gdb_byte *buf = (gdb_byte *) alloca (len);
433
434   store_unsigned_integer (buf, len, byte_order, value);
435   write_memory (addr, buf, len);
436 }
437
438 /* Store VALUE at ADDR in the inferior as a LEN-byte signed
439    integer.  */
440 void
441 write_memory_signed_integer (CORE_ADDR addr, int len, 
442                              enum bfd_endian byte_order,
443                              LONGEST value)
444 {
445   gdb_byte *buf = (gdb_byte *) alloca (len);
446
447   store_signed_integer (buf, len, byte_order, value);
448   write_memory (addr, buf, len);
449 }
450 \f
451 /* The current default bfd target.  Points to storage allocated for
452    gnutarget_string.  */
453 char *gnutarget;
454
455 /* Same thing, except it is "auto" not NULL for the default case.  */
456 static char *gnutarget_string;
457 static void
458 show_gnutarget_string (struct ui_file *file, int from_tty,
459                        struct cmd_list_element *c,
460                        const char *value)
461 {
462   fprintf_filtered (file,
463                     _("The current BFD target is \"%s\".\n"), value);
464 }
465
466 static void set_gnutarget_command (char *, int,
467                                    struct cmd_list_element *);
468
469 static void
470 set_gnutarget_command (char *ignore, int from_tty,
471                        struct cmd_list_element *c)
472 {
473   char *gend = gnutarget_string + strlen (gnutarget_string);
474
475   gend = remove_trailing_whitespace (gnutarget_string, gend);
476   *gend = '\0';
477
478   if (strcmp (gnutarget_string, "auto") == 0)
479     gnutarget = NULL;
480   else
481     gnutarget = gnutarget_string;
482 }
483
484 /* A completion function for "set gnutarget".  */
485
486 static VEC (char_ptr) *
487 complete_set_gnutarget (struct cmd_list_element *cmd,
488                         const char *text, const char *word)
489 {
490   static const char **bfd_targets;
491
492   if (bfd_targets == NULL)
493     {
494       int last;
495
496       bfd_targets = bfd_target_list ();
497       for (last = 0; bfd_targets[last] != NULL; ++last)
498         ;
499
500       bfd_targets = XRESIZEVEC (const char *, bfd_targets, last + 2);
501       bfd_targets[last] = "auto";
502       bfd_targets[last + 1] = NULL;
503     }
504
505   return complete_on_enum (bfd_targets, text, word);
506 }
507
508 /* Set the gnutarget.  */
509 void
510 set_gnutarget (const char *newtarget)
511 {
512   if (gnutarget_string != NULL)
513     xfree (gnutarget_string);
514   gnutarget_string = xstrdup (newtarget);
515   set_gnutarget_command (NULL, 0, NULL);
516 }
517
518 void
519 _initialize_core (void)
520 {
521   struct cmd_list_element *c;
522
523   c = add_cmd ("core-file", class_files, core_file_command, _("\
524 Use FILE as core dump for examining memory and registers.\n\
525 No arg means have no core file.  This command has been superseded by the\n\
526 `target core' and `detach' commands."), &cmdlist);
527   set_cmd_completer (c, filename_completer);
528
529   
530   c = add_setshow_string_noescape_cmd ("gnutarget", class_files,
531                                        &gnutarget_string, _("\
532 Set the current BFD target."), _("\
533 Show the current BFD target."), _("\
534 Use `set gnutarget auto' to specify automatic detection."),
535                                        set_gnutarget_command,
536                                        show_gnutarget_string,
537                                        &setlist, &showlist);
538   set_cmd_completer (c, complete_set_gnutarget);
539
540   add_alias_cmd ("g", "gnutarget", class_files, 1, &setlist);
541
542   if (getenv ("GNUTARGET"))
543     set_gnutarget (getenv ("GNUTARGET"));
544   else
545     set_gnutarget ("auto");
546 }