RFR: 8289002: Minimal x86_64 VM build fails with GCC 11: 'this' pointer is null

David Holmes dholmes at openjdk.org
Wed Aug 3 09:39:08 UTC 2022


On Wed, 3 Aug 2022 08:36:37 GMT, Alan Bateman <alanb at openjdk.org> wrote:

>> These build failures are specific to Minimal VM, because it disables "management" feature, and paths like these start to return NULL:
>> 
>> 
>>   static InstanceKlass* com_sun_management_internal_DiagnosticCommandImpl_klass(TRAPS)
>>       NOT_MANAGEMENT_RETURN_(NULL);
>> ``` 
>> 
>> I propose we handle the `NULL`-s properly and throwing early when those are detected. We return/throw what similar code in the affected methods do. I went back and forth with the patch, and settled on throwing from `MemoryManager::get_memory_manager_instance`, and handling the exception at its uses.
>> 
>> Additional testing:
>>  - [x] Linux x86_64 fastdebug minimal build with GCC 11.3.0
>>  - [x]  Linux x86_64 fastdebug server with GCC 9.3.0, `tier1`
>>  - [x]  Linux x86_64 fastdebug server with GCC 9.3.0, `tier2`
>>  - [x]  Linux x86_64 fastdebug server with GCC 9.3.0, `hotspot_serviceability`
>
> The minimal VM build dates from the compact profiles defined in Java 8. The compact1 and compact2 profiles didn't have the j.l.management APIs so a minimal VM build of libjvm without the "management" code would have been okay. For Java 9+ then a minimal VM build without "management" only make sense when using jlink to create a run-time image that doesn't have the java.management module.

Thanks Alan (@AlanBateman )! That is what I was reaching for. I guess we lost the actual constraint when we moved to 9 that the Minimal VM cannot be used when the management module is present, as we presumably have no specification for how that module behaves in that case.

Now that doesn't help in the current situation where GCC complains about a NULL this ptr as it cannot know about the fact this code should be unreachable in practice. I'm tempted to say we should use guarantees in the VM code and abort if we encounter the NULL - would that satisfy GCC? It seems better to fail fast and completely with such a misconfigured runtime environment.

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

PR: https://git.openjdk.org/jdk/pull/9718


More information about the hotspot-dev mailing list