diff -urp gdb-6.4/debian/changelog mod/debian/changelog
--- gdb-6.4/debian/changelog	2006-02-23 15:19:49.972878118 -0600
+++ mod/debian/changelog	2006-02-23 15:28:44.482724021 -0600
@@ -1,3 +1,21 @@
+gdb (6.4-1Custom4) unstable; urgency=low
+
+  * Alternate solution to make edit, list, etc. work in hook-stop
+
+ -- Jason Kraftcheck <kraftche@cae.wisc.edu>  Thu, 23 Feb 2006 15:22:16 -0600
+
+gdb (6.4-1Custom3) unstable; urgency=low
+
+  * Move up stack until a valid symtab is available
+
+ -- Jason Kraftcheck <kraftche@cae.wisc.edu>  Wed, 22 Feb 2006 18:57:14 -0600
+
+gdb (6.4-1Custom2) unstable; urgency=low
+
+  * Try to make edit, list, etc. work in hook-stop
+
+ -- Jason Kraftcheck <kraftche@cae.wisc.edu>  Wed, 22 Feb 2006 15:52:12 -0600
+
 gdb (6.4-1) unstable; urgency=low
 
   * New upstream release.
diff -urp gdb-6.4/gdb/frame.h mod/gdb/frame.h
--- gdb-6.4/gdb/frame.h	2005-05-22 09:53:34.000000000 -0500
+++ mod/gdb/frame.h	2006-02-23 15:33:11.861630699 -0600
@@ -300,6 +300,14 @@ extern CORE_ADDR get_frame_func (struct 
 extern void find_frame_sal (struct frame_info *frame,
 			    struct symtab_and_line *sal);
 
+
+/* Set the current source and line to the location given by frame
+   FRAME, if possible.  When CENTER is true, adjust so the relevant
+   line is in the center of the next 'list'.  */
+extern void set_current_sal_from_frame (struct frame_info * frame, 
+                                        int center);
+
+
 /* Return the frame base (what ever that is) (DEPRECATED).
 
    Old code was trying to use this single method for two conflicting
Only in mod/gdb: gdb-6.4.patch.4
diff -urp gdb-6.4/gdb/infrun.c mod/gdb/infrun.c
--- gdb-6.4/gdb/infrun.c	2005-11-14 09:35:16.000000000 -0600
+++ mod/gdb/infrun.c	2006-02-23 15:28:44.485723627 -0600
@@ -3041,8 +3041,12 @@ Further execution is probably impossible
   /* Look up the hook_stop and run it (CLI internally handles problem
      of stop_command's pre-hook not existing).  */
   if (stop_command)
-    catch_errors (hook_stop_stub, stop_command,
-		  "Error while running hook_stop:\n", RETURN_MASK_ALL);
+    {
+      if (target_has_stack)
+        set_current_sal_from_frame (get_current_frame (), 1);
+      catch_errors (hook_stop_stub, stop_command,
+		    "Error while running hook_stop:\n", RETURN_MASK_ALL);
+    }
 
   if (!target_has_stack)
     {
diff -urp gdb-6.4/gdb/stack.c mod/gdb/stack.c
--- gdb-6.4/gdb/stack.c	2005-08-18 08:26:41.000000000 -0500
+++ mod/gdb/stack.c	2006-02-23 15:32:54.655888943 -0600
@@ -61,8 +61,6 @@ static void print_frame (struct frame_in
 			 enum print_what print_what,  int print_args,
 			 struct symtab_and_line sal);
 
-static void set_current_sal_from_frame (struct frame_info *, int);
-
 /* Zero means do things normally; we are interacting directly with the
    user.  One means print the full filename and linenumber when a
    frame is printed, and do so in a format emacs18/emacs19.22 can
@@ -373,12 +371,22 @@ print_args_stub (void *args)
    FRAME, if possible.  When CENTER is true, adjust so the relevant
    line is in the center of the next 'list'.  */
 
-static void
+void
 set_current_sal_from_frame (struct frame_info *frame, int center)
 {
   struct symtab_and_line sal;
+  int count;
 
   find_frame_sal (frame, &sal);
+  while (!sal.symtab)
+    {
+      count = 1;
+      frame = find_relative_frame( frame, &count );
+      if (count)
+        break;
+      find_frame_sal (frame, &sal);
+    } 
+      
   if (sal.symtab)
     {
       if (center)
