mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-20 19:50:24 +02:00
Add arity-code
* module/system/vm/debug.scm (arity-code): New interface.
This commit is contained in:
parent
20d7d68284
commit
bc5bcf6637
1 changed files with 12 additions and 0 deletions
|
@ -59,6 +59,7 @@
|
|||
arity-keyword-args
|
||||
arity-is-case-lambda?
|
||||
arity-definitions
|
||||
arity-code
|
||||
|
||||
debug-context-from-image
|
||||
fold-all-debug-contexts
|
||||
|
@ -400,6 +401,17 @@ section of the ELF image. Returns an ELF symbol, or @code{#f}."
|
|||
(error "invalid request for definitions of case-lambda wrapper arity"))
|
||||
(load-symbols link)))
|
||||
|
||||
(define (arity-code arity)
|
||||
(let* ((ctx (arity-context arity))
|
||||
(bv (elf-bytes (debug-context-elf ctx)))
|
||||
(header (arity-header-offset arity))
|
||||
(base-addr (+ (debug-context-base ctx) (debug-context-text-base ctx)))
|
||||
(low-pc (+ base-addr (arity-low-pc* bv header)))
|
||||
(high-pc (+ base-addr (arity-high-pc* bv header))))
|
||||
;; FIXME: We should be able to use a sub-bytevector operation here;
|
||||
;; it would be safer.
|
||||
(pointer->bytevector (make-pointer low-pc) (- high-pc low-pc))))
|
||||
|
||||
(define* (arity-locals arity #:optional nlocals)
|
||||
(let* ((bv (elf-bytes (debug-context-elf (arity-context arity))))
|
||||
(load-symbol (arity-load-symbol arity))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue