[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:24:09 UTC 2014
On Jun 6, 2014, at 7:28 AM, Tobias Hartmann <tobias.hartmann at oracle.com> wrote:
> Hi Chris,
>
>>> Hi Vladimir,
>>>
>>> thanks for the review.
>>>
>>>> Looks good. PrintRelocations flag is used very rare, that is why it rotted. Please, add jreg test (use -XX:+IgnoreUnrecognizedVMOptions).
>>> I added a jtreg test to test/compiler/8044538/ that uses -Xcomp and -XX:+PrintRecolations. It fails without my changes.
>> We are trying to not use bug id directories anymore. Please move the test to a more meaningful directory with a meaningful name.
>
> Okay, makes sense. I moved the test to test/compiler/PrintRelocations/TestPrintRelocations.java
Thanks but that’s too fine grained. I doubt there will be any other PrintRelocations tests. So maybe test/compiler/relocations/ makes more sense.
>
> New webrev: http://cr.openjdk.java.net/~thartmann/8044538/webrev.02/
>
> Thanks,
> Tobias
>
>>> New webrev: http://cr.openjdk.java.net/~thartmann/8044538/webrev.01/
>>>
>>>> Since this debug flag almost never used backporting the fix only into 8u may be enough.
>>> Okay.
>>>
>>> Thanks,
>>> Tobias
>>>
>>>> Thanks,
>>>> Vladimir
>>>>
>>>> On 6/4/14 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
>>>>>
>>>>>
>
More information about the hotspot-compiler-dev
mailing list