RFR JDK-8021954 VM SIGSEGV during classloading on MacOS; hs_err_pid file produced
David Holmes
david.holmes at oracle.com
Mon Aug 26 19:41:25 PDT 2013
On 27/08/2013 4:36 AM, Lois Foltan wrote:
> Please review the following fix:
>
> Internal webrev:
>
> http://cr.openjdk.java.net/~coleenp/bug_jdk8021954/
>
> Bug: VM SIGSEGV during classloading on MacOS; hs_err_pid file produced &
> runtime/6878713/Test6878713.sh fails on mac
>
> bug links at: https://bugs.openjdk.java.net/browse/JDK-8021954
> https://bugs.openjdk.java.net/browse/JDK-8022140
>
> Summary of fix:
> On MacOS, currently Hotspot is built specifying the -fcheck-new
> command line option to the llvm-g++ compiler.
> The -fcheck-new option directs the compiler to "check that the
> pointer returned by |operator new| is non-null
> before attempting to modify the storage allocated." The clang++
> compiler does not support the
> -fcheck-new option. To obtain similiar functionality when
> building Hotspot with clang++, empty exception
> throw() specifications must be added to all user-defined operator
> new()'s.
We just spotted something related in the PPC64 port and were going the
other way or removing these "spurious" throw() declarations.
But this seems really ugly - is there really a need to specialize this
for clang and use NOEXCEPT to hide it? Shouldn't all C++ compilers
honour the nothrow() semantics?
That said I thought we already handled this using the "const
std::nothrow_t& nothrow_constant" where needed? Our other operator new
implementations shouldn't return NULL but will abort.
So why do we need -fcheck-new or this empty throw() ?
Thanks,
David
> Tests:
>
> Solaris: built fastdebug & product images
> Linux: built fastdebug & product images
> MacOS: built fastdebug & product images using llvm-g++ - ran JTREG
> built fastdebug & product images using clang++ -
> ran JTREG, JCK vm & lang, vm.quick.testlist (in progress)
> Windows: built fastdebug & product images with VS2010
>
More information about the hotspot-runtime-dev
mailing list