RFR: 8243996: Remove hardcoded field offsets from HotSpot

David Holmes david.holmes at oracle.com
Thu May 14 22:49:20 UTC 2020


Nothing further from me.

Thanks,
David

On 14/05/2020 7:37 pm, Erik Österlund wrote:
> Hi David,
> 
> Thanks for having a look at this!
> 
> On 2020-05-14 07:19, David Holmes wrote:
>> Hi Erik,
>>
>> On 14/05/2020 1:26 am, Erik Österlund wrote:
>>> Hi,
>>>
>>> Let's remove hardcoded field offsets. Main trick to get this done is 
>>> to split interpreter initialization
>>> into two parts: 1. reserve the interpreter memory, 2. generate the 
>>> interpreter. This allows reserving
>>> it before loading methods (which generates i2c adapters that assert 
>>> things are "in the interpreter",
>>> requiring knowledge about its address range), and then load the 
>>> methods, and then generate the interpreter.
>>> This moving of interpreter code generation until after methods have 
>>> been loaded allows offsets to be
>>> looked up, needed by code generation. That way, we no longer need to 
>>> hardcode field offsets, which
>>> makes it less annoying to change the field layout code in the future.
>>>
>>> Thanks to Coleen for pre-reviewing this.
>>>
>>> Bug:
>>> https://bugs.openjdk.java.net/browse/JDK-8243996
>>>
>>> Webrev:
>>> http://cr.openjdk.java.net/~eosterlund/8243996/webrev.01/
>>
>> This seems like a good simplification, and allows for future 
>> flexibility. Initialization order changes are always tricky as the 
>> dependencies are not always obvious - there may be logging or error 
>> path related code that eventually assumes the interpreter has been 
>> generated - but we can deal with such issues if they arise.
>>
>> Generally all seems fine to me - I won't comment on the colour of the 
>> bikeshed. :)
> 
> Phew! ;)
> 
>> One small comment:
>>
>> src/hotspot/share/runtime/init.cpp
>>
>> ! void interpreter_init_code();      // after methods loaded
>>
>> given the later comment:
>>
>> +   interpreter_init_code(); // after javaClasses_init and before any 
>> method gets linked (not loaded)
>>
>> should the first comment be expanded to:
>>
>> void interpreter_init_code();      // after methods loaded, but before 
>> they are linked
>>
>> ?
>>
>> Also IIUC the parenthetical "(not loaded)" alludes to the currently 
>> incorrect comment:
>>
>> void invocationCounter_init(); // before any methods loaded
>>
>> but once you've fixed that there's no context to know what the "(not 
>> loaded)" relates to so it can just be dropped.
> 
> I think I hopefully fixed the comments there the way you envision it in 
> the latest webrev:
> http://cr.openjdk.java.net/~eosterlund/8243996/webrev.02/
> 
> Incremental:
> http://cr.openjdk.java.net/~eosterlund/8243996/webrev.01..02/
> 
> Although about loading vs linking it's not strictly true always. With 
> CDS, the loading also links, but that linking is
> a bit different and unproblematic for these initialization purposes. I 
> tried to keep it simple enough to get the gist
> of it in these one liner comments, instead of expanding the (for this 
> context) unnecessarily complicated whole truth.
> Hope that is okay.
> 
> Thanks,
> /Erik
> 
>> Thanks,
>> David
>> -----
>>
>>> Thanks,
>>> /Erik
> 


More information about the hotspot-dev mailing list