jdk/src/share/bin/java.c
changeset 22279 877c94f9476b
parent 21606 1984e107a4b3
child 22962 309eaab8c853
equal deleted inserted replaced
22278:a32375f9a4b5 22279:877c94f9476b
     1 /*
     1 /*
     2  * Copyright (c) 1995, 2013, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 1995, 2014, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     7  * published by the Free Software Foundation.  Oracle designates this
   340     do { \
   340     do { \
   341         if ((*env)->ExceptionOccurred(env)) { \
   341         if ((*env)->ExceptionOccurred(env)) { \
   342             JLI_ReportExceptionDescription(env); \
   342             JLI_ReportExceptionDescription(env); \
   343             ret = (CEL_return_value); \
   343             ret = (CEL_return_value); \
   344             LEAVE(); \
   344             LEAVE(); \
       
   345         } \
       
   346     } while (JNI_FALSE)
       
   347 
       
   348 #define CHECK_EXCEPTION_RETURN(CER_return_value) \
       
   349     do { \
       
   350         if ((*env)->ExceptionOccurred(env)) { \
       
   351             return CER_return_value; \
   345         } \
   352         } \
   346     } while (JNI_FALSE)
   353     } while (JNI_FALSE)
   347 
   354 
   348 int JNICALL
   355 int JNICALL
   349 JavaMain(void * _args)
   356 JavaMain(void * _args)
  1231     }
  1238     }
  1232     NULL_CHECK0(mid = (*env)->GetStaticMethodID(env, cls,
  1239     NULL_CHECK0(mid = (*env)->GetStaticMethodID(env, cls,
  1233                 "checkAndLoadMain",
  1240                 "checkAndLoadMain",
  1234                 "(ZILjava/lang/String;)Ljava/lang/Class;"));
  1241                 "(ZILjava/lang/String;)Ljava/lang/Class;"));
  1235 
  1242 
  1236     str = NewPlatformString(env, name);
  1243     NULL_CHECK0(str = NewPlatformString(env, name));
  1237     result = (*env)->CallStaticObjectMethod(env, cls, mid, USE_STDERR, mode, str);
  1244     NULL_CHECK0(result = (*env)->CallStaticObjectMethod(env, cls, mid,
       
  1245                                                         USE_STDERR, mode, str));
  1238 
  1246 
  1239     if (JLI_IsTraceLauncher()) {
  1247     if (JLI_IsTraceLauncher()) {
  1240         end   = CounterGet();
  1248         end   = CounterGet();
  1241         printf("%ld micro seconds to load main class\n",
  1249         printf("%ld micro seconds to load main class\n",
  1242                (long)(jint)Counter2Micros(end-start));
  1250                (long)(jint)Counter2Micros(end-start));
  1478     jstring joptString;
  1486     jstring joptString;
  1479     jclass cls = GetLauncherHelperClass(env);
  1487     jclass cls = GetLauncherHelperClass(env);
  1480     NULL_CHECK(cls);
  1488     NULL_CHECK(cls);
  1481     NULL_CHECK(showSettingsID = (*env)->GetStaticMethodID(env, cls,
  1489     NULL_CHECK(showSettingsID = (*env)->GetStaticMethodID(env, cls,
  1482             "showSettings", "(ZLjava/lang/String;JJJZ)V"));
  1490             "showSettings", "(ZLjava/lang/String;JJJZ)V"));
  1483     joptString = (*env)->NewStringUTF(env, optString);
  1491     NULL_CHECK(joptString = (*env)->NewStringUTF(env, optString));
  1484     (*env)->CallStaticVoidMethod(env, cls, showSettingsID,
  1492     (*env)->CallStaticVoidMethod(env, cls, showSettingsID,
  1485                                  USE_STDERR,
  1493                                  USE_STDERR,
  1486                                  joptString,
  1494                                  joptString,
  1487                                  (jlong)initialHeapSize,
  1495                                  (jlong)initialHeapSize,
  1488                                  (jlong)maxHeapSize,
  1496                                  (jlong)maxHeapSize,
  1519                                         "appendVmErgoMessage", "(ZLjava/lang/String;)V"));
  1527                                         "appendVmErgoMessage", "(ZLjava/lang/String;)V"));
  1520 
  1528 
  1521     NULL_CHECK(printHelp = (*env)->GetStaticMethodID(env, cls,
  1529     NULL_CHECK(printHelp = (*env)->GetStaticMethodID(env, cls,
  1522                                         "printHelpMessage", "(Z)V"));
  1530                                         "printHelpMessage", "(Z)V"));
  1523 
  1531 
  1524     jprogname = (*env)->NewStringUTF(env, _program_name);
  1532     NULL_CHECK(jprogname = (*env)->NewStringUTF(env, _program_name));
  1525 
  1533 
  1526     /* Initialize the usage message with the usual preamble */
  1534     /* Initialize the usage message with the usual preamble */
  1527     (*env)->CallStaticVoidMethod(env, cls, initHelp, jprogname);
  1535     (*env)->CallStaticVoidMethod(env, cls, initHelp, jprogname);
       
  1536     CHECK_EXCEPTION_RETURN();
  1528 
  1537 
  1529 
  1538 
  1530     /* Assemble the other variant part of the usage */
  1539     /* Assemble the other variant part of the usage */
  1531     if ((knownVMs[0].flag == VM_KNOWN) ||
  1540     if ((knownVMs[0].flag == VM_KNOWN) ||
  1532         (knownVMs[0].flag == VM_IF_SERVER_CLASS)) {
  1541         (knownVMs[0].flag == VM_IF_SERVER_CLASS)) {
  1533       vm1 = (*env)->NewStringUTF(env, knownVMs[0].name);
  1542       NULL_CHECK(vm1 = (*env)->NewStringUTF(env, knownVMs[0].name));
  1534       vm2 =  (*env)->NewStringUTF(env, knownVMs[0].name+1);
  1543       NULL_CHECK(vm2 =  (*env)->NewStringUTF(env, knownVMs[0].name+1));
  1535       (*env)->CallStaticVoidMethod(env, cls, vmSelect, vm1, vm2);
  1544       (*env)->CallStaticVoidMethod(env, cls, vmSelect, vm1, vm2);
       
  1545       CHECK_EXCEPTION_RETURN();
  1536     }
  1546     }
  1537     for (i=1; i<knownVMsCount; i++) {
  1547     for (i=1; i<knownVMsCount; i++) {
  1538       if (knownVMs[i].flag == VM_KNOWN) {
  1548       if (knownVMs[i].flag == VM_KNOWN) {
  1539         vm1 =  (*env)->NewStringUTF(env, knownVMs[i].name);
  1549         NULL_CHECK(vm1 =  (*env)->NewStringUTF(env, knownVMs[i].name));
  1540         vm2 =  (*env)->NewStringUTF(env, knownVMs[i].name+1);
  1550         NULL_CHECK(vm2 =  (*env)->NewStringUTF(env, knownVMs[i].name+1));
  1541         (*env)->CallStaticVoidMethod(env, cls, vmSelect, vm1, vm2);
  1551         (*env)->CallStaticVoidMethod(env, cls, vmSelect, vm1, vm2);
       
  1552         CHECK_EXCEPTION_RETURN();
  1542       }
  1553       }
  1543     }
  1554     }
  1544     for (i=1; i<knownVMsCount; i++) {
  1555     for (i=1; i<knownVMsCount; i++) {
  1545       if (knownVMs[i].flag == VM_ALIASED_TO) {
  1556       if (knownVMs[i].flag == VM_ALIASED_TO) {
  1546         vm1 =  (*env)->NewStringUTF(env, knownVMs[i].name);
  1557         NULL_CHECK(vm1 =  (*env)->NewStringUTF(env, knownVMs[i].name));
  1547         vm2 =  (*env)->NewStringUTF(env, knownVMs[i].alias+1);
  1558         NULL_CHECK(vm2 =  (*env)->NewStringUTF(env, knownVMs[i].alias+1));
  1548         (*env)->CallStaticVoidMethod(env, cls, vmSynonym, vm1, vm2);
  1559         (*env)->CallStaticVoidMethod(env, cls, vmSynonym, vm1, vm2);
       
  1560         CHECK_EXCEPTION_RETURN();
  1549       }
  1561       }
  1550     }
  1562     }
  1551 
  1563 
  1552     /* The first known VM is the default */
  1564     /* The first known VM is the default */
  1553     {
  1565     {
  1556       const char* defaultVM  =  knownVMs[0].name+1;
  1568       const char* defaultVM  =  knownVMs[0].name+1;
  1557       if ((knownVMs[0].flag == VM_IF_SERVER_CLASS) && isServerClassMachine) {
  1569       if ((knownVMs[0].flag == VM_IF_SERVER_CLASS) && isServerClassMachine) {
  1558         defaultVM = knownVMs[0].server_class+1;
  1570         defaultVM = knownVMs[0].server_class+1;
  1559       }
  1571       }
  1560 
  1572 
  1561       vm1 =  (*env)->NewStringUTF(env, defaultVM);
  1573       NULL_CHECK(vm1 =  (*env)->NewStringUTF(env, defaultVM));
  1562       (*env)->CallStaticVoidMethod(env, cls, vmErgo, isServerClassMachine,  vm1);
  1574       (*env)->CallStaticVoidMethod(env, cls, vmErgo, isServerClassMachine,  vm1);
       
  1575       CHECK_EXCEPTION_RETURN();
  1563     }
  1576     }
  1564 
  1577 
  1565     /* Complete the usage message and print to stderr*/
  1578     /* Complete the usage message and print to stderr*/
  1566     (*env)->CallStaticVoidMethod(env, cls, printHelp, USE_STDERR);
  1579     (*env)->CallStaticVoidMethod(env, cls, printHelp, USE_STDERR);
  1567   }
  1580   }