RFR: Fix incorrect ifdef INCLUDE_SHENANDOAHGC

Aleksey Shipilev shade at redhat.com
Tue Jun 12 07:12:58 UTC 2018


AArch64 (and possibly x86_32) build fails with:

/pool/buildbot/slaves/sobornost/shenandoah-jdkX/build/src/hotspot/cpu/aarch64/aarch64.ad:9430:8:
error: ‘class MacroAssembler’ has no member named ‘shenandoah_write_barrier’
     __ shenandoah_write_barrier(d);

The reason is incorrect usage of INCLUDE_SHENANDOAHGC in some places, and missing header declaration.

Fixed by:

diff -r 0ccf50d8fa91 src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp	Mon Jun 11 16:08:42 2018 +0200
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp	Tue Jun 12 09:09:59 2018 +0200
@@ -4065,11 +4065,11 @@
 // Used for storing NULLs.
 void MacroAssembler::store_heap_oop_null(Address dst) {
   access_store_at(T_OBJECT, IN_HEAP, dst, noreg, noreg, noreg);
 }

-#ifdef INCLUDE_SHENANDOAHGC
+#if INCLUDE_SHENANDOAHGC
 void MacroAssembler::shenandoah_write_barrier(Register dst) {
   assert(UseShenandoahGC && (ShenandoahWriteBarrier || ShenandoahStoreValEnqueueBarrier), "Should
be enabled");
   assert(dst != rscratch1, "need rscratch1");
   assert(dst != rscratch2, "need rscratch2");

diff -r 0ccf50d8fa91 src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp
--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp	Mon Jun 11 16:08:42 2018 +0200
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp	Tue Jun 12 09:09:59 2018 +0200
@@ -25,10 +25,11 @@

 #ifndef CPU_AARCH64_VM_MACROASSEMBLER_AARCH64_HPP
 #define CPU_AARCH64_VM_MACROASSEMBLER_AARCH64_HPP

 #include "asm/assembler.hpp"
+#include "utilities/macros.hpp"

 // MacroAssembler extends Assembler by frequently used macros.
 //
 // Instructions for which a 'better' code sequence exists depending
 // on arguments should also go in here.
@@ -792,10 +793,14 @@
   void store_check(Register obj);                // store check for obj - register is destroyed
afterwards
   void store_check(Register obj, Address dst);   // same as above, dst is exact store location
(reg. is destroyed)

   void resolve_jobject(Register value, Register thread, Register tmp);

+#if INCLUDE_SHENANDOAHGC
+  void shenandoah_write_barrier(Register dst);
+#endif
+
   // oop manipulations
   void load_klass(Register dst, Register src);
   void store_klass(Register dst, Register src);
   void cmp_klass(Register oop, Register trial_klass, Register tmp);

diff -r 0ccf50d8fa91 src/hotspot/cpu/x86/macroAssembler_x86.cpp
--- a/src/hotspot/cpu/x86/macroAssembler_x86.cpp	Mon Jun 11 16:08:42 2018 +0200
+++ b/src/hotspot/cpu/x86/macroAssembler_x86.cpp	Tue Jun 12 09:09:59 2018 +0200
@@ -50,11 +50,11 @@
 #include "utilities/macros.hpp"
 #include "crc32c.h"
 #ifdef COMPILER2
 #include "opto/intrinsicnode.hpp"
 #endif
-#ifdef INCLUDE_SHENANDOAHGC
+#if INCLUDE_SHENANDOAHGC
 #include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp"
 #endif

 #ifdef PRODUCT
 #define BLOCK_COMMENT(str) /* nothing */
diff -r 0ccf50d8fa91 src/hotspot/cpu/x86/macroAssembler_x86.hpp
--- a/src/hotspot/cpu/x86/macroAssembler_x86.hpp	Mon Jun 11 16:08:42 2018 +0200
+++ b/src/hotspot/cpu/x86/macroAssembler_x86.hpp	Tue Jun 12 09:09:59 2018 +0200
@@ -295,13 +295,13 @@

   // jobjects
   void clear_jweak_tag(Register possibly_jweak);
   void resolve_jobject(Register value, Register thread, Register tmp);

-#ifdef INCLUDE_SHENANDOAHGC
+#if INCLUDE_SHENANDOAHGC
   void shenandoah_write_barrier(Register dst);
-#endif // INCLUDE_SHENANDOAHGC
+#endif

   // C 'boolean' to Java boolean: x == 0 ? 0 : 1
   void c2bool(Register x);

   // C++ bool manipulation

Thanks,
-Aleksey



More information about the shenandoah-dev mailing list