> On Mar 5, 2018, at 11:41 AM, Erik Joelsson <erik.joels...@oracle.com> wrote:
> 
> 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/

Old code in toolkit.m4 did the OBJDUMP stuff unconditionally.  New code makes 
it conditional on TOOLCHAIN_TYPE.
That doesn’t seem right.  compare.sh seems to want OBJDUMP for aix too, and 
that’s not in the toolchain list here.

> 
> /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


Reply via email to