Home | History | Annotate | Download | only in patches
      1  7076  gman diff -urN bug-buddy-2.12.1/configure.in bug-buddy-2.12.1-hacked/configure.in
      2  7076  gman --- bug-buddy-2.12.1/configure.in	2005-10-01 14:38:24.000000000 +1200
      3  7076  gman +++ bug-buddy-2.12.1-hacked/configure.in	2005-10-26 16:10:33.689331000 +1300
      4  7076  gman @@ -86,7 +86,12 @@
      5  7076  gman  fi
      6  7076  gman  AC_DEFINE_UNQUOTED(GNOMELIBEXECDIR, "$GNOMELIBEXECDIR", [Libexec directory])
      7  7076  gman  
      8  7076  gman -
      9  7076  gman +AC_CANONICAL_HOST
     10  7076  gman +case "$host" in
     11  7076  gman +*solaris*)
     12  7076  gman +       AC_DEFINE(SOLARIS,1,Define to 1 if solaris)
     13  7076  gman +       ;;
     14  7076  gman +esac
     15  7076  gman  
     16  7076  gman  AC_OUTPUT([
     17  7076  gman  bug-buddy.spec
     18  7076  gman diff -urN bug-buddy-2.12.1/src/gdb-buddy.c bug-buddy-2.12.1-hacked/src/gdb-buddy.c
     19  7076  gman --- bug-buddy-2.12.1/src/gdb-buddy.c	2005-07-20 06:49:18.000000000 +1200
     20  7076  gman +++ bug-buddy-2.12.1-hacked/src/gdb-buddy.c	2005-10-26 16:40:09.449769000 +1300
     21  7076  gman @@ -152,15 +152,28 @@
     22  7076  gman  	int status;
     23  7076  gman  	FILE *f;
     24  7076  gman  
     25  7076  gman -	gdb_cmd = g_strdup_printf ("gdb --batch --core=%s", core_file);
     26  7076  gman +	gboolean use_pstack = FALSE;
     27  7076  gman +
     28  7076  gman +#ifdef SOLARIS
     29  7076  gman +        char *gdb = g_find_program_in_path ("gdb");
     30  7076  gman +        if (gdb)
     31  7076  gman +#endif
     32  7076  gman +                gdb_cmd = g_strdup_printf ("gdb --batch --core=%s", core_file);
     33  7076  gman +#ifdef SOLARIS
     34  7076  gman +        else {
     35  7076  gman +                gdb_cmd = g_strdup_printf ("pstack %s", core_file);
     36  7076  gman +		use_pstack = TRUE;
     37  7076  gman +	}
     38  7076  gman +#endif
     39  7076  gman  
     40  7076  gman  	f = popen (gdb_cmd, "r");
     41  7076  gman  	g_free (gdb_cmd);
     42  7076  gman  
     43  7076  gman  	if (!f) {
     44  7076  gman  		buddy_error (GET_WIDGET ("druid-window"),
     45  7076  gman -			     _("Unable to process core file with gdb:\n"
     46  7076  gman +			     _("Unable to process core file with %s:\n"
     47  7076  gman  			       "'%s'"),
     48  7076  gman +			     use_pstack ? "pstack" : "gdb",
     49  7076  gman  			     core_file);
     50  7076  gman  		return;
     51  7076  gman  	}
     52  7076  gman @@ -178,14 +191,31 @@
     53  7076  gman  				binary = g_strdup(s);
     54  7076  gman  			}
     55  7076  gman  		}
     56  7076  gman +#ifdef SOLARIS
     57  7076  gman +                else if (!binary && !strncmp(buf, "core ", 4)) {
     58  7076  gman +                        gchar *s;
     59  7076  gman +                        gchar *ptr = buf;
     60  7076  gman +                        while (*ptr != ':' && *ptr !='\0') ptr++;
     61  7076  gman +                        if (*ptr == ':') {
     62  7076  gman +                                ptr++;
     63  7076  gman +                                while (*ptr == ' ' || *ptr == '\t') ptr++;
     64  7076  gman +                                s = ptr;
     65  7076  gman +                                while (*ptr !='\0') ptr++;
     66  7076  gman +                                *ptr = '\0';
     67  7076  gman +                                binary = g_strdup(s);
     68  7076  gman +                        }
     69  7076  gman +                }
     70  7076  gman +#endif
     71  7076  gman +
     72  7076  gman  	}
     73  7076  gman  
     74  7076  gman  	status = pclose(f);
     75  7076  gman  
     76  7076  gman  	if (!binary) {
     77  7076  gman  		buddy_error (GET_WIDGET ("druid-window"),
     78  7076  gman -			     _("GDB was unable to determine which binary created\n"
     79  7076  gman +			     _("%s was unable to determine which binary created\n"
     80  7076  gman  			       "'%s'"),
     81  7076  gman +                             use_pstack ? "pstack" : "gdb",
     82  7076  gman  			     core_file);
     83  7076  gman  		return;
     84  7076  gman  	}	
     85  7076  gman @@ -254,17 +284,33 @@
     86  7076  gman  	const char *short_app;
     87  7076  gman  	char *long_app;
     88  7076  gman  	GError *error = NULL;
     89  7076  gman -	char *args[] = { "gdb",
     90  7076  gman -			 "--batch", 
     91  7076  gman -			 "--quiet",
     92  7076  gman -			 "--command=" BUDDY_DATADIR "/gdb-cmd",
     93  7076  gman -			 NULL, NULL, NULL };
     94  7076  gman -
     95  7076  gman -	if (!app || !extra || !*app || !*extra) {
     96  7076  gman +        char *args[7];
     97  7076  gman +        char *gdb = g_find_program_in_path ("gdb");
     98  7076  gman +	gboolean use_pstack = FALSE;
     99  7076  gman + 
    100  7076  gman +         if (!app || !extra || !*app || !*extra) {
    101  7076  gman  		buddy_error (GET_WIDGET ("druid-window"), 
    102  7076  gman  			     _("Both a binary file and PID are required to debug."));
    103  7076  gman -		return;
    104  7076  gman +                 return;
    105  7076  gman  	}
    106  7076  gman + 
    107  7076  gman +        if (gdb) {
    108  7076  gman +                args[0] =  gdb;
    109  7076  gman +                args[1] = "--batch";
    110  7076  gman +                args[2] = "--quiet";
    111  7076  gman +                args[3] = "--command=" BUDDY_DATADIR "/gdb-cmd";
    112  7076  gman +                args[4] = NULL;
    113  7076  gman +                args[5] = (char *)extra;
    114  7076  gman +                args[6] = NULL;
    115  7076  gman +        }
    116  7076  gman +#ifdef SOLARIS
    117  7076  gman +        else {
    118  7076  gman +                args[0] = g_find_program_in_path ("pstack");
    119  7076  gman +                args[1] = (char *)extra;
    120  7076  gman +                args[2] = args[3] = args[4] =  args[5] = args[6] = NULL;
    121  7076  gman +		use_pstack = TRUE;
    122  7076  gman +        }
    123  7076  gman +#endif
    124  7076  gman  
    125  7076  gman  	if (app[0] == G_DIR_SEPARATOR) {
    126  7076  gman  		long_app = g_strdup (app);
    127  7076  gman @@ -287,14 +333,13 @@
    128  7076  gman  		return;
    129  7076  gman  	}
    130  7076  gman  
    131  7076  gman -	args[0] = g_find_program_in_path ("gdb");
    132  7076  gman -	args[4] = long_app;
    133  7076  gman -	args[5] = (char *)extra;
    134  7076  gman +	if (!use_pstack)
    135  7076  gman +		args[4] = long_app;
    136  7076  gman  
    137  7076  gman  	if (!args[0]) {
    138  7076  gman  		buddy_error (GET_WIDGET ("druid-window"),
    139  7076  gman -			     _("GDB could not be found on your system.\n"
    140  7076  gman -			       "Debugging information will not be obtained."));
    141  7076  gman +			     _("%s could not be found on your system.\n"
    142  7076  gman +			       "Debugging information will not be obtained."), use_pstack ? "pstack" : "gdb");
    143  7076  gman  		d(g_message ("Path: %s", getenv ("PATH")));
    144  7076  gman  	} else {
    145  7076  gman  		d(g_message ("About to debug '%s'", long_app));
    146  7076  gman @@ -309,7 +354,7 @@
    147  7076  gman  					       &druid_data.fd, 
    148  7076  gman  					       NULL, &error)) {
    149  7076  gman  			buddy_error (GTK_WIDGET ("druid-window"),
    150  7076  gman -				     _("There was an error running gdb:\n\n%s"),
    151  7076  gman +				     _("There was an error running %s:\n\n%s"), use_pstack ? "pstack" : "gdb",
    152  7076  gman  				     error->message);
    153  7076  gman  			g_error_free (error);
    154  7076  gman  		} else {
    155