[Sablevm-user] SIGSEGV on startup
Brought to you by:
egagnon
|
From: Karl T. K. <ka...@pr...> - 2001-12-17 18:20:49
|
Hi.
I recently compiled and installed the 0.1.6 version of sablevm. I am
running a Linux system with the 2.4.14 kernel and glibc-2.2.4.
Sablevm decides pretty early on to exit with a SIGSEGV. Some gdb tracing
tells me that
libsablevm/interpreter.c, line 97:
locals = (_svmt_stack_value *) (((char *) frame) -
method->locals_size);
is the culprit, as method is NULL.
Encasing this and the next assignment in an if(method) results in a new
segfault later on (same file, around line 114:
dispatch:
NEXT();
as pc is 0.
Inserting an explicit siglongjmp() if method is NULL at line 97 gets me a
bit further:
class_loader.c:892
892 (vm, *class_instance,
vm->boot_loader.fields.jlclass_data->offset, *data);
But here jlclass_data is 0, so a new SIGSEGV occurs.
From reading the sources, it appears that the idea is that sigsegvs should
be caught by the program itself and handled gracefully somehow.
Is it the intention that sigsetjmp() handles this ? If so, has this
function's semantics changed from 2.2 to 2.4 ?
Has this problem been reproduced elsewhere ?
Kind regards,
Karl T
|