RFR: JDK-8199749: Debug symbols are not copied to exploded image on Mac

Erik Joelsson erik.joelsson at oracle.com
Fri Mar 16 23:16:02 UTC 2018


Debug symbols are by default external and the idea is that we copy them 
to the exploded image together with the native libraries, to have them 
available for debugging. This logic fails on Windows and Mac due to some 
intricate make dependency complications. On Windows this fails on the 
initial build already, on Mac the problem only appears if you make a 
change to a source file and rebuild incrementally. On both, if you 
rebuild again, the files get copied.

On Solaris and Linux we symlink these files instead of copying, so after 
the first build, the symlinks do not need to be recreated, which is why 
this isn't an issue there.

The underlying cause for this is that we are trying to trick make into 
correctly tracking dependencies when a rule has multiple targets. The 
link rule creates both the native library as well as the debuginfo 
files. A rule like that is always causing trouble in some way but 
various workarounds exist. Currently we work around it by adding this 
declaration:

$$($1_DEBUGINFO_FILES): $$($1_TARGET)

This trips up make if DEBUGINFO_FILES already exists, since there is no 
recipe, make will not consider DEBUGINFO to have been updated just 
because TARGET was rebuilt. If we add a recipe, make will consider 
DEBUGINFO to have changed. The obvious recipe is a simple touch on 
DEBUGINFO. That way we also guarantee that the DEBUGINFO is newer than 
TARGET so the rule doesn't get executed again on the next run.

This whole type of workaround for dealing with multiple files created by 
the same rule has a flaw. If something external deletes a DEBUGINFO 
file, it would currently not be recreated. In the new solution it would 
be touched as an empty file, which is even worse. To fix this, I've 
added a parse time check on the DEBUGINFO files and if either of them 
are gone, the TARGET is explicitly deleted. This forces a rebuild of 
both TARGET and DEBUGINFO.

While at it, I noticed that the import library on Windows suffers from 
the same problem so applied the same fix there.

Bug: https://bugs.openjdk.java.net/browse/JDK-8199749

Webrev: http://cr.openjdk.java.net/~erikj/8199749/webrev.01/index.html

/Erik




More information about the build-dev mailing list