usrJava.c
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:9k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* usrJava.c - configuration file for the Personal/Embedded JWorks product */
  2. /* Copyright 1984-1999 Wind River htmlSystems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01m,17jan01,lcs  remove obsolete params for 3.1
  7. 01l,10jan01,f_l  modified jvm parameters initailization
  8. 01k,04jan01,jak  fix nfsCache for SIMNT
  9. 01j,18oct00,jak  remove awt configuration
  10. 01i,16oct00,jak  update for pjw31 awt
  11. 01h,31aug00,f_l  added nfs support initialization for simsolaris
  12. 01g,24jul00,xav  Added javaShutdownDelaySet in javaParamsConfig routine
  13. 01f,19jul00,f_l  fixed spr 24637, added function pointer to resolvGetHostByName
  14. 01f,03jul00,lcs  Add bootclasspath config option
  15. 01e,30jul99,sjw  Call javaGraphicsConfig() externally (SPR 24640)
  16. 01e,11oct99,sjw  Merge in latest changes from tor2_0_0.graphics
  17. 01d,07may99,dmm  Guard for javaNfsConfig routine needed in case NFS is not
  18.                  selected
  19. 01c,05may99,dmm  Adding javaNfsConfig, javaMemConfig and some other routines
  20. 01b,04may99,dmm  Complete Cleanup for the New T2 PJWorks Config Scheme
  21. 01a,04apr99,dmm  written.
  22. */
  23. /*
  24. DESCRIPTION
  25. This file configures and initializes both Personal and Embedded JWorks products
  26. The only user callable routine is usrJavaInit().
  27. NOMANUAL
  28. */
  29. #include <vxWorks.h>
  30. #include <memDrv.h>
  31. #include <private/javaLibP.h>
  32. #if (CPU==SIMSPARCSOLARIS) || (CPU==SIMNT)
  33.     extern nfsCacheSize;
  34. #endif /* CPU==SIMSPARCSOLARIS || CPU==SIMNT */
  35. /* globals */
  36. extern JAVA_LIB_BOUNDS javaStartBounds;
  37. extern JAVA_LIB_BOUNDS javaEndBounds;
  38. JAVA_LIB_SEGS  javaSegList[] =
  39.     { 
  40.     {&javaStartBounds, &javaEndBounds, NULL} ,
  41.     /* this must always be the last entry */
  42.     { NULL, NULL, NULL },
  43.     };
  44. /* This is a temporary workaround until jMemLib.h is in the VxWorks include */
  45. extern STATUS jMemLibInit (void);
  46. extern void   jMemLibFinalize (void);
  47. extern void * jMemAlloc (void * pAddr, size_t size, size_t alignment);
  48. extern void   jMemFree (void * pMem);
  49. /******************************************************************************
  50. *
  51. * javaInstrumentHook - hook to be called when interesting Java events occurr
  52. *
  53. * If WindView facilities have not been selected in the build of
  54. * VxWorks then this compiles to an empty function.  If WindView is
  55. * included then this will call wvEvent() to report the event.  With
  56. * WindView included Java reports user events with the following
  57. * meaning:
  58. *
  59. * 0 MONITOR_CONSTRUCTION object monitor is being created
  60. * 1 MONITOR_DESTRUCTION object monitor is being destroyed
  61. * 2 MONITOR_ENTER object monitor is entered
  62. * 3 MONITOR_EXIT object monitor is exited
  63. * 4 MONITOR_WAIT object monitor is being waited on
  64. * 5 MONITOR_NOTIFY notify of all monitor waiters 
  65. * 6 MONITOR_SIGNAL notify of single monitor waiter
  66. *
  67. * 7 THREAD_CREATE creation of thread
  68. * 8 THREAD_DELETE, deletion of thread
  69. * 9 THREAD_JEXCEPTION Java exception in thread
  70. * 10 THREAD_SUSPEND suspend of thread
  71. * 11 THREAD_RESUME resume of thread
  72. * 12 THREAD_YIELD thread is yielding
  73. *
  74. * 13 SINGLE all other threads are locked out
  75. * 14 MULTI other threads are unlocked
  76. *
  77. * 15 ABORT java is aborting
  78. *
  79. */
  80. STATUS javaInstrumentHook
  81.     (
  82.     const char * eventName, /* event being logged, e.g. monitor enter */
  83.     void * pData, /* associated data, e.g. monitor id */
  84.     int evtType /* event type code - see instrument_md.h */
  85.     )
  86.     {
  87. #ifdef INCLUDE_WINDVIEW
  88.     /* Pass it over to WindView */
  89.     return wvEvent ((event_t) evtType, (char *) &pData, sizeof (void *));
  90. #else
  91.     return OK;
  92. #endif /* INCLUDE_WINDVIEW */
  93.     }
  94. /*******************************************************************************
  95. *
  96. * usrJavaInit - configure and initialize Personal/Embedded JWorks
  97. *
  98. * This routine configures and initializes both Personal and Embedded JWorks
  99. * products.
  100. *
  101. * RETURNS:
  102. * OK, or
  103. * ERROR if there is a problem in initializing the JWorks products.
  104. *
  105. * NOMANUAL
  106. */
  107. STATUS javaParamsConfig ()
  108.     {
  109.     javaHomeSet (JAVA_HOME);
  110.     javaShutdownDelaySet (JAVA_SHUTDOWN_DELAY);
  111.     javaClassPathSet (JAVA_CLASS_PATH);
  112.     javaBootClassPathSet (JAVA_BOOT_CLASS_PATH);
  113.     if (JAVA_USER_HOME == NULL)
  114.     {
  115.      javaUserHomeSet (JAVA_HOME);
  116.     }
  117.     else
  118.     {
  119.      javaUserHomeSet (JAVA_USER_HOME);
  120.     }
  121.     if (JAVA_USER_DIR == NULL)
  122.     {
  123.      javaUserDirSet (JAVA_HOME);
  124.     }
  125.     else
  126.     {
  127.      javaUserDirSet (JAVA_USER_DIR);
  128.     }
  129.     javaUserNameSet (JAVA_USER_NAME);
  130.     javaFileSeparatorSet (JAVA_FILE_SEPARATOR);
  131.     javaJNIArgInitHookSet (JAVA_JNI_ARG_INIT_HOOK);
  132.     javaNativeStackSizeSet (JAVA_NATIVE_STACK_SIZE);
  133.     javaMaxHeapSizeSet (JAVA_MAX_HEAP_SIZE);
  134.     javaStackCheckSet (JAVA_STACK_CHECK);
  135.     javaInversionSafeSet (JAVA_INVERSION_SAFE);
  136.     javaMaxPrioritySet (JAVA_MAX_PRIORITY);
  137.     javaLoadLibraryPathSet (JAVA_LOAD_LIBRARY_PATH);
  138.     javaThreadInitHookSet (JAVA_THREAD_INIT_HOOK);
  139.     javaInstrumentHookSet (JAVA_INSTRUMENT_HOOK_ROUTINE);
  140. #if defined (INCLUDE_WINDVIEW)
  141.     javaInstrumentSet (TRUE);
  142. #else
  143.     javaInstrumentSet (FALSE);
  144. #endif /* INCLUDE_WINDVIEW */
  145.     javaAbortOnExceptionSet (JAVA_ABORT_ON_EXCEPTION);
  146.     javaRestartableSet(JAVA_RESTARTABLE);
  147.     javaMemInterfaceSet (jMemLibInit, jMemLibFinalize,
  148.    jMemAlloc, jMemFree);
  149.     javaPathSeparatorSet (JAVA_PATH_SEPARATOR);
  150.     /* one day there may be a way for this to fail */
  151.     return OK;
  152.     }
  153. /* Flag related to the Java VM configuration */
  154. BOOL javaConfigDone = FALSE;
  155. /******************************************************************************
  156. *
  157. * usrJavaInit - configure and initialize the Java interpreter.
  158. *
  159. * RETURNS: N/A
  160. */
  161. STATUS usrJavaInit (void)
  162.     {
  163.     STATUS err;
  164.     /* Init error to okay */
  165.     err = OK;
  166.     if (javaConfigDone == TRUE) return err;
  167. #if defined(JAVA_USER_PRE_CONFIG)
  168.     JAVA_USER_PRE_CONFIG;
  169. #endif
  170.     if (err != OK)
  171. {
  172. /* User init code reported error - do nothing */
  173. }
  174.     if (javaParamsConfig () != OK)
  175. {
  176. err = ERROR;
  177. }
  178. #if defined(JAVA_FILE_CONFIG_NFS)
  179.     if (javaNfsConfig () != OK)
  180. {
  181. err = ERROR;
  182. }
  183. #endif
  184.     
  185.     if (javaMemDrvConfig () != OK)
  186. {
  187. err = ERROR;
  188. }
  189. #if defined(JAVA_USER_POST_CONFIG)
  190.     JAVA_USER_POST_CONFIG;
  191. #endif
  192.     javaConfigDone = TRUE;
  193.     return err;
  194.     }
  195. #if defined(JAVA_FILE_CONFIG_NFS)
  196. /******************************************************************************
  197. *
  198. * javaNfsConfig - mount NFS file system(s) for Java VM
  199. *
  200. * This routine will mount the file system JAVA_NFS_HOST_PATH from
  201. * JAVA_NFS_HOST to the target file system JAVA_HOME.  If JAVA_NFS_HOST_ADDR
  202. * is defined then it will first add the mount host name to the host name
  203. * table with the IP address string given by JAVA_NFS_HOST_ADDR e.g.
  204. * "127.0.0.1"
  205. *
  206. * RETURNS: OK on success, ERROR otherwise
  207. */
  208. STATUS javaNfsConfig (void)
  209.     {
  210. char *host;
  211. if (JAVA_NFS_HOST == NULL) 
  212. {
  213. host = (char *) &sysBootHost;
  214. }
  215. else
  216. {
  217. host = JAVA_NFS_HOST;
  218. }
  219. if (JAVA_NFS_HOST_ADDR != NULL)
  220. {
  221. if (hostAdd (host, JAVA_NFS_HOST_ADDR) != OK &&
  222.          errno != S_hostLib_HOST_ALREADY_ENTERED)
  223. {
  224. fprintf (stderr, "Failed to add %s, %s to host tablen",
  225.   host, JAVA_NFS_HOST_ADDR);
  226. return ERROR;
  227. }
  228. #if (CPU==SIMSPARCSOLARIS) || (CPU==SIMNT)
  229. /* override default nfs cache size (spr 33253) */
  230. nfsCacheSize = 512;
  231. #endif /* CPU==SIMSPARCSOLARIS || CPU==SIMNT*/
  232. } /* JAVA_NFS_HOST_ADDR */
  233.     /* Mount NFS file systems for Java classes */
  234.     if (nfsMount (host, JAVA_NFS_HOST_PATH, JAVA_HOME) != OK)
  235. {
  236. fprintf (stderr, "Failed to mount %s from %s:%sn", 
  237.  JAVA_HOME,
  238.  host, 
  239.  JAVA_NFS_HOST_PATH);
  240. return ERROR;
  241. }
  242.     return OK;
  243.     }
  244. #endif
  245. /******************************************************************************
  246. *
  247. * javaMemDrvConfig - create a memDrv device containing class data
  248. *
  249. *
  250. * RETURNS: OK on success, ERROR otherwise
  251. */
  252. STATUS javaMemDrvConfig (void)
  253.     {
  254.     STATUS err;
  255.     err = OK;
  256. #if defined(JAVA_MEM_DRV_NAME) && defined(JAVA_MEM_DRV_ADDRESS) && 
  257.     defined(JAVA_MEM_DRV_SIZE)
  258.     /* Initialize the device driver - doesn't hurt to repeat */
  259.     memDrv ();
  260.     /* Now create the device using data array above */
  261.     if (memDevCreate (JAVA_MEM_DRV_NAME, 
  262.       (char *) JAVA_MEM_DRV_ADDRESS, 
  263.       JAVA_MEM_DRV_SIZE) != OK)
  264. {
  265. fprintf (stderr, "Failed to create %ld byte memDrv device %s at %p",
  266.  JAVA_MEM_DRV_SIZE, JAVA_MEM_DRV_NAME, JAVA_MEM_DRV_ADDRESS);
  267. err = ERROR;
  268. }
  269.     else
  270. {
  271. struct stat statBuf;
  272. if (stat (JAVA_MEM_DRV_NAME, & statBuf) == ERROR)
  273.     {
  274.     fprintf (stderr, 
  275.      "Failed to stat file %s, memDrv driver may be oldn",
  276.      JAVA_MEM_DRV_NAME);
  277.     err = ERROR;
  278.     }
  279. }
  280. #endif /* JAVA_MEM_DRV_DATA */
  281.     return err;
  282.     }    
  283. /* Fix for spr 24637 . Set function pointer to vxWorks' resolvGetHostByName 
  284.  * routine if DNS is included */
  285. #ifdef INCLUDE_DNS_RESOLVER
  286. FUNCPTR _pJavaResolvGetHostByName = resolvGetHostByName;
  287. #else 
  288. FUNCPTR _pJavaResolvGetHostByName = NULL;
  289. #endif /* INCLUDE_DNS_RESOLVER */