Improve automatic test failure interpretation by extending backtrace
authorBen Pfaff <blp@cs.stanford.edu>
Fri, 19 May 2006 17:44:13 +0000 (17:44 +0000)
committerBen Pfaff <blp@cs.stanford.edu>
Fri, 19 May 2006 17:44:13 +0000 (17:44 +0000)
to the binary that failed.

TODO
src/tests/tests.pm

diff --git a/TODO b/TODO
index 080eb600050edc583cfb30d16e2daf3638a8bae0..0e8047e1072493fcafc2031f44456d347fa4ad1c 100644 (file)
--- a/TODO
+++ b/TODO
@@ -74,8 +74,6 @@ via Godmar Back:
 
 * Internal tests.
 
-* Improve automatic interpretation of exception messages.
-
 * Filesys project:
 
   - Need a better way to measure performance improvement of buffer
index 01259dd2b7e6b27628945339a64be895631becf2..858d8a4b50c58e1698bc5181024ea3a5bf012ada 100644 (file)
@@ -50,10 +50,27 @@ sub check_for_panic {
 
     my (@stack_line) = grep (/Call stack:/, @output);
     if (@stack_line != 0) {
-       my (@addrs) = $stack_line[0] =~ /Call stack:((?: 0x[0-9a-f]+)+)/;
-       print "Call stack: @addrs\n";
+       my ($addrs) = $stack_line[0] =~ /Call stack:((?: 0x[0-9a-f]+)+)/;
+
+       # Find a user program to translate user virtual addresses.
+       my ($userprog) = "";
+       $userprog = "$test"
+         if grep (hex ($_) < 0xc0000000, split (' ', $addrs)) > 0 && -e $test;
+
+       # Get and print the backtrace.
+       my ($trace) = scalar (`backtrace kernel.o $userprog $addrs`);
+       print "Call stack:$addrs\n";
        print "Translation of call stack:\n";
-       print `backtrace kernel.o @addrs`;
+       print $trace;
+
+       # Print disclaimer.
+       if ($userprog ne '' && index ($trace, $userprog) >= 0) {
+           print <<EOF;
+Translations of user virtual addresses above are based on a guess at
+the binary to use.  If this guess is incorrect, then those
+translations will be misleading.
+EOF
+       }
     }
 
     if ($panic =~ /sec_no \< d-\>capacity/) {