RFR: 8264207: CodeStrings does not honour fixed address assumption. [v2]

Nils Eliasson neliasso at openjdk.java.net
Mon Sep 6 14:18:39 UTC 2021


On Fri, 3 Sep 2021 14:50:06 GMT, Patric Hedlin <phedlin at openjdk.org> wrote:

>> Please review this change that addresses an issue originally found in JDK-8259590,
>> where the error message should read
>> `fatal error: DEBUG MESSAGE: verify_oop: r10: broken oop in decode_heap_oop`
>> but is lost since the code generated refers to a fixed (string) address, a string
>> (address) no longer available when **CodeStrings** have been propagated (copied)
>> between code buffers/blobs.
>> 
>> Background
>> 
>> **CodeStrings** used to be **CodeComments**. The solution to JDK-8008555 introduced
>> this change and added a new use-case for **CodeStrings**, not only as comments, but
>> as strings with a fixed address used in the code generated with support for debug
>> string printouts.
>> 
>> The changes introduced with JDK-8255208 breaks the fixed address assumption made
>> in the code generated with support for debug string printouts. Some of the (necessary)
>> move semantics have been replaced by copy semantics when **CodeStrings** are
>> propagated between code buffers/blobs (i.e. **CodeBuffer** and **CodeBlob** objects).
>> 
>> Additional issue addressed
>> 
>> + Broken printout (i.e. missing  remarks) when multiple stubs are generated within
>>   the same primary buffer.
>> 
>> The following steps have been taken to provide fixed address (debug) strings.
>> 
>> + Introduce a simple _gtest_ for **CodeString/s** support with **CodeBuffer/CodeBlob**.
>> + Split **CodeStrings**  into two different abstractions;  strings associated with an offset,
>>   and strings with a fixed address.
>>   - Let the  first be  _Assembly Code  Remarks_, **AsmRemarks**, providing a simple
>>     1:N mapping, _offset_ -> _remark_.
>>   - Let the second be _Debug  Printout Strings_, **DbgStrings**, supporting a fixed
>>     address assumption such that:
>>       for each string A and B, if A = B -> &A = &B.
>>   - Use a  reference counting scheme to  ensure that both types  of strings are
>>     deallocated properly, when no longer in use.
>> + Remove **CodeStrings** from **Stub** interface.
>>   - Replace with internal use in the interpreter code, propagating the code
>>     (assembly) remarks directly to the final codelet.
>> + Remove  **CodeBuffer** self destruction, overwriting memory before  all
>>   deconstructors have been executed.
>>   - Replace with sentinel deconstructor to do the bidding.
>> + Stub code generated into a single common **CodeBuffer**  (holding a number
>>   of stubs) will  not print the assembly remarks correctly  (except for the very first
>>   stub code section).
>>   - Introduce a displacement to correct the offset.
>> + Remove old **CodeString/s** implementation.
>> 
>> Testing
>> 
>> Tier1-3 in debug mode, using debug strings, _without_ collecting remarks.
>> Tier1-3 in debug mode, using debug strings, _with_ collecting remarks (regardless of options).
>> Manual inspection of results (linux-x64 and linux-aarch64 only) for the following command line options:
>> `-XX:+PrintSignatureHandlers -XX:+PrintInterpreter -XX:+PrintStubCode -XX:+PrintAssembly`
>
> Patric Hedlin has updated the pull request incrementally with one additional commit since the last revision:
> 
>   Remove disturbing white-space.

A very nice cleanup! Looks good!

-------------

Marked as reviewed by neliasso (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/5281


More information about the hotspot-dev mailing list