[9] RFR: 8044538: assert(which != imm_operand) failed: instruction is not a movq reg, imm64
Christian Thalinger
christian.thalinger at oracle.com
Fri Jun 6 20:22:14 UTC 2014
On Jun 6, 2014, at 12:34 AM, Tobias Hartmann <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 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/58d2b20c/attachment-0001.html>
More information about the hotspot-compiler-dev
mailing list