RFR (XS): 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
Christian Thalinger
christian.thalinger at oracle.com
Thu Oct 3 18:34:09 PDT 2013
On Oct 3, 2013, at 4:15 PM, Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote:
> Christian,
>
> Can you explain how _metadata pointer could be NULL if it was just created and there is check h_m()->method_data() != NULL?
You are right. Since we cannot reproduce this bug it's a guessing game.
Your comment made me go back and look again. The reported error happened with a tier 2 compile and there is a different code path in LIRGenerator::increment_event_counter_impl() for CompLevel_limited_profile compiles:
if (level == CompLevel_limited_profile) {
address counters_adr = method->ensure_method_counters();
counter_holder = new_pointer_register();
__ move(LIR_OprFact::intptrConst(counters_adr), counter_holder);
Method::ensure_method_counters() tries to build a MethodCounters data structure if it's null but:
counter = Method::build_method_counters(mh(), CHECK_AND_CLEAR_NULL);
it clears the exception and returns null!
I really want C++ exceptions in the compiler…
>
> Thanks,
> Vladimir
>
> On 10/2/13 8:17 PM, Christian Thalinger wrote:
>> https://bugs.openjdk.java.net/browse/JDK-8025566
>> http://cr.openjdk.java.net/~twisti/8025566
>>
>> 8025566: EXCEPTION_ACCESS_VIOLATION in compiled by C1 String.valueOf method
>> Reviewed-by:
>>
>> The problem is in ciMethod::ensure_method_data(). The call to ciMethodData::load_data() can fail when the backing metadata pointer is null and return with a still empty method data. So we have to check here for non-emptiness.
>>
>> I also removed ciMethodData::set_mature(). This method was only used with the old JSR 292 implementation.
>>
More information about the hotspot-compiler-dev
mailing list