summaryrefslogtreecommitdiff
path: root/module
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2015-11-27 12:53:34 +0100
committerAndy Wingo <wingo@pobox.com>2015-12-01 11:30:54 +0100
commit2d0214a9b741083ca89d587016c86ad7b4c4bf1b (patch)
tree15673e1bf257a46474aef88cdc98d40219d15f24 /module
parentc960c76fe0dea22728a69923fa8cdaaaa5dc5edd (diff)
downloadguile-2d0214a9b741083ca89d587016c86ad7b4c4bf1b.tar.gz
,registers doesn't use frame-procedure
* module/system/repl/debug.scm (print-registers): Avoid frame-procedure, and be more useful and print an offset in units of 4 bytes.
Diffstat (limited to 'module')
-rw-r--r--module/system/repl/debug.scm14
1 files changed, 8 insertions, 6 deletions
diff --git a/module/system/repl/debug.scm b/module/system/repl/debug.scm
index 9516af622..e148d444f 100644
--- a/module/system/repl/debug.scm
+++ b/module/system/repl/debug.scm
@@ -24,6 +24,7 @@
#:use-module (system base language)
#:use-module (system vm vm)
#:use-module (system vm frame)
+ #:use-module (system vm debug)
#:use-module (ice-9 rdelim)
#:use-module (ice-9 pretty-print)
#:use-module (ice-9 format)
@@ -94,12 +95,13 @@
(format port fmt val))
(format port "~aRegisters:~%" per-line-prefix)
- (print "ip = #x~x" (frame-instruction-pointer frame))
- (when (program? (frame-procedure frame))
- (let ((code (program-code (frame-procedure frame))))
- (format port " (#x~x~@d)" code
- (- (frame-instruction-pointer frame) code))))
- (newline port)
+ (let ((ip (frame-instruction-pointer frame)))
+ (print "ip = #x~x" ip)
+ (let ((info (find-program-debug-info ip)))
+ (when info
+ (let ((addr (program-debug-info-addr info)))
+ (format port " (#x~x + ~d * 4)" addr (/ (- ip addr) 4)))))
+ (newline port))
(print "sp = ~a\n" (frame-stack-pointer frame))
(print "fp = ~a\n" (frame-address frame)))