On Thu, 17 Jul 2003, Leopold Toetsch wrote:
> PC = ((op_func_t*) (*PC)) (PC, INTERP); // prederef functions
>
> To be able to switch function tables, this then should become:
>
> PC = ((op_func_t*) (func_table + *PC)) (PC, INTERP);
>
> Thus predereferncing the function pointer would place an offset into the
> function table, not an absolute address.
>
> Or is there a better way to do it?
Replacing the next instruction with a branch to the signal handler
(like adding a breakpoint) out of the question? Of course, if we're
sharing bytecode this is expensive, since you'd have to do something
like this:
bsr handler
...
handler:
if cur_thread == thread_with_signal goto real_handler
# replaced instruction
ret
which penalizes all other bytecode users. I guess it depends how
common we expect signal handling to be.
/s