Mercurial > hg > truffle
comparison src/share/vm/runtime/globals.cpp @ 14909:4ca6dc0799b6
Backout jdk9 merge
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Tue, 01 Apr 2014 13:57:07 +0200 |
parents | d8041d695d19 |
children | dffc37fa7157 |
comparison
equal
deleted
inserted
replaced
14908:8db6e76cb658 | 14909:4ca6dc0799b6 |
---|---|
29 #include "runtime/globals.hpp" | 29 #include "runtime/globals.hpp" |
30 #include "runtime/globals_extension.hpp" | 30 #include "runtime/globals_extension.hpp" |
31 #include "utilities/ostream.hpp" | 31 #include "utilities/ostream.hpp" |
32 #include "utilities/macros.hpp" | 32 #include "utilities/macros.hpp" |
33 #include "utilities/top.hpp" | 33 #include "utilities/top.hpp" |
34 #include "trace/tracing.hpp" | |
35 #if INCLUDE_ALL_GCS | 34 #if INCLUDE_ALL_GCS |
36 #include "gc_implementation/g1/g1_globals.hpp" | 35 #include "gc_implementation/g1/g1_globals.hpp" |
37 #endif // INCLUDE_ALL_GCS | 36 #endif // INCLUDE_ALL_GCS |
38 #ifdef COMPILER1 | 37 #ifdef COMPILER1 |
39 #include "c1/c1_globals.hpp" | 38 #include "c1/c1_globals.hpp" |
63 MATERIALIZE_DIAGNOSTIC_FLAG, MATERIALIZE_EXPERIMENTAL_FLAG, \ | 62 MATERIALIZE_DIAGNOSTIC_FLAG, MATERIALIZE_EXPERIMENTAL_FLAG, \ |
64 MATERIALIZE_NOTPRODUCT_FLAG) | 63 MATERIALIZE_NOTPRODUCT_FLAG) |
65 | 64 |
66 MATERIALIZE_FLAGS_EXT | 65 MATERIALIZE_FLAGS_EXT |
67 | 66 |
68 | |
69 static bool is_product_build() { | |
70 #ifdef PRODUCT | |
71 return true; | |
72 #else | |
73 return false; | |
74 #endif | |
75 } | |
76 | 67 |
77 void Flag::check_writable() { | 68 void Flag::check_writable() { |
78 if (is_constant_in_binary()) { | 69 if (is_constant_in_binary()) { |
79 fatal(err_msg("flag is constant: %s", _name)); | 70 fatal(err_msg("flag is constant: %s", _name)); |
80 } | 71 } |
245 } | 236 } |
246 | 237 |
247 // Get custom message for this locked flag, or return NULL if | 238 // Get custom message for this locked flag, or return NULL if |
248 // none is available. | 239 // none is available. |
249 void Flag::get_locked_message(char* buf, int buflen) const { | 240 void Flag::get_locked_message(char* buf, int buflen) const { |
250 buf[0] = '\0'; | |
251 if (is_diagnostic() && !is_unlocked()) { | |
252 jio_snprintf(buf, buflen, "Error: VM option '%s' is diagnostic and must be enabled via -XX:+UnlockDiagnosticVMOptions.\n", | |
253 _name); | |
254 return; | |
255 } | |
256 if (is_experimental() && !is_unlocked()) { | |
257 jio_snprintf(buf, buflen, "Error: VM option '%s' is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions.\n", | |
258 _name); | |
259 return; | |
260 } | |
261 if (is_develop() && is_product_build()) { | |
262 jio_snprintf(buf, buflen, "Error: VM option '%s' is develop and is available only in debug version of VM.\n", | |
263 _name); | |
264 return; | |
265 } | |
266 if (is_notproduct() && is_product_build()) { | |
267 jio_snprintf(buf, buflen, "Error: VM option '%s' is notproduct and is available only in debug version of VM.\n", | |
268 _name); | |
269 return; | |
270 } | |
271 get_locked_message_ext(buf, buflen); | 241 get_locked_message_ext(buf, buflen); |
272 } | 242 } |
273 | 243 |
274 bool Flag::is_writeable() const { | 244 bool Flag::is_writeable() const { |
275 return is_manageable() || (is_product() && is_read_write()) || is_writeable_ext(); | 245 return is_manageable() || (is_product() && is_read_write()) || is_writeable_ext(); |
326 st->print("%-16s", cp); | 296 st->print("%-16s", cp); |
327 } | 297 } |
328 else st->print("%-16s", ""); | 298 else st->print("%-16s", ""); |
329 } | 299 } |
330 | 300 |
331 st->print("%-20s", " "); | 301 st->print("%-20"); |
332 print_kind(st); | 302 print_kind(st); |
333 | 303 |
334 if (withComments) { | 304 if (withComments) { |
335 #ifndef PRODUCT | 305 #ifndef PRODUCT |
336 st->print("%s", _doc); | 306 st->print("%s", _doc); |
505 if (strlen(s) != (unsigned int) len) return false; | 475 if (strlen(s) != (unsigned int) len) return false; |
506 return strncmp(s, q, len) == 0; | 476 return strncmp(s, q, len) == 0; |
507 } | 477 } |
508 | 478 |
509 // Search the flag table for a named flag | 479 // Search the flag table for a named flag |
510 Flag* Flag::find_flag(const char* name, size_t length, bool allow_locked, bool return_flag) { | 480 Flag* Flag::find_flag(const char* name, size_t length, bool allow_locked) { |
511 for (Flag* current = &flagTable[0]; current->_name != NULL; current++) { | 481 for (Flag* current = &flagTable[0]; current->_name != NULL; current++) { |
512 if (str_equal(current->_name, name, length)) { | 482 if (str_equal(current->_name, name, length)) { |
513 // Found a matching entry. | 483 // Found a matching entry. |
514 // Don't report notproduct and develop flags in product builds. | 484 // Don't report notproduct and develop flags in product builds. |
515 if (current->is_constant_in_binary()) { | 485 if (current->is_constant_in_binary()) { |
516 return (return_flag == true ? current : NULL); | 486 return NULL; |
517 } | 487 } |
518 // Report locked flags only if allowed. | 488 // Report locked flags only if allowed. |
519 if (!(current->is_unlocked() || current->is_unlocker())) { | 489 if (!(current->is_unlocked() || current->is_unlocker())) { |
520 if (!allow_locked) { | 490 if (!allow_locked) { |
521 // disable use of locked flags, e.g. diagnostic, experimental, | 491 // disable use of locked flags, e.g. diagnostic, experimental, |
605 if (result == NULL) return false; | 575 if (result == NULL) return false; |
606 *value = result->is_command_line(); | 576 *value = result->is_command_line(); |
607 return true; | 577 return true; |
608 } | 578 } |
609 | 579 |
610 template<class E, class T> | |
611 static void trace_flag_changed(const char* name, const T old_value, const T new_value, const Flag::Flags origin) | |
612 { | |
613 E e; | |
614 e.set_name(name); | |
615 e.set_old_value(old_value); | |
616 e.set_new_value(new_value); | |
617 e.set_origin(origin); | |
618 e.commit(); | |
619 } | |
620 | |
621 bool CommandLineFlags::boolAt(char* name, size_t len, bool* value) { | 580 bool CommandLineFlags::boolAt(char* name, size_t len, bool* value) { |
622 Flag* result = Flag::find_flag(name, len); | 581 Flag* result = Flag::find_flag(name, len); |
623 if (result == NULL) return false; | 582 if (result == NULL) return false; |
624 if (!result->is_bool()) return false; | 583 if (!result->is_bool()) return false; |
625 *value = result->get_bool(); | 584 *value = result->get_bool(); |
629 bool CommandLineFlags::boolAtPut(char* name, size_t len, bool* value, Flag::Flags origin) { | 588 bool CommandLineFlags::boolAtPut(char* name, size_t len, bool* value, Flag::Flags origin) { |
630 Flag* result = Flag::find_flag(name, len); | 589 Flag* result = Flag::find_flag(name, len); |
631 if (result == NULL) return false; | 590 if (result == NULL) return false; |
632 if (!result->is_bool()) return false; | 591 if (!result->is_bool()) return false; |
633 bool old_value = result->get_bool(); | 592 bool old_value = result->get_bool(); |
634 trace_flag_changed<EventBooleanFlagChanged, bool>(name, old_value, *value, origin); | |
635 result->set_bool(*value); | 593 result->set_bool(*value); |
636 *value = old_value; | 594 *value = old_value; |
637 result->set_origin(origin); | 595 result->set_origin(origin); |
638 return true; | 596 return true; |
639 } | 597 } |
640 | 598 |
641 void CommandLineFlagsEx::boolAtPut(CommandLineFlagWithType flag, bool value, Flag::Flags origin) { | 599 void CommandLineFlagsEx::boolAtPut(CommandLineFlagWithType flag, bool value, Flag::Flags origin) { |
642 Flag* faddr = address_of_flag(flag); | 600 Flag* faddr = address_of_flag(flag); |
643 guarantee(faddr != NULL && faddr->is_bool(), "wrong flag type"); | 601 guarantee(faddr != NULL && faddr->is_bool(), "wrong flag type"); |
644 trace_flag_changed<EventBooleanFlagChanged, bool>(faddr->_name, faddr->get_bool(), value, origin); | |
645 faddr->set_bool(value); | 602 faddr->set_bool(value); |
646 faddr->set_origin(origin); | 603 faddr->set_origin(origin); |
647 } | 604 } |
648 | 605 |
649 bool CommandLineFlags::intxAt(char* name, size_t len, intx* value) { | 606 bool CommandLineFlags::intxAt(char* name, size_t len, intx* value) { |
657 bool CommandLineFlags::intxAtPut(char* name, size_t len, intx* value, Flag::Flags origin) { | 614 bool CommandLineFlags::intxAtPut(char* name, size_t len, intx* value, Flag::Flags origin) { |
658 Flag* result = Flag::find_flag(name, len); | 615 Flag* result = Flag::find_flag(name, len); |
659 if (result == NULL) return false; | 616 if (result == NULL) return false; |
660 if (!result->is_intx()) return false; | 617 if (!result->is_intx()) return false; |
661 intx old_value = result->get_intx(); | 618 intx old_value = result->get_intx(); |
662 trace_flag_changed<EventLongFlagChanged, s8>(name, old_value, *value, origin); | |
663 result->set_intx(*value); | 619 result->set_intx(*value); |
664 *value = old_value; | 620 *value = old_value; |
665 result->set_origin(origin); | 621 result->set_origin(origin); |
666 return true; | 622 return true; |
667 } | 623 } |
668 | 624 |
669 void CommandLineFlagsEx::intxAtPut(CommandLineFlagWithType flag, intx value, Flag::Flags origin) { | 625 void CommandLineFlagsEx::intxAtPut(CommandLineFlagWithType flag, intx value, Flag::Flags origin) { |
670 Flag* faddr = address_of_flag(flag); | 626 Flag* faddr = address_of_flag(flag); |
671 guarantee(faddr != NULL && faddr->is_intx(), "wrong flag type"); | 627 guarantee(faddr != NULL && faddr->is_intx(), "wrong flag type"); |
672 trace_flag_changed<EventLongFlagChanged, s8>(faddr->_name, faddr->get_intx(), value, origin); | |
673 faddr->set_intx(value); | 628 faddr->set_intx(value); |
674 faddr->set_origin(origin); | 629 faddr->set_origin(origin); |
675 } | 630 } |
676 | 631 |
677 bool CommandLineFlags::uintxAt(char* name, size_t len, uintx* value) { | 632 bool CommandLineFlags::uintxAt(char* name, size_t len, uintx* value) { |
685 bool CommandLineFlags::uintxAtPut(char* name, size_t len, uintx* value, Flag::Flags origin) { | 640 bool CommandLineFlags::uintxAtPut(char* name, size_t len, uintx* value, Flag::Flags origin) { |
686 Flag* result = Flag::find_flag(name, len); | 641 Flag* result = Flag::find_flag(name, len); |
687 if (result == NULL) return false; | 642 if (result == NULL) return false; |
688 if (!result->is_uintx()) return false; | 643 if (!result->is_uintx()) return false; |
689 uintx old_value = result->get_uintx(); | 644 uintx old_value = result->get_uintx(); |
690 trace_flag_changed<EventUnsignedLongFlagChanged, u8>(name, old_value, *value, origin); | |
691 result->set_uintx(*value); | 645 result->set_uintx(*value); |
692 *value = old_value; | 646 *value = old_value; |
693 result->set_origin(origin); | 647 result->set_origin(origin); |
694 return true; | 648 return true; |
695 } | 649 } |
696 | 650 |
697 void CommandLineFlagsEx::uintxAtPut(CommandLineFlagWithType flag, uintx value, Flag::Flags origin) { | 651 void CommandLineFlagsEx::uintxAtPut(CommandLineFlagWithType flag, uintx value, Flag::Flags origin) { |
698 Flag* faddr = address_of_flag(flag); | 652 Flag* faddr = address_of_flag(flag); |
699 guarantee(faddr != NULL && faddr->is_uintx(), "wrong flag type"); | 653 guarantee(faddr != NULL && faddr->is_uintx(), "wrong flag type"); |
700 trace_flag_changed<EventUnsignedLongFlagChanged, u8>(faddr->_name, faddr->get_uintx(), value, origin); | |
701 faddr->set_uintx(value); | 654 faddr->set_uintx(value); |
702 faddr->set_origin(origin); | 655 faddr->set_origin(origin); |
703 } | 656 } |
704 | 657 |
705 bool CommandLineFlags::uint64_tAt(char* name, size_t len, uint64_t* value) { | 658 bool CommandLineFlags::uint64_tAt(char* name, size_t len, uint64_t* value) { |
713 bool CommandLineFlags::uint64_tAtPut(char* name, size_t len, uint64_t* value, Flag::Flags origin) { | 666 bool CommandLineFlags::uint64_tAtPut(char* name, size_t len, uint64_t* value, Flag::Flags origin) { |
714 Flag* result = Flag::find_flag(name, len); | 667 Flag* result = Flag::find_flag(name, len); |
715 if (result == NULL) return false; | 668 if (result == NULL) return false; |
716 if (!result->is_uint64_t()) return false; | 669 if (!result->is_uint64_t()) return false; |
717 uint64_t old_value = result->get_uint64_t(); | 670 uint64_t old_value = result->get_uint64_t(); |
718 trace_flag_changed<EventUnsignedLongFlagChanged, u8>(name, old_value, *value, origin); | |
719 result->set_uint64_t(*value); | 671 result->set_uint64_t(*value); |
720 *value = old_value; | 672 *value = old_value; |
721 result->set_origin(origin); | 673 result->set_origin(origin); |
722 return true; | 674 return true; |
723 } | 675 } |
724 | 676 |
725 void CommandLineFlagsEx::uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, Flag::Flags origin) { | 677 void CommandLineFlagsEx::uint64_tAtPut(CommandLineFlagWithType flag, uint64_t value, Flag::Flags origin) { |
726 Flag* faddr = address_of_flag(flag); | 678 Flag* faddr = address_of_flag(flag); |
727 guarantee(faddr != NULL && faddr->is_uint64_t(), "wrong flag type"); | 679 guarantee(faddr != NULL && faddr->is_uint64_t(), "wrong flag type"); |
728 trace_flag_changed<EventUnsignedLongFlagChanged, u8>(faddr->_name, faddr->get_uint64_t(), value, origin); | |
729 faddr->set_uint64_t(value); | 680 faddr->set_uint64_t(value); |
730 faddr->set_origin(origin); | 681 faddr->set_origin(origin); |
731 } | 682 } |
732 | 683 |
733 bool CommandLineFlags::doubleAt(char* name, size_t len, double* value) { | 684 bool CommandLineFlags::doubleAt(char* name, size_t len, double* value) { |
741 bool CommandLineFlags::doubleAtPut(char* name, size_t len, double* value, Flag::Flags origin) { | 692 bool CommandLineFlags::doubleAtPut(char* name, size_t len, double* value, Flag::Flags origin) { |
742 Flag* result = Flag::find_flag(name, len); | 693 Flag* result = Flag::find_flag(name, len); |
743 if (result == NULL) return false; | 694 if (result == NULL) return false; |
744 if (!result->is_double()) return false; | 695 if (!result->is_double()) return false; |
745 double old_value = result->get_double(); | 696 double old_value = result->get_double(); |
746 trace_flag_changed<EventDoubleFlagChanged, double>(name, old_value, *value, origin); | |
747 result->set_double(*value); | 697 result->set_double(*value); |
748 *value = old_value; | 698 *value = old_value; |
749 result->set_origin(origin); | 699 result->set_origin(origin); |
750 return true; | 700 return true; |
751 } | 701 } |
752 | 702 |
753 void CommandLineFlagsEx::doubleAtPut(CommandLineFlagWithType flag, double value, Flag::Flags origin) { | 703 void CommandLineFlagsEx::doubleAtPut(CommandLineFlagWithType flag, double value, Flag::Flags origin) { |
754 Flag* faddr = address_of_flag(flag); | 704 Flag* faddr = address_of_flag(flag); |
755 guarantee(faddr != NULL && faddr->is_double(), "wrong flag type"); | 705 guarantee(faddr != NULL && faddr->is_double(), "wrong flag type"); |
756 trace_flag_changed<EventDoubleFlagChanged, double>(faddr->_name, faddr->get_double(), value, origin); | |
757 faddr->set_double(value); | 706 faddr->set_double(value); |
758 faddr->set_origin(origin); | 707 faddr->set_origin(origin); |
759 } | 708 } |
760 | 709 |
761 bool CommandLineFlags::ccstrAt(char* name, size_t len, ccstr* value) { | 710 bool CommandLineFlags::ccstrAt(char* name, size_t len, ccstr* value) { |
764 if (!result->is_ccstr()) return false; | 713 if (!result->is_ccstr()) return false; |
765 *value = result->get_ccstr(); | 714 *value = result->get_ccstr(); |
766 return true; | 715 return true; |
767 } | 716 } |
768 | 717 |
718 // Contract: Flag will make private copy of the incoming value. | |
719 // Outgoing value is always malloc-ed, and caller MUST call free. | |
769 bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, Flag::Flags origin) { | 720 bool CommandLineFlags::ccstrAtPut(char* name, size_t len, ccstr* value, Flag::Flags origin) { |
770 Flag* result = Flag::find_flag(name, len); | 721 Flag* result = Flag::find_flag(name, len); |
771 if (result == NULL) return false; | 722 if (result == NULL) return false; |
772 if (!result->is_ccstr()) return false; | 723 if (!result->is_ccstr()) return false; |
773 ccstr old_value = result->get_ccstr(); | 724 ccstr old_value = result->get_ccstr(); |
774 trace_flag_changed<EventStringFlagChanged, const char*>(name, old_value, *value, origin); | |
775 char* new_value = NULL; | 725 char* new_value = NULL; |
776 if (*value != NULL) { | 726 if (*value != NULL) { |
777 new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1, mtInternal); | 727 new_value = NEW_C_HEAP_ARRAY(char, strlen(*value)+1, mtInternal); |
778 strcpy(new_value, *value); | 728 strcpy(new_value, *value); |
779 } | 729 } |
787 *value = old_value; | 737 *value = old_value; |
788 result->set_origin(origin); | 738 result->set_origin(origin); |
789 return true; | 739 return true; |
790 } | 740 } |
791 | 741 |
742 // Contract: Flag will make private copy of the incoming value. | |
792 void CommandLineFlagsEx::ccstrAtPut(CommandLineFlagWithType flag, ccstr value, Flag::Flags origin) { | 743 void CommandLineFlagsEx::ccstrAtPut(CommandLineFlagWithType flag, ccstr value, Flag::Flags origin) { |
793 Flag* faddr = address_of_flag(flag); | 744 Flag* faddr = address_of_flag(flag); |
794 guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type"); | 745 guarantee(faddr != NULL && faddr->is_ccstr(), "wrong flag type"); |
795 ccstr old_value = faddr->get_ccstr(); | 746 ccstr old_value = faddr->get_ccstr(); |
796 trace_flag_changed<EventStringFlagChanged, const char*>(faddr->_name, old_value, value, origin); | |
797 char* new_value = NEW_C_HEAP_ARRAY(char, strlen(value)+1, mtInternal); | 747 char* new_value = NEW_C_HEAP_ARRAY(char, strlen(value)+1, mtInternal); |
798 strcpy(new_value, value); | 748 strcpy(new_value, value); |
799 faddr->set_ccstr(new_value); | 749 faddr->set_ccstr(new_value); |
800 if (!faddr->is_default() && old_value != NULL) { | 750 if (!faddr->is_default() && old_value != NULL) { |
801 // Prior value is heap allocated so free it. | 751 // Prior value is heap allocated so free it. |