On Wed, 2011-03-23 at 00:57 +0100, Samuel Thibault wrote:
> I've uploaded a package with your fix on debian-ports. Upstream
> discussion still has to happen on
>
> http://sourceware.org/bugzilla/show_bug.cgi?id=12222
Looks like the patch at sourceware.org is not the right one, neither is
the patch in #579834. Correct patch is attached. I could add it to the
Debian bug. How to get it updated in in sourceware?
I recompiled gdb with gcc-4.6 to see if the bogus memory addresses when
debugging exim4 disappeared, but they did not.
But something else was improved:
path/to/compiled/gdb /usr/sbin/exim4
(gdb) run --version
(gdb) Starting program: /usr/sbin/exim4 --version
This warning disappeared:
warning: Error setting exception port for process 1701: (ipc/send)
invalid destination port
And this console message disappears:
task 520b4efc deallocating an invalid port 27260952, most probably a bug
This message is still there:
Can't fetch registers from thread bogus thread id 3: No such thread
--- gdb-7.2/gdb/gnu-nat.c.orig 2010-05-14 22:17:37.000000000 +0200
+++ gdb-7.2/gdb/gnu-nat.c 2011-03-28 09:07:49.000000000 +0200
@@ -1578,8 +1578,8 @@
if (--inf->pending_execs == 0)
/* We're done! */
{
+ prune_threads (); /* Get rid of the old shell threads */
#if 0 /* do we need this? */
- prune_threads (1); /* Get rid of the old shell threads */
renumber_threads (0); /* Give our threads reasonable names. */
#endif
}
--- gdb-7.2/gdb/thread.c.orig 2010-08-06 21:51:49.000000000 +0200
+++ gdb-7.2/gdb/thread.c 2011-03-28 09:04:52.000000000 +0200
@@ -61,7 +61,6 @@
static void info_threads_command (char *, int);
static void thread_apply_command (char *, int);
static void restore_current_thread (ptid_t);
-static void prune_threads (void);
/* Frontend view of the thread state. Possible extensions: stepping,
finishing, until(ling),... */
@@ -518,7 +517,7 @@
return 1;
}
-static void
+void
prune_threads (void)
{
struct thread_info *tp, *next;
--- gdb-7.2/gdb/gdbthread.h.orig 2010-01-12 22:40:24.000000000 +0100
+++ gdb-7.2/gdb/gdbthread.h 2011-03-28 09:03:55.000000000 +0200
@@ -213,6 +213,9 @@
/* Delete an existing thread list entry. */
extern void delete_thread (ptid_t);
+/* Prune inactive threads */
+extern void prune_threads (void);
+
/* Delete an existing thread list entry, and be quiet about it. Used
after the process this thread having belonged to having already
exited, for example. */