[RFR] JDK-8156980: Hotspot build doesn't have -std=gnu++98 gcc option

Erik Joelsson erik.joelsson at oracle.com
Fri Jul 8 06:38:31 UTC 2016


Hello,

This looks good except for the change in toolchain.m4, which looks like 
it might actually break cross compilation by overriding the value for 
compiler version for the build compiler using the target compiler. With 
this change we basically have:

if cross compilation
   TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS([BUILD_], [OPENJDK_BUILD_])
else
   ...
fi
TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS([], [OPENJDK_BUILD_])

The problem you are trying to solve is that in the case of not cross 
compilation, the TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS macro wasn't 
called with "OPENJDK_BUILD_". Kim's suggested patch was to add the call 
in the else clause. I would instead suggest the following:

if cross compilation
   ...
else
   ...
fi
TOOLCHAIN_PREPARE_FOR_VERSION_COMPARISONS([BUILD_], [OPENJDK_BUILD_])

Just move it out of the conditional blocks and always call it the same way.

/Erik ( - on vacation and only sporadically checking email)

On 2016-07-07 22:42, Andrew Hughes wrote:
>
> ----- Original Message -----
>>> On Jul 7, 2016, at 1:48 PM, Andrew Hughes <gnu.andrew at redhat.com> wrote:
>>>>> Revised webrevs:
>>>>>
>>>>> http://cr.openjdk.java.net/~andrew/8156980/webrev.04/root
>>>>> http://cr.openjdk.java.net/~andrew/8156980/webrev.04/hotspot
>>>> These look good to me.
>>>>
>>> Minor revision:
>>>
>>> http://cr.openjdk.java.net/~andrew/8156980/webrev.05/root
>>> http://cr.openjdk.java.net/~andrew/8156980/webrev.05/hotspot
>>>
>>> I spotted that jsig is just a single C file and so doesn't
>>> need the -std flag. In fact, it complains about it:
>>>
>>> Compiling jsig.c (for libjsig.so)
>>> ( ( /usr/bin/gcc -fPIC -D_GNU_SOURCE -D_REENTRANT -O2 -pipe -march=core2
>>> -std=gnu++98 -m64 -g -DTHIS_FILE='"jsig.c"' -c -MMD -\
>>> MF /home/andrew/builder/dev/hotspot/libjsig/objs/jsig.d -o
>>> /home/andrew/builder/dev/hotspot/libjsig/objs/jsig.o /home/andrew/p\
>>> rojects/openjdk/upstream/dev/hotspot/src/os/linux/vm/jsig.c >
>>>> (/usr/bin/tee /home/andrew/builder/dev/hotspot/libjsig/objs/jsi\
>>> g.o.log) 2> >(/usr/bin/tee
>>> /home/andrew/builder/dev/hotspot/libjsig/objs/jsig.o.log >&2) || (
>>> exitcode=$? && /bin/cp /home/and\
>>> rew/builder/dev/hotspot/libjsig/objs/jsig.o.log
>>> /home/andrew/builder/dev/make-support/failure-logs/hotspot_libjsig_objs_jsig.o\
>>> .log && exit $exitcode ) ) && wait )
>>> cc1: warning: command line option '-std=gnu++98' is valid for C++/ObjC++
>>> but not for C
>>>
>>> So just ADLC is fixed now.
>>>
>>> The root webrev is the same as before.
>> Oops, glad you caught that.
>>
>> Looks even better.
>>
>>
> The same warning was causing an error in the OpenJDK 8 backport of the original
> GCC 6 patch, so I double-checked the logs for 9 and spotted this :-)




More information about the build-dev mailing list