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