From: Fred Fish Date: Sun, 5 Nov 1995 00:58:57 +0000 (+0000) Subject: * Makefile.in (COMMON_OBS): Use corefile.o rather than core.o X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=1738bcd31b7027c1eab8cfc680c3dcac478cd3ce;p=binutils-gdb.git * Makefile.in (COMMON_OBS): Use corefile.o rather than core.o * core.c: Rename to corefile.c. * config/pyr/tm-pyr.h, umax-xdep.c, sun386-nat.c, pyr-xdep.c, * Makefile.in (SFILES), gould-xdep.c, coredep.c, armtdep.c, arm-xdep.c, altos-xdep.c: Change core.c references to corefile.c. From Graham Stoney . * Makefile.in (remote-array.o): Add rule to build. (ALLDEPFILES): Add remote-array.c * remote-array.c (baud_rate): Remove unnecessary declaration. (baudrate): Remove. (array_files_info): Print global baud_rate not baudrate. --- diff --git a/gdb/.Sanitize b/gdb/.Sanitize index 06d9a517876..d6c074a5cc2 100644 --- a/gdb/.Sanitize +++ b/gdb/.Sanitize @@ -140,7 +140,7 @@ copying.awk copying.c core-sol2.c core-svr4.c -core.c +corefile.c coredep.c corelow.c cp-valprint.c diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 38ddf949035..d11114ec1e0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,18 @@ +Fri Nov 3 12:30:43 1995 Fred Fish + + * Makefile.in (COMMON_OBS): Use corefile.o rather than core.o + * core.c: Rename to corefile.c. + * config/pyr/tm-pyr.h, umax-xdep.c, sun386-nat.c, pyr-xdep.c, + * Makefile.in (SFILES), gould-xdep.c, coredep.c, armtdep.c, + arm-xdep.c, altos-xdep.c: Change core.c references to corefile.c. + + From Graham Stoney . + * Makefile.in (remote-array.o): Add rule to build. + (ALLDEPFILES): Add remote-array.c + * remote-array.c (baud_rate): Remove unnecessary declaration. + (baudrate): Remove. + (array_files_info): Print global baud_rate not baudrate. + Sat Nov 4 10:21:58 1995 Stu Grossman (grossman@cygnus.com) * Makefile.in (INTERNAL_CFLAGS): Add ENABLE_CFLAGS. diff --git a/gdb/TODO b/gdb/TODO index 5e4a53efe89..07716af1185 100644 --- a/gdb/TODO +++ b/gdb/TODO @@ -294,7 +294,7 @@ versions of GDB can do something halfway reasonable. Clean up formatting of "info registers" on MIPS and 88k. See if it is possible to do this generically across all target architectures. -GDB gets bfd/core.c and gdb/core.c confused (this should be easy to +GDB gets bfd/corefile.c and gdb/corefile.c confused (this should be easy to repeat even with something more recent than GDB 4.9). Check that unmatched RBRAC doesn't abort(). diff --git a/gdb/altos-xdep.c b/gdb/altos-xdep.c index 4cb13b05ea3..e7b652c1836 100644 --- a/gdb/altos-xdep.c +++ b/gdb/altos-xdep.c @@ -46,7 +46,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Work with core dump and executable files, for GDB. - This code would be in core.c if it weren't machine-dependent. */ + This code would be in corefile.c if it weren't machine-dependent. */ void core_file_command (filename, from_tty) diff --git a/gdb/arm-xdep.c b/gdb/arm-xdep.c index 32f1febad30..b855ac8d27b 100644 --- a/gdb/arm-xdep.c +++ b/gdb/arm-xdep.c @@ -129,7 +129,7 @@ store_inferior_registers (regno) } /* Work with core dump and executable files, for GDB. - This code would be in core.c if it weren't machine-dependent. */ + This code would be in corefile.c if it weren't machine-dependent. */ /* Structure to describe the chain of shared libraries used by the execfile. diff --git a/gdb/core.c b/gdb/core.c deleted file mode 100644 index a916bf8ac81..00000000000 --- a/gdb/core.c +++ /dev/null @@ -1,339 +0,0 @@ -/* Core dump and executable file functions above target vector, for GDB. - Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994 - Free Software Foundation, Inc. - -This file is part of GDB. - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - -#include "defs.h" -#include "gdb_string.h" -#include -#include -#include -#include "frame.h" /* required by inferior.h */ -#include "inferior.h" -#include "symtab.h" -#include "command.h" -#include "gdbcmd.h" -#include "bfd.h" -#include "target.h" -#include "gdbcore.h" -#include "dis-asm.h" -#include "language.h" - -extern char registers[]; - -/* Hook for `exec_file_command' command to call. */ - -void (*exec_file_display_hook) PARAMS ((char *)) = NULL; - -/* Binary file diddling handle for the core file. */ - -bfd *core_bfd = NULL; - - -/* Backward compatability with old way of specifying core files. */ - -void -core_file_command (filename, from_tty) - char *filename; - int from_tty; -{ - struct target_ops *t; - - dont_repeat (); /* Either way, seems bogus. */ - - t = find_core_target (); - if (t != NULL) - if (!filename) - (t->to_detach) (filename, from_tty); - else - (t->to_open) (filename, from_tty); - else - error ("GDB can't read core files on this machine."); -} - - -/* Call this to specify the hook for exec_file_command to call back. - This is called from the x-window display code. */ - -void -specify_exec_file_hook (hook) - void (*hook) PARAMS ((char *)); -{ - exec_file_display_hook = hook; -} - -/* The exec file must be closed before running an inferior. - If it is needed again after the inferior dies, it must - be reopened. */ - -void -close_exec_file () -{ -#ifdef FIXME - if (exec_bfd) - bfd_tempclose (exec_bfd); -#endif -} - -void -reopen_exec_file () -{ -#ifdef FIXME - if (exec_bfd) - bfd_reopen (exec_bfd); -#endif -} - -/* If we have both a core file and an exec file, - print a warning if they don't go together. */ - -void -validate_files () -{ - if (exec_bfd && core_bfd) - { - if (!core_file_matches_executable_p (core_bfd, exec_bfd)) - warning ("core file may not match specified executable file."); - else if (bfd_get_mtime(exec_bfd) > bfd_get_mtime(core_bfd)) - warning ("exec file is newer than core file."); - } -} - -/* Return the name of the executable file as a string. - ERR nonzero means get error if there is none specified; - otherwise return 0 in that case. */ - -char * -get_exec_file (err) - int err; -{ - if (exec_bfd) return bfd_get_filename(exec_bfd); - if (!err) return NULL; - - error ("No executable file specified.\n\ -Use the \"file\" or \"exec-file\" command."); - return NULL; -} - - -/* Report a memory error with error(). */ - -void -memory_error (status, memaddr) - int status; - CORE_ADDR memaddr; -{ - if (status == EIO) - { - /* Actually, address between memaddr and memaddr + len - was out of bounds. */ - error_begin (); - printf_filtered ("Cannot access memory at address "); - print_address_numeric (memaddr, 1, gdb_stdout); - printf_filtered (".\n"); - return_to_top_level (RETURN_ERROR); - } - else - { - error_begin (); - printf_filtered ("Error accessing memory address "); - print_address_numeric (memaddr, 1, gdb_stdout); - printf_filtered (": %s.\n", - safe_strerror (status)); - return_to_top_level (RETURN_ERROR); - } -} - -/* Same as target_read_memory, but report an error if can't read. */ -void -read_memory (memaddr, myaddr, len) - CORE_ADDR memaddr; - char *myaddr; - int len; -{ - int status; - status = target_read_memory (memaddr, myaddr, len); - if (status != 0) - memory_error (status, memaddr); -} - -/* Like target_read_memory, but slightly different parameters. */ - -int -dis_asm_read_memory (memaddr, myaddr, len, info) - bfd_vma memaddr; - bfd_byte *myaddr; - int len; - disassemble_info *info; -{ - return target_read_memory (memaddr, (char *) myaddr, len); -} - -/* Like memory_error with slightly different parameters. */ -void -dis_asm_memory_error (status, memaddr, info) - int status; - bfd_vma memaddr; - disassemble_info *info; -{ - memory_error (status, memaddr); -} - -/* Like print_address with slightly different parameters. */ -void -dis_asm_print_address (addr, info) - bfd_vma addr; - struct disassemble_info *info; -{ - print_address (addr, info->stream); -} - -/* Same as target_write_memory, but report an error if can't write. */ -void -write_memory (memaddr, myaddr, len) - CORE_ADDR memaddr; - char *myaddr; - int len; -{ - int status; - - status = target_write_memory (memaddr, myaddr, len); - if (status != 0) - memory_error (status, memaddr); -} - -/* Read an integer from debugged memory, given address and number of bytes. */ - -LONGEST -read_memory_integer (memaddr, len) - CORE_ADDR memaddr; - int len; -{ - char buf[sizeof (LONGEST)]; - - read_memory (memaddr, buf, len); - return extract_signed_integer (buf, len); -} - -unsigned LONGEST -read_memory_unsigned_integer (memaddr, len) - CORE_ADDR memaddr; - int len; -{ - char buf[sizeof (unsigned LONGEST)]; - - read_memory (memaddr, buf, len); - return extract_unsigned_integer (buf, len); -} - -#if 0 -/* Enable after 4.12. It is not tested. */ - -/* Search code. Targets can just make this their search function, or - if the protocol has a less general search function, they can call this - in the cases it can't handle. */ -void -generic_search (len, data, mask, startaddr, increment, lorange, hirange - addr_found, data_found) - int len; - char *data; - char *mask; - CORE_ADDR startaddr; - int increment; - CORE_ADDR lorange; - CORE_ADDR hirange; - CORE_ADDR *addr_found; - char *data_found; -{ - int i; - CORE_ADDR curaddr = startaddr; - - while (curaddr >= lorange && curaddr < hirange) - { - read_memory (curaddr, data_found, len); - for (i = 0; i < len; ++i) - if ((data_found[i] & mask[i]) != data[i]) - goto try_again; - /* It matches. */ - *addr_found = curaddr; - return; - - try_again: - curaddr += increment; - } - *addr_found = (CORE_ADDR)0; - return; -} -#endif /* 0 */ - -/* The current default bfd target. Points to storage allocated for - gnutarget_string. */ -char *gnutarget; - -/* Same thing, except it is "auto" not NULL for the default case. */ -static char *gnutarget_string; - -static void set_gnutarget_command - PARAMS ((char *, int, struct cmd_list_element *)); - -static void -set_gnutarget_command (ignore, from_tty, c) - char *ignore; - int from_tty; - struct cmd_list_element *c; -{ - if (STREQ (gnutarget_string, "auto")) - gnutarget = NULL; - else - gnutarget = gnutarget_string; -} - -/* Set the gnutarget. */ -void -set_gnutarget (newtarget) - char *newtarget; -{ - if (gnutarget_string != NULL) - free (gnutarget_string); - gnutarget_string = savestring (newtarget, strlen (newtarget)); - set_gnutarget_command (NULL, 0, NULL); -} - -void -_initialize_core() -{ - struct cmd_list_element *c; - c = add_cmd ("core-file", class_files, core_file_command, - "Use FILE as core dump for examining memory and registers.\n\ -No arg means have no core file. This command has been superseded by the\n\ -`target core' and `detach' commands.", &cmdlist); - c->completer = filename_completer; - - c = add_set_cmd ("gnutarget", class_files, var_string_noescape, - (char *) &gnutarget_string, - "Set the current BFD target.\n\ -Use `set gnutarget auto' to specify automatic detection.", - &setlist); - c->function.sfunc = set_gnutarget_command; - add_show_from_set (c, &showlist); - - if (getenv ("GNUTARGET")) - set_gnutarget (getenv ("GNUTARGET")); - else - set_gnutarget ("auto"); -} diff --git a/gdb/coredep.c b/gdb/coredep.c index 89a0fa75e5e..5a33a0af108 100644 --- a/gdb/coredep.c +++ b/gdb/coredep.c @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* core.c is supposed to be the more machine-independent aspects of this; +/* corefile.c is supposed to be the more machine-independent aspects of this; this file is more machine-specific. */ #include "defs.h" diff --git a/gdb/corefile.c b/gdb/corefile.c new file mode 100644 index 00000000000..a916bf8ac81 --- /dev/null +++ b/gdb/corefile.c @@ -0,0 +1,339 @@ +/* Core dump and executable file functions above target vector, for GDB. + Copyright 1986, 1987, 1989, 1991, 1992, 1993, 1994 + Free Software Foundation, Inc. + +This file is part of GDB. + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#include "defs.h" +#include "gdb_string.h" +#include +#include +#include +#include "frame.h" /* required by inferior.h */ +#include "inferior.h" +#include "symtab.h" +#include "command.h" +#include "gdbcmd.h" +#include "bfd.h" +#include "target.h" +#include "gdbcore.h" +#include "dis-asm.h" +#include "language.h" + +extern char registers[]; + +/* Hook for `exec_file_command' command to call. */ + +void (*exec_file_display_hook) PARAMS ((char *)) = NULL; + +/* Binary file diddling handle for the core file. */ + +bfd *core_bfd = NULL; + + +/* Backward compatability with old way of specifying core files. */ + +void +core_file_command (filename, from_tty) + char *filename; + int from_tty; +{ + struct target_ops *t; + + dont_repeat (); /* Either way, seems bogus. */ + + t = find_core_target (); + if (t != NULL) + if (!filename) + (t->to_detach) (filename, from_tty); + else + (t->to_open) (filename, from_tty); + else + error ("GDB can't read core files on this machine."); +} + + +/* Call this to specify the hook for exec_file_command to call back. + This is called from the x-window display code. */ + +void +specify_exec_file_hook (hook) + void (*hook) PARAMS ((char *)); +{ + exec_file_display_hook = hook; +} + +/* The exec file must be closed before running an inferior. + If it is needed again after the inferior dies, it must + be reopened. */ + +void +close_exec_file () +{ +#ifdef FIXME + if (exec_bfd) + bfd_tempclose (exec_bfd); +#endif +} + +void +reopen_exec_file () +{ +#ifdef FIXME + if (exec_bfd) + bfd_reopen (exec_bfd); +#endif +} + +/* If we have both a core file and an exec file, + print a warning if they don't go together. */ + +void +validate_files () +{ + if (exec_bfd && core_bfd) + { + if (!core_file_matches_executable_p (core_bfd, exec_bfd)) + warning ("core file may not match specified executable file."); + else if (bfd_get_mtime(exec_bfd) > bfd_get_mtime(core_bfd)) + warning ("exec file is newer than core file."); + } +} + +/* Return the name of the executable file as a string. + ERR nonzero means get error if there is none specified; + otherwise return 0 in that case. */ + +char * +get_exec_file (err) + int err; +{ + if (exec_bfd) return bfd_get_filename(exec_bfd); + if (!err) return NULL; + + error ("No executable file specified.\n\ +Use the \"file\" or \"exec-file\" command."); + return NULL; +} + + +/* Report a memory error with error(). */ + +void +memory_error (status, memaddr) + int status; + CORE_ADDR memaddr; +{ + if (status == EIO) + { + /* Actually, address between memaddr and memaddr + len + was out of bounds. */ + error_begin (); + printf_filtered ("Cannot access memory at address "); + print_address_numeric (memaddr, 1, gdb_stdout); + printf_filtered (".\n"); + return_to_top_level (RETURN_ERROR); + } + else + { + error_begin (); + printf_filtered ("Error accessing memory address "); + print_address_numeric (memaddr, 1, gdb_stdout); + printf_filtered (": %s.\n", + safe_strerror (status)); + return_to_top_level (RETURN_ERROR); + } +} + +/* Same as target_read_memory, but report an error if can't read. */ +void +read_memory (memaddr, myaddr, len) + CORE_ADDR memaddr; + char *myaddr; + int len; +{ + int status; + status = target_read_memory (memaddr, myaddr, len); + if (status != 0) + memory_error (status, memaddr); +} + +/* Like target_read_memory, but slightly different parameters. */ + +int +dis_asm_read_memory (memaddr, myaddr, len, info) + bfd_vma memaddr; + bfd_byte *myaddr; + int len; + disassemble_info *info; +{ + return target_read_memory (memaddr, (char *) myaddr, len); +} + +/* Like memory_error with slightly different parameters. */ +void +dis_asm_memory_error (status, memaddr, info) + int status; + bfd_vma memaddr; + disassemble_info *info; +{ + memory_error (status, memaddr); +} + +/* Like print_address with slightly different parameters. */ +void +dis_asm_print_address (addr, info) + bfd_vma addr; + struct disassemble_info *info; +{ + print_address (addr, info->stream); +} + +/* Same as target_write_memory, but report an error if can't write. */ +void +write_memory (memaddr, myaddr, len) + CORE_ADDR memaddr; + char *myaddr; + int len; +{ + int status; + + status = target_write_memory (memaddr, myaddr, len); + if (status != 0) + memory_error (status, memaddr); +} + +/* Read an integer from debugged memory, given address and number of bytes. */ + +LONGEST +read_memory_integer (memaddr, len) + CORE_ADDR memaddr; + int len; +{ + char buf[sizeof (LONGEST)]; + + read_memory (memaddr, buf, len); + return extract_signed_integer (buf, len); +} + +unsigned LONGEST +read_memory_unsigned_integer (memaddr, len) + CORE_ADDR memaddr; + int len; +{ + char buf[sizeof (unsigned LONGEST)]; + + read_memory (memaddr, buf, len); + return extract_unsigned_integer (buf, len); +} + +#if 0 +/* Enable after 4.12. It is not tested. */ + +/* Search code. Targets can just make this their search function, or + if the protocol has a less general search function, they can call this + in the cases it can't handle. */ +void +generic_search (len, data, mask, startaddr, increment, lorange, hirange + addr_found, data_found) + int len; + char *data; + char *mask; + CORE_ADDR startaddr; + int increment; + CORE_ADDR lorange; + CORE_ADDR hirange; + CORE_ADDR *addr_found; + char *data_found; +{ + int i; + CORE_ADDR curaddr = startaddr; + + while (curaddr >= lorange && curaddr < hirange) + { + read_memory (curaddr, data_found, len); + for (i = 0; i < len; ++i) + if ((data_found[i] & mask[i]) != data[i]) + goto try_again; + /* It matches. */ + *addr_found = curaddr; + return; + + try_again: + curaddr += increment; + } + *addr_found = (CORE_ADDR)0; + return; +} +#endif /* 0 */ + +/* The current default bfd target. Points to storage allocated for + gnutarget_string. */ +char *gnutarget; + +/* Same thing, except it is "auto" not NULL for the default case. */ +static char *gnutarget_string; + +static void set_gnutarget_command + PARAMS ((char *, int, struct cmd_list_element *)); + +static void +set_gnutarget_command (ignore, from_tty, c) + char *ignore; + int from_tty; + struct cmd_list_element *c; +{ + if (STREQ (gnutarget_string, "auto")) + gnutarget = NULL; + else + gnutarget = gnutarget_string; +} + +/* Set the gnutarget. */ +void +set_gnutarget (newtarget) + char *newtarget; +{ + if (gnutarget_string != NULL) + free (gnutarget_string); + gnutarget_string = savestring (newtarget, strlen (newtarget)); + set_gnutarget_command (NULL, 0, NULL); +} + +void +_initialize_core() +{ + struct cmd_list_element *c; + c = add_cmd ("core-file", class_files, core_file_command, + "Use FILE as core dump for examining memory and registers.\n\ +No arg means have no core file. This command has been superseded by the\n\ +`target core' and `detach' commands.", &cmdlist); + c->completer = filename_completer; + + c = add_set_cmd ("gnutarget", class_files, var_string_noescape, + (char *) &gnutarget_string, + "Set the current BFD target.\n\ +Use `set gnutarget auto' to specify automatic detection.", + &setlist); + c->function.sfunc = set_gnutarget_command; + add_show_from_set (c, &showlist); + + if (getenv ("GNUTARGET")) + set_gnutarget (getenv ("GNUTARGET")); + else + set_gnutarget ("auto"); +} diff --git a/gdb/gould-xdep.c b/gdb/gould-xdep.c index 7ec91fb9cf1..bf2c33a1aa1 100644 --- a/gdb/gould-xdep.c +++ b/gdb/gould-xdep.c @@ -35,7 +35,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Work with core dump and executable files, for GDB. - This code would be in core.c if it weren't machine-dependent. */ + This code would be in corefile.c if it weren't machine-dependent. */ void core_file_command (filename, from_tty) diff --git a/gdb/pyr-xdep.c b/gdb/pyr-xdep.c index bedbc61fb44..e205b50a87d 100644 --- a/gdb/pyr-xdep.c +++ b/gdb/pyr-xdep.c @@ -171,7 +171,7 @@ extern unsigned int last_frame_offset; #ifdef PYRAMID_CORE -/* Can't make definitions here static, since core.c needs them +/* Can't make definitions here static, since corefile.c needs them to do bounds checking on the core-file areas. O well. */ /* have two stacks: one for data, one for register windows. */ @@ -192,7 +192,7 @@ extern int reg_stack_offset; /* Work with core dump and executable files, for GDB. - This code would be in core.c if it weren't machine-dependent. */ + This code would be in corefile.c if it weren't machine-dependent. */ void core_file_command (filename, from_tty) diff --git a/gdb/remote-array.c b/gdb/remote-array.c index f480beb7e53..8be758ed8ff 100644 --- a/gdb/remote-array.c +++ b/gdb/remote-array.c @@ -41,8 +41,6 @@ #include "monitor.h" #include "remote-utils.h" -extern int baud_rate; - static const char hexchars[]="0123456789abcdef"; static char *hex2mem(); @@ -559,7 +557,6 @@ array_create_inferior (execfile, args, env) * array_open -- open a connection to a remote debugger. * NAME is the filename used for communication. */ -static int baudrate = 9600; static char dev_name[100]; static void @@ -845,7 +842,7 @@ static void array_files_info () { printf ("\tAttached to %s at %d baud.\n", - dev_name, baudrate); + dev_name, baud_rate); } /* diff --git a/gdb/sun386-nat.c b/gdb/sun386-nat.c index d4edd3c58f6..fd9ca042cad 100644 --- a/gdb/sun386-nat.c +++ b/gdb/sun386-nat.c @@ -41,7 +41,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include -/* Machine-dependent code which would otherwise be in core.c */ +/* Machine-dependent code which would otherwise be in corefile.c */ /* Work with core files, for GDB. */ diff --git a/gdb/umax-xdep.c b/gdb/umax-xdep.c index 0aca1a5779f..d54519e6384 100644 --- a/gdb/umax-xdep.c +++ b/gdb/umax-xdep.c @@ -36,7 +36,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "gdb_stat.h" /* Work with core dump and executable files, for GDB. - This code would be in core.c if it weren't machine-dependent. */ + This code would be in corefile.c if it weren't machine-dependent. */ void core_file_command (filename, from_tty)