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
|