|
Evaluation
|
hotspot bug that show up only with fastdebug builds.
Posted Date : 2006-07-19 08:21:03.0
There appears to be an infinite recursion in the c1 compiler code (bug does not reproduce with -Xint nor -server):
Here's part of the stack at the crash:
...
[1014] GraphBuilder::iterate_bytecodes_for_block(this = ???, bci = ???) (optim
ized), at 0xcd4d9c82 (line ~2414) in "c1_GraphBuilder.cpp"
[1015] GraphBuilder::connect_to_end(this = ???, beg = ???) (optimized), at 0xc
d4d5ffb (line ~2188) in "c1_GraphBuilder.cpp"
[1016] GraphBuilder::iterate_all_blocks(this = ???, start_in_current_block_for
_inlining = ???) (optimized), at 0xcd4dbc95 (line ~2517) in "c1_GraphBuilder.cpp
"
[1017] GraphBuilder::try_inline_jsr(this = ???, jsr_dest_bci = ???) (optimized
), at 0xcd4e0436 (line ~3194) in "c1_GraphBuilder.cpp"
[1018] GraphBuilder::jsr(this = ???, dest = ???) (optimized), at 0xcd4ce5f8 (l
ine ~1203) in "c1_GraphBuilder.cpp"
[1019] GraphBuilder::iterate_bytecodes_for_block(this = ???, bci = ???) (optim
ized), at 0xcd4d9c82 (line ~2414) in "c1_GraphBuilder.cpp"
[1020] GraphBuilder::connect_to_end(this = ???, beg = ???) (optimized), at 0xc
d4d5ffb (line ~2188) in "c1_GraphBuilder.cpp"
[1021] GraphBuilder::iterate_all_blocks(this = ???, start_in_current_block_for
_inlining = ???) (optimized), at 0xcd4dbc95 (line ~2517) in "c1_GraphBuilder.cpp
"
[1022] GraphBuilder::try_inline_jsr(this = ???, jsr_dest_bci = ???) (optimized
), at 0xcd4e0436 (line ~3194) in "c1_GraphBuilder.cpp"
[1023] GraphBuilder::jsr(this = ???, dest = ???) (optimized), at 0xcd4ce5f8 (l
ine ~1203) in "c1_GraphBuilder.cpp"
[1024] GraphBuilder::iterate_bytecodes_for_block(this = ???, bci = ???) (optim
ized), at 0xcd4d9c82 (line ~2414) in "c1_GraphBuilder.cpp"
[1025] GraphBuilder::connect_to_end(this = ???, beg = ???) (optimized), at 0xc
d4d5ffb (line ~2188) in "c1_GraphBuilder.cpp"
[1026] GraphBuilder::iterate_all_blocks(this = ???, start_in_current_block_for
_inlining = ???) (optimized), at 0xcd4dbc95 (line ~2517) in "c1_GraphBuilder.cpp
"
[1027] GraphBuilder::try_inline_jsr(this = ???, jsr_dest_bci = ???) (optimized
), at 0xcd4e0436 (line ~3194) in "c1_GraphBuilder.cpp"
[1028] GraphBuilder::jsr(this = ???, dest = ???) (optimized), at 0xcd4ce5f8 (l
ine ~1203) in "c1_GraphBuilder.cpp"
[1029] GraphBuilder::iterate_bytecodes_for_block(this = ???, bci = ???) (optim
ized), at 0xcd4d9c82 (line ~2414) in "c1_GraphBuilder.cpp"
[1030] GraphBuilder::connect_to_end(this = ???, beg = ???) (optimized), at 0xc
d4d5ffb (line ~2188) in "c1_GraphBuilder.cpp"
[1031] GraphBuilder::iterate_all_blocks(this = ???, start_in_current_block_for
_inlining = ???) (optimized), at 0xcd4dbc95 (line ~2517) in "c1_GraphBuilder.cpp
"
[1032] GraphBuilder::GraphBuilder(this = ???, compilation = ???, scope = ???)
(optimized), at 0xcd4de93c (line ~2882) in "c1_GraphBuilder.cpp"
[1033] IRScope::build_graph(this = ???, compilation = ???, osr_bci = ???) (opt
imized), at 0xcd4e9afd (line ~122) in "c1_IR.cpp"
[1034] IRScope::IRScope(this = ???, compilation = ???, caller = ???, caller_bc
i = ???, method = ???, osr_bci = ???, create_graph = ???) (optimized), at 0xcd4e
9d1d (line ~155) in "c1_IR.cpp"
[1035] IR::IR(this = ???, compilation = ???, method = ???, osr_bci = ???) (opt
imized), at 0xcd4ea386 (line ~270) in "c1_IR.cpp"
[1036] Compilation::build_hir(this = ???) (optimized), at 0xcd4be8fb (line ~95
) in "c1_Compilation.cpp"
[1037] Compilation::compile_java_method(this = ???) (optimized), at 0xcd4bf4cf
(line ~250) in "c1_Compilation.cpp"
[1038] Compilation::compile_method(this = ???) (optimized), at 0xcd4bf7fa (lin
e ~317) in "c1_Compilation.cpp"
[1039] Compilation::Compilation(this = ???, compiler = ???, env = ???, method
= ???, osr_bci = ???) (optimized), at 0xcd4c0070 (line ~424) in "c1_Compilation.
cpp"
[1040] Compiler::compile_method(this = ???, env = ???, method = ???, entry_bci
= ???) (optimized), at 0xcd4c136a (line ~36) in "c1_Compiler.cpp"
Posted Date : 2006-07-21 15:14:38.0
It's not infinite recursion, it's just very deep. The test case does repeated jsrs to the next bytecode and since C1 parses jsrs using recursion you can recurse fairly deeply before finishing. The stack size for compiler threads is inconsistently specified as well. It defaults to the same a VMThreadStackSize if CompilerThreadStackSize == 0. For some reason on solaris x86 it's specified as 256k instead of 512k as it is on windows and linux. So solaris x86 is more exposed to stack overflows from the compiler that other platforms.
Posted Date : 2006-07-31 20:55:20.0
http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/1b42d5772ae0
Posted Date : 2009-04-16 22:44:28.0
|