United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-6973963 SEGV in ciBlock::start_bci() with EA
JDK-6973963 : SEGV in ciBlock::start_bci() with EA

Details
Type:
Bug
Submit Date:
2010-08-02
Status:
Closed
Updated Date:
2011-04-23
Project Name:
JDK
Resolved Date:
2011-04-23
Component:
hotspot
OS:
generic,solaris_10
Sub-Component:
compiler
CPU:
x86,generic
Priority:
P4
Resolution:
Fixed
Affected Versions:
hs19
Fixed Versions:
hs19 (b06)

Related Reports
Backport:
Backport:
Backport:
Backport:
Duplicate:
Relates:
Relates:

Sub Tasks

Description
An other case similar to 6968368. BCEscapeAnalyzer::do_analysis() calls ciMethod::get_method_blocks() which calls constructor ciMethodBlocks. This constructor allocates GrowableArray elements on stack (thread local resource area):

_blocks =  new(_arena) GrowableArray<ciBlock *>(block_estimate);

As result when the method recompiled without EA _blocks->_data is NULL.

                                    

Comments
EVALUATION

http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/0e35fa8ebccd
                                     
2010-08-04
PUBLIC COMMENTS

Added new debug flag SubsumeLoads to control subsumed loads generation.

Added new debug flag StressRecompilation to recompile with subsume_loads = false and do_escape_analysis = false.

Added more checks into ResourceObj and growableArray to verify correctness of allocation type.
I have to relax the new assert in GrowableArray when elements are allocated on arena to allow 
allocattion of GrowableArray object as a part of an other object (for example, in ConnectionGraph and SuperWord). 

Added ResourceObj destructor to zap _allocation field.

Added assert into get_allocation_type() to check that 'this' address is still encoded in _allocation.
Found several cases where it was not true, have to add copy constructor and assignment operator.

Moved all new methods with asserts into allocation.cpp.

The added assert failed for CodeBuffer since it destroys itself inside destructor before ResourceObj destructor called.
I save/restore allocation type around Copy::fill_to_bytes() in ~CodeBuffer() to solve this problem.

Replaced PhaseCFG::_node_latency field with pointer since it is valid only inside resource mark in GlobalCodeMotion().
                                     
2010-08-04
EVALUATION

http://hg.openjdk.java.net/jdk7/hotspot-rt/hotspot/rev/0e35fa8ebccd
                                     
2010-08-14



Hardware and Software, Engineered to Work Together