diff options
author | Andy Wingo <wingo@pobox.com> | 2013-11-07 23:03:45 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2013-11-07 23:03:45 +0100 |
commit | 581a4eb82b1534970060e3cbd79b9a96d351edf9 (patch) | |
tree | ffd7c1b175ca1746f63f697b4259e52c6c66597a /module/system/vm/debug.scm | |
parent | 72b82b0f210ef47798133dabf2a81eef3e036ba6 (diff) | |
download | guile-581a4eb82b1534970060e3cbd79b9a96d351edf9.tar.gz |
frame-instruction-pointer is absolute; rewrite (system vm coverage)
* libguile/frames.c (scm_frame_source): Instead of assuming that
scm_frame_procedure is correct, use the IP to get the source.
(scm_frame_instruction_pointer): Return an absolute value instead of
assuming that slot 0 is correct. (It isn't, when preparing for a tail
call.)
* libguile/programs.h:
* libguile/programs.c (scm_find_source_for_addr): New internal helper.
* module/system/repl/debug.scm (print-registers): Readably print
absolute instruction pointers.
* module/system/vm/coverage.scm: Complete rewrite to use absolute IP's.
We can't assume that frame-procedure is cheap if it is correct, or
correct if it is cheap. Anyway using the address is better anyway.
(coverage-data->lcov): Disable per-function info temporarily.
(loaded-modules, module-procedures, closest-source-line)
(closed-over-procedures): Remove these. Instead of going from
procedures to source info, now we go from ELF image to source info.
* module/system/vm/debug.scm (debug-context-length): New interface.
* module/system/vm/program.scm (source-for-addr): New internal helper.
Diffstat (limited to 'module/system/vm/debug.scm')
-rw-r--r-- | module/system/vm/debug.scm | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/module/system/vm/debug.scm b/module/system/vm/debug.scm index c66c15b3b..a3aede73c 100644 --- a/module/system/vm/debug.scm +++ b/module/system/vm/debug.scm @@ -35,6 +35,7 @@ #:use-module (srfi srfi-9) #:export (debug-context-image debug-context-base + debug-context-length debug-context-text-base program-debug-info-name @@ -96,6 +97,11 @@ @var{context}." (elf-bytes (debug-context-elf context))) +(define (debug-context-length context) + "Return the size of the mapped ELF image corresponding to +@var{context}, in bytes." + (bytevector-length (debug-context-image context))) + (define (for-each-elf-symbol context proc) "Call @var{proc} on each symbol in the symbol table of @var{context}." (let ((elf (debug-context-elf context))) |