RFR : 8211213: fix aix build after 8196341: Add JFR events for parallel phases of G1

Baesken, Matthias matthias.baesken at sap.com
Thu Sep 27 14:16:40 UTC 2018


Small  update -   while  my change fixes the  build issues on AIX  (and maybe also the issues on zero) ,
My comment  that the AIX compiler  xlc12 is guilty was most likely wrong .

What happens, is that   INCLUDE_JFR  is  not set  on AIX  (means : jfr is disabled on this platform).
However  , in   the generated file  jfrEventClasses.hpp ,
We have  different   classes  for  the cases   INCLUDE_JFR   and  not  INCLUDE_JFR   .

The not  INCLUDE_JFR   - versions of the classes  only have the commit()  method without  params , and the set*-methods :
See :

jfrEventClasses.hpp


#else // !INCLUDE_JFR

  class JfrEvent {
  public:
   JfrEvent() {}
   void set_starttime(const Ticks&) const {}
   void set_endtime(const Ticks&) const {}
   bool should_commit() const { return false; }
   static bool is_enabled() { return false; }
   void commit() {}
 };

and

class EventGCPhaseParallel : public JfrEvent
 {
  public:
   EventGCPhaseParallel(EventStartTime ignore=TIMED) {}
   EventGCPhaseParallel(
     unsigned,
     unsigned,
     const char*) { }
   void set_gcId(unsigned) { }
   void set_gcWorkerId(unsigned) { }
   void set_name(const char*) { }
 };

Probably  that’s why  in the hs-code  commit  is used usually  in the way of set*-calls + commit()  , which works on both platforms with and without JFR .
Questions :

  *   Should the  generator be  changed  to generate  the missing methods in both cases ?
  *   Or should in non-JFR case  the  complete event coding  be removed/guarded by macros ?

Best regards, Matthias


From: Baesken, Matthias
Sent: Donnerstag, 27. September 2018 14:13
To: 'hotspot-dev at openjdk.java.net' <hotspot-dev at openjdk.java.net>; 'build-dev at openjdk.java.net' <build-dev at openjdk.java.net>
Cc: 'Leo Korinth' <leo.korinth at oracle.com>
Subject: RFR : 8211213: fix aix build after 8196341: Add JFR events for parallel phases of G1

Hello ,
  please review  this small change that fixes our AIX build after  “8196341: Add JFR events for parallel phases of G1”    was pushed .

After  8196341  ,  compile  errors occurred, example  :
/openjdk/nb/rs6000_64/nightly/jdk/src/hotspot/share/gc/g1/g1CollectedHeap.cpp", line 3185.15: 1540-0215 (S) The wrong number of arguments has been specified for "JfrEvent::commit()"
  …

This seems to be an xlc compiler bug to me. The overloaded commit function is not resolved correctly,
The xlc-compiler seems to notice only the commit without arguments ,  which is brought into the EventGCPhaseParallel via “using” .
The  3-parameter  commit  is  not taken  ☹  .

The fix replaces the currently used commit-calls  by  set*  + commit()  .
Seems it is done the same way at most (all?) places in hs code .

Webrev/bug :

http://cr.openjdk.java.net/~mbaesken/webrevs/8211213.0/

https://bugs.openjdk.java.net/browse/JDK-8211213



Thanks, Matthias


More information about the build-dev mailing list