fix rtl program arity functions
authorAndy Wingo <wingo@pobox.com>
Fri, 19 Jul 2013 14:19:34 +0000 (16:19 +0200)
committerAndy Wingo <wingo@pobox.com>
Sun, 21 Jul 2013 15:12:21 +0000 (17:12 +0200)
* libguile/programs.c (parse_arity): Lookup rtl-program-minimum-arity
  from (system vm debug).

* module/system/vm/debug.scm (find-first-arity): Fix the linear search.
  Whoops!

libguile/programs.c
module/system/vm/debug.scm

index d8dd378..8b346ed 100644 (file)
@@ -482,7 +482,7 @@ scm_i_rtl_program_minimum_arity (SCM program, int *req, int *opt, int *rest)
 
   if (scm_is_false (rtl_program_minimum_arity) && scm_module_system_booted_p)
     rtl_program_minimum_arity =
-        scm_c_private_variable ("system vm debug",
+        scm_c_private_variable ("system vm program",
                                 "rtl-program-minimum-arity");
 
   l = scm_call_1 (scm_variable_ref (rtl_program_minimum_arity), program);
index c70f7c5..0e97df5 100644 (file)
@@ -292,10 +292,10 @@ section of the ELF image.  Returns an ELF symbol, or @code{#f}."
     (let lp ((pos headers-start))
       (cond
        ((>= pos headers-end) #f)
-       ((< text-offset (arity-low-pc* bv pos))
-        (lp (+ pos arity-header-len)))
-       ((< (arity-high-pc* bv pos) text-offset)
+       ((< text-offset (* (arity-low-pc* bv pos) 4))
         #f)
+       ((<= (* (arity-high-pc* bv pos) 4) text-offset)
+        (lp (+ pos arity-header-len)))
        (else
         (make-arity context base pos))))))