RFR(S): 8170548: VM may crash at startup because StdoutLog/StderrLog logging stream can be badly aligned
Langer, Christoph
christoph.langer at sap.com
Thu Dec 1 11:38:35 UTC 2016
Hi Volker,
this looks good. I also verified your change in my slowdebug Solaris build and it works now :)
Best regards
Christoph
> -----Original Message-----
> From: hotspot-runtime-dev [mailto:hotspot-runtime-dev-
> bounces at openjdk.java.net] On Behalf Of Volker Simonis
> Sent: Donnerstag, 1. Dezember 2016 11:36
> To: hotspot-runtime-dev at openjdk.java.net
> Subject: RFR(S): 8170548: VM may crash at startup because
> StdoutLog/StderrLog logging stream can be badly aligned
>
> Hi,
>
> can I please have a review and sponsor for the following fix:
>
> http://cr.openjdk.java.net/~simonis/webrevs/2016/8170548/
> https://bugs.openjdk.java.net/browse/JDK-8170548
>
> Change "8146009: "pure virtual method called" with using new GC
> logging mechanism" introduced a sophisticated initialization mechanism
> for the logging stream. In order to avoid deconstruction of the
> streams before the VM exits, it creates them with a placement new into
> statically allocated memory:
>
> static bool initialized;
> static char stdoutmem[sizeof(LogStdoutOutput)];
> static char stderrmem[sizeof(LogStderrOutput)];
>
> LogStdoutOutput &StdoutLog =
> reinterpret_cast<LogStdoutOutput&>(stdoutmem);
> LogStderrOutput &StderrLog =
> reinterpret_cast<LogStderrOutput&>(stderrmem);
>
> LogFileStreamInitializer::LogFileStreamInitializer() {
> if (!initialized) {
> ::new (&StdoutLog) LogStdoutOutput();
> ::new (&StderrLog) LogStderrOutput();
> initialized = true;
> }
> }
>
> Unfortunately it is not guaranteed, that the static memory (which is a
> char array) is well-aligned for the stream objects. Actually, the C++
> standard only defines that it has to be at least 'char' aligned which
> is obviously not enough for a stream object.
> When building 'slowdebug' on Solaris with SS12u4 we indeed observed
> reproducible crashes during VM initialization because of this issue.
>
> The fix is easy - just wrap the character arrays into unions to align
> them appropriately.
>
> Thank you and best regards,
> Volker
More information about the hotspot-runtime-dev
mailing list