Include the crashing function in the link to a crash log
authoraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Feb 2011 01:17:57 +0000 (01:17 +0000)
committeraroben@apple.com <aroben@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 4 Feb 2011 01:17:57 +0000 (01:17 +0000)
Fixes <http://webkit.org/b/53739> Crash log links in results.html should include the
function that crashed

Reviewed by David Kilzer.

* Scripts/old-run-webkit-tests:
(crashLocation): Added. Returns the location of the crash.
(linksForErrorTest): Include the crash location in the link text for the crash log, if one
could be determined.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@77571 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/Scripts/old-run-webkit-tests

index a205f2e8372ae423bd36eaf7a887d50128a69d39..e502979040743d4bdf5ca954476345ee480ccb91 100644 (file)
@@ -1,3 +1,17 @@
+2011-02-03  Adam Roben  <aroben@apple.com>
+
+        Include the crashing function in the link to a crash log
+
+        Fixes <http://webkit.org/b/53739> Crash log links in results.html should include the
+        function that crashed
+
+        Reviewed by David Kilzer.
+
+        * Scripts/old-run-webkit-tests:
+        (crashLocation): Added. Returns the location of the crash.
+        (linksForErrorTest): Include the crash location in the link text for the crash log, if one
+        could be determined.
+
 2011-02-03  Dirk Pranke  <dpranke@chromium.org>
 
         Unreviewed, build fix.
 2011-02-03  Dirk Pranke  <dpranke@chromium.org>
 
         Unreviewed, build fix.
index 80dcc634fdad7ee2498b2c9675a74b994af1254e..7b245306027e544b862ea760b031c1daca7390de 100755 (executable)
@@ -1949,6 +1949,37 @@ sub linksForMismatchTest
     return \@links;
 }
 
     return \@links;
 }
 
+sub crashLocation($)
+{
+    my ($base) = @_;
+
+    return unless isCygwin();
+
+    my $crashLogFile = File::Spec->catfile($testResultsDirectory, "$base-$crashLogTag.txt");
+
+    # We're looking for the following text:
+    #
+    # FOLLOWUP_IP:
+    # module!function+offset [file:line]
+    #
+    # The second contains the function that crashed (or the function that ended up jumping to a bad
+    # address, as in the case of a null function pointer).
+
+    open LOG, "<", $crashLogFile or return;
+    while (my $line = <LOG>) {
+        last if $line =~ /^FOLLOWUP_IP:/;
+    }
+    my $desiredLine = <LOG>;
+    close LOG;
+
+    return unless $desiredLine;
+
+    # Just take everything up to the first space (which is where the file/line information should
+    # start).
+    $desiredLine =~ /^(\S+)/;
+    return $1;
+}
+
 sub linksForErrorTest
 {
     my ($test) = @_;
 sub linksForErrorTest
 {
     my ($test) = @_;
@@ -1957,9 +1988,14 @@ sub linksForErrorTest
 
     my $base = stripExtension($test);
 
 
     my $base = stripExtension($test);
 
+    my $crashLogText = "crash log";
+    if (my $crashLocation = crashLocation($base)) {
+        $crashLogText .= " (<code>" . $crashLocation . "</code>)";
+    }
+
     push @links, @{linksForExpectedAndActualResults($base)};
     push @links, { href => "$base-$errorTag.txt", text => "stderr" };
     push @links, @{linksForExpectedAndActualResults($base)};
     push @links, { href => "$base-$errorTag.txt", text => "stderr" };
-    push @links, { href => "$base-$crashLogTag.txt", text => "crash log" };
+    push @links, { href => "$base-$crashLogTag.txt", text => $crashLogText };
 
     return \@links;
 }
 
     return \@links;
 }