aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog4
-rw-r--r--gdb/infcmd.c20
2 files changed, 24 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 41223e9..e2d2a6c 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,7 @@
+2005-01-17 Corinna Vinschen <vinschen@redhat.com>
+
+ * infcmd.c (attach_command): Call CLEAR_SOLIB if available.
+
2005-01-17 Andrew Cagney <cagney@gnu.org>
* top.h (source_error, source_pre_error): Delete declaration.
diff --git a/gdb/infcmd.c b/gdb/infcmd.c
index 3b5c45e..7f40180 100644
--- a/gdb/infcmd.c
+++ b/gdb/infcmd.c
@@ -1776,6 +1776,26 @@ attach_command (char *args, int from_tty)
error ("Not killed.");
}
+ /* Clear out solib state. Otherwise the solib state of the previous
+ inferior might have survived and is entirely wrong for the new
+ target. This has been observed on Linux using glibc 2.3. How to
+ reproduce:
+
+ bash$ ./foo&
+ [1] 4711
+ bash$ ./foo&
+ [1] 4712
+ bash$ gdb ./foo
+ [...]
+ (gdb) attach 4711
+ (gdb) detach
+ (gdb) attach 4712
+ Cannot access memory at address 0xdeadbeef
+ */
+#ifdef CLEAR_SOLIB
+ CLEAR_SOLIB ();
+#endif
+
target_attach (args, from_tty);
/* Set up the "saved terminal modes" of the inferior