Hello,
Here is a new version of this patch, reworked in several ways. It now
supports gcc, clang and solstudio. It uses nm instead of objdump, which
is more readily available in all our current build environments. The
check now uses mangled symbol names for all toolchain types which makes
things considerably faster. I also added a check for only finding
symbols classified as undefined. Otherwise we get false positives in
operator_new.o in debug builds.
I left the objdump addition to the devkit in there because it's a good
thing to have anyway for compare.sh.
Webrev: http://cr.openjdk.java.net/~erikj/8198243/webrev.02/
I have run this patch against current jdk/jdk and jdk/hs in Mach5. In
jdk/jdk the build fails as expected on Solaris, Linux and Mac and in
jdk/hs, where the fixes we are detecting are present, all builds succeeds.
/Erik
On 2018-02-23 05:27, Magnus Ihse Bursie wrote:
On 2018-02-22 20:41, Erik Joelsson wrote:
On 2018-02-21 21:06, David Holmes wrote:
On 22/02/2018 4:07 AM, Erik Joelsson wrote:
Hello,
On 2018-02-20 21:33, David Holmes wrote:
a) how much time it adds to the build?
I have not done extensive testing, but on my Linux workstation with
32 hw threads, building just hotspot release build from a clean
workspace increased maybe 1 or 2 seconds (at around 90s total), but
the variance was around the same amount as that.
b) why this doesn't work for Solaris Studio?
I didn't put a lot of effort into trying to figure it out. The
check used was provided by Kim Barrett, for Linux only. I figured
it would be simple enough to get it to work on mac and succeeded
there. It should certainly be possible to implement a similar check
on Solaris, but is it worth the time to do it? Both development
time and increased build time on one of the slower build platforms?
Depends how concerned we are with detecting this problem in OS
specific source code?
I investigated this some more. I was able to do it successfully, but
the build time cost is way too large here. The culprit is c++filt on
Solaris which is incredibly costly, and the gnu version does not
demangle Solaris Studio symbols. I don't think we should do this on
Solaris.
I agree, it's not worth it.
Not all programmer's mistakes are reasonable to catch in technical
traps. It we *should* spend time on getting automatic tool for keeping
code quality up (and, yes, I really do think we should), there's most
likely to be much better areas to spend that effort in, in making a
lot of prone-to-break scripts for catching a single kind of problem.
/Magnus
We could grep for the mangled strings for the operators instead,
which is super fast. Problem is just figuring out all the possible
combinations.
/Erik
To be honest I'm not sure this pulls its own weight regardless.
David
/Erik
Thanks,
David
On 21/02/2018 4:05 AM, Erik Joelsson wrote:
Hello,
This patch adds a build time check for uses of global operators
new and delete in hotspot C++ code. The check is only run with
toolchains GCC and Clang (Linux and Macos builds). I have also
modified the Oracle devkit on Linux to add the necessary symlink
so that objdump will get picked up by configure.
This change is depending on several fixes removing such uses that
are currently in jdk/hs so this change will need to be pushed
there as well.
Bug: https://bugs.openjdk.java.net/browse/JDK-8198243
Webrev: http://cr.openjdk.java.net/~erikj/8198243/webrev.01/
/Erik