Hi,

Further to below email thread -

https://bugs.openjdk.java.net/browse/JDK-8187676
https://bugs.openjdk.java.net/browse/JDK-8160404

Please note 8187676 task was blocked by related 8160404.
But as mentioned in latest jbs comments of 8160404,
found the build warning with gcc7 persists with latest 8160404-patch.
More work to be done for complete, correct fix of 8160404.
But for now will request to defer 8160404 task to jdk11.


Since 8160404 is taking more time, as Erik suggested earlier,
can we please go ahead, get approval and disable the gcc warnings for now as part of 8187676 fix -
  http://cr.openjdk.java.net/~ehelin/8187676/00/
and re-enable later as part of 8160404 patch.


Understood that now only the problems highlighted by JDK-8187676/8160404 is stopping hotspot from compiling with more recent versions of GCC. Also as Erik mentioned earlier, disabling these uninitialized warnings seems to be harmless.


Thanks,
Rahul

On Thursday 21 September 2017 02:32 PM, Erik Helin wrote:
Ok, lets wait for Rahul's patches. Rahul, when you post your patches, CC me and I can check if gcc 7.1.1 still complains :)

Thanks,
Erik

On 09/19/2017 06:25 PM, Vladimir Kozlov wrote:
I would prefer to have general solution Rahul is working on because code is general - not only x86 is affected.

Thanks,
Vladimir

On 9/19/17 7:59 AM, Rahul Raghavan wrote:
Hi Erik,

Please note that this 8187676 seems to be related to 8160404.
    https://bugs.openjdk.java.net/browse/JDK-8160404
    (RelocationHolder constructors have bugs)

As per the latest notes comments added for 8160404-jbs, I will submit webrev/RFR soon and will request help confirm similar issues with latest gcc7 gets solved.

Thanks,
Rahul

On Tuesday 19 September 2017 07:07 PM, Erik Helin wrote:
Hi all,

with gcc 7.1.1 from Fedora 26 on x86-64 there are warnings about the potential usage of maybe uninitialized memory in src/hotspot/cpu/x86/assembler_x86.cpp and in src/hotspot/cpu/x86/interp_masm_x86.cpp.

The problems arises from the class RelocationHolder in src/hotspot/share/code/relocInfo.hpp which has the private fields:
   enum { _relocbuf_size = 5 };
   void* _relocbuf[ _relocbuf_size ];

and the default constructor for RelocationHolder does not initialize the elements of _relocbuf. I _think_ this is an optimization, RelocationHolder is used *a lot* and setting the elements of RelocationHolder::_relocbuf to NULL (or some other value) in the default constructor might result in a performance penalty. Have a look in build/linux-x86_64-normal-server-fastdebug/hotspot/variant-server/gensrc/adfiles and you will see that RelocationHolder is used all over the place :)

AFAICS all users of RelocationHolder::_relocbuf take care to not use uninitialized memory, which means that this warning is wrong, so I suggest we disable the warning -Wmaybe-uninitialized for src/hotspot/cpu/x86/assembler_x86.cpp.

The problem continues because the class Address in src/hotspot/cpu/x86/assembler_x86.hpp has a private field, `RelocationHolder _rspec;` and the default constructor for Address does not initialize _rspec._relocbuf (most likely for performance reasons). The class Address also has a default copy constructor, which will copy all the elements of _rspec._relocbuf, which will result in a read of uninitialized memory. However, this is a benign usage of uninitialized memory, since we take no action based on the content of the uninitialized memory (it is just copied byte for byte).

So, in this case too, I suggest we disable the warning -Wuninitialized for src/hotspot/cpu/x86/assembler_x86.hpp.

What do you think?

Patch:
http://cr.openjdk.java.net/~ehelin/8187676/00/

--- old/make/hotspot/lib/JvmOverrideFiles.gmk    2017-09-19 15:11:45.036108983 +0200 +++ new/make/hotspot/lib/JvmOverrideFiles.gmk    2017-09-19 15:11:44.692107277 +0200
@@ -32,6 +32,8 @@
  ifeq ($(TOOLCHAIN_TYPE), gcc)
    BUILD_LIBJVM_vmStructs.cpp_CXXFLAGS := -fno-var-tracking-assignments -O0     BUILD_LIBJVM_jvmciCompilerToVM.cpp_CXXFLAGS := -fno-var-tracking-assignments
+  BUILD_LIBJVM_assembler_x86.cpp_CXXFLAGS := -Wno-maybe-uninitialized
+  BUILD_LIBJVM_interp_masm_x86.cpp_CXXFLAGS := -Wno-uninitialized
  endif

  ifeq ($(OPENJDK_TARGET_OS), linux)

Issue:
https://bugs.openjdk.java.net/browse/JDK-8187676

Testing:
- Compiles with:
   - gcc 7.1.1 and glibc 2.25 on Fedora 26
   - gcc 4.9.2 and glibc 2.12 on OEL 6.4
- JPRT

Thanks,
Erik

Reply via email to