src/share/vm/runtime/globals.cpp

Print this page
rev 11264 : 8150900: Implement diagnostic_pd
Reviewed-by: twisti, gziemski, kevinw


  41 #include "gc/g1/g1_globals.hpp"
  42 #endif // INCLUDE_ALL_GCS
  43 #ifdef COMPILER1
  44 #include "c1/c1_globals.hpp"
  45 #endif
  46 #if INCLUDE_JVMCI
  47 #include "jvmci/jvmci_globals.hpp"
  48 #endif
  49 #ifdef COMPILER2
  50 #include "opto/c2_globals.hpp"
  51 #endif
  52 #ifdef SHARK
  53 #include "shark/shark_globals.hpp"
  54 #endif
  55 
  56 RUNTIME_FLAGS(MATERIALIZE_DEVELOPER_FLAG, \
  57               MATERIALIZE_PD_DEVELOPER_FLAG, \
  58               MATERIALIZE_PRODUCT_FLAG, \
  59               MATERIALIZE_PD_PRODUCT_FLAG, \
  60               MATERIALIZE_DIAGNOSTIC_FLAG, \

  61               MATERIALIZE_EXPERIMENTAL_FLAG, \
  62               MATERIALIZE_NOTPRODUCT_FLAG, \
  63               MATERIALIZE_MANAGEABLE_FLAG, \
  64               MATERIALIZE_PRODUCT_RW_FLAG, \
  65               MATERIALIZE_LP64_PRODUCT_FLAG, \
  66               IGNORE_RANGE, \
  67               IGNORE_CONSTRAINT, \
  68               IGNORE_WRITEABLE)
  69 
  70 RUNTIME_OS_FLAGS(MATERIALIZE_DEVELOPER_FLAG, \
  71                  MATERIALIZE_PD_DEVELOPER_FLAG, \
  72                  MATERIALIZE_PRODUCT_FLAG, \
  73                  MATERIALIZE_PD_PRODUCT_FLAG, \
  74                  MATERIALIZE_DIAGNOSTIC_FLAG, \

  75                  MATERIALIZE_NOTPRODUCT_FLAG, \
  76                  IGNORE_RANGE, \
  77                  IGNORE_CONSTRAINT, \
  78                  IGNORE_WRITEABLE)
  79 
  80 ARCH_FLAGS(MATERIALIZE_DEVELOPER_FLAG, \
  81            MATERIALIZE_PRODUCT_FLAG, \
  82            MATERIALIZE_DIAGNOSTIC_FLAG, \
  83            MATERIALIZE_EXPERIMENTAL_FLAG, \
  84            MATERIALIZE_NOTPRODUCT_FLAG, \
  85            IGNORE_RANGE, \
  86            IGNORE_CONSTRAINT, \
  87            IGNORE_WRITEABLE)
  88 
  89 MATERIALIZE_FLAGS_EXT
  90 
  91 #define DEFAULT_RANGE_STR_CHUNK_SIZE 64
  92 static char* create_range_str(const char *fmt, ...) {
  93   static size_t string_length = DEFAULT_RANGE_STR_CHUNK_SIZE;
  94   static char* range_string = NEW_C_HEAP_ARRAY(char, string_length, mtLogging);


 633 const char* Flag::flag_error_str(Flag::Error error) {
 634   switch (error) {
 635     case Flag::MISSING_NAME: return "MISSING_NAME";
 636     case Flag::MISSING_VALUE: return "MISSING_VALUE";
 637     case Flag::NON_WRITABLE: return "NON_WRITABLE";
 638     case Flag::OUT_OF_BOUNDS: return "OUT_OF_BOUNDS";
 639     case Flag::VIOLATES_CONSTRAINT: return "VIOLATES_CONSTRAINT";
 640     case Flag::INVALID_FLAG: return "INVALID_FLAG";
 641     case Flag::ERR_OTHER: return "ERR_OTHER";
 642     case Flag::SUCCESS: return "SUCCESS";
 643     default: ShouldNotReachHere(); return "NULL";
 644   }
 645 }
 646 
 647 // 4991491 do not "optimize out" the was_set false values: omitting them
 648 // tickles a Microsoft compiler bug causing flagTable to be malformed
 649 
 650 #define RUNTIME_PRODUCT_FLAG_STRUCT(     type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT) },
 651 #define RUNTIME_PD_PRODUCT_FLAG_STRUCT(  type, name,        doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
 652 #define RUNTIME_DIAGNOSTIC_FLAG_STRUCT(  type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DIAGNOSTIC) },

 653 #define RUNTIME_EXPERIMENTAL_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_EXPERIMENTAL) },
 654 #define RUNTIME_MANAGEABLE_FLAG_STRUCT(  type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_MANAGEABLE) },
 655 #define RUNTIME_PRODUCT_RW_FLAG_STRUCT(  type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT | Flag::KIND_READ_WRITE) },
 656 #define RUNTIME_DEVELOP_FLAG_STRUCT(     type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DEVELOP) },
 657 #define RUNTIME_PD_DEVELOP_FLAG_STRUCT(  type, name,        doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
 658 #define RUNTIME_NOTPRODUCT_FLAG_STRUCT(  type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_NOT_PRODUCT) },
 659 
 660 #define JVMCI_PRODUCT_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_PRODUCT) },
 661 #define JVMCI_PD_PRODUCT_FLAG_STRUCT(    type, name,        doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
 662 #define JVMCI_DIAGNOSTIC_FLAG_STRUCT(    type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DIAGNOSTIC) },

 663 #define JVMCI_EXPERIMENTAL_FLAG_STRUCT(  type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_EXPERIMENTAL) },
 664 #define JVMCI_DEVELOP_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DEVELOP) },
 665 #define JVMCI_PD_DEVELOP_FLAG_STRUCT(    type, name,        doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
 666 #define JVMCI_NOTPRODUCT_FLAG_STRUCT(    type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_NOT_PRODUCT) },
 667 
 668 #ifdef _LP64
 669 #define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_LP64_PRODUCT) },
 670 #else
 671 #define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc) /* flag is constant */
 672 #endif // _LP64
 673 
 674 #define C1_PRODUCT_FLAG_STRUCT(          type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_PRODUCT) },
 675 #define C1_PD_PRODUCT_FLAG_STRUCT(       type, name,        doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
 676 #define C1_DIAGNOSTIC_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DIAGNOSTIC) },

 677 #define C1_DEVELOP_FLAG_STRUCT(          type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DEVELOP) },
 678 #define C1_PD_DEVELOP_FLAG_STRUCT(       type, name,        doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
 679 #define C1_NOTPRODUCT_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_NOT_PRODUCT) },
 680 
 681 #define C2_PRODUCT_FLAG_STRUCT(          type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_PRODUCT) },
 682 #define C2_PD_PRODUCT_FLAG_STRUCT(       type, name,        doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
 683 #define C2_DIAGNOSTIC_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DIAGNOSTIC) },

 684 #define C2_EXPERIMENTAL_FLAG_STRUCT(     type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_EXPERIMENTAL) },
 685 #define C2_DEVELOP_FLAG_STRUCT(          type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DEVELOP) },
 686 #define C2_PD_DEVELOP_FLAG_STRUCT(       type, name,        doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
 687 #define C2_NOTPRODUCT_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_NOT_PRODUCT) },
 688 
 689 #define ARCH_PRODUCT_FLAG_STRUCT(        type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_PRODUCT) },
 690 #define ARCH_DIAGNOSTIC_FLAG_STRUCT(     type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_DIAGNOSTIC) },
 691 #define ARCH_EXPERIMENTAL_FLAG_STRUCT(   type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_EXPERIMENTAL) },
 692 #define ARCH_DEVELOP_FLAG_STRUCT(        type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_DEVELOP) },
 693 #define ARCH_NOTPRODUCT_FLAG_STRUCT(     type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_NOT_PRODUCT) },
 694 
 695 #define SHARK_PRODUCT_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_PRODUCT) },
 696 #define SHARK_PD_PRODUCT_FLAG_STRUCT(    type, name,        doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
 697 #define SHARK_DIAGNOSTIC_FLAG_STRUCT(    type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DIAGNOSTIC) },

 698 #define SHARK_DEVELOP_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DEVELOP) },
 699 #define SHARK_PD_DEVELOP_FLAG_STRUCT(    type, name,        doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
 700 #define SHARK_NOTPRODUCT_FLAG_STRUCT(    type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_NOT_PRODUCT) },
 701 
 702 static Flag flagTable[] = {
 703  RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_STRUCT, \
 704                RUNTIME_PD_DEVELOP_FLAG_STRUCT, \
 705                RUNTIME_PRODUCT_FLAG_STRUCT, \
 706                RUNTIME_PD_PRODUCT_FLAG_STRUCT, \
 707                RUNTIME_DIAGNOSTIC_FLAG_STRUCT, \

 708                RUNTIME_EXPERIMENTAL_FLAG_STRUCT, \
 709                RUNTIME_NOTPRODUCT_FLAG_STRUCT, \
 710                RUNTIME_MANAGEABLE_FLAG_STRUCT, \
 711                RUNTIME_PRODUCT_RW_FLAG_STRUCT, \
 712                RUNTIME_LP64_PRODUCT_FLAG_STRUCT, \
 713                IGNORE_RANGE, \
 714                IGNORE_CONSTRAINT, \
 715                IGNORE_WRITEABLE)
 716  RUNTIME_OS_FLAGS(RUNTIME_DEVELOP_FLAG_STRUCT, \
 717                   RUNTIME_PD_DEVELOP_FLAG_STRUCT, \
 718                   RUNTIME_PRODUCT_FLAG_STRUCT, \
 719                   RUNTIME_PD_PRODUCT_FLAG_STRUCT, \
 720                   RUNTIME_DIAGNOSTIC_FLAG_STRUCT, \

 721                   RUNTIME_NOTPRODUCT_FLAG_STRUCT, \
 722                   IGNORE_RANGE, \
 723                   IGNORE_CONSTRAINT, \
 724                   IGNORE_WRITEABLE)
 725 #if INCLUDE_ALL_GCS
 726  G1_FLAGS(RUNTIME_DEVELOP_FLAG_STRUCT, \
 727           RUNTIME_PD_DEVELOP_FLAG_STRUCT, \
 728           RUNTIME_PRODUCT_FLAG_STRUCT, \
 729           RUNTIME_PD_PRODUCT_FLAG_STRUCT, \
 730           RUNTIME_DIAGNOSTIC_FLAG_STRUCT, \

 731           RUNTIME_EXPERIMENTAL_FLAG_STRUCT, \
 732           RUNTIME_NOTPRODUCT_FLAG_STRUCT, \
 733           RUNTIME_MANAGEABLE_FLAG_STRUCT, \
 734           RUNTIME_PRODUCT_RW_FLAG_STRUCT, \
 735           IGNORE_RANGE, \
 736           IGNORE_CONSTRAINT, \
 737           IGNORE_WRITEABLE)
 738 #endif // INCLUDE_ALL_GCS
 739 #if INCLUDE_JVMCI
 740  JVMCI_FLAGS(JVMCI_DEVELOP_FLAG_STRUCT, \
 741              JVMCI_PD_DEVELOP_FLAG_STRUCT, \
 742              JVMCI_PRODUCT_FLAG_STRUCT, \
 743              JVMCI_PD_PRODUCT_FLAG_STRUCT, \
 744              JVMCI_DIAGNOSTIC_FLAG_STRUCT, \

 745              JVMCI_EXPERIMENTAL_FLAG_STRUCT, \
 746              JVMCI_NOTPRODUCT_FLAG_STRUCT, \
 747              IGNORE_RANGE, \
 748              IGNORE_CONSTRAINT, \
 749              IGNORE_WRITEABLE)
 750 #endif // INCLUDE_JVMCI
 751 #ifdef COMPILER1
 752  C1_FLAGS(C1_DEVELOP_FLAG_STRUCT, \
 753           C1_PD_DEVELOP_FLAG_STRUCT, \
 754           C1_PRODUCT_FLAG_STRUCT, \
 755           C1_PD_PRODUCT_FLAG_STRUCT, \
 756           C1_DIAGNOSTIC_FLAG_STRUCT, \

 757           C1_NOTPRODUCT_FLAG_STRUCT, \
 758           IGNORE_RANGE, \
 759           IGNORE_CONSTRAINT, \
 760           IGNORE_WRITEABLE)
 761 #endif // COMPILER1
 762 #ifdef COMPILER2
 763  C2_FLAGS(C2_DEVELOP_FLAG_STRUCT, \
 764           C2_PD_DEVELOP_FLAG_STRUCT, \
 765           C2_PRODUCT_FLAG_STRUCT, \
 766           C2_PD_PRODUCT_FLAG_STRUCT, \
 767           C2_DIAGNOSTIC_FLAG_STRUCT, \

 768           C2_EXPERIMENTAL_FLAG_STRUCT, \
 769           C2_NOTPRODUCT_FLAG_STRUCT, \
 770           IGNORE_RANGE, \
 771           IGNORE_CONSTRAINT, \
 772           IGNORE_WRITEABLE)
 773 #endif // COMPILER2
 774 #ifdef SHARK
 775  SHARK_FLAGS(SHARK_DEVELOP_FLAG_STRUCT, \
 776              SHARK_PD_DEVELOP_FLAG_STRUCT, \
 777              SHARK_PRODUCT_FLAG_STRUCT, \
 778              SHARK_PD_PRODUCT_FLAG_STRUCT, \
 779              SHARK_DIAGNOSTIC_FLAG_STRUCT, \

 780              SHARK_NOTPRODUCT_FLAG_STRUCT, \
 781              IGNORE_RANGE, \
 782              IGNORE_CONSTRAINT, \
 783              IGNORE_WRITEABLE)
 784 #endif // SHARK
 785  ARCH_FLAGS(ARCH_DEVELOP_FLAG_STRUCT, \
 786             ARCH_PRODUCT_FLAG_STRUCT, \
 787             ARCH_DIAGNOSTIC_FLAG_STRUCT, \
 788             ARCH_EXPERIMENTAL_FLAG_STRUCT, \
 789             ARCH_NOTPRODUCT_FLAG_STRUCT, \
 790             IGNORE_RANGE, \
 791             IGNORE_CONSTRAINT, \
 792             IGNORE_WRITEABLE)
 793  FLAGTABLE_EXT
 794  {0, NULL, NULL}
 795 };
 796 
 797 Flag* Flag::flags = flagTable;
 798 size_t Flag::numFlags = (sizeof(flagTable) / sizeof(Flag));
 799 




  41 #include "gc/g1/g1_globals.hpp"
  42 #endif // INCLUDE_ALL_GCS
  43 #ifdef COMPILER1
  44 #include "c1/c1_globals.hpp"
  45 #endif
  46 #if INCLUDE_JVMCI
  47 #include "jvmci/jvmci_globals.hpp"
  48 #endif
  49 #ifdef COMPILER2
  50 #include "opto/c2_globals.hpp"
  51 #endif
  52 #ifdef SHARK
  53 #include "shark/shark_globals.hpp"
  54 #endif
  55 
  56 RUNTIME_FLAGS(MATERIALIZE_DEVELOPER_FLAG, \
  57               MATERIALIZE_PD_DEVELOPER_FLAG, \
  58               MATERIALIZE_PRODUCT_FLAG, \
  59               MATERIALIZE_PD_PRODUCT_FLAG, \
  60               MATERIALIZE_DIAGNOSTIC_FLAG, \
  61               MATERIALIZE_PD_DIAGNOSTIC_FLAG, \
  62               MATERIALIZE_EXPERIMENTAL_FLAG, \
  63               MATERIALIZE_NOTPRODUCT_FLAG, \
  64               MATERIALIZE_MANAGEABLE_FLAG, \
  65               MATERIALIZE_PRODUCT_RW_FLAG, \
  66               MATERIALIZE_LP64_PRODUCT_FLAG, \
  67               IGNORE_RANGE, \
  68               IGNORE_CONSTRAINT, \
  69               IGNORE_WRITEABLE)
  70 
  71 RUNTIME_OS_FLAGS(MATERIALIZE_DEVELOPER_FLAG, \
  72                  MATERIALIZE_PD_DEVELOPER_FLAG, \
  73                  MATERIALIZE_PRODUCT_FLAG, \
  74                  MATERIALIZE_PD_PRODUCT_FLAG, \
  75                  MATERIALIZE_DIAGNOSTIC_FLAG, \
  76                  MATERIALIZE_PD_DIAGNOSTIC_FLAG, \
  77                  MATERIALIZE_NOTPRODUCT_FLAG, \
  78                  IGNORE_RANGE, \
  79                  IGNORE_CONSTRAINT, \
  80                  IGNORE_WRITEABLE)
  81 
  82 ARCH_FLAGS(MATERIALIZE_DEVELOPER_FLAG, \
  83            MATERIALIZE_PRODUCT_FLAG, \
  84            MATERIALIZE_DIAGNOSTIC_FLAG, \
  85            MATERIALIZE_EXPERIMENTAL_FLAG, \
  86            MATERIALIZE_NOTPRODUCT_FLAG, \
  87            IGNORE_RANGE, \
  88            IGNORE_CONSTRAINT, \
  89            IGNORE_WRITEABLE)
  90 
  91 MATERIALIZE_FLAGS_EXT
  92 
  93 #define DEFAULT_RANGE_STR_CHUNK_SIZE 64
  94 static char* create_range_str(const char *fmt, ...) {
  95   static size_t string_length = DEFAULT_RANGE_STR_CHUNK_SIZE;
  96   static char* range_string = NEW_C_HEAP_ARRAY(char, string_length, mtLogging);


 635 const char* Flag::flag_error_str(Flag::Error error) {
 636   switch (error) {
 637     case Flag::MISSING_NAME: return "MISSING_NAME";
 638     case Flag::MISSING_VALUE: return "MISSING_VALUE";
 639     case Flag::NON_WRITABLE: return "NON_WRITABLE";
 640     case Flag::OUT_OF_BOUNDS: return "OUT_OF_BOUNDS";
 641     case Flag::VIOLATES_CONSTRAINT: return "VIOLATES_CONSTRAINT";
 642     case Flag::INVALID_FLAG: return "INVALID_FLAG";
 643     case Flag::ERR_OTHER: return "ERR_OTHER";
 644     case Flag::SUCCESS: return "SUCCESS";
 645     default: ShouldNotReachHere(); return "NULL";
 646   }
 647 }
 648 
 649 // 4991491 do not "optimize out" the was_set false values: omitting them
 650 // tickles a Microsoft compiler bug causing flagTable to be malformed
 651 
 652 #define RUNTIME_PRODUCT_FLAG_STRUCT(     type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT) },
 653 #define RUNTIME_PD_PRODUCT_FLAG_STRUCT(  type, name,        doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
 654 #define RUNTIME_DIAGNOSTIC_FLAG_STRUCT(  type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DIAGNOSTIC) },
 655 #define RUNTIME_PD_DIAGNOSTIC_FLAG_STRUCT(type, name,       doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DIAGNOSTIC | Flag::KIND_PLATFORM_DEPENDENT) },
 656 #define RUNTIME_EXPERIMENTAL_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_EXPERIMENTAL) },
 657 #define RUNTIME_MANAGEABLE_FLAG_STRUCT(  type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_MANAGEABLE) },
 658 #define RUNTIME_PRODUCT_RW_FLAG_STRUCT(  type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_PRODUCT | Flag::KIND_READ_WRITE) },
 659 #define RUNTIME_DEVELOP_FLAG_STRUCT(     type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DEVELOP) },
 660 #define RUNTIME_PD_DEVELOP_FLAG_STRUCT(  type, name,        doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
 661 #define RUNTIME_NOTPRODUCT_FLAG_STRUCT(  type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_NOT_PRODUCT) },
 662 
 663 #define JVMCI_PRODUCT_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_PRODUCT) },
 664 #define JVMCI_PD_PRODUCT_FLAG_STRUCT(    type, name,        doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
 665 #define JVMCI_DIAGNOSTIC_FLAG_STRUCT(    type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DIAGNOSTIC) },
 666 #define JVMCI_PD_DIAGNOSTIC_FLAG_STRUCT( type, name,        doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DIAGNOSTIC | Flag::KIND_PLATFORM_DEPENDENT) },
 667 #define JVMCI_EXPERIMENTAL_FLAG_STRUCT(  type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_EXPERIMENTAL) },
 668 #define JVMCI_DEVELOP_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DEVELOP) },
 669 #define JVMCI_PD_DEVELOP_FLAG_STRUCT(    type, name,        doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
 670 #define JVMCI_NOTPRODUCT_FLAG_STRUCT(    type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_JVMCI | Flag::KIND_NOT_PRODUCT) },
 671 
 672 #ifdef _LP64
 673 #define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_LP64_PRODUCT) },
 674 #else
 675 #define RUNTIME_LP64_PRODUCT_FLAG_STRUCT(type, name, value, doc) /* flag is constant */
 676 #endif // _LP64
 677 
 678 #define C1_PRODUCT_FLAG_STRUCT(          type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_PRODUCT) },
 679 #define C1_PD_PRODUCT_FLAG_STRUCT(       type, name,        doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
 680 #define C1_DIAGNOSTIC_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DIAGNOSTIC) },
 681 #define C1_PD_DIAGNOSTIC_FLAG_STRUCT(    type, name,        doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DIAGNOSTIC | Flag::KIND_PLATFORM_DEPENDENT) },
 682 #define C1_DEVELOP_FLAG_STRUCT(          type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DEVELOP) },
 683 #define C1_PD_DEVELOP_FLAG_STRUCT(       type, name,        doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
 684 #define C1_NOTPRODUCT_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C1 | Flag::KIND_NOT_PRODUCT) },
 685 
 686 #define C2_PRODUCT_FLAG_STRUCT(          type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_PRODUCT) },
 687 #define C2_PD_PRODUCT_FLAG_STRUCT(       type, name,        doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
 688 #define C2_DIAGNOSTIC_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DIAGNOSTIC) },
 689 #define C2_PD_DIAGNOSTIC_FLAG_STRUCT(    type, name,        doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DIAGNOSTIC | Flag::KIND_PLATFORM_DEPENDENT) },
 690 #define C2_EXPERIMENTAL_FLAG_STRUCT(     type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_EXPERIMENTAL) },
 691 #define C2_DEVELOP_FLAG_STRUCT(          type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DEVELOP) },
 692 #define C2_PD_DEVELOP_FLAG_STRUCT(       type, name,        doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
 693 #define C2_NOTPRODUCT_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_C2 | Flag::KIND_NOT_PRODUCT) },
 694 
 695 #define ARCH_PRODUCT_FLAG_STRUCT(        type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_PRODUCT) },
 696 #define ARCH_DIAGNOSTIC_FLAG_STRUCT(     type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_DIAGNOSTIC) },
 697 #define ARCH_EXPERIMENTAL_FLAG_STRUCT(   type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_EXPERIMENTAL) },
 698 #define ARCH_DEVELOP_FLAG_STRUCT(        type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_DEVELOP) },
 699 #define ARCH_NOTPRODUCT_FLAG_STRUCT(     type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_ARCH | Flag::KIND_NOT_PRODUCT) },
 700 
 701 #define SHARK_PRODUCT_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_PRODUCT) },
 702 #define SHARK_PD_PRODUCT_FLAG_STRUCT(    type, name,        doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_PRODUCT | Flag::KIND_PLATFORM_DEPENDENT) },
 703 #define SHARK_DIAGNOSTIC_FLAG_STRUCT(    type, name, value, doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DIAGNOSTIC) },
 704 #define SHARK_PD_DIAGNOSTIC_FLAG_STRUCT( type, name,        doc) { #type, XSTR(name), &name,         NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DIAGNOSTIC | Flag::KIND_PLATFORM_DEPENDENT) },
 705 #define SHARK_DEVELOP_FLAG_STRUCT(       type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DEVELOP) },
 706 #define SHARK_PD_DEVELOP_FLAG_STRUCT(    type, name,        doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_DEVELOP | Flag::KIND_PLATFORM_DEPENDENT) },
 707 #define SHARK_NOTPRODUCT_FLAG_STRUCT(    type, name, value, doc) { #type, XSTR(name), (void*) &name, NOT_PRODUCT_ARG(doc) Flag::Flags(Flag::DEFAULT | Flag::KIND_SHARK | Flag::KIND_NOT_PRODUCT) },
 708 
 709 static Flag flagTable[] = {
 710  RUNTIME_FLAGS(RUNTIME_DEVELOP_FLAG_STRUCT, \
 711                RUNTIME_PD_DEVELOP_FLAG_STRUCT, \
 712                RUNTIME_PRODUCT_FLAG_STRUCT, \
 713                RUNTIME_PD_PRODUCT_FLAG_STRUCT, \
 714                RUNTIME_DIAGNOSTIC_FLAG_STRUCT, \
 715                RUNTIME_PD_DIAGNOSTIC_FLAG_STRUCT, \
 716                RUNTIME_EXPERIMENTAL_FLAG_STRUCT, \
 717                RUNTIME_NOTPRODUCT_FLAG_STRUCT, \
 718                RUNTIME_MANAGEABLE_FLAG_STRUCT, \
 719                RUNTIME_PRODUCT_RW_FLAG_STRUCT, \
 720                RUNTIME_LP64_PRODUCT_FLAG_STRUCT, \
 721                IGNORE_RANGE, \
 722                IGNORE_CONSTRAINT, \
 723                IGNORE_WRITEABLE)
 724  RUNTIME_OS_FLAGS(RUNTIME_DEVELOP_FLAG_STRUCT, \
 725                   RUNTIME_PD_DEVELOP_FLAG_STRUCT, \
 726                   RUNTIME_PRODUCT_FLAG_STRUCT, \
 727                   RUNTIME_PD_PRODUCT_FLAG_STRUCT, \
 728                   RUNTIME_DIAGNOSTIC_FLAG_STRUCT, \
 729                   RUNTIME_PD_DIAGNOSTIC_FLAG_STRUCT, \
 730                   RUNTIME_NOTPRODUCT_FLAG_STRUCT, \
 731                   IGNORE_RANGE, \
 732                   IGNORE_CONSTRAINT, \
 733                   IGNORE_WRITEABLE)
 734 #if INCLUDE_ALL_GCS
 735  G1_FLAGS(RUNTIME_DEVELOP_FLAG_STRUCT, \
 736           RUNTIME_PD_DEVELOP_FLAG_STRUCT, \
 737           RUNTIME_PRODUCT_FLAG_STRUCT, \
 738           RUNTIME_PD_PRODUCT_FLAG_STRUCT, \
 739           RUNTIME_DIAGNOSTIC_FLAG_STRUCT, \
 740           RUNTIME_PD_DIAGNOSTIC_FLAG_STRUCT, \
 741           RUNTIME_EXPERIMENTAL_FLAG_STRUCT, \
 742           RUNTIME_NOTPRODUCT_FLAG_STRUCT, \
 743           RUNTIME_MANAGEABLE_FLAG_STRUCT, \
 744           RUNTIME_PRODUCT_RW_FLAG_STRUCT, \
 745           IGNORE_RANGE, \
 746           IGNORE_CONSTRAINT, \
 747           IGNORE_WRITEABLE)
 748 #endif // INCLUDE_ALL_GCS
 749 #if INCLUDE_JVMCI
 750  JVMCI_FLAGS(JVMCI_DEVELOP_FLAG_STRUCT, \
 751              JVMCI_PD_DEVELOP_FLAG_STRUCT, \
 752              JVMCI_PRODUCT_FLAG_STRUCT, \
 753              JVMCI_PD_PRODUCT_FLAG_STRUCT, \
 754              JVMCI_DIAGNOSTIC_FLAG_STRUCT, \
 755              JVMCI_PD_DIAGNOSTIC_FLAG_STRUCT, \
 756              JVMCI_EXPERIMENTAL_FLAG_STRUCT, \
 757              JVMCI_NOTPRODUCT_FLAG_STRUCT, \
 758              IGNORE_RANGE, \
 759              IGNORE_CONSTRAINT, \
 760              IGNORE_WRITEABLE)
 761 #endif // INCLUDE_JVMCI
 762 #ifdef COMPILER1
 763  C1_FLAGS(C1_DEVELOP_FLAG_STRUCT, \
 764           C1_PD_DEVELOP_FLAG_STRUCT, \
 765           C1_PRODUCT_FLAG_STRUCT, \
 766           C1_PD_PRODUCT_FLAG_STRUCT, \
 767           C1_DIAGNOSTIC_FLAG_STRUCT, \
 768           C1_PD_DIAGNOSTIC_FLAG_STRUCT, \
 769           C1_NOTPRODUCT_FLAG_STRUCT, \
 770           IGNORE_RANGE, \
 771           IGNORE_CONSTRAINT, \
 772           IGNORE_WRITEABLE)
 773 #endif // COMPILER1
 774 #ifdef COMPILER2
 775  C2_FLAGS(C2_DEVELOP_FLAG_STRUCT, \
 776           C2_PD_DEVELOP_FLAG_STRUCT, \
 777           C2_PRODUCT_FLAG_STRUCT, \
 778           C2_PD_PRODUCT_FLAG_STRUCT, \
 779           C2_DIAGNOSTIC_FLAG_STRUCT, \
 780           C2_PD_DIAGNOSTIC_FLAG_STRUCT, \
 781           C2_EXPERIMENTAL_FLAG_STRUCT, \
 782           C2_NOTPRODUCT_FLAG_STRUCT, \
 783           IGNORE_RANGE, \
 784           IGNORE_CONSTRAINT, \
 785           IGNORE_WRITEABLE)
 786 #endif // COMPILER2
 787 #ifdef SHARK
 788  SHARK_FLAGS(SHARK_DEVELOP_FLAG_STRUCT, \
 789              SHARK_PD_DEVELOP_FLAG_STRUCT, \
 790              SHARK_PRODUCT_FLAG_STRUCT, \
 791              SHARK_PD_PRODUCT_FLAG_STRUCT, \
 792              SHARK_DIAGNOSTIC_FLAG_STRUCT, \
 793              SHARK_PD_DIAGNOSTIC_FLAG_STRUCT, \
 794              SHARK_NOTPRODUCT_FLAG_STRUCT, \
 795              IGNORE_RANGE, \
 796              IGNORE_CONSTRAINT, \
 797              IGNORE_WRITEABLE)
 798 #endif // SHARK
 799  ARCH_FLAGS(ARCH_DEVELOP_FLAG_STRUCT, \
 800             ARCH_PRODUCT_FLAG_STRUCT, \
 801             ARCH_DIAGNOSTIC_FLAG_STRUCT, \
 802             ARCH_EXPERIMENTAL_FLAG_STRUCT, \
 803             ARCH_NOTPRODUCT_FLAG_STRUCT, \
 804             IGNORE_RANGE, \
 805             IGNORE_CONSTRAINT, \
 806             IGNORE_WRITEABLE)
 807  FLAGTABLE_EXT
 808  {0, NULL, NULL}
 809 };
 810 
 811 Flag* Flag::flags = flagTable;
 812 size_t Flag::numFlags = (sizeof(flagTable) / sizeof(Flag));
 813