summaryrefslogtreecommitdiff
path: root/libjava/gij.cc
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /libjava/gij.cc
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'libjava/gij.cc')
-rw-r--r--libjava/gij.cc334
1 files changed, 334 insertions, 0 deletions
diff --git a/libjava/gij.cc b/libjava/gij.cc
new file mode 100644
index 000000000..c04b1d889
--- /dev/null
+++ b/libjava/gij.cc
@@ -0,0 +1,334 @@
+/* Copyright (C) 1999-2007 Free Software Foundation
+
+ This file is part of libgcj.
+
+ This software is copyrighted work licensed under the terms of the
+ Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
+ details. */
+
+#include <config.h>
+
+#include <jvm.h>
+#include <gcj/cni.h>
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+static void
+help ()
+{
+ printf ("Usage: gij [OPTION] ... CLASS [ARGS] ...\n");
+ printf (" to interpret Java bytecodes, or\n");
+ printf (" gij -jar [OPTION] ... JARFILE [ARGS] ...\n");
+ printf (" to execute a jar file\n\n");
+ printf (" --cp LIST set class path\n");
+ printf (" --classpath LIST set class path\n");
+ printf (" -DVAR=VAL define property VAR with value VAL\n");
+ printf (" -?, --help print this help, then exit\n");
+ printf (" -X print help on supported -X options, then exit\n");
+ printf (" --ms=NUMBER set initial heap size\n");
+ printf (" --mx=NUMBER set maximum heap size\n");
+ printf (" --verbose[:class] print information about class loading\n");
+ printf (" --showversion print version number, then keep going\n");
+ printf (" --version print version number, then exit\n");
+ printf ("\nOptions can be specified with `-' or `--'.\n");
+ printf ("\nSee http://gcc.gnu.org/java/ for information on reporting bugs\n");
+ exit (0);
+}
+
+static void
+version ()
+{
+ printf ("java version \"" JV_VERSION "\"\n");
+ printf ("gij (GNU libgcj) version %s\n\n", __VERSION__);
+ printf ("Copyright (C) 2007 Free Software Foundation, Inc.\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");
+}
+
+static void
+nonstandard_opts_help ()
+{
+ printf (" -Xms<size> set initial heap size\n");
+ printf (" -Xmx<size> set maximum heap size\n");
+ printf (" -Xss<size> set thread stack size\n");
+ exit (0);
+}
+
+static void
+add_option (JvVMInitArgs& vm_args, char const* option, void const* extra)
+{
+ vm_args.options =
+ (JvVMOption*) JvRealloc (vm_args.options,
+ (vm_args.nOptions + 1) * sizeof (JvVMOption));
+
+ vm_args.options[vm_args.nOptions].optionString = const_cast<char*> (option);
+ vm_args.options[vm_args.nOptions].extraInfo = const_cast<void*> (extra);
+ ++vm_args.nOptions;
+}
+
+int
+main (int argc, char const** argv)
+{
+ JvVMInitArgs vm_args;
+ bool jar_mode = false;
+
+ vm_args.options = NULL;
+ vm_args.nOptions = 0;
+ vm_args.ignoreUnrecognized = true;
+
+ // Command-line options always override the CLASSPATH environment
+ // variable.
+ char *classpath = getenv("CLASSPATH");
+
+ if (classpath)
+ {
+ char* darg = (char*) JvMalloc (strlen (classpath)
+ + sizeof ("-Djava.class.path="));
+ sprintf (darg, "-Djava.class.path=%s", classpath);
+ add_option (vm_args, darg, NULL);
+ }
+
+ // Handle arguments to the java command. Store in vm_args arguments
+ // handled by the invocation API.
+ int i;
+ for (i = 1; i < argc; ++i)
+ {
+ char* arg = const_cast<char*> (argv[i]);
+
+ // A non-option stops processing.
+ if (arg[0] != '-')
+ break;
+
+ // A "--" stops processing.
+ if (! strcmp (arg, "--"))
+ {
+ ++i;
+ break;
+ }
+
+ // Allow both single or double hyphen for all options.
+ if (arg[1] == '-')
+ ++arg;
+
+ // Ignore JIT options
+ if (! strcmp (arg, "-client"))
+ continue;
+ else if (! strcmp (arg, "-server"))
+ continue;
+ else if (! strcmp (arg, "-hotspot"))
+ continue;
+ else if (! strcmp (arg, "-jrockit"))
+ continue;
+ // JVM Tool Interface options.
+ else if (! strncmp (arg, "-agentlib:", sizeof ("-agentlib:") - 1))
+ add_option (vm_args, arg, NULL);
+ else if (! strncmp (arg, "-agentpath:", sizeof ("-agentpath:") - 1))
+ add_option (vm_args, arg, NULL);
+ else if (! strcmp (arg, "-classpath") || ! strcmp (arg, "-cp"))
+ {
+ if (i >= argc - 1)
+ {
+ no_arg:
+ fprintf (stderr, "gij: option requires an argument -- `%s'\n",
+ argv[i]);
+ fprintf (stderr, "Try `gij --help' for more information.\n");
+ exit (1);
+ }
+
+ // Sun seems to translate the -classpath option into
+ // -Djava.class.path because if both -classpath and
+ // -Djava.class.path are specified on the java command line,
+ // the last one always wins.
+ char* darg = (char*) JvMalloc (strlen (argv[++i])
+ + sizeof ("-Djava.class.path="));
+ sprintf (darg, "-Djava.class.path=%s", argv[i]);
+ add_option (vm_args, darg, NULL);
+ }
+ else if (! strcmp (arg, "-debug"))
+ {
+ char* xarg = strdup ("-Xdebug");
+ add_option (vm_args, xarg, NULL);
+ }
+ else if (! strncmp (arg, "-D", sizeof ("-D") - 1))
+ add_option (vm_args, arg, NULL);
+ // Ignore 32/64-bit JIT options
+ else if (! strcmp (arg, "-d32") || ! strcmp (arg, "-d64"))
+ continue;
+ else if (! strncmp (arg, "-enableassertions", sizeof ("-enableassertions") - 1)
+ || ! strncmp (arg, "-ea", sizeof ("-ea") - 1))
+ {
+ // FIXME: hook up assertion support
+ continue;
+ }
+ else if (! strncmp (arg, "-disableassertions", sizeof ("-disableassertions") - 1)
+ || ! strncmp (arg, "-da", sizeof ("-da") - 1))
+ {
+ // FIXME: hook up assertion support
+ continue;
+ }
+ else if (! strcmp (arg, "-enablesystemassertions")
+ || ! strcmp (arg, "-esa"))
+ {
+ // FIXME: hook up system assertion support
+ continue;
+ }
+ else if (! strcmp (arg, "-disablesystemassertions")
+ || ! strcmp (arg, "-dsa"))
+ {
+ // FIXME
+ continue;
+ }
+ else if (! strcmp (arg, "-jar"))
+ {
+ jar_mode = true;
+ continue;
+ }
+ // Ignore java.lang.instrument option
+ else if (! strncmp (arg, "-javaagent:", sizeof ("-javaagent:") - 1))
+ continue;
+ else if (! strcmp (arg, "-noclassgc"))
+ {
+ char* xarg = strdup ("-Xnoclassgc");
+ add_option (vm_args, xarg, NULL);
+ }
+ // -ms=n
+ else if (! strncmp (arg, "-ms=", sizeof ("-ms=") - 1))
+ {
+ arg[1] = 'X';
+ arg[2] = 'm';
+ arg[3] = 's';
+ add_option (vm_args, arg, NULL);
+ }
+ // -ms n
+ else if (! strcmp (arg, "-ms"))
+ {
+ if (i >= argc - 1)
+ goto no_arg;
+
+ char* xarg = (char*) JvMalloc (strlen (argv[++i])
+ + sizeof ("-Xms"));
+ sprintf (xarg, "-Xms%s", argv[i]);
+ add_option (vm_args, xarg, NULL);
+ }
+ // -msn
+ else if (! strncmp (arg, "-ms", sizeof ("-ms") - 1))
+ {
+ char* xarg = (char*) JvMalloc (strlen (arg) + sizeof ("X"));
+ sprintf (xarg, "-Xms%s", arg + sizeof ("-Xms") - 1);
+ add_option (vm_args, xarg, NULL);
+ }
+ // -mx=n
+ else if (! strncmp (arg, "-mx=", sizeof ("-mx=") - 1))
+ {
+ arg[1] = 'X';
+ arg[2] = 'm';
+ arg[3] = 'x';
+ add_option (vm_args, arg, NULL);
+ }
+ // -mx n
+ else if (! strcmp (arg, "-mx"))
+ {
+ if (i >= argc - 1)
+ goto no_arg;
+
+ char* xarg = (char*) JvMalloc (strlen (argv[++i])
+ + sizeof ("-Xmx"));
+ sprintf (xarg, "-Xmx%s", argv[i]);
+ add_option (vm_args, xarg, NULL);
+ }
+ // -mxn
+ else if (! strncmp (arg, "-mx", sizeof ("-mx") - 1))
+ {
+ char* xarg = (char*) JvMalloc (strlen (arg) + sizeof ("X"));
+ sprintf (xarg, "-Xmx%s", arg + sizeof ("-Xmx") - 1);
+ add_option (vm_args, xarg, NULL);
+ }
+ // -ss=n
+ else if (! strncmp (arg, "-ss=", sizeof ("-ss=") - 1))
+ {
+ arg[1] = 'X';
+ arg[2] = 's';
+ arg[3] = 's';
+ add_option (vm_args, arg, NULL);
+ }
+ // -ss n
+ else if (! strcmp (arg, "-ss"))
+ {
+ if (i >= argc - 1)
+ goto no_arg;
+
+ char* xarg = (char*) JvMalloc (strlen (argv[++i])
+ + sizeof ("-Xss"));
+ sprintf (xarg, "-Xss%s", argv[i]);
+ add_option (vm_args, xarg, NULL);
+ }
+ // -ssn
+ else if (! strncmp (arg, "-ss", sizeof ("-ss") - 1))
+ {
+ char* xarg = (char*) JvMalloc (strlen (arg) + sizeof ("X"));
+ sprintf (xarg, "-Xss%s", arg + sizeof ("-Xss") - 1);
+ add_option (vm_args, xarg, NULL);
+ }
+ // This handles all the option variants that begin with
+ // -verbose.
+ else if (! strncmp (arg, "-verbose", 8))
+ add_option (vm_args, arg, NULL);
+ else if (! strcmp (arg, "-version"))
+ {
+ version ();
+ exit (0);
+ }
+ else if (! strcmp (arg, "-fullversion"))
+ {
+ printf ("java full version \"gcj-" JV_VERSION "\"\n");
+ exit (0);
+ }
+ else if (! strcmp (arg, "-showversion"))
+ version ();
+ else if (! strcmp (arg, "-help") || ! strcmp (arg, "-?"))
+ help ();
+ else if (! strcmp (arg, "-X"))
+ nonstandard_opts_help ();
+ else if (! strncmp (arg, "-X", 2))
+ add_option (vm_args, arg, NULL);
+ // Obsolete options recognized for backwards-compatibility.
+ else if (! strcmp (arg, "-verify")
+ || ! strcmp (arg, "-verifyremote"))
+ continue;
+ else if (! strcmp (arg, "-noverify"))
+ {
+ gcj::verifyClasses = false;
+ }
+ else
+ {
+ fprintf (stderr, "gij: unrecognized option -- `%s'\n", argv[i]);
+ fprintf (stderr, "Try `gij --help' for more information.\n");
+ exit (1);
+ }
+ }
+
+ if (argc - i < 1)
+ {
+ fprintf (stderr, "Usage: gij [OPTION] ... CLASS [ARGS] ...\n");
+ fprintf (stderr, " to invoke CLASS.main, or\n");
+ fprintf (stderr, " gij -jar [OPTION] ... JARFILE [ARGS] ...\n");
+ fprintf (stderr, " to execute a jar file\n");
+ fprintf (stderr, "Try `gij --help' for more information.\n");
+ exit (1);
+ }
+
+ // -jar mode overrides all other modes of specifying class path:
+ // CLASSPATH, -Djava.class.path, -classpath and -cp.
+ if (jar_mode)
+ {
+ char* darg = (char*) JvMalloc (strlen (argv[i])
+ + sizeof ("-Djava.class.path="));
+ sprintf (darg, "-Djava.class.path=%s", argv[i]);
+ add_option (vm_args, darg, NULL);
+ }
+
+ _Jv_RunMain (&vm_args, NULL, argv[i], argc - i,
+ (char const**) (argv + i), jar_mode);
+}