diff options
author | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
---|---|---|
committer | upstream source tree <ports@midipix.org> | 2015-03-15 20:14:05 -0400 |
commit | 554fd8c5195424bdbcabf5de30fdc183aba391bd (patch) | |
tree | 976dc5ab7fddf506dadce60ae936f43f58787092 /libjava/gij.cc | |
download | cbb-gcc-4.6.4-15d2061ac0796199866debe9ac87130894b0cdd3.tar.bz2 cbb-gcc-4.6.4-15d2061ac0796199866debe9ac87130894b0cdd3.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.cc | 334 |
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); +} |