[9] RFR: 8044538: assert(which != imm_operand) failed: instruction is not a movq reg, imm64
Tobias Hartmann
tobias.hartmann at oracle.com
Fri Jun 6 07:34:06 UTC 2014
>>>> Hi Dean,
>>>>
>>>>> Would it make sense to refactor fix_relocation_after_move() to
>>>>> call target() now?
>>>>
>>>> Yes, good point. I refactored it.
>>>>
>>>> New webrev: http://cr.openjdk.java.net/~thartmann/8044538/webrev.01/
>>>
>>> You can also get rid of:
>>> address target = _target;
>>> if (target == NULL) {
>>> in internal_word_Relocation::fix_relocation_after_move.
>>
>> But then we always execute new_addr_for(..). Isn't this a problem?
>
> It will get inlined anyway.
Sure, but my point is that currently new_addr_for(..) is only executed
if target == NULL. With the changes you suggested it would always be
executed and target is always set to a new value. I don't think this
would be correct, right?
Thanks,
Tobias
>
>>
>> Thanks,
>> Tobias
>>
>>
>>>
>>>>
>>>> Thanks,
>>>> Tobias
>>>>
>>>>>
>>>>> dl
>>>>>
>>>>> On 6/4/2014 1:30 AM, Tobias Hartmann wrote:
>>>>>> Hi,
>>>>>>
>>>>>> please review the following patch for bug 8044538.
>>>>>>
>>>>>> *Problem*
>>>>>> Executing a debug build of HotSpot with the flags
>>>>>> -XX:+PrintRelocations -Xcomp hits a ShouldNotReachHere() or an
>>>>>> assert in Assembler::locate_operand(..) stating that the
>>>>>> instruction for which we try to find the operand is not valid.
>>>>>>
>>>>>> The problem occurs while printing the relocation entries for a C2
>>>>>> compiled function. The C2 compiler adds internal_word_type
>>>>>> relocations for the jump table entries in the constant section of
>>>>>> a method (see Compile::ConstantTable::fill_jump_table(...)).
>>>>>> These relocations are processed by
>>>>>> RelocIterator::print_current(...) and
>>>>>> internal_word_Relocation::target().
>>>>>> Relocation::pd_get_address_from_code() then tries to retrieve the
>>>>>> address from an instruction but fails because the relocation
>>>>>> points into the constant section only containing the target address.
>>>>>>
>>>>>> Bug: https://bugs.openjdk.java.net/browse/JDK-8044538
>>>>>>
>>>>>> *Solution*
>>>>>> The implementation of internal_word_Relocation::target() is
>>>>>> changed to check if the relocation points into the constant
>>>>>> section and if so directly returns the target address instead of
>>>>>> trying to retrieve it from an instruction. The same is already
>>>>>> done in internal_word_Relocation::fix_relocation_after_move(..).
>>>>>>
>>>>>> Webrev: http://cr.openjdk.java.net/~thartmann/8044538/webrev.00/
>>>>>>
>>>>>> *Tests*
>>>>>> Failing configuration, JPRT
>>>>>>
>>>>>> Apparently this did not show up for any of our tests. Do we need
>>>>>> an additional test for this?
>>>>>> Since it already fails for JDK 7 and 8. Should we backport the patch?
>>>>>>
>>>>>> Thanks,
>>>>>> Tobias
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20140606/1f1fd40b/attachment.html>
More information about the hotspot-compiler-dev
mailing list