src/share/vm/runtime/arguments.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File 8145235.03 Sdiff src/share/vm/runtime

src/share/vm/runtime/arguments.cpp

Print this page




 958       return real_name;
 959     case 1: {
 960       if (warn) {
 961         char version[256];
 962         since.to_string(version, sizeof(version));
 963         if (real_name != arg) {
 964           warning("Option %s was deprecated in version %s and will likely be removed in a future release. Use option %s instead.",
 965                   arg, version, real_name);
 966         } else {
 967           warning("Option %s was deprecated in version %s and will likely be removed in a future release.",
 968                   arg, version);
 969         }
 970       }
 971       return real_name;
 972     }
 973   }
 974   ShouldNotReachHere();
 975   return NULL;
 976 }
 977 
 978 AliasedLoggingFlag Arguments::catch_logging_aliases(const char* name){























 979   for (size_t i = 0; aliased_logging_flags[i].alias_name != NULL; i++) {
 980     const AliasedLoggingFlag& alf = aliased_logging_flags[i];
 981     if (strcmp(alf.alias_name, name) == 0) {

 982       return alf;
 983     }
 984   }
 985   AliasedLoggingFlag a = {NULL, LogLevel::Off, false, LOG_TAGS(_NO_TAG)};
 986   return a;
 987 }
 988 
 989 bool Arguments::parse_argument(const char* arg, Flag::Flags origin) {
 990 
 991   // range of acceptable characters spelled out for portability reasons
 992 #define NAME_RANGE  "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]"
 993 #define BUFLEN 255
 994   char name[BUFLEN+1];
 995   char dummy;
 996   const char* real_name;
 997   bool warn_if_deprecated = true;
 998 
 999   if (sscanf(arg, "-%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) {
1000     AliasedLoggingFlag alf = catch_logging_aliases(name);
1001     if (alf.alias_name != NULL){
1002       LogConfiguration::configure_stdout(LogLevel::Off, alf.exactMatch, alf.tag0, alf.tag1, alf.tag2, alf.tag3, alf.tag4, alf.tag5);
1003       return true;
1004     }
1005     real_name = handle_aliases_and_deprecation(name, warn_if_deprecated);
1006     if (real_name == NULL) {
1007       return false;
1008     }
1009     return set_bool_flag(real_name, false, origin);
1010   }
1011   if (sscanf(arg, "+%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) {
1012     AliasedLoggingFlag alf = catch_logging_aliases(name);
1013     if (alf.alias_name != NULL){
1014       LogConfiguration::configure_stdout(alf.level, alf.exactMatch, alf.tag0, alf.tag1, alf.tag2, alf.tag3, alf.tag4, alf.tag5);
1015       return true;
1016     }
1017     real_name = handle_aliases_and_deprecation(name, warn_if_deprecated);
1018     if (real_name == NULL) {
1019       return false;
1020     }
1021     return set_bool_flag(real_name, true, origin);
1022   }
1023 
1024   char punct;
1025   if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "%c", name, &punct) == 2 && punct == '=') {
1026     const char* value = strchr(arg, '=') + 1;
1027     Flag* flag;
1028 
1029     // this scanf pattern matches both strings (handled here) and numbers (handled later))
1030     real_name = handle_aliases_and_deprecation(name, warn_if_deprecated);
1031     if (real_name == NULL) {
1032       return false;


1208   } else {
1209     arg_len = equal_sign - argname;
1210   }
1211 
1212   // Only make the obsolete check for valid arguments.
1213   if (arg_len <= BUFLEN) {
1214     // Construct a string which consists only of the argument name without '+', '-', or '='.
1215     char stripped_argname[BUFLEN+1];
1216     strncpy(stripped_argname, argname, arg_len);
1217     stripped_argname[arg_len] = '\0';  // strncpy may not null terminate.
1218     if (is_obsolete_flag(stripped_argname, &since)) {
1219       char version[256];
1220       since.to_string(version, sizeof(version));
1221       warning("Ignoring option %s; support was removed in %s", stripped_argname, version);
1222       return true;
1223     }
1224 #ifndef PRODUCT
1225     else {
1226       const char* replacement;
1227       if ((replacement = removed_develop_logging_flag_name(stripped_argname)) != NULL){
1228         jio_fprintf(defaultStream::error_stream(),
1229                   "%s has been removed. Please use %s instead.\n", stripped_argname, replacement);

1230         return false;
1231       }
1232     }
1233 #endif //PRODUCT
1234   }
1235 
1236   // For locked flags, report a custom error message if available.
1237   // Otherwise, report the standard unrecognized VM option.
1238   Flag* found_flag = Flag::find_flag((const char*)argname, arg_len, true, true);
1239   if (found_flag != NULL) {
1240     char locked_message_buf[BUFLEN];
1241     Flag::MsgType msg_type = found_flag->get_locked_message(locked_message_buf, BUFLEN);
1242     if (strlen(locked_message_buf) == 0) {
1243       if (found_flag->is_bool() && !has_plus_minus) {
1244         jio_fprintf(defaultStream::error_stream(),
1245           "Missing +/- setting for VM option '%s'\n", argname);
1246       } else if (!found_flag->is_bool() && has_plus_minus) {
1247         jio_fprintf(defaultStream::error_stream(),
1248           "Unexpected +/- setting in VM option '%s'\n", argname);
1249       } else {




 958       return real_name;
 959     case 1: {
 960       if (warn) {
 961         char version[256];
 962         since.to_string(version, sizeof(version));
 963         if (real_name != arg) {
 964           warning("Option %s was deprecated in version %s and will likely be removed in a future release. Use option %s instead.",
 965                   arg, version, real_name);
 966         } else {
 967           warning("Option %s was deprecated in version %s and will likely be removed in a future release.",
 968                   arg, version);
 969         }
 970       }
 971       return real_name;
 972     }
 973   }
 974   ShouldNotReachHere();
 975   return NULL;
 976 }
 977 
 978 void log_deprecated_flag( const char* name, const char* pref, AliasedLoggingFlag alf) {
 979   LogTagType tagSet[] = {alf.tag0, alf.tag1, alf.tag2, alf.tag3, alf.tag4, alf.tag5};
 980   // Set tagset string buffer at max size of 256, large enough for any alias tagset
 981   int max_tagset_size = 256;
 982   char tagset_buffer[max_tagset_size];
 983   tagset_buffer[0] = '\0';
 984 
 985   // Write tag-set for aliased logging option, in string list form
 986   int max_tags = sizeof(tagSet)/sizeof(tagSet[0]);
 987   for (int i = 0; i < max_tags && tagSet[i] != LogTag::__NO_TAG; i++) {
 988     if (i > 0) {
 989       strncat(tagset_buffer, ",", 1);
 990     }
 991     strncat(tagset_buffer, LogTag::name(tagSet[i]), max_tagset_size - strlen(tagset_buffer) - 1);
 992   }
 993 
 994   log_warning(arguments)("-XX:%s%s is deprecated. Will use -Xlog:%s=%s instead.",
 995                          pref,
 996                          name,
 997                          tagset_buffer,
 998                          (pref == "-") ? "off" : LogLevel::name(alf.level));
 999 }
1000 
1001 AliasedLoggingFlag Arguments::catch_logging_aliases(const char* name, const char* pref){
1002   for (size_t i = 0; aliased_logging_flags[i].alias_name != NULL; i++) {
1003     const AliasedLoggingFlag& alf = aliased_logging_flags[i];
1004     if (strcmp(alf.alias_name, name) == 0) {
1005       log_deprecated_flag(name, pref, alf);
1006       return alf;
1007     }
1008   }
1009   AliasedLoggingFlag a = {NULL, LogLevel::Off, false, LOG_TAGS(_NO_TAG)};
1010   return a;
1011 }
1012 
1013 bool Arguments::parse_argument(const char* arg, Flag::Flags origin) {
1014 
1015   // range of acceptable characters spelled out for portability reasons
1016 #define NAME_RANGE  "[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_]"
1017 #define BUFLEN 255
1018   char name[BUFLEN+1];
1019   char dummy;
1020   const char* real_name;
1021   bool warn_if_deprecated = true;
1022 
1023   if (sscanf(arg, "-%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) {
1024     AliasedLoggingFlag alf = catch_logging_aliases(name, "-");
1025     if (alf.alias_name != NULL){
1026       LogConfiguration::configure_stdout(LogLevel::Off, alf.exactMatch, alf.tag0, alf.tag1, alf.tag2, alf.tag3, alf.tag4, alf.tag5);
1027       return true;
1028     }
1029     real_name = handle_aliases_and_deprecation(name, warn_if_deprecated);
1030     if (real_name == NULL) {
1031       return false;
1032     }
1033     return set_bool_flag(real_name, false, origin);
1034   }
1035   if (sscanf(arg, "+%" XSTR(BUFLEN) NAME_RANGE "%c", name, &dummy) == 1) {
1036     AliasedLoggingFlag alf = catch_logging_aliases(name, "+");
1037     if (alf.alias_name != NULL){
1038       LogConfiguration::configure_stdout(alf.level, alf.exactMatch, alf.tag0, alf.tag1, alf.tag2, alf.tag3, alf.tag4, alf.tag5);
1039       return true;
1040     }
1041     real_name = handle_aliases_and_deprecation(name, warn_if_deprecated);
1042     if (real_name == NULL) {
1043       return false;
1044     }
1045     return set_bool_flag(real_name, true, origin);
1046   }
1047 
1048   char punct;
1049   if (sscanf(arg, "%" XSTR(BUFLEN) NAME_RANGE "%c", name, &punct) == 2 && punct == '=') {
1050     const char* value = strchr(arg, '=') + 1;
1051     Flag* flag;
1052 
1053     // this scanf pattern matches both strings (handled here) and numbers (handled later))
1054     real_name = handle_aliases_and_deprecation(name, warn_if_deprecated);
1055     if (real_name == NULL) {
1056       return false;


1232   } else {
1233     arg_len = equal_sign - argname;
1234   }
1235 
1236   // Only make the obsolete check for valid arguments.
1237   if (arg_len <= BUFLEN) {
1238     // Construct a string which consists only of the argument name without '+', '-', or '='.
1239     char stripped_argname[BUFLEN+1];
1240     strncpy(stripped_argname, argname, arg_len);
1241     stripped_argname[arg_len] = '\0';  // strncpy may not null terminate.
1242     if (is_obsolete_flag(stripped_argname, &since)) {
1243       char version[256];
1244       since.to_string(version, sizeof(version));
1245       warning("Ignoring option %s; support was removed in %s", stripped_argname, version);
1246       return true;
1247     }
1248 #ifndef PRODUCT
1249     else {
1250       const char* replacement;
1251       if ((replacement = removed_develop_logging_flag_name(stripped_argname)) != NULL){
1252         log_warning(arguments)("%s has been removed. Please use %s instead.",
1253                                stripped_argname,
1254                                replacement);
1255         return false;
1256       }
1257     }
1258 #endif //PRODUCT
1259   }
1260 
1261   // For locked flags, report a custom error message if available.
1262   // Otherwise, report the standard unrecognized VM option.
1263   Flag* found_flag = Flag::find_flag((const char*)argname, arg_len, true, true);
1264   if (found_flag != NULL) {
1265     char locked_message_buf[BUFLEN];
1266     Flag::MsgType msg_type = found_flag->get_locked_message(locked_message_buf, BUFLEN);
1267     if (strlen(locked_message_buf) == 0) {
1268       if (found_flag->is_bool() && !has_plus_minus) {
1269         jio_fprintf(defaultStream::error_stream(),
1270           "Missing +/- setting for VM option '%s'\n", argname);
1271       } else if (!found_flag->is_bool() && has_plus_minus) {
1272         jio_fprintf(defaultStream::error_stream(),
1273           "Unexpected +/- setting in VM option '%s'\n", argname);
1274       } else {


src/share/vm/runtime/arguments.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File