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