Re: Easy Guide / new tarball
> Do you live near Cambridge, Mass.? You're welcome to come and have a
> look.
:-) Indeed I do, but it's still probably easier for me to get you to do the
legwork.
> Well, it scrolled by pretty fast with the kernel messages appearing,
> but I believe it was libdiskfs/disk-pager.c:93 `env && "unexpected
> fault on disk image"'. I saw this with the last hurd (19990923?) too.
Hmm. I don't recall anyone hitting that one before. That is certainly odd.
Here is a hack to hopefully make it give more informative messages when it
crashes there. I've put up some binaries I just built using this in:
http://www.ai.mit.edu/people/roland/hurd/
if you want to give it a try without rebuilding from source. The
(big) non-".stripped" files there have full debugging symbols; but
since these are my binaries, I can figure some things out even
from backtraces with raw addresses and no symbols.
Index: disk-pager.c
===================================================================
RCS file: /afs/sipb.mit.edu/project/hurddev/cvsroot/hurd/libdiskfs/disk-pager.c,v
retrieving revision 1.7
diff -u -b -p -r1.7 disk-pager.c
--- disk-pager.c 1997/08/20 18:18:16 1.7
+++ disk-pager.c 1999/10/17 21:29:28
@@ -1,5 +1,5 @@
/* Map the disk image and handle faults accessing it.
- Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
Written by Roland McGrath.
This program is free software; you can redistribute it and/or
@@ -90,7 +90,19 @@ fault_handler (int sig, long int sigcode
jmp_buf *env = cthread_data (cthread_self ());
error_t err;
- assert (env && "unexpected fault on disk image");
+#ifndef NDEBUG
+ if (!env)
+ {
+ error (0, 0,
+ "BUG: unexpected fault on disk image (%d, %#lx) in [%#lx,%#lx)",
+ sig, sigcode,
+ preemptor.first, preemptor.last);
+ assert (scp->sc_error == EKERN_MEMORY_ERROR);
+ err = pager_get_error (diskfs_disk_pager, sigcode);
+ assert (err);
+ assert_perror (err);
+ }
+#endif
/* Clear the record, since the faulting thread will not. */
cthread_set_data (cthread_self (), 0);
Reply to: