RFR: JDK-8198243: Add build time check for global operator new/delete in object files
Erik Joelsson
erik.joelsson at oracle.com
Mon Mar 5 16:41:51 UTC 2018
Hello,
On 2018-03-04 15:22, David Holmes wrote:
> Hi Erik,
>
> On 3/03/2018 7:18 AM, Erik Joelsson wrote:
>> 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.
>
> Sounds great! Thanks for doing the additional work on this.
>
>> 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/
>
> In toolkit.m4:
>
> + case $TOOLCHAIN_TYPE in
> + gcc|clang|solstudio)
> BASIC_CHECK_TOOLS(OBJDUMP, [gobjdump objdump])
> if test "x$OBJDUMP" != x; then
> # Only used for compare.sh; we can live without it.
> BASIC_FIXUP_EXECUTABLE
> # bails if argument is missing.
> BASIC_FIXUP_EXECUTABLE(OBJDUMP)
> fi
> + BASIC_FIXUP_EXECUTABLE(OBJDUMP)
>
> Isn't the if-clause redundant now that you unconditionally call
> BASIC_FIXUP_EXECUTABLE(OBJDUMP)?
>
Yes, I seem to have accidentally left the second line there. My
intention was to restore the conditional now that objdump is no longer
used for this new check.
Here is a new webrev with the second fixup call removed:
http://cr.openjdk.java.net/~erikj/8198243/webrev.03/
/Erik
> Thanks,
> David
>
>> 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
>>>>>>>>
>>>>>>
>>>>
>>>
>>
More information about the hotspot-runtime-dev
mailing list