summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <dan@debian.org>2006-01-26 18:11:52 +0000
committerDaniel Jacobowitz <dan@debian.org>2006-01-26 18:11:52 +0000
commit104769759cf29f5dd830f6651ec206963073352d (patch)
tree20905235cf06bbcb77bac63306814ae35f6d7abc
parentce48d8e3cb4764664cdd626828b46da6aa82160c (diff)
downloadgdb-104769759cf29f5dd830f6651ec206963073352d.tar.gz
Backport:
2006-01-24 Daniel Jacobowitz <dan@codesourcery.com> PR gdb/1914 * fork-child.c (fork_inferior): Don't call solib_create_inferior_hook. * infcmd.c (post_create_inferior): Call solib_add, solib_create_inferior_hook, and re_enable_breakpoints_in_shlibs. (attach_command): Don't call solib_add or re_enable_breakpoints_in_shlibs. Call post_create_inferior instead. ...
-rw-r--r--ChangeLog.csl30
-rw-r--r--gdb/Makefile.in8
-rw-r--r--gdb/corelow.c21
-rw-r--r--gdb/fork-child.c6
-rw-r--r--gdb/inf-ptrace.c5
-rw-r--r--gdb/inf-ttrace.c5
-rw-r--r--gdb/infcmd.c34
-rw-r--r--gdb/inferior.h2
-rw-r--r--gdb/inftarg.c5
-rw-r--r--gdb/remote.c18
10 files changed, 63 insertions, 71 deletions
diff --git a/ChangeLog.csl b/ChangeLog.csl
index 633c4042b65..c2a70f6a7ba 100644
--- a/ChangeLog.csl
+++ b/ChangeLog.csl
@@ -3,6 +3,36 @@
Backport:
2006-01-24 Daniel Jacobowitz <dan@codesourcery.com>
+ PR gdb/1914
+ * fork-child.c (fork_inferior): Don't call
+ solib_create_inferior_hook.
+ * infcmd.c (post_create_inferior): Call solib_add,
+ solib_create_inferior_hook, and re_enable_breakpoints_in_shlibs.
+ (attach_command): Don't call solib_add or
+ re_enable_breakpoints_in_shlibs. Call post_create_inferior
+ instead.
+ * remote.c (remote_open_1): Don't call solib_create_inferior_hook
+ or observer_notify_inferior_created. Call post_create_inferior
+ instead.
+ * corelow.c: Don't include "observer.h".
+ (solib_add_stub): Deleted.
+ (core_open): Don't call observer_notify_inferior_created or
+ solib_add_stub. Call post_create_inferior instead.
+ * inf-ptrace.c: Don't include "observer.h".
+ (inf_ptrace_attach): Don't call observer_notify_inferior_created.
+ * inf-ttrace.c: Don't include "observer.h".
+ (inf_ttrace_attach): Don't call observer_notify_inferior_created.
+ * inferior.h (solib_create_inferior_hook): Remove redundant
+ prototype.
+ * inftarg.c: Don't include "observer.h".
+ (child_attach): Don't call observer_notify_inferior_created.
+ * Makefile.in: Update dependencies.
+
+2006-01-26 Daniel Jacobowitz <dan@codesourcery.com>
+
+ Backport:
+ 2006-01-24 Daniel Jacobowitz <dan@codesourcery.com>
+
* infcmd.c: Include "observer.h".
(post_create_inferior): New function.
(run_command_1): Call it. Also call proceed.
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 4d0b2d4fa3b..e7a2b737808 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -1826,7 +1826,7 @@ corefile.o: corefile.c $(defs_h) $(gdb_string_h) $(inferior_h) $(symtab_h) \
corelow.o: corelow.c $(defs_h) $(arch_utils_h) $(gdb_string_h) $(frame_h) \
$(inferior_h) $(symtab_h) $(command_h) $(bfd_h) $(target_h) \
$(gdbcore_h) $(gdbthread_h) $(regcache_h) $(regset_h) $(symfile_h) \
- $(exec_h) $(readline_h) $(observer_h) $(gdb_assert_h) \
+ $(exec_h) $(readline_h) $(gdb_assert_h) \
$(exceptions_h) $(solib_h)
core-regset.o: core-regset.c $(defs_h) $(command_h) $(gdbcore_h) \
$(inferior_h) $(target_h) $(gdb_string_h) $(gregset_h)
@@ -2123,7 +2123,7 @@ inflow.o: inflow.c $(defs_h) $(frame_h) $(inferior_h) $(command_h) \
$(serial_h) $(terminal_h) $(target_h) $(gdbthread_h) $(gdb_string_h) \
$(inflow_h)
inf-ptrace.o: inf-ptrace.c $(defs_h) $(command_h) $(inferior_h) $(inflow_h) \
- $(gdbcore_h) $(observer_h) $(regcache_h) $(gdb_assert_h) \
+ $(gdbcore_h) $(regcache_h) $(gdb_assert_h) \
$(gdb_string_h) $(gdb_ptrace_h) $(gdb_wait_h) $(inf_child_h)
infptrace.o: infptrace.c $(defs_h) $(command_h) $(frame_h) $(gdbcore_h) \
$(inferior_h) $(regcache_h) $(target_h) $(gdb_assert_h) \
@@ -2135,10 +2135,10 @@ infrun.o: infrun.c $(defs_h) $(gdb_string_h) $(symtab_h) $(frame_h) \
$(value_h) $(observer_h) $(language_h) $(solib_h) $(gdb_assert_h) \
$(mi_common_h) $(main_h)
inftarg.o: inftarg.c $(defs_h) $(frame_h) $(inferior_h) $(target_h) \
- $(gdbcore_h) $(command_h) $(gdb_stat_h) $(observer_h) $(gdb_wait_h) \
+ $(gdbcore_h) $(command_h) $(gdb_stat_h) $(gdb_wait_h) \
$(inflow_h)
inf-ttrace.o: inf-ttrace.c $(defs_h) $(command_h) $(gdbcore_h) \
- $(gdbthread_h) $(inferior_h) $(observer_h) $(target_h) \
+ $(gdbthread_h) $(inferior_h) $(target_h) \
$(gdb_assert_h) $(gdb_string_h) $(inf_child_h) $(inf_ttrace_h)
interps.o: interps.c $(defs_h) $(gdbcmd_h) $(ui_out_h) $(event_loop_h) \
$(event_top_h) $(interps_h) $(completer_h) $(gdb_string_h) \
diff --git a/gdb/corelow.c b/gdb/corelow.c
index 0f8269eaff6..42f492e4329 100644
--- a/gdb/corelow.c
+++ b/gdb/corelow.c
@@ -43,7 +43,6 @@
#include "symfile.h"
#include "exec.h"
#include "readline/readline.h"
-#include "observer.h"
#include "gdb_assert.h"
#include "exceptions.h"
#include "solib.h"
@@ -236,21 +235,6 @@ core_close_cleanup (void *ignore)
core_close (0/*ignored*/);
}
-/* Stub function for catch_errors around shared library hacking. FROM_TTYP
- is really an int * which points to from_tty. */
-
-static int
-solib_add_stub (void *from_ttyp)
-{
-#ifdef SOLIB_ADD
- SOLIB_ADD (NULL, *(int *) from_ttyp, &current_target, auto_solib_add);
-#else
- solib_add (NULL, *(int *)from_ttyp, &current_target, auto_solib_add);
-#endif
- re_enable_breakpoints_in_shlibs ();
- return 0;
-}
-
/* Look for sections whose names start with `.reg/' so that we can extract the
list of threads in a core file. */
@@ -372,7 +356,7 @@ core_open (char *filename, int from_tty)
/* This is done first, before anything has a chance to query the
inferior for information such as symbols. */
- observer_notify_inferior_created (&core_ops, from_tty);
+ post_create_inferior (&core_ops, from_tty);
p = bfd_core_file_failing_command (core_bfd);
if (p)
@@ -398,9 +382,6 @@ core_open (char *filename, int from_tty)
/* Fetch all registers from core file. */
target_fetch_registers (-1);
- /* Add symbols and section mappings for any shared libraries. */
- catch_errors (solib_add_stub, &from_tty, (char *) 0, RETURN_MASK_ALL);
-
/* Now, set up the frame cache, and print the top of stack. */
flush_cached_frames ();
select_frame (get_current_frame ());
diff --git a/gdb/fork-child.c b/gdb/fork-child.c
index 5cf5e493d3f..15769c6e9a5 100644
--- a/gdb/fork-child.c
+++ b/gdb/fork-child.c
@@ -403,12 +403,6 @@ fork_inferior (char *exec_file_arg, char *allargs, char **env,
might be used to have target-specific code initialize a variable
in the new process prior to executing the first instruction. */
TARGET_CREATE_INFERIOR_HOOK (pid);
-
-#ifdef SOLIB_CREATE_INFERIOR_HOOK
- SOLIB_CREATE_INFERIOR_HOOK (pid);
-#else
- solib_create_inferior_hook ();
-#endif
}
/* Accept NTRAPS traps from the inferior. */
diff --git a/gdb/inf-ptrace.c b/gdb/inf-ptrace.c
index a2fef2213e6..c5ebcf60980 100644
--- a/gdb/inf-ptrace.c
+++ b/gdb/inf-ptrace.c
@@ -26,7 +26,6 @@
#include "inferior.h"
#include "inflow.h"
#include "gdbcore.h"
-#include "observer.h"
#include "regcache.h"
#include "gdb_assert.h"
@@ -222,10 +221,6 @@ inf_ptrace_attach (char *args, int from_tty)
inferior_ptid = pid_to_ptid (pid);
push_target (ptrace_ops_hack);
-
- /* Do this first, before anything has had a chance to query the
- inferior's symbol table or similar. */
- observer_notify_inferior_created (&current_target, from_tty);
}
#ifdef PT_GET_PROCESS_STATE
diff --git a/gdb/inf-ttrace.c b/gdb/inf-ttrace.c
index 19cefa139a8..de38ef5428f 100644
--- a/gdb/inf-ttrace.c
+++ b/gdb/inf-ttrace.c
@@ -29,7 +29,6 @@
#include "gdbcore.h"
#include "gdbthread.h"
#include "inferior.h"
-#include "observer.h"
#include "target.h"
#include "gdb_assert.h"
@@ -721,10 +720,6 @@ inf_ttrace_attach (char *args, int from_tty)
inferior_ptid = pid_to_ptid (pid);
push_target (ttrace_ops_hack);
-
- /* Do this first, before anything has had a chance to query the
- inferior's symbol table or similar. */
- observer_notify_inferior_created (&current_target, from_tty);
}
static void
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 8183448b791..96063b4c2d6 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -405,6 +405,30 @@ tty_command (char *file, int from_tty)
void
post_create_inferior (struct target_ops *target, int from_tty)
{
+ if (exec_bfd)
+ {
+ /* Sometimes the platform-specific hook loads initial shared
+ libraries, and sometimes it doesn't. Try to do so first, so
+ that we can add them with the correct value for FROM_TTY. */
+#ifdef SOLIB_ADD
+ SOLIB_ADD (NULL, from_tty, target, auto_solib_add);
+#else
+ solib_add (NULL, from_tty, target, auto_solib_add);
+#endif
+
+ /* Create the hooks to handle shared library load and unload
+ events. */
+#ifdef SOLIB_CREATE_INFERIOR_HOOK
+ SOLIB_CREATE_INFERIOR_HOOK (pid);
+#else
+ solib_create_inferior_hook ();
+#endif
+
+ /* Enable any breakpoints which were disabled when the
+ underlying shared library was deleted. */
+ re_enable_breakpoints_in_shlibs ();
+ }
+
observer_notify_inferior_created (target, from_tty);
}
@@ -1899,18 +1923,12 @@ attach_command (char *args, int from_tty)
reread_symbols ();
}
-#ifdef SOLIB_ADD
- /* Add shared library symbols from the newly attached process, if any. */
- SOLIB_ADD ((char *) 0, from_tty, &current_target, auto_solib_add);
-#else
- solib_add (NULL, from_tty, &current_target, auto_solib_add);
-#endif
- re_enable_breakpoints_in_shlibs ();
-
/* Take any necessary post-attaching actions for this platform.
*/
target_post_attach (PIDGET (inferior_ptid));
+ post_create_inferior (&current_target, from_tty);
+
/* Install inferior's terminal modes. */
target_terminal_inferior ();
diff --git a/gdb/inferior.h b/gdb/inferior.h
index c4df7ad0f81..6bbd30c5d85 100644
--- a/gdb/inferior.h
+++ b/gdb/inferior.h
@@ -213,8 +213,6 @@ extern void store_inferior_registers (int);
extern void fetch_inferior_registers (int);
-extern void solib_create_inferior_hook (void);
-
extern void child_terminal_info (char *, int);
extern void term_info (char *, int);
diff --git a/gdb/inftarg.c b/gdb/inftarg.c
index 6f1a6099e1c..ab027f7646b 100644
--- a/gdb/inftarg.c
+++ b/gdb/inftarg.c
@@ -34,7 +34,6 @@
#include <signal.h>
#include <sys/types.h>
#include <fcntl.h>
-#include "observer.h"
#include "gdb_wait.h"
#include "inflow.h"
@@ -210,10 +209,6 @@ child_attach (char *args, int from_tty)
inferior_ptid = pid_to_ptid (pid);
push_target (&deprecated_child_ops);
-
- /* Do this first, before anything has had a chance to query the
- inferior's symbol table or similar. */
- observer_notify_inferior_created (&current_target, from_tty);
}
#if !defined(CHILD_POST_ATTACH)
diff --git a/gdb/remote.c b/gdb/remote.c
index 80a399add82..d56c17ff04c 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -2297,24 +2297,10 @@ remote_open_1 (char *name, int from_tty, struct target_ops *target,
getpkt (buf, (rs->remote_packet_size), 0);
}
- /* FIXME: need a master target_open vector from which all
- remote_opens can be called, so that stuff like this can
- go there. Failing that, the following code must be copied
- to the open function for any remote target that wants to
- support svr4 shared libraries. */
+ post_create_inferior (&current_target, from_tty);
- /* Set up to detect and load shared libraries. */
if (exec_bfd) /* No use without an exec file. */
- {
-#ifdef SOLIB_CREATE_INFERIOR_HOOK
- SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid));
-#else
- solib_create_inferior_hook ();
-#endif
- remote_check_symbols (symfile_objfile);
- }
-
- observer_notify_inferior_created (&current_target, from_tty);
+ remote_check_symbols (symfile_objfile);
}
/* This takes a program previously attached to and detaches it. After