Skip to content

[debugger] attempt to create ridiculously large menu when stack overflows #2213

@nbriggs

Description

@nbriggs

If something causes a stack overflow (with many smallish frames, not a few very large ones) then the debugger attempts to build and attach a menu to the debugger window with restart points.

A typical stack, for a function "R" that recurses indefinitely, gets a stack overflow warning in Lisp, and then takes a stack full fault and drops into URaid looks like:

< l u
  0 :    0x1f94e : IL:\TTYBACKGROUND
  1 :    0x1f8cc : IL:\GETKEY
  2 :    0x1f8b6 : IL:\BIN
  3 :    0x1f86c : IL:\FILLBUFFER
  4 :    0x1f856 : IL:\READREFILL
  5 :    0x1f842 : IL:\CREATELINEBUFFERA0005
  6 :    0x1f82a : IL:\EOF.ACTION
  7 :    0x1f80a : IL:\CORE.GETNEXTBUFFER
  8 :    0x1f7ee : IL:\BUFFERED.BIN
  9 :    0x1f7d6 : IL:\BIN
 10 :    0x1f7b8 : IL:\XCCSINCCODE
 11 :    0x1f796 : IL:\INCCODE.EOLC
 12 :    0x1f738 : IL:\SUBREAD
 13 :    0x1f704 : SI:*UNWIND-PROTECT*
 14 :    0x1f6e4 : IL:\TOP-LEVEL-READ
 15 :    0x1f6c0 : IL:READ
 16 :    0x1f6a4 : DEBUGGER:EMERGENCY-PANIC-LOOP
 17 :    0x1f646 : XCL:DEBUGGER
 18 :    0x1f582 : SI:*UNWIND-PROTECT*
 19 :    0x1f54a : CL:ERROR
 20 :    0x1f52e : IL:ERRORXA0001A0002
 21 :    0x1f50a : SI:*UNWIND-PROTECT*
 22 :    0x1f4ee : IL:ERRORX
 23 :    0x1f4d6 : IL:ERROR
 24 :    0x1f4bc : IL:\LISPERROR
 25 :    0x1f49c : IL:\DTEST.UFN
 26 :    0x1f470 : IL:\COMMON.DSPCREATE
 27 :    0x1f44a : IL:DSPCREATE
 28 :    0x1f3de : IL:UPDATE/MENU/IMAGE
 29 :    0x1f3be : IL:CHECK/MENU/IMAGE
 30 :    0x1f378 : DEBUGGER:ATTACH-BACKTRACE-MENU
 31 :    0x1f344 : SI:*UNWIND-PROTECT*
 32 :    0x1f2e2 : XCL:DEBUGGER
 33 :    0x1f21e : SI:*UNWIND-PROTECT*
 34 :    0x1f1e6 : CL:ERROR
 35 :    0x1f1ca : IL:ERRORXA0001A0002
 36 :    0x1f1a6 : SI:*UNWIND-PROTECT*
 37 :    0x1f18a : IL:ERRORX
 38 :    0x1f174 : IL:\LISPERROR
 39 :    0x1f15c : IL:STACK.FULL.WARNING
 40 :    0x1f144 : SI:*UNWIND-PROTECT*
 41 :    0x1f126 : IL:\DOSTACKFULLINTERRUPT
 42 :    0x1f102 : IL:INTERRUPTED
 43 :    0x1f0ee : IL:\INTERRUPTED
 44 :    0x1f0de : IL:\INTERRUPTFRAME
 45 :    0x1f0cc : IL:R
 46 :    0x1f0ba : IL:R
 47 :    0x1f0a8 : IL:R
 48 :    0x1f096 : IL:R
 49 :    0x1f084 : IL:R
 50 :    0x1f072 : IL:R
 51 :    0x1f060 : IL:R
 52 :    0x1f04e : IL:R
 53 :    0x1f03c : IL:R
[...]
2966 :    0x121b8 : IL:R
2967 :    0x121a6 : IL:R
2968 :    0x12190 : IL:R
2969 :    0x1216e : IL:\EVALFORM
2970 :    0x12150 : IL:FAULTEVAL
2971 :    0x12132 : IL:\EVALFORM
2972 :    0x1211e : IL:EVAL
2973 :    0x120fa : IL:EVAL-INPUT
2974 :    0x12088 : IL:DO-EVENT
2975 :    0x12052 : XCL:EXECA0001A0002

The Lisp debugger window it was trying to create looks like:

Image

The frame for UPDATE/MENU/IMAGE looks like:

< f 28
IVAR -------
  1f3d8 : 0x  65  0x c84  IL:MNU  {IL:MENU}0x650c84
  1f3da : 0x  6f  0x2790  IL:SCREEN  {IL:SCREEN}0x6f2790

## STACK BF at 0x1f3dc ##
[cnt=0 ]
ivar : 0xf3d8
>> Bf's ivar says 0x1f3d8 vs. IVar says 0x1f8e2
Fname is IL:UPDATE/MENU/IMAGE
## STACK FX at 0x1f3de ##
[cnt = 0 ]
 #alink           0xf3c9 [SLOWP]
 fnhead   0x3b8cd4 
 nextblock        0xf444 
 pc               0x465 
 nametbl  0x6f4750 
 #blink           0xf3dc 
 #clink           0xf3c8 
  1f3e8 : 0x   e  0x   1  IL:NUMCOLS  1
  1f3ea : 0x   e  0x b77  IL:NUMROWS  2935
  1f3ec : 0x   e  0x  68  IL:WIDTH  104
  1f3ee : 0x   e  0x72a6  IL:HEIGHT  29350
  1f3f0 : 0x   0  0x   0  IL:DSP  CL:NIL
  1f3f2 : 0x  5e  0x9bf8  IL:BLK  {IL:BIGBM}0x5e9bf8
  1f3f4 : 0x   e  0x  68  IL:COLWIDTH  104
  1f3f6 : 0x   e  0x   a  IL:ROWHEIGHT  10
  1f3f8 : 0x   e  0x   1  IL:BITSPERPIXEL  1
  1f3fa : 0x  68  0x 21e  IL:MENUITEMS  (("STACK.FULL.WARNING" 0) ("SI::*UNWIND-PROTECT*" 1) ("INTERRUPTED" 3) ("R" 6) ("R" 7) ("R" 8) ("R" 9) ("R" 10) ("R" 11) ("R" 12) ("R" 13) )
  1f3fc : 0x   e  0x b77  IL:NITEMS  2935
  1f3fe : 0x   e  0x   0  IL:BORDER  0
  1f400 : 0x   e  0x   0  IL:OUTLINE  0
Press Return(to quit Esc and Ret):
  1f402 : 0x  7c  0x1b32  IL:FONT  {IL:FONTDESCRIPTOR}0x7c1b32
  1f404 : 0x   0  0x   0  IL:TITLEFONT  CL:NIL
  1f406 : 0x   e  0x   0  IL:TITLEHEIGHT  0
  1f408 : 0x   e  0x   0  IL:TITLEWIDTH  0
  1f40a : 0x   0  0x   0  IL:WINDOW  CL:NIL
  1f40c : 0x   0  0x   0  IL:TITLE  CL:NIL
  1f40e : 0x   0  0x   0  IL:ANYSUBITEMS?  CL:NIL
  1f410 : 0x   0  0x   0  IL:CENTER?  CL:NIL
  1f412 : 0x   0  0x   0  *local* [pvar21]   CL:NIL
  1f414 : 0xffff  0xffff  *local* [pvar22]   [variable not bound]
  1f416 : 0xffff  0xffff  IL:I  [variable not bound]
  1f418 : 0xffff  0xffff  IL:NITEMSTOFIT  [variable not bound]
  1f41a : 0xffff  0xffff  IL:ITEMREGION  [variable not bound]
  1f41c : 0xffff  0xffff  IL:MAJOR#  [variable not bound]
  1f41e : 0xffff  0xffff  [not looked up]  IL:MENUSUBITEMMARK
  1f420 : 0x   0  0x  4c  
  1f422 : 0x  6f  0x2790  
  1f424 : 0xfff0  0x  1c  
  1f426 : 0xfff8  0x  2a  
  1f428 : 0x  68  0x 21e  
  1f42a : 0x   0  0x   0  
  1f42c : 0x   e  0x b77  
  1f42e : 0x   e  0x   0  
  1f430 : 0x   e  0x   0  
  1f432 : 0x   0  0x   0  
  1f434 : 0x   e  0x  68  
  1f436 : 0x   e  0x72a6  
  1f438 : 0x  65  0x c84  
  1f43a : 0x  65  0x c84  
  1f43c : 0x   e  0x   1  
  1f43e : 0x  5e  0x9bf8  
  1f440 : 0x   0  0x   0  
  1f442 : 0x   0  0x   0  

The menu it is trying to create is 2935 rows, requiring a BIGBM bitmap, with height 29350 pixels -- which is far too large. In trying to create this we take a hard fault running out of stack.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Projects

    Status

    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions