Hi Erik,

On Thu, 2018-08-23 at 07:39 -0700, Erik Joelsson wrote:
> Hello Severin,
> 
> This does indeed look like the correct fix and I agree that the 
> OPTIMIZATION level should be customizeable like this for test
> libraries.

Great! The fix for JDK-8208091[1] will include this change. I'm going
to push that fix early next week.

Thanks,
Severin

> /Erik
> 
> 
> On 2018-08-06 03:29, Severin Gehwolf wrote:
> > Hi,
> > 
> > On Mon, 2018-08-06 at 09:52 +0200, Severin Gehwolf wrote:
> > > > > I'm trying to get a JNI library used for testing to be
> > > > > compiled with
> > > > > certain CFLAGS. In particular, I'm trying to get it compiled
> > > > > on a GCC
> > > > > platform with '-fomit-frame-pointer' and/or '-fomit-frame-
> > > > > pointer -O3'.
> > > > > The patch currently looks like this:
> > > > > 
> > > > > diff --git a/make/test/JtregNativeHotspot.gmk
> > > > > b/make/test/JtregNativeHotspot.gmk
> > > > > --- a/make/test/JtregNativeHotspot.gmk
> > > > > +++ b/make/test/JtregNativeHotspot.gmk
> > > > > @@ -139,6 +139,13 @@
> > > > >        -I$(VM_TESTBASE_DIR)/nsk/share/native \
> > > > >        -I$(VM_TESTBASE_DIR)/nsk/share/jni
> > > > >    
> > > > > +NO_FRAMEPOINTER_CFLAGS :=
> > > > > +ifeq ($(OPENJDK_TARGET_OS),linux)
> > > > > +   NO_FRAMEPOINTER_CFLAGS := -O3 -fomit-frame-pointer
> > > > > +endif
> > > > > +
> > > > > +BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libNoFramePointer :=
> > > > > $(NO_FRAMEPOINTER_CFLAGS)
> > > > > +
> > > > >    BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libProcessUtils :=
> > > > > $(VM_SHARE_INCLUDES)
> > > > >    
> > > > >    BUILD_HOTSPOT_JTREG_LIBRARIES_CFLAGS_libThreadController
> > > > > := $(NSK_MONITORING_INCLUDES)
> > > > > 
> > > > > When I look at the compile command line this produces with
> > > > > 'make run-test', I see this:
> > > > > 
> > > > > $ cat ./build/linux-x86_64-normal-server-
> > > > > release/support/test/hotspot/jtreg/native/support/libNoFrameP
> > > > > ointer/libNoFramePointer.o.cmdline
> > > > > /usr/bin/gcc -I/disk/openjdk/upstream-sources/openjdk-
> > > > > head/build/linux-x86_64-normal-server-
> > > > > release/support/modules_include/java.base
> > > > > -I/disk/openjdk/upstream-sources/openjdk-head/build/linux-
> > > > > x86_64-normal-server-
> > > > > release/support/modules_include/java.base/linux
> > > > > -I/disk/openjdk/upstream-sources/openjdk-
> > > > > head/src/java.base/share/native/libjava
> > > > > -I/disk/openjdk/upstream-sources/openjdk-
> > > > > head/src/java.base/unix/native/libjava
> > > > > -I/disk/openjdk/upstream-sources/openjdk-
> > > > > head/src/hotspot/share/include -I/disk/openjdk/upstream-
> > > > > sources/openjdk-head/src/hotspot/os/posix/include -pipe
> > > > > -D_GNU_SOURCE -D_REENTRANT -D_LARGEFILE64_SOURCE -DLINUX
> > > > > -DNDEBUG -Wall -Wextra -Wno-unused -Wno-unused-parameter
> > > > > -Wformat=2 -fno-strict-aliasing -m64 -D_LITTLE_ENDIAN
> > > > > -DARCH='"amd64"' -Damd64 -D_LP64=1 -fno-omit-frame-pointer
> > > > > -fno-delete-null-pointer-checks -fno-lifetime-dse -fPIC -O3
> > > > > -fomit-frame-pointer -g -O2 -DTHIS_FILE='""' -c -MMD -MF
> > > > > /disk/openjdk/upstream-sources/openjdk-head/build/linux-
> > > > > x86_64-normal-server-
> > > > > release/support/test/hotspot/jtreg/native/support/libNoFrameP
> > > > > ointer/libNoFramePointer.d -o /disk/openjdk/upstream-
> > > > > sources/openjdk-head/build/linux-x86_64-normal-server-
> > > > > release/support/test/hotspot/jtreg/native/support/libNoFrameP
> > > > > ointer/libNoFramePointer.o /disk/openjdk/upstream-
> > > > > sources/openjdk-
> > > > > head/test/hotspot/jtreg/serviceability/sa/libNoFramePointer.c
> > > > > 
> > > > > The command line has '-O3 -fomit-frame-pointer -g -O2' in
> > > > > that order.
> > > > > This screws things up since -O2 seems to override -fomit-
> > > > > frame-pointer.
> > > > > My guess is that -O2 is from OPTIMIZATION == LOW, but not
> > > > > sure. How can
> > > > > I get this -O2 flag removed which apparently gets added
> > > > > later?
> > 
> > It was indeed an issue with OPTIMIZATION. A value of LOW is hard-
> > coded
> > in TestFilesCompilation. This patch fixes this by allowing one to
> > override OPTIMIZATION per library via something like this:
> > 
> > BUILD_HOTSPOT_JTREG_LIBRARIES_OPTIMIZATION_libNoFramePointer :=
> > HIGH
> > 
> > diff --git a/make/common/TestFilesCompilation.gmk
> > b/make/common/TestFilesCompilation.gmk
> > --- a/make/common/TestFilesCompilation.gmk
> > +++ b/make/common/TestFilesCompilation.gmk
> > @@ -94,7 +94,7 @@
> >           CFLAGS := $$($1_CFLAGS) $$($1_CFLAGS_$$(name)), \
> >           LDFLAGS := $$($1_LDFLAGS) $$($1_LDFLAGS_$$(name)), \
> >           LIBS := $$($1_LIBS_$$(name)), \
> > -        OPTIMIZATION := LOW, \
> > +        OPTIMIZATION := $$(if
> > $$($1_OPTIMIZATION_$$(name)),$$($1_OPTIMIZATION_$$(name)),LOW), \
> >           COPY_DEBUG_SYMBOLS := false, \
> >           STRIP_SYMBOLS := false, \
> >       )) \
> > 
> > Thanks,
> > Severin
> > 
> 
> 

Reply via email to