/* src/cacaoh/cacaoh.c - main for header generation (cacaoh)
- Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+ Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
J. Wenninger, Institut f. Computersprachen - TU Wien
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- Contact: cacao@cacaojvm.org
-
- Authors: Reinhard Grafl
-
- Changes: Mark Probst
- Philipp Tomsich
- Christian Thalinger
-
- $Id: cacaoh.c 4921 2006-05-15 14:24:36Z twisti $
-
*/
#include "vm/types.h"
#include "cacaoh/headers.h"
-#include "mm/boehm.h"
-#include "mm/memory.h"
-#include "native/include/java_lang_Throwable.h"
-#if defined(ENABLE_THREADS)
-# include "threads/native/threads.h"
-#endif
+#include "mm/gc-common.h"
+#include "mm/memory.h"
+#include "toolbox/hashtable.h"
#include "toolbox/logging.h"
-#include "vm/classcache.h"
+
#include "vm/exceptions.h"
#include "vm/global.h"
-#include "vm/hashtable.h"
-#include "vm/loader.h"
-#include "vm/options.h"
-#include "vm/statistics.h"
#include "vm/stringlocal.h"
-#include "vm/suck.h"
-
+#include "vm/vm.h"
-/* define heap sizes **********************************************************/
-
-#define HEAP_MAXSIZE 2 * 1024 * 1024 /* default 2MB */
-#define HEAP_STARTSIZE 100 * 1024 /* default 100kB */
+#include "vmcore/classcache.h"
+#include "vmcore/loader.h"
+#include "vmcore/options.h"
+#include "vmcore/statistics.h"
+#include "vmcore/suck.h"
/* define cacaoh options ******************************************************/
*******************************************************************************/
-static void usage(void)
+void usage(void)
{
printf("Usage: cacaoh [options] <classes>\n"
"\n"
static void version(void)
{
printf("cacaoh version "VERSION"\n");
- printf("Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,\n");
+ printf("Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,\n");
printf("C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,\n");
printf("E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,\n");
printf("J. Wenninger, Institut f. Computersprachen - TU Wien\n\n");
}
+/* forward declarations *******************************************************/
+
+static JavaVMInitArgs *cacaoh_options_prepare(int argc, char **argv);
+
+
/* main ************************************************************************
Main program.
char *classpath;
char *cp;
s4 cplen;
- u4 heapmaxsize;
- u4 heapstartsize;
if (argc < 2)
usage();
-
-#if defined(DISABLE_GC)
- nogc_init(HEAP_MAXSIZE, HEAP_STARTSIZE);
-#endif
-
/* set the bootclasspath */
cp = getenv("BOOTCLASSPATH");
if (cp) {
bootclasspath = MNEW(char, strlen(cp) + strlen("0"));
strcpy(bootclasspath, cp);
-
- } else {
- cplen = strlen(CACAO_VM_ZIP_PATH) +
+ }
+ else {
+ cplen =
+#if defined(WITH_CLASSPATH_GNU)
+ strlen(CACAO_VM_ZIP) +
strlen(":") +
- strlen(CLASSPATH_GLIBJ_ZIP_PATH) +
+#endif
+ strlen(CLASSPATH_CLASSES) +
strlen("0");
bootclasspath = MNEW(char, cplen);
- strcat(bootclasspath, CACAO_VM_ZIP_PATH);
+#if defined(WITH_CLASSPATH_GNU)
+ strcat(bootclasspath, CACAO_VM_ZIP);
strcat(bootclasspath, ":");
- strcat(bootclasspath, CLASSPATH_GLIBJ_ZIP_PATH);
+#endif
+ strcat(bootclasspath, CLASSPATH_CLASSES);
}
cp = getenv("CLASSPATH");
- if (cp) {
+ if (cp != NULL) {
classpath = MNEW(char, strlen(cp) + strlen("0"));
strcat(classpath, cp);
-
- } else {
+ }
+ else {
classpath = MNEW(char, strlen(".") + strlen("0"));
strcpy(classpath, ".");
}
opt_verbose = false;
opt_directory = NULL;
- heapmaxsize = HEAP_MAXSIZE;
- heapstartsize = HEAP_STARTSIZE;
-
/* parse the options ******************************************************/
- vm_args = options_prepare(argc, argv);
+ vm_args = cacaoh_options_prepare(argc, argv);
while ((opt = options_get(opts, vm_args)) != OPT_DONE) {
switch (opt) {
if (opt_verbose) {
log_init(NULL);
- log_text("Java - header-generator started");
+ log_println("Java - header-generator started");
}
-
- /* initialize the garbage collector */
-
- gc_init(heapmaxsize, heapstartsize);
-
-#if defined(ENABLE_THREADS)
- threads_preinit();
-#endif
-
- /* initialize the string hashtable stuff: lock (must be done
- _after_ threads_preinit) */
-
- if (!string_init())
- throw_main_exception_exit();
/* initialize the utf8 hashtable stuff: lock, often used utf8 strings
(must be done _after_ threads_preinit) */
if (!utf8_init())
- throw_main_exception_exit();
+ vm_abort("utf8_init failed\n");
/* initialize the classcache hashtable stuff: lock, hashtable
(must be done _after_ threads_preinit) */
if (!classcache_init())
- throw_main_exception_exit();
+ vm_abort("classcache_init failed\n");
/* initialize the loader with bootclasspath (must be done _after_
thread_preinit) */
if (!suck_init())
- throw_main_exception_exit();
+ vm_abort("suck_init failed\n");
suck_add(bootclasspath);
classcache_init) */
if (!loader_init())
- throw_main_exception_exit();
+ vm_abort("loader_init failed\n");
/* load Java classes ******************************************************/
/* exceptions are catched with new_exception call */
if (!(c = load_class_bootstrap(utf_new_char(cp))))
- throw_cacao_exception_exit(string_java_lang_NoClassDefFoundError,
- cp);
+ vm_abort("java.lang.NoClassDefFoundError: %s\n", cp);
if (!link_class(c))
- throw_cacao_exception_exit(string_java_lang_LinkageError,
- cp);
+ vm_abort("java.lang.LinkageError: %s\n", cp);
headerfile_generate(c, opt_directory);
}
loader_close();
if (opt_verbose) {
- log_text("Java - header-generator stopped");
+ log_println("Java - header-generator stopped");
#if defined(ENABLE_STATISTICS)
- mem_usagelog(true);
+ statistics_print_memory_usage();
#endif
}
}
+/* cacaoh_options_prepare ******************************************************
+
+ Prepare the JavaVMInitArgs.
+
+*******************************************************************************/
+
+static JavaVMInitArgs *cacaoh_options_prepare(int argc, char **argv)
+{
+ JavaVMInitArgs *vm_args;
+ s4 i;
+
+ vm_args = NEW(JavaVMInitArgs);
+
+ vm_args->nOptions = argc - 1;
+ vm_args->options = MNEW(JavaVMOption, argc);
+
+ for (i = 1; i < argc; i++)
+ vm_args->options[i - 1].optionString = argv[i];
+
+ return vm_args;
+}
+
+
/*
* These are local overrides for various environment variables in Emacs.
* Please do not remove this and leave it at the end of the file, where