RFR: JDK-8221851: Use of THIS_FILE in hotspot invalidates precompiled header on Linux/GCC
Erik Joelsson
erik.joelsson at oracle.com
Tue Apr 2 21:39:52 UTC 2019
In JDK-8204551, exceptions.hpp started using THIS_FILE instead of
__FILE__ to generate exception messages. This is causing the precompiled
header to no longer provide any benefit on Linux/GCC. The problem is
that the THIS_FILE macro is provided on the command line and is
different for each compile unit. Because of this, it seems GCC
invalidates the precompiled header completely. (On other platforms, the
value of THIS_FILE is instead ignored).
The goal of JDK-8204551 was to shorten the path to the file where an
exception was raised to avoid truncation. This patch provides a
different approach to achieve this, that also fixes the issue for other
platforms and compilers. It also fixes the performance issue with
precompiled headers.
For Hotspot (at least for now), we stop setting -DTHIS_FILE on the
compiler command line completely. Instead this macro is defined in
macros.hpp, based on __FILE__ but with an offest. This offset is
calculated in configure. For newer versions of GCC (8+) there is a new
flag, -fmacro-prefix-map=, which can be used to rewrite the __FILE__
macro. Configure checks if this flag is available and uses it instead of
the offset macro if possible.
I only touched the one usage of THIS_FILE/__FILE__ in this patch. It's
possible we should rewrite all references to __FILE__ to improve
debug/error.
Bug: https://bugs.openjdk.java.net/browse/JDK-8221851
Webrev: http://cr.openjdk.java.net/~erikj/8221851/webrev.01/index.html
/Erik
More information about the build-dev
mailing list