Stack traces skip RTL boot frames
authorAndy Wingo <wingo@pobox.com>
Thu, 17 Oct 2013 21:25:01 +0000 (23:25 +0200)
committerAndy Wingo <wingo@pobox.com>
Thu, 17 Oct 2013 21:25:01 +0000 (23:25 +0200)
* libguile/frames.c (frame-previous)
* libguile/stacks.c (make-stack): Skip RTL boot frames.

libguile/frames.c
libguile/stacks.c

index 448a0cb..b2973bf 100644 (file)
@@ -334,7 +334,8 @@ SCM_DEFINE (scm_frame_previous, "frame-previous", 1, 0, 0,
                                 SCM_VM_FRAME_OFFSET (frame));
       proc = scm_frame_procedure (frame);
 
-      if (SCM_PROGRAM_P (proc) && SCM_PROGRAM_IS_BOOT (proc))
+      if ((SCM_PROGRAM_P (proc) || SCM_RTL_PROGRAM_P (proc))
+          && SCM_PROGRAM_IS_BOOT (proc))
         goto again;
       else
         return frame;
index c3ea624..fd19a49 100644 (file)
@@ -1,5 +1,5 @@
 /* A stack holds a frame chain
- * Copyright (C) 1996,1997,2000,2001, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation
+ * Copyright (C) 1996,1997,2000,2001, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public License
@@ -276,7 +276,8 @@ SCM_DEFINE (scm_make_stack, "make-stack", 1, 0, 1,
 
   /* FIXME: is this even possible? */
   if (scm_is_true (frame)
-      && SCM_PROGRAM_P (scm_frame_procedure (frame))
+      && (SCM_PROGRAM_P (scm_frame_procedure (frame))
+          || SCM_RTL_PROGRAM_P (scm_frame_procedure (frame)))
       && SCM_PROGRAM_IS_BOOT (scm_frame_procedure (frame)))
     frame = scm_frame_previous (frame);