Makefile.in: Rebuilt.

* Makefile.in: Rebuilt.
	* Makefile.am (java/lang/ClassLoader.h): New target.
	* java/lang/natClassLoader.cc (_Jv_FindClass): Removed reference
	to `redirect'.

	* include/java-props.h (_Jv_Compiler_Properties): Changed
	declaration.
	* gcj/array.h (JvRunMain, _Jv_RunMain): Don't declare.
	* include/jvm.h (_Jv_GCSetInitialHeapSize,
	_Jv_GCSetMaximumHeapSize): Declare.
	(JvRunMain, _Jv_RunMain): Declare.
	(_Jv_SetMaximumHeapSize, _Jv_SetInitialHeapSize): Declare.
	* nogc.cc (_Jv_GCSetInitialHeapSize): New function.
	(_Jv_GCSetMaximumHeapSize): Likewise.
	* boehm.cc (_Jv_GCSetInitialHeapSize): New function.
	(_Jv_GCSetMaximumHeapSize): Likewise.
	* prims.cc (parse_heap_size): New function.
	(_Jv_SetInitialHeapSize): Likewise.
	(_Jv_SetMaximumHeapSize): Likewise.
	(_Jv_Compiler_Properties): New global.
	* gij.cc (help): New function.
	(version): Likewise.
	(heap_size): Likewise.
	(heap_max_size): Likewise.
	(main): Parse arguments.  Set _Jv_Compiler_Properties.
	Include <config.h>, <java-props.h>.
	(_Jv_Compiler_Properties): Removed.

From-SVN: r30133
This commit is contained in:
Tom Tromey 1999-10-22 19:43:41 +00:00 committed by Tom Tromey
parent 2fca54beb2
commit b8c3c4f014
11 changed files with 229 additions and 26 deletions

View File

@ -1,3 +1,33 @@
1999-10-22 Tom Tromey <tromey@cygnus.com>
* Makefile.in: Rebuilt.
* Makefile.am (java/lang/ClassLoader.h): New target.
* java/lang/natClassLoader.cc (_Jv_FindClass): Removed reference
to `redirect'.
* include/java-props.h (_Jv_Compiler_Properties): Changed
declaration.
* gcj/array.h (JvRunMain, _Jv_RunMain): Don't declare.
* include/jvm.h (_Jv_GCSetInitialHeapSize,
_Jv_GCSetMaximumHeapSize): Declare.
(JvRunMain, _Jv_RunMain): Declare.
(_Jv_SetMaximumHeapSize, _Jv_SetInitialHeapSize): Declare.
* nogc.cc (_Jv_GCSetInitialHeapSize): New function.
(_Jv_GCSetMaximumHeapSize): Likewise.
* boehm.cc (_Jv_GCSetInitialHeapSize): New function.
(_Jv_GCSetMaximumHeapSize): Likewise.
* prims.cc (parse_heap_size): New function.
(_Jv_SetInitialHeapSize): Likewise.
(_Jv_SetMaximumHeapSize): Likewise.
(_Jv_Compiler_Properties): New global.
* gij.cc (help): New function.
(version): Likewise.
(heap_size): Likewise.
(heap_max_size): Likewise.
(main): Parse arguments. Set _Jv_Compiler_Properties.
Include <config.h>, <java-props.h>.
(_Jv_Compiler_Properties): Removed.
1999-10-18 Tom Tromey <tromey@cygnus.com>
* gnu/gcj/runtime/VMClassLoader.java (getVMClassLoader): New

View File

@ -203,6 +203,11 @@ nat_headers = $(ordinary_java_source_files:.java=.h) \
$(nat_headers): libgcj.zip
java/lang/ClassLoader.h: java/lang/ClassLoader.class libgcj.zip
$(GCJH) -classpath $(top_builddir) \
-friend 'jclass _Jv_FindClass (_Jv_Utf8Const *name, java::lang::ClassLoader *loader);' \
$(basename $<)
## Our internal main program needs to be able to create a FirstThread.
java/lang/FirstThread.h: java/lang/FirstThread.class libgcj.zip
$(GCJH) -classpath $(top_builddir) \

View File

@ -1433,6 +1433,11 @@ $(javao_files): %.lo: %.java
$(nat_headers): libgcj.zip
java/lang/ClassLoader.h: java/lang/ClassLoader.class libgcj.zip
$(GCJH) -classpath $(top_builddir) \
-friend 'jclass _Jv_FindClass (_Jv_Utf8Const *name, java::lang::ClassLoader *loader);' \
$(basename $<)
java/lang/FirstThread.h: java/lang/FirstThread.class libgcj.zip
$(GCJH) -classpath $(top_builddir) \
-friend 'void JvRunMain (jclass, int, const char **);' \

View File

@ -392,6 +392,20 @@ _Jv_GCFreeMemory (void)
return sum;
}
void
_Jv_GCSetInitialHeapSize (size_t size)
{
size_t current = GC_get_heap_size ();
if (size > current)
GC_expand_hp (current - size);
}
void
_Jv_GCSetMaximumHeapSize (size_t size)
{
GC_set_max_heap_size ((GC_word) size);
}
void
_Jv_InitGC (void)
{

View File

@ -69,8 +69,6 @@ inline jobjectArray JvNewObjectArray (jsize length, jclass cls, jobject init)
{ return _Jv_NewObjectArray (length, cls, init); }
extern "C" jstringArray JvConvertArgv(int argc, const char **argv);
extern "C" void JvRunMain (jclass klass, int argc, const char **argv);
void _Jv_RunMain (const char* name, int argc, const char **argv);
inline jsize JvGetArrayLength (jarray array) { return array->length; }

View File

@ -8,27 +8,120 @@ details. */
/* Author: Kresten Krab Thorup <krab@gnu.org> */
#include <config.h>
#include <jvm.h>
#include <gcj/cni.h>
#include <java-props.h>
#include <stdio.h>
#include <string.h>
#include <java/lang/System.h>
#include <java/util/Properties.h>
// This is used to initialize the compiled-in system properties.
const char *_Jv_Compiler_Properties[] =
static void
help ()
{
NULL
};
printf ("Usage: gij [OPTION] ... CLASS [ARGS] ...\n\n");
printf ("Interpret Java bytecodes\n\n");
printf (" -DVAR=VAL define property VAR with value VAL\n");
printf (" --help print this help, then exit\n");
printf (" --ms=NUMBER set initial heap size\n");
printf (" --mx=NUMBER set maximum heap size\n");
printf (" --version print version number, then exit\n");
printf ("\nSee http://sourceware.cygnus.com/java/ for information on reporting bugs\n");
exit (0);
}
static void
version ()
{
printf ("gij (GNU libgcj) version %s\n\n", VERSION);
printf ("Copyright (C) 1999 Cygnus Solutions.\n");
printf ("This is free software; see the source for copying conditions. There is NO\n");
printf ("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
exit (0);
}
int
main (int argc, const char **argv)
{
if (argc < 2)
/* We rearrange ARGV so that all the -D options appear near the
beginning. */
int last_D_option = 0;
int i;
for (i = 1; i < argc; ++i)
{
printf ("usage: %s CLASS [ARGS]...\n", argv[0]);
const char *arg = argv[i];
/* A non-option stops processing. */
if (arg[0] != '-')
break;
/* A "--" stops processing. */
if (! strcmp (arg, "--"))
{
++i;
break;
}
if (! strncmp (arg, "-D", 2))
{
argv[last_D_option++] = arg + 2;
continue;
}
/* Allow both single or double hyphen for all remaining
options. */
if (arg[1] == '-')
++arg;
if (! strcmp (arg, "-help"))
help ();
else if (! strcmp (arg, "-version"))
version ();
/* FIXME: use getopt and avoid the ugliness here.
We at least need to handle the argument in a better way. */
else if (! strncmp (arg, "-ms=", 4))
_Jv_SetInitialHeapSize (arg + 4);
else if (! strcmp (arg, "-ms"))
{
if (i >= argc - 1)
{
no_argument:
fprintf (stderr, "gij: option requires an argument -- `%s'\n",
argv[i]);
fprintf (stderr, "Try `gij --help' for more information.\n");
exit (1);
}
_Jv_SetInitialHeapSize (argv[++i]);
}
else if (! strncmp (arg, "-mx=", 4))
_Jv_SetMaximumHeapSize (arg + 4);
else if (! strcmp (arg, "-mx"))
{
if (i >= argc - 1)
goto no_argument;
_Jv_SetMaximumHeapSize (argv[++i]);
}
else
{
fprintf (stderr, "gij: unrecognized option -- `%s'\n", argv[i]);
fprintf (stderr, "Try `gij --help' for more information.\n");
exit (1);
}
}
argv[last_D_option] = NULL;
_Jv_Compiler_Properties = argv;
if (argc - i < 1)
{
fprintf (stderr, "Usage: gij [OPTION] ... CLASS [ARGS] ...\n");
fprintf (stderr, "Try `gij --help' for more information.\n");
exit (1);
}
_Jv_RunMain (argv[1], argc - 1, argv + 1);
_Jv_RunMain (argv[i], argc - i, argv + i);
}

View File

@ -19,8 +19,8 @@ typedef struct
size_t value_length;
} property_pair;
// The compiler generates this declaration.
extern char *_Jv_Compiler_Properties[];
// Set to NULL-terminated list of properties set at compile time.
extern const char **_Jv_Compiler_Properties;
// Properties taken from the user's environment.
extern property_pair *_Jv_Environment_Properties;

View File

@ -83,9 +83,30 @@ long _Jv_GCTotalMemory (void);
/* Return approximation of total free memory. */
long _Jv_GCFreeMemory (void);
/* Set initial heap size. If SIZE==0, ignore. Should be run before
_Jv_InitGC. Not required to have any actual effect. */
void _Jv_GCSetInitialHeapSize (size_t size);
/* Set maximum heap size. If SIZE==0, unbounded. Should be run
before _Jv_InitGC. Not required to have any actual effect. */
void _Jv_GCSetMaximumHeapSize (size_t size);
/* External interface to setting the heap size. Parses ARG (a number
which can optionally have "k" or "m" appended and calls
_Jv_GCSetInitialHeapSize. */
void _Jv_SetInitialHeapSize (const char *arg);
/* External interface to setting the maximum heap size. Parses ARG (a
number which can optionally have "k" or "m" appended and calls
_Jv_GCSetMaximumHeapSize. */
void _Jv_SetMaximumHeapSize (const char *arg);
/* Allocate some unscanned bytes. Throw exception if out of memory. */
void *_Jv_AllocBytesChecked (jsize size);
extern "C" void JvRunMain (jclass klass, int argc, const char **argv);
void _Jv_RunMain (const char* name, int argc, const char **argv);
// This function is used to determine the hash code of an object.
inline jint
_Jv_HashCode (jobject obj)

View File

@ -447,20 +447,19 @@ jclass _Jv_FindClass (_Jv_Utf8Const *name,
}
else
{
if (redirect == NULL)
java::lang::ClassLoader *sys = java::lang::ClassLoader::system;
if (sys == NULL)
{
_Jv_InitClass (&ClassLoaderClass);
java::lang::ClassLoader::getSystemClassLoader ();
sys = java::lang::ClassLoader::getSystemClassLoader ();
}
// Load using the bootstrap loader jmspec 5.3.1
klass = redirect -> loadClass (sname, false);
// Load using the bootstrap loader jmspec 5.3.1.
klass = sys->loadClass (sname, false);
// register that we're an initiating loader
// Register that we're an initiating loader.
if (klass)
{
_Jv_RegisterInitiatingLoader (klass, 0);
}
_Jv_RegisterInitiatingLoader (klass, 0);
}
}
else

View File

@ -75,6 +75,16 @@ _Jv_GCFreeMemory (void)
return 0;
}
void
_Jv_GCSetInitialHeapSize (size_t size)
{
}
void
_Jv_GCSetMaximumHeapSize (size_t size)
{
}
void
_Jv_InitGC (void)
{

View File

@ -63,6 +63,9 @@ static java::lang::OutOfMemoryError *no_memory;
// Largest representable size_t.
#define SIZE_T_MAX ((size_t) (~ (size_t) 0))
// Properties set at compile time.
const char **_Jv_Compiler_Properties;
#ifndef DISABLE_GETENV_PROPERTIES
// Property key/value pairs.
property_pair *_Jv_Environment_Properties;
@ -811,6 +814,38 @@ _Jv_RunMain (const char *class_name, int argc, const char **argv)
java::lang::Runtime::getRuntime ()->exit (0);
}
// Parse a string and return a heap size.
static size_t
parse_heap_size (const char *spec)
{
char *end;
unsigned long val = strtoul (spec, &end, 10);
if (*spec == 'k' || *spec == 'K')
val *= 1000;
else if (*spec == 'm' || *spec == 'M')
val *= 1000000;
return (size_t) val;
}
// Set the initial heap size. This might be ignored by the GC layer.
// This must be called before _Jv_RunMain.
void
_Jv_SetInitialHeapSize (const char *arg)
{
size_t size = parse_heap_size (arg);
_Jv_GCSetInitialHeapSize (size);
}
// Set the maximum heap size. This might be ignored by the GC layer.
// This must be called before _Jv_RunMain.
void
_Jv_SetMaximumHeapSize (const char *arg)
{
size_t size = parse_heap_size (arg);
_Jv_GCSetMaximumHeapSize (size);
}
@ -885,10 +920,3 @@ _Jv_remJ (jlong dividend, jlong divisor)
return dividend % divisor;
}