globals.c

来自「This is a resource based on j2me embedde」· C语言 代码 · 共 1,369 行 · 第 1/3 页

C
1,369
字号
    {	CVM_TRUE,  /* nonstatic */	CVMsystemClass(java_lang_Thread),        "initMainThread", "(IJ)V",        &CVMglobals.java_lang_Thread_initMainThread        /* NOTE: java.lang.Thread has a static initializer.  The clinit                 will be done explicitly in JNI_CreateJavaVM(). */    },    /* java.lang.Thread.initAttachedThread() */    {	CVM_TRUE,  /* static */	CVMsystemClass(java_lang_Thread),        "initAttachedThread",	    "(Ljava/lang/ThreadGroup;Ljava/lang/String;IJZ)"	    "Ljava/lang/Thread;",        &CVMglobals.java_lang_Thread_initAttachedThread        /* NOTE: java.lang.Thread has a static initializer.  The clinit                 will be done explicitly in JNI_CreateJavaVM(). */    },    /* java.lang.Thread.nextThreadNum() */    {	CVM_TRUE,  /* static */	CVMsystemClass(java_lang_Thread),        "nextThreadNum", "()I",        &CVMglobals.java_lang_Thread_nextThreadNum,        /* NOTE: java.lang.Thread has a static initializer.  The clinit                 will be done explicitly in JNI_CreateJavaVM(). */    },#ifdef CVM_AOT    /* sun.misc.Warmup.runit() */    {        CVM_TRUE, /* static */        CVMsystemClass(sun_misc_Warmup),        "runit", "(Ljava/lang/String;Ljava/lang/String;)V",        &CVMglobals.sun_misc_Warmup_runit,    },#endif#ifdef CVM_JVMPI    /* java.lang.Thread.initDaemonThread() */    {	CVM_TRUE,  /* nonstatic */	CVMsystemClass(java_lang_Thread),        "initDaemonThread", "(Ljava/lang/String;I)Ljava/lang/Thread;",        &CVMglobals.java_lang_Thread_initDaemonThread        /* NOTE: java.lang.Thread has a static initializer.  The clinit                 will be done explicitly in JNI_CreateJavaVM(). */    },#endif    /**********************************************************     * The following are for native application class loading.     **********************************************************/    /* sun.misc.Launcher.AppClassLoader.setExtInfo() */    {	CVM_TRUE,  /* static */	CVMsystemClass(sun_misc_Launcher_AppClassLoader),        "setExtInfo", "()V",        &CVMglobals.sun_misc_Launcher_AppClassLoader_setExtInfo        /* NOTE: sun.misc.Launcher.AppClassLoader has a static initializer.                 The clinit will be checked for and done at the site of use.*/    },    /* sun.misc.Launcher.ClassContainer.<init>(URL, String, Jarfile) */    {	CVM_FALSE, /* nonstatic */	CVMsystemClass(sun_misc_Launcher_ClassContainer),        "<init>", 	    "(Ljava/net/URL;"	    "Ljava/lang/String;"	    "Ljava/util/jar/JarFile;)V",        &CVMglobals.sun_misc_Launcher_ClassContainer_init        /* NOTE: sun.misc.Launcher.ClassContainer has no static initializer.                 Hence, no clinit needed. */    },    /* sun.misc.Launcher.ClassContainer.<init>(URL, Class, String, Jarfile) */    {	CVM_FALSE, /* nonstatic */	CVMsystemClass(sun_misc_Launcher_ClassContainer),        "<init>", 	    "(Ljava/net/URL;"	    "Ljava/lang/Class;"	    "Ljava/lang/String;"	    "Ljava/util/jar/JarFile;)V",        &CVMglobals.sun_misc_Launcher_ClassContainer_init_withClass        /* NOTE: sun.misc.Launcher.ClassContainer has no static initializer.                 Hence, no clinit needed. */    },    /* sun.misc.Launcher.getFileURL(File) */    {	CVM_TRUE,  /* static */	CVMsystemClass(sun_misc_Launcher),        "getFileURL", "(Ljava/io/File;)Ljava/net/URL;",        &CVMglobals.sun_misc_Launcher_getFileURL        /* NOTE: sun.misc.Launcher has a static initializer.  The clinit will                 be checked for and done at the site of use. */    },    /* java.io.FILE.<init>(File) */    {	CVM_FALSE, /* nonstatic */	CVMsystemClass(java_io_File),        "<init>", "(Ljava/lang/String;)V",        &CVMglobals.java_io_File_init        /* NOTE: java.io.FILE has a static initializer.  The clinit will be                 checked for and done at the site of use. */    },    /* java.util.jar.JarFile.<init>(File) */    {	CVM_FALSE, /* nonstatic */	CVMsystemClass(java_util_jar_JarFile),        "<init>", "(Ljava/io/File;)V",        &CVMglobals.java_util_jar_JarFile_init        /* NOTE: java.util.jar.JarFile's superclass has a static initializer.                 The clinit will be checked for and done at the site of use. */    },    /* java.security.CodeSource.<init>(String)  */    {	CVM_FALSE, /* nonstatic */	CVMsystemClass(java_security_CodeSource),        "<init>", "(Ljava/net/URL;[Ljava/security/cert/Certificate;)V",        &CVMglobals.java_security_CodeSource_init        /* NOTE: java.security.CodeSource has no static initializer.                 Hence, no clinit needed. */    },    /* java.security.SecureClassLoader.getProtectionDomain(CodeSource) */    {	CVM_FALSE, /* nonstatic */	CVMsystemClass(java_security_SecureClassLoader),        "getProtectionDomain", 	"(Ljava/security/CodeSource;)Ljava/security/ProtectionDomain;",        &CVMglobals.java_security_SecureClassLoader_getProtectionDomain        /* NOTE: java.security.SecureClassLoader has a static initializer, but                 does not need a clinit check because this mb is for a virtual                 method i.e. the class was already initialized previously                 when the object was instantiated. */    },    /* java.lang.ClassLoader.checkCerts */    {	CVM_FALSE, /* nonstatic */	CVMsystemClass(java_lang_ClassLoader),        "checkCerts", "(Ljava/lang/String;Ljava/security/CodeSource;)V",        &CVMglobals.java_lang_ClassLoader_checkCerts        /* NOTE: java.lang.ClassLoader has a static initializer.                 Hence, no clinit needed. */    },};static voidCVMdestroyGlobalSysMutexes(int n){    int i;    for (i = 0; i < n; i++) {	CVMsysMutexDestroy(globalSysMutexes[i].mutex);    }}static voidCVMdestroyMicroLocks(CVMMicroLock *locks, int n){    int i;    for (i = 0; i < n; ++i) {	CVMmicrolockDestroy(&locks[i]);    }}static voidCVMdestroyCstates(int n){    int i;    for (i = 0; i < n; ++i) {	CVMcsDestroy(CVM_CSTATE(i));    }}static CVMBoolinitCstates()    {    int i;    CVMUint8 rank = CVM_SYSMUTEX_MAX_RANK - CVM_NUM_CONSISTENT_STATES;        for (i = 0; i < CVM_NUM_CONSISTENT_STATES; ++i) {	if (!CVMcsInit(CVM_CSTATE(i), CVMcstateNames[i], rank)) {	    CVMdestroyCstates(i);	    return CVM_FALSE;	}	++rank;    }    return CVM_TRUE;}#define CVM_NUM_GLOBAL_METHODBLOCKS \    (sizeof(globalMethodBlocks) / sizeof(CVMGlobalMethodBlockEntry))static const CVMSubOptionData knownOptSubOptions[] = {#ifdef CVM_HAS_PLATFORM_SPECIFIC_SUBOPTIONS#include "javavm/include/opt_md.h"#endif    {"stackChunkSize", "Java stack chunk size",	CVM_INTEGER_OPTION,#ifdef CVM_JIT	{{32, 64 * 1024, 2 * 1024}},#else	{{32, 64 * 1024, 1 * 1024}},#endif	&CVMglobals.config.javaStackChunkSize},    {"stackMinSize", "Java stack minimum size",	CVM_INTEGER_OPTION,#ifdef CVM_JIT	{{32, 64 * 1024, 3*1024}},#else	{{32, 64 * 1024, 1*1024}},#endif	&CVMglobals.config.javaStackMinSize},    {"stackMaxSize", "Java stack maximum size",	CVM_INTEGER_OPTION,	{{1024, 1 * 1024 * 1024, 128 * 1024}},	&CVMglobals.config.javaStackMaxSize},    {NULL, NULL, CVM_NULL_OPTION, {{0, 0, 0}}, NULL}};voidCVMoptPrintUsage(){    CVMconsolePrintf("Valid -Xopt options include:\n");    CVMprintSubOptionsUsageString(knownOptSubOptions);}CVMBoolCVMoptParseXoptOptions(const char* optAttributesStr){    if (!CVMinitParsedSubOptions(&CVMglobals.parsedSubOptions,				 optAttributesStr))    {	return CVM_FALSE;    }    if (!CVMprocessSubOptions(knownOptSubOptions, "-Xopt",                              &CVMglobals.parsedSubOptions)) {	CVMoptPrintUsage();	return CVM_FALSE;    }    return CVM_TRUE;}CVMBoolCVMoptParseXssOption(const char* xssStr){    CVMInt32 nativeStackSize = CVMoptionToInt32(xssStr);    if (nativeStackSize == -1) {	CVMconsolePrintf("Warning: Could not parse "			 "stack size string \"%s\", setting default\n",			 xssStr);	/* gs->nativeStackSize remains 0 */	return CVM_TRUE;    } else if (nativeStackSize < CVM_THREAD_MIN_C_STACK_SIZE) {	CVMconsolePrintf("Stack size %d below minimum stack size (%d)\n",			 nativeStackSize, CVM_THREAD_MIN_C_STACK_SIZE);	return CVM_FALSE;    } else {	CVMglobals.config.nativeStackSize = nativeStackSize;	return CVM_TRUE;    }}#if defined(CVM_DEBUG) || defined(CVM_INSPECTOR)void CVMdumpGlobalsSubOptionValues(){    CVMprintSubOptionValues(knownOptSubOptions);}#endif /* CVM_DEBUG || CVM_INSPECTOR */CVMBool CVMinitVMGlobalState(CVMGlobalState *gs, CVMOptions *options){    CVMExecEnv *ee = &gs->mainEE;    /*     * First zero everything out     */    memset((void*)gs, 0, sizeof(CVMGlobalState));    /*     * Now initialize the global state     */    CVMtraceMisc(("Initializing global state\n"));#if CVM_USE_MMAP_APIS    if (!CVMmemInit()) {	goto out_of_memory;    }#endif    /* init interpreter loop function pointer */    gs->CVMgcUnsafeExecuteJavaMethodProcPtr = &CVMgcUnsafeExecuteJavaMethod;    CVMinitJNIStatics();        gs->exit_procs = NULL;#ifdef CVM_MTASK    gs->isServer = options->isServer;#endif#ifdef CVM_JVMPI    /* Initialize these 2 lists before anyone instantiates any monitors: */    gs->objMonitorList = NULL;    gs->rawMonitorList = NULL;#endif#ifdef CVM_JVMTI    /* Initialize high res clocks */    CVMtimeClockInit();#endif    /*     * Random number generator     */    CVMrandomInit();    CVMpreloaderInit();    gs->threadList = NULL;    gs->threadIDCount = 0;#if defined(CVM_HAVE_DEPRECATED) || defined(CVM_THREAD_SUSPENSION)    gs->suspendCheckerInitialized = CVM_FALSE;#endif#ifndef CDC_10    /* transfer assertion related globals */    gs->javaAssertionsUserDefault = options->javaAssertionsUserDefault;    gs->javaAssertionsSysDefault  = options->javaAssertionsSysDefault;    gs->javaAssertionsClasses     = options->javaAssertionsClasses;    gs->javaAssertionsPackages    = options->javaAssertionsPackages;#endif    /*     * Initalize all of the global sys mutexes.     */    {	CVMUint8 i;	CVMassert(CVM_NUM_GLOBAL_SYSMUTEXES < 255);	for (i = 0; i < CVM_NUM_GLOBAL_SYSMUTEXES; i++) {	    if (!CVMsysMutexInit(globalSysMutexes[i].mutex,				 globalSysMutexes[i].name,				 (CVMUint8)(i+1) /* rank */))	    {		CVMdestroyGlobalSysMutexes(i);		goto out_of_memory;	    }	}    }    if (!CVMcondvarInit(&gs->threadCountCV, &gs->threadLock.rmutex.mutex)) {	goto out_of_memory;    }#ifdef CVM_INSPECTOR    CVMgcLockerInit(&gs->inspectorGCLocker);    if (!CVMcondvarInit(&gs->gcLockerCV, &gs->gcLockerLock.rmutex.mutex)) {	goto out_of_memory;    }#endif    /* NOTE: This is theoretically where the "checked" version of the       JNI would be installed if we had it in our source tree.  Here,       if JVMTI is present, we replace some functions in the JNI       interface with the JVMTI's instrumented versions, which will       call back into the debugger if native code uses the JNI to set       or get a field. */    /* NOTE: this should come BEFORE the first call to CVMinitExecEnv.       This mutates the global JNI vector which later gets pointed to       by the various execution environments. */    /*     * With JVMTI, we do the instrumentation when an agent connects     */#ifdef CVM_JVMTI    CVMjvmtiSetDebugOption(options->debugging);#endif    #ifdef CVM_LVM /* %begin lvm */    /* Logical VM global variables initialization (phase 1)      * Do this before invoking CVMinitExecEnv().     * Phase 2 is taken place after initializing the main Logical VM */    if (!CVMLVMglobalsInitPhase1(&gs->lvm)) {	goto out_of_memory;    }#endif /* %end lvm */    gs->userThreadCount = 1;    gs->threadCount = 1;    if (!initCstates()) {	goto out_of_memory;    }    /*     * Default sizes     */    if (!CVMoptParseXoptOptions(options->optAttributesStr)) {	return CVM_FALSE;    }#if defined(CVM_DEBUG)    CVMconsolePrintf("CVM Configuration:\n");    CVMdumpGlobalsSubOptionValues();#endif /* CVM_DEBUG */    /* In the future, this should be map to a -Xopt sub-option */    if (options->nativeStackSizeStr != NULL) {	if (!CVMoptParseXssOption(options->nativeStackSizeStr)) {	    return CVM_FALSE;	}    }#ifdef CVM_TRACE_ENABLED    /*     * Turn off all debugging flags by default.     */    if (options->traceFlagsStr != NULL) {	gs->debugFlags = strtol(options->traceFlagsStr, NULL, 0);    } else {	gs->debugFlags = 0;    }    CVMtraceInit();#endif /* CVM_TRACE_ENABLED */    if (!CVMinitExecEnv(ee, ee, NULL)) {	return CVM_FALSE;    }    if (!CVMattachExecEnv(ee, CVM_TRUE)) {	goto badEEnoDetach;    }    if (!CVMinitGCRootStack(ee, &gs->globalRoots,		       CVM_INITIAL_GLOBALROOTS_STACK_SIZE,		       CVM_MAX_GLOBALROOTS_STACK_SIZE, 		       CVM_MIN_GLOBALROOTS_STACKCHUNK_SIZE,		       CVM_FRAMETYPE_GLOBALROOT)) {	goto badEE;    }    if (!CVMinitGCRootStack(ee, &gs->weakGlobalRoots,		       CVM_INITIAL_WEAK_GLOBALROOTS_STACK_SIZE,		       CVM_MAX_WEAK_GLOBALROOTS_STACK_SIZE, 		       CVM_MIN_WEAK_GLOBALROOTS_STACKCHUNK_SIZE,		       CVM_FRAMETYPE_GLOBALROOT)) {	goto badEE;    }    if (!CVMinitGCRootStack(ee, &gs->classGlobalRoots,		       CVM_INITIAL_CLASS_GLOBALROOTS_STACK_SIZE,

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?