diff options
author | Stu Grossman <grossman@cygnus> | 1993-09-25 00:40:20 +0000 |
---|---|---|
committer | Stu Grossman <grossman@cygnus> | 1993-09-25 00:40:20 +0000 |
commit | d113e6b28e88d16de8cb23f5f6f73e6cb8981042 (patch) | |
tree | 246ab6e211e749f08851ca032f1981fc64f41081 /gdb/i386lynx-nat.c | |
parent | 08ba2f95fe5eddea585ee608ecebcbcee5727f0d (diff) | |
download | gdb-d113e6b28e88d16de8cb23f5f6f73e6cb8981042.zip gdb-d113e6b28e88d16de8cb23f5f6f73e6cb8981042.tar.gz gdb-d113e6b28e88d16de8cb23f5f6f73e6cb8981042.tar.bz2 |
* corelow.c: Add multi thread/process support for core files with
.reg/XXX pseudo-sections.
* i386lynx-nat.c thread.h thread.c: Remove unnecessary core file
support.
Diffstat (limited to 'gdb/i386lynx-nat.c')
-rw-r--r-- | gdb/i386lynx-nat.c | 244 |
1 files changed, 0 insertions, 244 deletions
diff --git a/gdb/i386lynx-nat.c b/gdb/i386lynx-nat.c index 63300f1..5d3fb21 100644 --- a/gdb/i386lynx-nat.c +++ b/gdb/i386lynx-nat.c @@ -21,7 +21,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "defs.h" #include "frame.h" #include "inferior.h" -#include "gdbcore.h" #include "target.h" #include <sys/ptrace.h> @@ -50,8 +49,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #define FS 0 #define GS 0 -static struct target_ops lynx_core_ops; - /* this table must line up with REGISTER_NAMES in m-i386.h */ static unsigned int regmap[] = { @@ -284,244 +281,3 @@ fetch_core_registers (core_reg_sect, core_reg_size, which, reg_addr) supply_register (regno, core_reg_sect + addr); } } - -#if 0 - -/* Discard all vestiges of any previous core file - and mark data and stack spaces as empty. */ - -/* ARGSUSED */ -static void -lynx_core_close (quitting) - int quitting; -{ - if (core_bfd) - { - free (bfd_get_filename (core_bfd)); - bfd_close (core_bfd); - core_bfd = NULL; - - if (core_ops.to_sections) - { - free ((PTR)lynx_core_ops.to_sections); - lynx_core_ops.to_sections = NULL; - lynx_core_ops.to_sections_end = NULL; - } - } -} - -/* This routine opens and sets up the core file bfd */ - -static void -lynx_core_open (filename, from_tty) - char *filename; - int from_tty; -{ - const char *p; - int siggy; - struct cleanup *old_chain; - char *temp; - bfd *temp_bfd; - int ontop; - int scratch_chan; - - target_preopen (from_tty); - if (!filename) - { - error (core_bfd ? - "No core file specified. (Use `detach' to stop debugging a core file.)" - : "No core file specified."); - } - - filename = tilde_expand (filename); - if (filename[0] != '/') - { - temp = concat (current_directory, "/", filename, NULL); - free (filename); - filename = temp; - } - - old_chain = make_cleanup (free, filename); - - scratch_chan = open (filename, write_files? O_RDWR: O_RDONLY, 0); - if (scratch_chan < 0) - perror_with_name (filename); - - temp_bfd = bfd_fdopenr (filename, NULL, scratch_chan); - if (temp_bfd == NULL) - perror_with_name (filename); - - if (!bfd_check_format (temp_bfd, bfd_core)) - { - /* Do it after the err msg */ - make_cleanup (bfd_close, temp_bfd); - error ("\"%s\" is not a core dump: %s", filename, bfd_errmsg(bfd_error)); - } - - /* Looks semi-reasonable. Toss the old core file and work on the new. */ - - discard_cleanups (old_chain); /* Don't free filename any more */ - unpush_target (&core_ops); - core_bfd = temp_bfd; - old_chain = make_cleanup (core_close, core_bfd); - - validate_files (); - - /* Find the data section */ - if (build_section_table (core_bfd, &core_ops.to_sections, - &core_ops.to_sections_end)) - error ("Can't find sections in `%s': %s", bfd_get_filename(core_bfd), - bfd_errmsg (bfd_error)); - - ontop = !push_target (&core_ops); - discard_cleanups (old_chain); - - p = bfd_core_file_failing_command (core_bfd); - if (p) - printf_filtered ("Core was generated by `%s'.\n", p); - - siggy = bfd_core_file_failing_signal (core_bfd); - if (siggy > 0) - printf_filtered ("Program terminated with signal %d, %s.\n", siggy, - safe_strsignal (siggy)); - - /* Locate all of the thread register sections. They have names like .regxx, - where xx is the thread-id. */ - - bfd_map_over_sections (core_bfd, grok_register_sections, - - if (ontop) - { - /* Fetch all registers from core file */ - target_fetch_registers (-1); - - /* Now, set up the frame cache, and print the top of stack */ - set_current_frame (create_new_frame (read_fp (), - read_pc ())); - select_frame (get_current_frame (), 0); - print_stack_frame (selected_frame, selected_frame_level, 1); - } - else - { - warning ( - "you won't be able to access this core file until you terminate\n\ -your %s; do ``info files''", current_target->to_longname); - } -} - -static void -lynx_core_detach (args, from_tty) - char *args; - int from_tty; -{ - if (args) - error ("Too many arguments"); - unpush_target (&core_ops); - if (from_tty) - printf_filtered ("No core file now.\n"); -} - -/* Get the registers out of a core file. This is the machine- - independent part. Fetch_core_registers is the machine-dependent - part, typically implemented in the xm-file for each architecture. */ - -/* We just get all the registers, so we don't use regno. */ -/* ARGSUSED */ -static void -get_core_registers (regno) - int regno; -{ - sec_ptr reg_sec; - unsigned size; - char *the_regs; - char regsecname[20]; - - sprintf (regsecname, ".reg%d", TIDGET (inferior_pid)); - - reg_sec = bfd_get_section_by_name (core_bfd, regsecname); - if (!reg_sec) - goto cant; - size = bfd_section_size (core_bfd, reg_sec); - the_regs = alloca (size); - if (bfd_get_section_contents (core_bfd, reg_sec, the_regs, (file_ptr)0, - size)) - { - fetch_core_registers (the_regs, size, 0, - (unsigned) bfd_section_vma (abfd,reg_sec)); - } - else - { -cant: - fprintf_filtered (stderr, "Couldn't fetch registers from core file: %s\n", - bfd_errmsg (bfd_error)); - } - - registers_fetched(); -} - -static void -core_files_info (t) - struct target_ops *t; -{ - print_section_info (t, core_bfd); -} - -/* If mourn is being called in all the right places, this could be say - `gdb internal error' (since generic_mourn calls mark_breakpoints_out). */ - -static int -ignore (addr, contents) - CORE_ADDR addr; - char *contents; -{ -} - -static struct target_ops -lynx_core_ops = -{ - "core", - "Local core dump file", - "Use a core file as a target. Specify the filename of the core file.", - lynx_core_open, - lynx_core_close, - find_default_attach, - lynx_core_detach, - 0, - 0, - get_core_registers, - 0, - 0, - xfer_memory, - lynx_core_files_info, - ignore, - ignore, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - find_default_create_inferior, - 0, /* mourn_inferior */ - 0, /* can_run */ - 0, /* notice_signals */ - core_stratum, - 0, /* next */ - 0, - 1, - 1, - 1, - 0, - 0, - 0, - OPS_MAGIC, /* Always the last thing */ -}; - -void -_initialize_i386lynx_nat() -{ - add_target (&lynx_core_ops); -} -#endif |