update decode-panic for 10.6
authorDerrick Brashear <shadow@dementia.org>
Thu, 27 Aug 2009 19:47:58 +0000 (15:47 -0400)
committerDerrick Brashear <shadow|account-1000005@unknown>
Thu, 27 Aug 2009 19:54:57 +0000 (12:54 -0700)
how panics get reported changed in 10.6. also, the 64 bit universal kext
means we don't know what the last boot was.

Reviewed-on: http://gerrit.openafs.org/353
Tested-by: Derrick Brashear <shadow@dementia.org>
Reviewed-by: Derrick Brashear <shadow@dementia.org>

src/packaging/MacOS/decode-panic

index 8cdf3a8..a04f543 100755 (executable)
@@ -18,7 +18,10 @@ my $panic_file = "/Library/Logs/panic.log";
 my %crash_info;
 my $backtrace;
 my $kextload   = "/sbin/kextload";
+my $kextutil   = "/usr/bin/kextutil";
+my $kextprog;
 my $gdb        = "/usr/bin/gdb";
+my $gdbarch    = "";
 my $gdb_file   = "gdb.input";
 my $temp_dir   = tempdir( "afsdebugXXXXXX", DIR => File::Spec->tmpdir,
                         TMPDIR => 1, CLEANUP => 1 );
@@ -50,7 +53,7 @@ if ($option_help) {
 }
 
 # check for necessary programs & panic file
-for my $program ( $kextload, $gdb ) {
+for my $program ( $gdb, $kextload ) {
     if ( ! -x $program ) {
         if ( $option_quiet ) {
             exit 1;
@@ -60,6 +63,12 @@ for my $program ( $kextload, $gdb ) {
     }
 }
 
+if ( -x $kextutil ) {
+    $kextprog = $kextutil;
+} else {
+    $kextprog = $kextload;
+}
+
 croak "Can't find panic file: $panic_file!\n" if ( ! -r $panic_file );
 
 read_panic( $panic_file, \%crash_info );
@@ -68,7 +77,19 @@ generate_symbol_files( $crash_info{"afs_kernel_address"}, $temp_dir );
 
 write_gdb_input_file( $temp_dir, $gdb_file, $crash_info{ "backtrace" } );
 
-my $gdb_output = `$gdb /mach_kernel -batch -x $temp_dir/$gdb_file`;
+if ($crash_info{"kernel_version"} =~ /X86_64/ ) {
+    $gdbarch="-a x86_64";
+} else {
+    if ($crash_info{"kernel_version"} =~ /I386/ ) {
+       $gdbarch="-a i386";
+    } else {
+       if ($crash_info{"kernel_version"} =~ /PPC/ ) {
+           $gdbarch="-a ppc";
+       }
+    }
+}
+
+my $gdb_output = `$gdb $gdbarch /mach_kernel -batch -x $temp_dir/$gdb_file`;
 croak "gdb failed!\n" if $CHILD_ERROR;
 
 write_dump_file( $dump_file, \%crash_info, $gdb_output );
@@ -185,10 +206,11 @@ sub generate_symbol_files {
     my $kernel_address   = shift;
     my $symbol_write_dir = shift;
 
-    system( "/sbin/kextload",
-            "-s",  $temp_dir,
-            "-a", 'org.openafs.filesystems.afs@' . $kernel_address,
-            "-n", "/Library/OpenAFS/Tools/root.client/usr/vice/etc/afs.kext/" );
+    system( $kextprog,
+           "-s",  $temp_dir,
+           "-a", 'org.openafs.filesystems.afs@' . $kernel_address,
+           "-n", "/Library/OpenAFS/Tools/root.client/usr/vice/etc/afs.kext/" );
+    
     if ( $CHILD_ERROR ) {
         # error
         croak "kextload failed to run: $OS_ERROR\n";
@@ -285,13 +307,18 @@ Here is an example file that is fed to gdb:
    x/i 0x2ED1F7C0
    x/i 0x2ED0D1A4
 
+Panic logs can be found in /Library/Logs/panic.log in 10.4 (Tiger), 
+/Library/Logs/PanicReporter/YYYY-MM-DD-HHMMSS.panic in 10.5 (Leopard),
+and /Library/Logs/DiagnosticReports/Kernel_YYYY-MM-DD-HHMMSS.panic in 10.6
+(SnowLeopard).
+
 =head1 DEPENDENCIES
 
-This program needs gdb and kextload.
+This program needs gdb and kextload; Starting in SnowLeopard, it needs kextutil.
 
 =head1 BUGS AND LIMITATIONS
 
-It clobbers the output file.
+decode-panic clobbers the output file.
 
 =head1 AUTHOR