frame-instruction-pointer is absolute; rewrite (system vm coverage)
authorAndy Wingo <wingo@pobox.com>
Thu, 7 Nov 2013 22:03:45 +0000 (23:03 +0100)
committerAndy Wingo <wingo@pobox.com>
Thu, 7 Nov 2013 22:03:45 +0000 (23:03 +0100)
commit581a4eb82b1534970060e3cbd79b9a96d351edf9
treeffd7c1b175ca1746f63f697b4259e52c6c66597a
parent72b82b0f210ef47798133dabf2a81eef3e036ba6
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.
libguile/frames.c
libguile/programs.c
libguile/programs.h
module/system/repl/debug.scm
module/system/vm/coverage.scm
module/system/vm/debug.scm
module/system/vm/program.scm