[9] RFR: 8044538: assert(which != imm_operand) failed: instruction is not a movq reg, imm64
Tobias Hartmann
tobias.hartmann at oracle.com
Tue Jun 10 06:11:17 UTC 2014
Hi Chris,
okay, thanks for the review.
Best,
Tobias
On 06.06.2014 22:22, Christian Thalinger wrote:
>
> On Jun 6, 2014, at 12:34 AM, Tobias Hartmann
> <tobias.hartmann at oracle.com <mailto:tobias.hartmann at oracle.com>> wrote:
>
>>>>>> 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?
>
> Of course you’re right. Sorry.
>
>>
>> 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 withthe 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/20140610/05ad9689/attachment.html>
More information about the hotspot-compiler-dev
mailing list