diff options
author | Andy Wingo <wingo@pobox.com> | 2018-07-16 15:42:05 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2018-07-20 11:42:30 +0200 |
commit | 043432fd573648fe8591672aca7e2438b71e6774 (patch) | |
tree | 15e0f687c0bb1283b3fa066ed4ef23404e757a23 /module/system/vm/disassembler.scm | |
parent | b1705bd0f0181a6496223b26cb5da68fa470ccaa (diff) | |
download | guile-043432fd573648fe8591672aca7e2438b71e6774.tar.gz |
Reserve frame word for machine return address
* libguile/frames.h: Add machine return address to diagram.
(SCM_FRAME_MACHINE_RETURN_ADDRESS):
(SCM_FRAME_SET_MACHINE_RETURN_ADDRESS): New macros.
(SCM_FRAME_PREVIOUS_SP):
(SCM_FRAME_DYNAMIC_LINK):
(SCM_FRAME_SET_DYNAMIC_LINK): Adapt for new frame size.
* libguile/vm-engine.c (halt): Set frame size to 3.
(call, call-label): Set mRA to 0.
* libguile/vm.c (push_interrupt_frame, reinstate_continuation_x):
(scm_call_n): Set frame size to 3. In push_interrupt_frame, init the
mRA of the frame.
(vm_builtin_call_with_values_code, vm_handle_interrupt_code): Allocate
larger frames.
* module/language/cps/slot-allocation.scm (allocate-slots): Frame size
is 3.
* module/system/vm/disassembler.scm (define-clobber-parser): Bump frame
size.
Diffstat (limited to 'module/system/vm/disassembler.scm')
-rw-r--r-- | module/system/vm/disassembler.scm | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/module/system/vm/disassembler.scm b/module/system/vm/disassembler.scm index f0b1a1076..f46b160c6 100644 --- a/module/system/vm/disassembler.scm +++ b/module/system/vm/disassembler.scm @@ -615,7 +615,7 @@ address of that offset." (lambda () (disassemble-one code (/ pos 4))) (lambda (len elt) - (define frame-size 2) + (define frame-size 3) (match elt ((_ proc . _) (let lp ((slot (- proc frame-size))) |