OSDN Git Service

contrib:
[pf3gnuchains/gcc-fork.git] / gcc / java / gcj.texi
index ae7bcb7..40e1cd6 100644 (file)
 @c the word ``Java'.
 
 @c When this manual is copyrighted.
-@set copyrights-gcj 2001, 2002, 2003, 2004, 2005
-
-@c Versions
-@set which-gcj GCC-@value{version-GCC}
+@set copyrights-gcj 2001, 2002, 2003, 2004, 2005, 2006, 2007
 
 @copying
 @c man begin COPYRIGHT
@@ -57,19 +54,13 @@ man page gfdl(7).
 
 @ifinfo
 @format
-@dircategory Programming
+@dircategory Software development
 @direntry
 * Gcj: (gcj).               Ahead-of-time compiler for the Java language
 @end direntry
 
 @dircategory Individual utilities
 @direntry
-* gcjh: (gcj)Invoking gcjh.
-                            Generate header files from Java class files
-* gjnih: (gcj)Invoking gjnih.
-                            Generate JNI header files from Java class files
-* jv-scan: (gcj)Invoking jv-scan.
-                            Print information about Java source files
 * jcf-dump: (gcj)Invoking jcf-dump.
                             Print information about Java class files
 * gij: (gcj)Invoking gij.   GNU interpreter for Java bytecode
@@ -79,8 +70,8 @@ man page gfdl(7).
                             Convert file from one encoding to another
 * grmic: (gcj)Invoking grmic.
                             Generate stubs for Remote Method Invocation.
-* grmiregistry: (gcj)Invoking grmiregistry.
-                            The remote object registry.
+* gc-analyze: (gcj)Invoking gc-analyze.
+                            Analyze Garbage Collector (GC) memory dumps.
 @end direntry
 @end format
 
@@ -89,12 +80,11 @@ man page gfdl(7).
 
 @titlepage
 @title GNU gcj
+@versionsubtitle
 @author Tom Tromey
 
 @page
 @vskip 0pt plus 1filll
-For the @value{which-gcj} Version*
-@sp 1
 Published by the Free Software Foundation @*
 51 Franklin Street, Fifth Floor@*
 Boston, MA 02110-1301, USA@*
@@ -119,15 +109,12 @@ files and object files, and it can read both Java source code and
                        How you can share and copy this manual
 * Invoking gcj::       Compiler options supported by @command{gcj}
 * Compatibility::      Compatibility between gcj and other tools for Java
-* Invoking gcjh::       Generate header files from class files
-* Invoking gjnih::      Generate JNI header files from class files
-* Invoking jv-scan::    Print information about source files
 * Invoking jcf-dump::   Print information about class files
 * Invoking gij::       Interpreting Java bytecodes
 * Invoking gcj-dbtool:: Tool for manipulating class file databases.
 * Invoking jv-convert:: Converting from one encoding to another
 * Invoking grmic::      Generate stubs for Remote Method Invocation.
-* Invoking grmiregistry:: The remote object registry.
+* Invoking gc-analyze:: Analyze Garbage Collector (GC) memory dumps.
 * About CNI::           Description of the Compiled Native Interface
 * System properties::   Modifying runtime behavior of the libgcj library
 * Resources::          Where to look for more information
@@ -135,7 +122,7 @@ files and object files, and it can read both Java source code and
 @end menu
 
 
-@include gpl.texi
+@include gpl_v3.texi
 
 @include fdl.texi
 
@@ -156,7 +143,7 @@ gcj [@option{-I}@var{dir}@dots{}] [@option{-d} @var{dir}@dots{}]
     @var{sourcefile}@dots{}
 @c man end
 @c man begin SEEALSO gcj
-gcc(1), gcjh(1), gjnih(1), gij(1), jv-scan(1), jcf-dump(1), gfdl(7),
+gcc(1), gcjh(1), gjnih(1), gij(1), jcf-dump(1), gfdl(7),
 and the Info entries for @file{gcj} and @file{gcc}.
 @c man end
 @end ignore
@@ -239,7 +226,7 @@ searches the class path looking for matching @file{.class} or
 points at the installed @file{libgcj.jar}, a file which contains all the
 standard classes.
 
-In the below, a directory or path component can refer either to an
+In the text below, a directory or path component can refer either to an
 actual directory on the filesystem, or to a @file{.zip} or @file{.jar}
 file, which @command{gcj} will search as if it is a directory.
 
@@ -305,6 +292,10 @@ behavior in this particular case.)
 This forces the compiler to always check for the special zero length
 attribute @code{gnu.gcj.gcj-compiled} in @code{java.lang.Object} and
 issue an error if it isn't found.
+
+@item -fsource=@var{VERSION}
+This option is used to choose the source version accepted by
+@command{gcj}.  The default is @samp{1.5}.
 @end table
 
 @node Encodings
@@ -457,6 +448,11 @@ instance, it could be used in a call to @code{ResourceBundle.getBundle}.
 The actual file name to be compiled this way must be specified
 separately.
 
+@item -ftarget=@var{VERSION}
+This can be used with @option{-C} to choose the version of bytecode
+emitted by @command{gcj}.  The default is @samp{1.5}.  When not
+generating bytecode, this option has no effect.
+
 @item -d @var{directory}
 When used with @code{-C}, this causes all generated @file{.class} files
 to be put in the appropriate subdirectory of @var{directory}.  By
@@ -670,16 +666,26 @@ added are to facilitate this functionality.
 @xref{About CNI}, for more info on how to use this in your programs.
 
 @item
-When you compile your classes into a shared library they can be automatically
-loaded by the @code{libgcj} system classloader.  When trying to load a class
-@code{gnu.pkg.SomeClass} the system classloader will first try to load the
-shared library @file{lib-gnu-pkg-SomeClass.so}, if that fails to load the
-class then it will try to load @file{lib-gnu-pkg.so} and finally when the
-class is still not loaded it will try to load @file{lib-gnu.so}.  Note that
+When you compile your classes into a shared library using
+@code{-findirect-dispatch} then add them to the system-wide
+classmap.db file using @code{gcj-dbtool}, they will be automatically
+loaded by the @code{libgcj} system classloader.  This is the new,
+preferred classname-to-library resolution mechanism.  @xref{Invoking
+gcj-dbtool}, for more information on using the classmap database.
+
+@item
+The old classname-to-library lookup mechanism is still supported
+through the @code{gnu.gcj.runtime.VMClassLoader.library_control}
+property, but it is deprecated and will likely be removed in some
+future release.  When trying to load a class @code{gnu.pkg.SomeClass}
+the system classloader will first try to load the shared library
+@file{lib-gnu-pkg-SomeClass.so}, if that fails to load the class then
+it will try to load @file{lib-gnu-pkg.so} and finally when the class
+is still not loaded it will try to load @file{lib-gnu.so}.  Note that
 all @samp{.}s will be transformed into @samp{-}s and that searching
-for inner classes starts with their outermost outer class.  If the class
-cannot be found this way the system classloader tries to use
-the @code{libgcj} bytecode interpreter to load the class from the standard
+for inner classes starts with their outermost outer class.  If the
+class cannot be found this way the system classloader tries to use the
+@code{libgcj} bytecode interpreter to load the class from the standard
 classpath.  This process can be controlled to some degree via the
 @code{gnu.gcj.runtime.VMClassLoader.library_control} property;
 @xref{libgcj Runtime Properties}.
@@ -712,299 +718,6 @@ setting.
 @end itemize
 
 
-@node Invoking gcjh
-@chapter Invoking gcjh
-
-@c man title gcjh generate header files from Java class files
-
-@c man begin DESCRIPTION gcjh
-
-The @code{gcjh} program is used to generate header files from class
-files.  It can generate both CNI and JNI header files, as well as stub
-implementation files which can be used as a basis for implementing the
-required native methods.
-
-@c man end
-
-@ignore
-@c man begin SYNOPSIS gcjh
-gcjh [@option{-stubs}] [@option{-jni}]
-    [@option{-force}] [@option{-old}] [@option{-trace}] [@option{-J} @var{option}]
-    [@option{-add} @var{text}] [@option{-append} @var{text}] [@option{-friend} @var{text}]
-    [@option{-preprend} @var{text}]
-    [@option{--classpath}=@var{path}] [@option{--CLASSPATH}=@var{path}]
-    [@option{--bootclasspath}=@var{path}]
-    [@option{-I}@var{dir}@dots{}] [@option{-d} @var{dir}@dots{}]
-    [@option{-o} @var{file}] [@option{-td} @var{dir}]
-    [@option{-M}] [@option{-MM}] [@option{-MD}] [@option{-MMD}]
-    [@option{--version}] [@option{--help}] [@option{-v}] [@option{--verbose}]
-    @var{classname}@dots{}
-@c man end
-@c man begin SEEALSO gcjh
-gcc(1), gcj(1), gij(1), jv-scan(1), jcf-dump(1), gfdl(7),
-and the Info entries for @file{gcj} and @file{gcc}.
-@c man end
-@end ignore
-
-@c man begin OPTIONS gcjh
-
-@table @gcctabopt
-@item -stubs
-This causes @code{gcjh} to generate stub files instead of header files.
-By default the stub file will be named after the class, with a suffix of
-@samp{.cc}.  In JNI mode, the default output file will have the suffix
-@samp{.c}.
-
-@item -jni
-This tells @code{gcjh} to generate a JNI header or stub.  By default,
-CNI headers are generated.
-
-@item -force
-This option forces @code{gcjh} to write the output file.
-
-@item -old
-This option is accepted but ignored for compatibility.
-
-@item -trace
-This option is accepted but ignored for compatibility.
-
-@item -J @var{option}
-This option is accepted but ignored for compatibility.
-
-@item -add @var{text}
-Inserts @var{text} into the class body.  This is ignored in JNI mode.
-
-@item -append @var{text}
-Inserts @var{text} into the header file after the class declaration.
-This is ignored in JNI mode.
-
-@item -friend @var{text}
-Inserts @var{text} into the class as a @code{friend} declaration.
-This is ignored in JNI mode.
-
-@item -prepend @var{text}
-Inserts @var{text} into the header file before the class declaration.
-This is ignored in JNI mode.
-
-@item --classpath=@var{path}
-@itemx --CLASSPATH=@var{path}
-@itemx --bootclasspath=@var{path}
-@itemx -I@var{directory}
-@itemx -d @var{directory}
-@itemx -o @var{file}
-These options are all identical to the corresponding @command{gcj} options.
-
-@item -o @var{file}
-Sets the output file name.  This cannot be used if there is more than
-one class on the command line.
-
-@item -td @var{directory}
-Sets the name of the directory to use for temporary files.
-
-@item -M
-Print all dependencies to stdout; suppress ordinary output.
-
-@item -MM
-Print non-system dependencies to stdout; suppress ordinary output.
-
-@item -MD
-Print all dependencies to stdout.
-
-@item -MMD
-Print non-system dependencies to stdout.
-
-@item --help
-Print help about @code{gcjh} and exit.  No further processing is done.
-
-@item --version
-Print version information for @code{gcjh} and exit.  No further
-processing is done.
-
-@item -v, --verbose
-Print extra information while running.
-@end table
-
-All remaining options are considered to be names of classes.
-
-@c man end
-
-@node Invoking gjnih
-@chapter Invoking gjnih
-
-@c man title gjnih generate JNI header files from Java class files
-
-@c man begin DESCRIPTION gjnih
-
-The @code{gjnih} program is used to generate JNI header files from class
-files.  Running it is equivalent to running @code{gcjh -jni}.
-
-@c man end
-
-@ignore
-@c man begin SYNOPSIS gjnih
-gjnih [@option{-stubs}] [@option{-jni}]
-    [@option{-force}] [@option{-old}] [@option{-trace}] [@option{-J} @var{option}]
-    [@option{-add} @var{text}] [@option{-append} @var{text}] [@option{-friend} @var{text}]
-    [@option{-preprend} @var{text}]
-    [@option{--classpath}=@var{path}] [@option{--CLASSPATH}=@var{path}]
-    [@option{--bootclasspath}=@var{path}]
-    [@option{-I}@var{dir}@dots{}] [@option{-d} @var{dir}@dots{}]
-    [@option{-o} @var{file}] [@option{-td} @var{dir}]
-    [@option{-M}] [@option{-MM}] [@option{-MD}] [@option{-MMD}]
-    [@option{--version}] [@option{--help}] [@option{-v}] [@option{--verbose}]
-    @var{classname}@dots{}
-@c man end
-@c man begin SEEALSO gjnih
-gcc(1), gcj(1), gcjh(1), gij(1), jv-scan(1), jcf-dump(1), gfdl(7),
-and the Info entries for @file{gcj} and @file{gcc}.
-@c man end
-@end ignore
-
-@c man begin OPTIONS gjnih
-
-@table @gcctabopt
-@item -stubs
-This causes @code{gjnih} to generate stub files instead of header files.
-By default the stub file will be named after the class, with a suffix of
-@samp{.c}.
-
-@item -jni
-This option specifies the default behavior which is to generate a JNI
-header or stub.
-
-@item -force
-This option forces @code{gjnih} to write the output file.
-
-@item -old
-This option is accepted but ignored for compatibility.
-
-@item -trace
-This option is accepted but ignored for compatibility.
-
-@item -J @var{option}
-This option is accepted but ignored for compatibility.
-
-@item -add @var{text}
-Inserts @var{text} into the class body.  This is ignored in by
-@code{gjnih}.
-
-@item -append @var{text}
-Inserts @var{text} into the header file after the class declaration.
-This is ignored in by @code{gjnih}.
-
-@item -friend @var{text}
-Inserts @var{text} into the class as a @code{friend} declaration.
-This is ignored by @code{gjnih}.
-
-@item -prepend @var{text}
-Inserts @var{text} into the header file before the class declaration.
-This is ignored in by @code{gjnih}.
-
-@item --classpath=@var{path}
-@itemx --CLASSPATH=@var{path}
-@itemx --bootclasspath=@var{path}
-@itemx -I@var{directory}
-@itemx -d @var{directory}
-@itemx -o @var{file}
-These options are all identical to the corresponding @command{gcj} options.
-
-@item -o @var{file}
-Sets the output file name.  This cannot be used if there is more than
-one class on the command line.
-
-@item -td @var{directory}
-Sets the name of the directory to use for temporary files.
-
-@item -M
-Print all dependencies to stdout; suppress ordinary output.
-
-@item -MM
-Print non-system dependencies to stdout; suppress ordinary output.
-
-@item -MD
-Print all dependencies to stdout.
-
-@item -MMD
-Print non-system dependencies to stdout.
-
-@item --help
-Print help about @code{gjnih} and exit.  No further processing is done.
-
-@item --version
-Print version information for @code{gjnih} and exit.  No further
-processing is done.
-
-@item -v, --verbose
-Print extra information while running.
-@end table
-
-All remaining options are considered to be names of classes.
-
-@c man end
-
-@node Invoking jv-scan
-@chapter Invoking jv-scan
-
-@c man title jv-scan print information about Java source file
-
-@c man begin DESCRIPTION jv-scan
-
-The @code{jv-scan} program can be used to print information about a Java
-source file (@file{.java} file).
-
-@c man end
-
-@ignore
-@c man begin SYNOPSIS jv-scan
-jv-scan [@option{--no-assert}] [@option{--complexity}] 
-    [@option{--encoding}=@var{name}] [@option{--print-main}] 
-    [@option{--list-class}] [@option{--list-filename}]
-    [@option{--version}] [@option{--help}]
-    [@option{-o} @var{file}] @var{inputfile}@dots{}
-@c man end
-@c man begin SEEALSO jv-scan
-gcc(1), gcj(1), gcjh(1), gij(1), jcf-dump(1), gfdl(7),
-and the Info entries for @file{gcj} and @file{gcc}.
-@c man end
-@end ignore
-
-@c man begin OPTIONS jv-scan
-
-@table @gcctabopt
-@item --no-assert
-Don't recognize the @code{assert} keyword, for backwards compatibility
-with older versions of the language specification.
-
-@item --complexity
-This prints a complexity measure, related to cyclomatic complexity, for
-each input file.
-
-@item --encoding=@var{name}
-This works like the corresponding @command{gcj} option.
-
-@item --print-main
-This prints the name of the class in this file containing a @code{main}
-method.
-
-@item --list-class
-This lists the names of all classes defined in the input files.
-
-@item --list-filename
-If @code{--list-class} is given, this option causes @code{jv-scan} to
-also print the name of the file in which each class was found.
-
-@item -o @var{file}
-Print output to the named file.
-
-@item --help
-Print help, then exit.
-
-@item --version
-Print version number, then exit.
-@end table
-
-@c man end
-
 @node Invoking jcf-dump
 @chapter Invoking jcf-dump
 
@@ -1082,7 +795,7 @@ gij [@option{-jar}] [@option{OPTION}] @dots{} @var{CLASS} [@var{ARGS}@dots{}]
   [@option{--showversion}] [@option{--version}] [@option{--help}][@option{-?}]
 @c man end
 @c man begin SEEALSO gij
-gcc(1), gcj(1), gcjh(1), jv-scan(1), jcf-dump(1), gfdl(7),
+gcc(1), gcj(1), gcjh(1), jcf-dump(1), gfdl(7),
 and the Info entries for @file{gcj} and @file{gcc}.
 @c man end
 @end ignore
@@ -1209,7 +922,7 @@ gcj-dbtool [@option{-0}] [@option{-}] [@option{-n}] [@option{-a}] [@option{-f}]
 
 @c man end
 @c man begin SEEALSO gij
-gcc(1), gcj(1), gcjh(1), jv-scan(1), jcf-dump(1), gfdl(7),
+gcc(1), gcj(1), gcjh(1), jcf-dump(1), gfdl(7),
 and the Info entries for @file{gcj} and @file{gcc}.
 @c man end
 @end ignore
@@ -1423,32 +1136,80 @@ Print version information, then exit.
 @c man end
 
 
-@node Invoking grmiregistry
-@chapter Invoking grmiregistry
+@node Invoking gc-analyze
+@chapter Invoking gc-analyze
 
-@c man title grmiregistry Remote object registry
+@c man title gc-analyze Analyze Garbage Collector (GC) memory dumps
 
-@c man begin SYNOPSIS grmiregistry
-@command{grmic} [@option{OPTION}] @dots{} [@var{port}]
+@c man begin SYNOPSIS gc-analyze
+@command{gc-analyze} [@option{OPTION}] @dots{} [@var{file}]
 @ignore
-  [@option{--help}]
+  [@option{-v}]
+  [@option{--verbose}]
+  [@option{-p} @var{tool-prefix}]
+  [@option{-d} @var{directory}]
   [@option{--version}]
+  [@option{--help}]
 @end ignore
 @c man end
 
-@c man begin DESCRIPTION grmiregistry
+@c man begin DESCRIPTION gc-analyze
 
-@command{grmiregistry} starts a remote object registry on the current
-host.  If no port number is specified, then port 1099 is used.
+@command{gc-analyze} prints an analysis of a GC memory dump to
+standard out.
+
+The memory dumps may be created by calling
+@code{gnu.gcj.util.GCInfo.enumerate(String namePrefix)} from java
+code.  A memory dump will be created on an out of memory condition if
+@code{gnu.gcj.util.GCInfo.setOOMDump(String namePrefix)} is called
+before the out of memory occurs.
+
+Running this program will create two files: @file{TestDump001} and
+@file{TestDump001.bytes}.
+
+@example
+import gnu.gcj.util.*;
+import java.util.*;
+
+public class GCDumpTest
+@{
+    static public void main(String args[])
+    @{
+        ArrayList<String> l = new ArrayList<String>(1000);
+        
+        for (int i = 1; i < 1500; i++) @{
+            l.add("This is string #" + i);
+        @}
+        GCInfo.enumerate("TestDump");
+    @}
+@}
+@end example
+
+The memory dump may then be displayed by running:
+
+@example
+gc-analyze -v TestDump001
+@end example
 
 @c FIXME: Add real information here.
 @c This really isn't much more than the --help output.
 
 @c man end
 
-@c man begin OPTIONS grmiregistry
+@c man begin OPTIONS gc-analyze
 
 @table @gcctabopt
+@item --verbose
+@itemx -v
+Verbose output.
+
+@item -p @var{tool-prefix}
+Prefix added to the names of the @command{nm} and @command{readelf} commands.
+
+@item -d @var{directory}
+Directory that contains the executable and shared libraries used when
+the dump was generated.
+
 @item --help
 Print a help message, then exit.
 
@@ -1458,7 +1219,6 @@ Print version information, then exit.
 
 @c man end
 
-
 @node About CNI
 @chapter About CNI
 
@@ -2009,7 +1769,7 @@ JvNewBooleanArray
 @noindent The following function definition is the template for all such functions:
 
 @deftypefun jbooleanArray JvNewBooleanArray (jint @var{length})
-Create's an array @var{length} indices long.
+Creates an array @var{length} indices long.
 @end deftypefun
 
 @deftypefun jsize JvGetArrayLength (jarray @var{array})
@@ -2130,9 +1890,9 @@ working with Java Java @code{String} objects.
 The names and interfaces are analogous to those of @acronym{JNI}.
 
 
-@deftypefun jstring JvNewString (const char* @var{chars}, jsize @var{len})
-Returns a Java @code{String} object with characters from the C string
-@var{chars} up to the index @var{len} in that array.
+@deftypefun jstring JvNewString (const jchar* @var{chars}, jsize @var{len})
+Returns a Java @code{String} object with characters from the array of 
+Unicode characters @var{chars} up to the index @var{len} in that array.
 @end deftypefun
 
 @deftypefun jstring JvNewStringLatin1 (const char* @var{bytes}, jsize @var{len})
@@ -2497,7 +2257,7 @@ is detached from the runtime once it has finished making Java calls. Everything
 is wrapped with a try/catch block to provide a default handler for any uncaught 
 exceptions.
 
-The example can be compiled with @command{c++ test.cc -lgcj}.
+The example can be compiled with @command{c++ -c test.cc; gcj test.o}.
 
 @example
 // test.cc
@@ -2506,7 +2266,7 @@ The example can be compiled with @command{c++ test.cc -lgcj}.
 #include <java/io/PrintStream.h>
 #include <java/lang/Throwable.h>
 
-int main(int argc, char *argv)
+int main(int argc, char *argv[])
 @{
   using namespace java::lang;
   
@@ -2775,6 +2535,12 @@ the name of the "main" class in the case where the @code{gij} front end is
 used, or the program binary name in the case where an application is compiled 
 to a native binary.
 
+@item gnu.gcj.user.realname
+The real name of the user, as taken from the password file.  This may
+not always hold only the user's name (as some sites put extra
+information in this field).  Also, this property is not available on
+all platforms.
+
 @item gnu.gcj.runtime.NameFinder.use_addr2line
 Whether an external process, @command{addr2line}, should be used to determine
 line number information when tracing the stack. Setting this to @code{false} 
@@ -2783,12 +2549,27 @@ the java.util.logging infrastructure. However, performance may improve
 significantly for applications that print stack traces or make logging calls
 frequently.
 
+@item gnu.gcj.runtime.NameFinder.show_raw
+Whether the address of a stack frame should be printed when the line
+number is unavailable. Setting this to @code{true} will cause the name
+of the object and the offset within that object to be printed when no
+line number is available.  This allows for off-line decoding of
+stack traces if necessary debug information is available.  The default
+is @code{false}, no raw addresses are printed.
+
+@item gnu.gcj.runtime.NameFinder.remove_unknown
+Whether stack frames for non-java code should be included in a stack
+trace.  The default value is @code{true}, stack frames for non-java
+code are suppressed.  Setting this to @code{false} will cause any
+non-java stack frames to be printed in addition to frames for the java
+code.
+
 @item gnu.gcj.runtime.VMClassLoader.library_control
 This controls how shared libraries are automatically loaded by the
 built-in class loader.  If this property is set to @samp{full}, a full
 search is done for each requested class.  If this property is set to
-@samp{cache} (the default), then any failed lookups are cached and not
-tried again.  If this property is set to @samp{never}, then lookups
+@samp{cache}, then any failed lookups are cached and not tried again.
+If this property is set to @samp{never} (the default), then lookups
 are never done.  For more information, @xref{Extensions}.
 
 @item gnu.gcj.runtime.endorsed.dirs