I am trying to work
out why S390 doesn't pass the thread5 test. I've found that the variable frame->invoke_trap is 0 and so in
ves_exec_method when a throw is
encountered. Tracing x86 I see that when ves_exec_method is entered for MyThreadStart the following situation
exists:
Breakpoint
2, ves_exec_method (frame=0xbf5ff84c) at interp.c:1249
(gdb) p *frame
$2 = {parent = 0xbf5ff9e4, child = 0x0, method = 0x818c780,
retval = 0xbf5ff9d8, obj = 0x0, locals = 0x0, args = 0x0,
stack_args = 0xbf5ff9d8, stack = 0xbf5ff89c, invoke_trap = 0,
ip = 0x80eb114 "��\016\b8`\001@��", ex = 0x0, ex_handler = 0x0}
(gdb) p *frame->parent
$3 = {parent = 0x0, child = 0x0, method = 0x818c958, retval = 0xbf5ff9d8,
obj = 0x8107c30, locals = 0x8107c00 "�c\022\b",
args = 0x809eccd "[\201�G�\004", stack_args = 0xbf5ff9d8, stack = 0x8093b10,
invoke_trap = -1084229080, ip = 0x80ca628 "\211�\211E�\213U�\211��",
ex = 0x0, ex_handler = 0x0}
(gdb) p *frame
$2 = {parent = 0xbf5ff9e4, child = 0x0, method = 0x818c780,
retval = 0xbf5ff9d8, obj = 0x0, locals = 0x0, args = 0x0,
stack_args = 0xbf5ff9d8, stack = 0xbf5ff89c, invoke_trap = 0,
ip = 0x80eb114 "��\016\b8`\001@��", ex = 0x0, ex_handler = 0x0}
(gdb) p *frame->parent
$3 = {parent = 0x0, child = 0x0, method = 0x818c958, retval = 0xbf5ff9d8,
obj = 0x8107c30, locals = 0x8107c00 "�c\022\b",
args = 0x809eccd "[\201�G�\004", stack_args = 0xbf5ff9d8, stack = 0x8093b10,
invoke_trap = -1084229080, ip = 0x80ca628 "\211�\211E�\213U�\211��",
ex = 0x0, ex_handler = 0x0}
Now the value -104229080 looks like an uninitialized area of storage. Within the source, I can only find invoke_trap being set to 0 (in the INIT_FRAME macro) or 1 (in interp_mono_runtime_invoke). So, is thread5's passing due to serendipity or am I missing something?
Neale
