nice. i'll give it a try later.
thinking outloud here; it seems that one could extend the capability
of ?c for generating acid code to include creating call wrapper
for any function that is marked for unit testing (perhaps another
#pragma?)
> This one sounds like to work (except it does not save registers) ...
>
> defn call(addr)
> {
> local pco;
>
> // we need stack space, and thus process stopped.
> if status(pid) != "Stopped" then {
> print("Waiting...\n");
> stop(pid);
> }
>
> // Backup orginal instruction
> pco = fmt(*PC, bpfmt);
>
> // Put a temporary breakpoint
> **PC = bpinst;
>
> // update stack pointer
> *SP = *SP - 4;
>
> // make called function returning to this point
> **SP = *PC;
>
> // set PC to function to call
> *PC = addr;
>
> // do the call
> startstop(pid);
>
> // restore original instruction
> *PC = pco;
> }
>
> Phil;