[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: