Include the crashing function in the link to a crash log on Mac
[WebKit.git] / Tools / Scripts / old-run-webkit-tests
index 6c277d7bd10d04e691c5a605d75b7e772c42e5bf..c56cb1c21b2a90199271a94998677e2f190779da 100755 (executable)
@@ -1969,31 +1969,57 @@ sub crashLocation($)
 {
     my ($base) = @_;
 
 {
     my ($base) = @_;
 
-    return unless isCygwin();
-
     my $crashLogFile = File::Spec->catfile($testResultsDirectory, "$base-$crashLogTag.txt");
 
     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).
+    if (isCygwin()) {
+        # 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;
 
 
-    open LOG, "<", $crashLogFile or return;
-    while (my $line = <LOG>) {
-        last if $line =~ /^FOLLOWUP_IP:/;
+        # Just take everything up to the first space (which is where the file/line information should
+        # start).
+        $desiredLine =~ /^(\S+)/;
+        return $1;
     }
     }
-    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;
+    if (isAppleMacWebKit()) {
+        # We're looking for the following text:
+        #
+        # Thread M Crashed:
+        # N   module                              address function + offset (file:line)
+        #
+        # Some lines might have a module of "???" if we've jumped to a bad address. We should skip
+        # past those.
+
+        open LOG, "<", $crashLogFile or return;
+        while (my $line = <LOG>) {
+            last if $line =~ /^Thread \d+ Crashed:/;
+        }
+        my $location;
+        while (my $line = <LOG>) {
+            $line =~ /^\d+\s+(\S+)\s+\S+ (.* \+ \d+)/ or next;
+            my $module = $1;
+            my $functionAndOffset = $2;
+            next if $module eq "???";
+            $location = "$module: $functionAndOffset";
+            last;
+        }
+        close LOG;
+        return $location;
+    }
 }
 
 sub linksForErrorTest
 }
 
 sub linksForErrorTest