mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-17 17:20:29 +02:00
fix some missed references when calling C functions
* gdbinit: Update to be a bit more useful. * libguile/vm-i-system.c: Make sure that arguments to C procedures are visible on the stack so they get marked. Could be a source for the missed references.
This commit is contained in:
parent
999f1b26e7
commit
887ce75ae8
2 changed files with 94 additions and 88 deletions
166
gdbinit
166
gdbinit
|
@ -99,90 +99,98 @@ define smobdescriptor
|
||||||
p scm_smobs[0xff & (((scm_t_bits)$arg0) >> 8)]
|
p scm_smobs[0xff & (((scm_t_bits)$arg0) >> 8)]
|
||||||
end
|
end
|
||||||
|
|
||||||
define vmstack
|
define vmstackinit
|
||||||
set $vmsp=sp
|
set $vmsp=sp
|
||||||
set $vmstack_base=stack_base
|
set $vmstack_base=stack_base
|
||||||
set $vmfp=fp
|
set $vmfp=fp
|
||||||
set $vmbp=bp
|
set $vmbp=bp
|
||||||
set $vmframe=0
|
set $vmframe=0
|
||||||
|
end
|
||||||
|
|
||||||
|
define nextframe
|
||||||
|
set $orig_vmsp=$vmsp
|
||||||
|
while $vmsp > $vmstack_base
|
||||||
|
output $orig_vmsp - $vmsp
|
||||||
|
sputs "\t"
|
||||||
|
output $vmsp
|
||||||
|
sputs "\t"
|
||||||
|
gwrite *$vmsp
|
||||||
|
set $vmsp=$vmsp-1
|
||||||
|
end
|
||||||
|
newline
|
||||||
|
sputs "Frame "
|
||||||
|
output $vmframe
|
||||||
|
newline
|
||||||
|
sputs "ra:\t"
|
||||||
|
output $vmsp
|
||||||
|
sputs "\t"
|
||||||
|
output (SCM*)*$vmsp
|
||||||
|
set $vmsp=$vmsp-1
|
||||||
|
newline
|
||||||
|
sputs "mvra:\t"
|
||||||
|
output $vmsp
|
||||||
|
sputs "\t"
|
||||||
|
output (SCM*)*$vmsp
|
||||||
|
set $vmsp=$vmsp-1
|
||||||
|
newline
|
||||||
|
sputs "dl:\t"
|
||||||
|
output $vmsp
|
||||||
|
sputs "\t"
|
||||||
|
set $vmdl=(SCM*)(*$vmsp)
|
||||||
|
output $vmdl
|
||||||
|
newline
|
||||||
|
set $vmsp=$vmsp-1
|
||||||
|
sputs "hl:\t"
|
||||||
|
output $vmsp
|
||||||
|
sputs "\t"
|
||||||
|
gwrite *$vmsp
|
||||||
|
set $vmsp=$vmsp-1
|
||||||
|
sputs "el:\t"
|
||||||
|
output $vmsp
|
||||||
|
sputs "\t"
|
||||||
|
gwrite *$vmsp
|
||||||
|
set $vmsp=$vmsp-1
|
||||||
|
set $vmnlocs=(int)$vmbp->nlocs
|
||||||
|
while $vmnlocs > 0
|
||||||
|
sputs "loc #"
|
||||||
|
output $vmnlocs
|
||||||
|
sputs ":\t"
|
||||||
|
output $vmsp
|
||||||
|
sputs "\t"
|
||||||
|
gwrite *$vmsp
|
||||||
|
set $vmsp=$vmsp-1
|
||||||
|
set $vmnlocs=$vmnlocs-1
|
||||||
|
end
|
||||||
|
set $vmnargs=(int)$vmbp->nargs
|
||||||
|
while $vmnargs > 0
|
||||||
|
sputs "arg #"
|
||||||
|
output $vmnargs
|
||||||
|
sputs ":\t"
|
||||||
|
output $vmsp
|
||||||
|
sputs "\t"
|
||||||
|
gwrite *$vmsp
|
||||||
|
set $vmsp=$vmsp-1
|
||||||
|
set $vmnargs=$vmnargs-1
|
||||||
|
end
|
||||||
|
sputs "prog:\t"
|
||||||
|
output $vmsp
|
||||||
|
sputs "\t"
|
||||||
|
gwrite *$vmsp
|
||||||
|
set $vmsp=$vmsp-1
|
||||||
|
newline
|
||||||
|
if !$vmdl
|
||||||
|
loop_break
|
||||||
|
end
|
||||||
|
set $vmfp=$vmdl
|
||||||
|
set $vmbp=(struct scm_program*)(((SCM*)($vmfp[-1]))[1])
|
||||||
|
set $vmstack_base=$vmfp+$vmbp->nargs+$vmbp->nlocs+4
|
||||||
|
set $vmframe=$vmframe+1
|
||||||
|
newline
|
||||||
|
end
|
||||||
|
|
||||||
|
define vmstack
|
||||||
|
vmstackinit
|
||||||
while $vmsp > vp->stack_base
|
while $vmsp > vp->stack_base
|
||||||
set $orig_vmsp=$vmsp
|
nextframe
|
||||||
while $vmsp > $vmstack_base
|
|
||||||
output $orig_vmsp - $vmsp
|
|
||||||
sputs "\t"
|
|
||||||
output $vmsp
|
|
||||||
sputs "\t"
|
|
||||||
gwrite *$vmsp
|
|
||||||
set $vmsp=$vmsp-1
|
|
||||||
end
|
|
||||||
newline
|
|
||||||
sputs "Frame "
|
|
||||||
output $vmframe
|
|
||||||
newline
|
|
||||||
sputs "ra:\t"
|
|
||||||
output $vmsp
|
|
||||||
sputs "\t"
|
|
||||||
output (SCM*)*$vmsp
|
|
||||||
set $vmsp=$vmsp-1
|
|
||||||
newline
|
|
||||||
sputs "mvra:\t"
|
|
||||||
output $vmsp
|
|
||||||
sputs "\t"
|
|
||||||
output (SCM*)*$vmsp
|
|
||||||
set $vmsp=$vmsp-1
|
|
||||||
newline
|
|
||||||
sputs "dl:\t"
|
|
||||||
output $vmsp
|
|
||||||
sputs "\t"
|
|
||||||
set $vmdl=(SCM*)(*$vmsp)
|
|
||||||
output $vmdl
|
|
||||||
newline
|
|
||||||
set $vmsp=$vmsp-1
|
|
||||||
sputs "hl:\t"
|
|
||||||
output $vmsp
|
|
||||||
sputs "\t"
|
|
||||||
gwrite *$vmsp
|
|
||||||
set $vmsp=$vmsp-1
|
|
||||||
sputs "el:\t"
|
|
||||||
output $vmsp
|
|
||||||
sputs "\t"
|
|
||||||
gwrite *$vmsp
|
|
||||||
set $vmsp=$vmsp-1
|
|
||||||
set $vmnlocs=(int)$vmbp->nlocs
|
|
||||||
while $vmnlocs > 0
|
|
||||||
sputs "loc #"
|
|
||||||
output $vmnlocs
|
|
||||||
sputs ":\t"
|
|
||||||
output $vmsp
|
|
||||||
sputs "\t"
|
|
||||||
gwrite *$vmsp
|
|
||||||
set $vmsp=$vmsp-1
|
|
||||||
set $vmnlocs=$vmnlocs-1
|
|
||||||
end
|
|
||||||
set $vmnargs=(int)$vmbp->nargs
|
|
||||||
while $vmnargs > 0
|
|
||||||
sputs "arg #"
|
|
||||||
output $vmnargs
|
|
||||||
sputs ":\t"
|
|
||||||
output $vmsp
|
|
||||||
sputs "\t"
|
|
||||||
gwrite *$vmsp
|
|
||||||
set $vmsp=$vmsp-1
|
|
||||||
set $vmnargs=$vmnargs-1
|
|
||||||
end
|
|
||||||
sputs "prog:\t"
|
|
||||||
output $vmsp
|
|
||||||
sputs "\t"
|
|
||||||
gwrite *$vmsp
|
|
||||||
set $vmsp=$vmsp-1
|
|
||||||
newline
|
|
||||||
if !$vmdl
|
|
||||||
loop_break
|
|
||||||
end
|
|
||||||
set $vmfp=$vmdl
|
|
||||||
set $vmbp=(struct scm_program*)(((SCM*)($vmfp[-1]))[1])
|
|
||||||
set $vmstack_base=$vmfp+$vmbp->nargs+$vmbp->nlocs+4
|
|
||||||
set $vmframe=$vmframe+1
|
|
||||||
newline
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -558,12 +558,12 @@ VM_DEFINE_INSTRUCTION (call, "call", 1, -1, 1)
|
||||||
{
|
{
|
||||||
/* At this point, the stack contains the procedure and each one of its
|
/* At this point, the stack contains the procedure and each one of its
|
||||||
arguments. */
|
arguments. */
|
||||||
SCM args;
|
|
||||||
POP_LIST (nargs);
|
POP_LIST (nargs);
|
||||||
POP (args);
|
|
||||||
SYNC_REGISTER ();
|
SYNC_REGISTER ();
|
||||||
*sp = scm_apply (x, args, SCM_EOL);
|
/* keep args on stack so they are marked */
|
||||||
|
sp[-1] = scm_apply (x, sp[0], SCM_EOL);
|
||||||
/* FIXME what if SCM_VALUESP(*sp) */
|
/* FIXME what if SCM_VALUESP(*sp) */
|
||||||
|
DROP ();
|
||||||
NEXT;
|
NEXT;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
|
@ -729,11 +729,10 @@ VM_DEFINE_INSTRUCTION (goto_args, "goto/args", 1, -1, 1)
|
||||||
*/
|
*/
|
||||||
if (!SCM_FALSEP (scm_procedure_p (x)))
|
if (!SCM_FALSEP (scm_procedure_p (x)))
|
||||||
{
|
{
|
||||||
SCM args;
|
|
||||||
POP_LIST (nargs);
|
POP_LIST (nargs);
|
||||||
POP (args);
|
|
||||||
SYNC_REGISTER ();
|
SYNC_REGISTER ();
|
||||||
*sp = scm_apply (x, args, SCM_EOL);
|
sp[-1] = scm_apply (x, sp[0], SCM_EOL);
|
||||||
|
DROP ();
|
||||||
/* FIXME what if SCM_VALUESP(*sp) */
|
/* FIXME what if SCM_VALUESP(*sp) */
|
||||||
goto vm_return;
|
goto vm_return;
|
||||||
}
|
}
|
||||||
|
@ -798,11 +797,10 @@ VM_DEFINE_INSTRUCTION (mv_call, "mv-call", 3, -1, 1)
|
||||||
{
|
{
|
||||||
/* At this point, the stack contains the procedure and each one of its
|
/* At this point, the stack contains the procedure and each one of its
|
||||||
arguments. */
|
arguments. */
|
||||||
SCM args;
|
|
||||||
POP_LIST (nargs);
|
POP_LIST (nargs);
|
||||||
POP (args);
|
|
||||||
SYNC_REGISTER ();
|
SYNC_REGISTER ();
|
||||||
*sp = scm_apply (x, args, SCM_EOL);
|
sp[-1] = scm_apply (x, sp[0], SCM_EOL);
|
||||||
|
DROP ();
|
||||||
if (SCM_VALUESP (*sp))
|
if (SCM_VALUESP (*sp))
|
||||||
{
|
{
|
||||||
SCM values, len;
|
SCM values, len;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue