Make writing to files work properly. (Fixes to BFD are also needed.)

* core.c (core_open):  Open file ourselves, read or r/w, depending on
write_files.  Use bfd_fdopenr.
* gdbcore.h (write_files):  New variable.
* exec.c (write_files):  Define variable, add set&show for it.
(exec_file_command):  Use write_files to open for read or r/write.

Make shared library reading happen automatically.  These changes
are mostly from Peter Schauer <pes@regent.e-technik.tu-muenchen.de>.

* inferior.h (stop_soon_quietly):  Add to exported variables.
* infrun.c (child_create_inferior):  call solib hook, if defined.
(child_attach):  call solib hook, if defined.
* solib.c:  Include inferior.h.  Add from_tty to so_list as kludge.
(find_solib):  Use lookup_misc_func rather than hand-rolled.
(symbol_add_stub):  New stub for catch_errors.
(solib_add):  Avoid output if !from_tty.  Catch errors rather
than just calling symbol_file_add and bombing.
(solib_create_inferior_hook):  Interface with the target process
to let it read and alloc shared libs, then figure out what it did.

* core.c (validate_files):  Fix typo, soften warning.
(Fix from Hiroto Kagotani <kagotani@cs.titech.ac.jp>.)

* utils.c (fputs_demangled):  Avoid duplicate printing if
demangling is off.  (Fix from J.T. Conklin <jtc@cayenne.com>.)

* infrun.c (proceed):  Cast -1 to (CORE_ADDR) before comparing.
(Fix from pierre@la.tce.com (Pierre Willard).)

* main.c (catch_errors):  Change argument to a char * from an int,
since a char * can point to a struct full of glop, but an int
is not guaranteed to be able to hold a pointer.
* breakpoint.c (breakpoint_cond_eval, bpstat_stop_status,
breakpoint_re_set_one, breakpoint_re_set):  Adapt.
* core.c (core_open, solib_add_stub):  Adapt.
* remote-vx.c (symbol_stub, add_symbol_stub, callers):  Adapt.
This commit is contained in:
John Gilmore
1991-09-04 07:43:50 +00:00
parent 7c589d2562
commit bdbd5f5086
11 changed files with 454 additions and 271 deletions

View File

@@ -152,10 +152,6 @@ extern char **environ;
extern struct target_ops child_ops; /* In inftarg.c */
/* Copy of inferior_io_terminal when inferior was last started. */
extern char *inferior_thisrun_terminal;
/* Sigtramp is a routine that the kernel calls (which then calls the
signal handler). On most machines it is a library routine that
@@ -298,6 +294,11 @@ resume (step, sig)
}
#endif
/* Handle any optimized stores to the inferior NOW... */
#ifdef DO_DEFERRED_STORES
DO_DEFERRED_STORES;
#endif
target_resume (step, sig);
discard_cleanups (old_cleanups);
}
@@ -349,7 +350,7 @@ proceed (addr, siggnal, step)
if (step < 0)
stop_after_trap = 1;
if (addr == -1)
if (addr == (CORE_ADDR)-1)
{
/* If there is a breakpoint at the address we will resume at,
step one instruction before inserting breakpoints
@@ -405,11 +406,6 @@ The same program may be running in another process.");
else if (stop_signal < NSIG && !signal_program[stop_signal])
stop_signal= 0;
/* Handle any optimized stores to the inferior NOW... */
#ifdef DO_DEFERRED_STORES
DO_DEFERRED_STORES;
#endif
/* Resume inferior. */
resume (oneproc || step || bpstat_should_step (), stop_signal);
@@ -507,6 +503,11 @@ child_create_inferior (exec_file, allargs, env)
restore it. */
save_our_env = environ;
/* Tell the terminal handling subsystem what tty we plan to run on;
it will just record the information for later. */
new_tty_prefork (inferior_io_terminal);
#if defined(USG) && !defined(HAVE_VFORK)
pid = fork ();
#else
@@ -542,10 +543,10 @@ child_create_inferior (exec_file, allargs, env)
}
#endif /* SET_STACK_LIMIT_HUGE */
/* Tell the terminal handling subsystem what tty we plan to run on;
it will now switch to that one if non-null. */
/* Ask the tty subsystem to switch to the one we specified earlier
(or to share the current terminal, if none was specified). */
new_tty (inferior_io_terminal);
new_tty ();
/* Changing the signal handlers for the inferior after
a vfork can also change them for the superior, so we don't mess
@@ -630,6 +631,13 @@ child_create_inferior (exec_file, allargs, env)
}
stop_soon_quietly = 0;
/* We are now in the child process of interest, having exec'd the
correct program, and are poised at the first instruction of the
new program. */
#ifdef SOLIB_CREATE_INFERIOR_HOOK
SOLIB_CREATE_INFERIOR_HOOK ();
#endif
/* Should this perhaps just be a "proceed" call? FIXME */
insert_step_breakpoint ();
breakpoints_failed = insert_breakpoints ();
@@ -725,6 +733,9 @@ child_attach (args, from_tty)
/*proceed (-1, 0, -2);*/
target_terminal_inferior ();
wait_for_inferior ();
#ifdef SOLIB_ADD
solib_add (NULL, 0);
#endif
normal_stop ();
#endif /* ATTACH_DETACH */
}