xref: /openbsd/gnu/gcc/gcc/doc/gcj.info (revision e5dd7070)
1This is doc/gcj.info, produced by makeinfo version 4.8 from
2/scratch/mitchell/gcc-releases/gcc-4.2.1/gcc-4.2.1/gcc/java/gcj.texi.
3
4   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation,
5Inc.
6
7   Permission is granted to copy, distribute and/or modify this document
8under the terms of the GNU Free Documentation License, Version 1.2 or
9any later version published by the Free Software Foundation; with the
10Invariant Sections being "GNU General Public License", the Front-Cover
11texts being (a) (see below), and with the Back-Cover Texts being (b)
12(see below).  A copy of the license is included in the section entitled
13"GNU Free Documentation License".
14
15   (a) The FSF's Front-Cover Text is:
16
17   A GNU Manual
18
19   (b) The FSF's Back-Cover Text is:
20
21   You have freedom to copy and modify this GNU Manual, like GNU
22software.  Copies published by the Free Software Foundation raise
23funds for GNU development.
24
25INFO-DIR-SECTION Software development
26START-INFO-DIR-ENTRY
27* Gcj: (gcj).               Ahead-of-time compiler for the Java language
28END-INFO-DIR-ENTRY
29
30INFO-DIR-SECTION Individual utilities
31START-INFO-DIR-ENTRY
32* gcjh: (gcj)Invoking gcjh.
33                            Generate header files from Java class files
34* gjnih: (gcj)Invoking gjnih.
35                            Generate JNI header files from Java class files
36* jv-scan: (gcj)Invoking jv-scan.
37                            Print information about Java source files
38* jcf-dump: (gcj)Invoking jcf-dump.
39                            Print information about Java class files
40* gij: (gcj)Invoking gij.   GNU interpreter for Java bytecode
41* gcj-dbtool: (gcj)Invoking gcj-dbtool.
42                            Tool for manipulating class file databases.
43* jv-convert: (gcj)Invoking jv-convert.
44                            Convert file from one encoding to another
45* grmic: (gcj)Invoking grmic.
46                            Generate stubs for Remote Method Invocation.
47* grmiregistry: (gcj)Invoking grmiregistry.
48                            The remote object registry.
49END-INFO-DIR-ENTRY
50
51   Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation,
52Inc.
53
54   Permission is granted to copy, distribute and/or modify this document
55under the terms of the GNU Free Documentation License, Version 1.2 or
56any later version published by the Free Software Foundation; with the
57Invariant Sections being "GNU General Public License", the Front-Cover
58texts being (a) (see below), and with the Back-Cover Texts being (b)
59(see below).  A copy of the license is included in the section entitled
60"GNU Free Documentation License".
61
62   (a) The FSF's Front-Cover Text is:
63
64   A GNU Manual
65
66   (b) The FSF's Back-Cover Text is:
67
68   You have freedom to copy and modify this GNU Manual, like GNU
69software.  Copies published by the Free Software Foundation raise
70funds for GNU development.
71
72
73File: gcj.info,  Node: Top,  Next: Copying,  Up: (dir)
74
75Introduction
76************
77
78This manual describes how to use `gcj', the GNU compiler for the Java
79programming language.  `gcj' can generate both `.class' files and
80object files, and it can read both Java source code and `.class' files.
81
82* Menu:
83
84* Copying::		 The GNU General Public License
85* GNU Free Documentation License::
86			How you can share and copy this manual
87* Invoking gcj::	Compiler options supported by `gcj'
88* Compatibility::	Compatibility between gcj and other tools for Java
89* Invoking gcjh::       Generate header files from class files
90* Invoking gjnih::      Generate JNI header files from class files
91* Invoking jv-scan::    Print information about source files
92* Invoking jcf-dump::   Print information about class files
93* Invoking gij::	Interpreting Java bytecodes
94* Invoking gcj-dbtool:: Tool for manipulating class file databases.
95* Invoking jv-convert:: Converting from one encoding to another
96* Invoking grmic::      Generate stubs for Remote Method Invocation.
97* Invoking grmiregistry:: The remote object registry.
98* About CNI::           Description of the Compiled Native Interface
99* System properties::   Modifying runtime behavior of the libgcj library
100* Resources::		Where to look for more information
101* Index::               Index.
102
103
104File: gcj.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: Top,  Up: Top
105
106GNU GENERAL PUBLIC LICENSE
107**************************
108
109                         Version 2, June 1991
110
111     Copyright (C) 1989, 1991 Free Software Foundation, Inc.
112     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
113
114     Everyone is permitted to copy and distribute verbatim copies
115     of this license document, but changing it is not allowed.
116
117Preamble
118========
119
120The licenses for most software are designed to take away your freedom
121to share and change it.  By contrast, the GNU General Public License is
122intended to guarantee your freedom to share and change free
123software--to make sure the software is free for all its users.  This
124General Public License applies to most of the Free Software
125Foundation's software and to any other program whose authors commit to
126using it.  (Some other Free Software Foundation software is covered by
127the GNU Library General Public License instead.)  You can apply it to
128your programs, too.
129
130   When we speak of free software, we are referring to freedom, not
131price.  Our General Public Licenses are designed to make sure that you
132have the freedom to distribute copies of free software (and charge for
133this service if you wish), that you receive source code or can get it
134if you want it, that you can change the software or use pieces of it in
135new free programs; and that you know you can do these things.
136
137   To protect your rights, we need to make restrictions that forbid
138anyone to deny you these rights or to ask you to surrender the rights.
139These restrictions translate to certain responsibilities for you if you
140distribute copies of the software, or if you modify it.
141
142   For example, if you distribute copies of such a program, whether
143gratis or for a fee, you must give the recipients all the rights that
144you have.  You must make sure that they, too, receive or can get the
145source code.  And you must show them these terms so they know their
146rights.
147
148   We protect your rights with two steps: (1) copyright the software,
149and (2) offer you this license which gives you legal permission to copy,
150distribute and/or modify the software.
151
152   Also, for each author's protection and ours, we want to make certain
153that everyone understands that there is no warranty for this free
154software.  If the software is modified by someone else and passed on, we
155want its recipients to know that what they have is not the original, so
156that any problems introduced by others will not reflect on the original
157authors' reputations.
158
159   Finally, any free program is threatened constantly by software
160patents.  We wish to avoid the danger that redistributors of a free
161program will individually obtain patent licenses, in effect making the
162program proprietary.  To prevent this, we have made it clear that any
163patent must be licensed for everyone's free use or not licensed at all.
164
165   The precise terms and conditions for copying, distribution and
166modification follow.
167
168    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
169  0. This License applies to any program or other work which contains a
170     notice placed by the copyright holder saying it may be distributed
171     under the terms of this General Public License.  The "Program",
172     below, refers to any such program or work, and a "work based on
173     the Program" means either the Program or any derivative work under
174     copyright law: that is to say, a work containing the Program or a
175     portion of it, either verbatim or with modifications and/or
176     translated into another language.  (Hereinafter, translation is
177     included without limitation in the term "modification".)  Each
178     licensee is addressed as "you".
179
180     Activities other than copying, distribution and modification are
181     not covered by this License; they are outside its scope.  The act
182     of running the Program is not restricted, and the output from the
183     Program is covered only if its contents constitute a work based on
184     the Program (independent of having been made by running the
185     Program).  Whether that is true depends on what the Program does.
186
187  1. You may copy and distribute verbatim copies of the Program's
188     source code as you receive it, in any medium, provided that you
189     conspicuously and appropriately publish on each copy an appropriate
190     copyright notice and disclaimer of warranty; keep intact all the
191     notices that refer to this License and to the absence of any
192     warranty; and give any other recipients of the Program a copy of
193     this License along with the Program.
194
195     You may charge a fee for the physical act of transferring a copy,
196     and you may at your option offer warranty protection in exchange
197     for a fee.
198
199  2. You may modify your copy or copies of the Program or any portion
200     of it, thus forming a work based on the Program, and copy and
201     distribute such modifications or work under the terms of Section 1
202     above, provided that you also meet all of these conditions:
203
204       a. You must cause the modified files to carry prominent notices
205          stating that you changed the files and the date of any change.
206
207       b. You must cause any work that you distribute or publish, that
208          in whole or in part contains or is derived from the Program
209          or any part thereof, to be licensed as a whole at no charge
210          to all third parties under the terms of this License.
211
212       c. If the modified program normally reads commands interactively
213          when run, you must cause it, when started running for such
214          interactive use in the most ordinary way, to print or display
215          an announcement including an appropriate copyright notice and
216          a notice that there is no warranty (or else, saying that you
217          provide a warranty) and that users may redistribute the
218          program under these conditions, and telling the user how to
219          view a copy of this License.  (Exception: if the Program
220          itself is interactive but does not normally print such an
221          announcement, your work based on the Program is not required
222          to print an announcement.)
223
224     These requirements apply to the modified work as a whole.  If
225     identifiable sections of that work are not derived from the
226     Program, and can be reasonably considered independent and separate
227     works in themselves, then this License, and its terms, do not
228     apply to those sections when you distribute them as separate
229     works.  But when you distribute the same sections as part of a
230     whole which is a work based on the Program, the distribution of
231     the whole must be on the terms of this License, whose permissions
232     for other licensees extend to the entire whole, and thus to each
233     and every part regardless of who wrote it.
234
235     Thus, it is not the intent of this section to claim rights or
236     contest your rights to work written entirely by you; rather, the
237     intent is to exercise the right to control the distribution of
238     derivative or collective works based on the Program.
239
240     In addition, mere aggregation of another work not based on the
241     Program with the Program (or with a work based on the Program) on
242     a volume of a storage or distribution medium does not bring the
243     other work under the scope of this License.
244
245  3. You may copy and distribute the Program (or a work based on it,
246     under Section 2) in object code or executable form under the terms
247     of Sections 1 and 2 above provided that you also do one of the
248     following:
249
250       a. Accompany it with the complete corresponding machine-readable
251          source code, which must be distributed under the terms of
252          Sections 1 and 2 above on a medium customarily used for
253          software interchange; or,
254
255       b. Accompany it with a written offer, valid for at least three
256          years, to give any third party, for a charge no more than your
257          cost of physically performing source distribution, a complete
258          machine-readable copy of the corresponding source code, to be
259          distributed under the terms of Sections 1 and 2 above on a
260          medium customarily used for software interchange; or,
261
262       c. Accompany it with the information you received as to the offer
263          to distribute corresponding source code.  (This alternative is
264          allowed only for noncommercial distribution and only if you
265          received the program in object code or executable form with
266          such an offer, in accord with Subsection b above.)
267
268     The source code for a work means the preferred form of the work for
269     making modifications to it.  For an executable work, complete
270     source code means all the source code for all modules it contains,
271     plus any associated interface definition files, plus the scripts
272     used to control compilation and installation of the executable.
273     However, as a special exception, the source code distributed need
274     not include anything that is normally distributed (in either
275     source or binary form) with the major components (compiler,
276     kernel, and so on) of the operating system on which the executable
277     runs, unless that component itself accompanies the executable.
278
279     If distribution of executable or object code is made by offering
280     access to copy from a designated place, then offering equivalent
281     access to copy the source code from the same place counts as
282     distribution of the source code, even though third parties are not
283     compelled to copy the source along with the object code.
284
285  4. You may not copy, modify, sublicense, or distribute the Program
286     except as expressly provided under this License.  Any attempt
287     otherwise to copy, modify, sublicense or distribute the Program is
288     void, and will automatically terminate your rights under this
289     License.  However, parties who have received copies, or rights,
290     from you under this License will not have their licenses
291     terminated so long as such parties remain in full compliance.
292
293  5. You are not required to accept this License, since you have not
294     signed it.  However, nothing else grants you permission to modify
295     or distribute the Program or its derivative works.  These actions
296     are prohibited by law if you do not accept this License.
297     Therefore, by modifying or distributing the Program (or any work
298     based on the Program), you indicate your acceptance of this
299     License to do so, and all its terms and conditions for copying,
300     distributing or modifying the Program or works based on it.
301
302  6. Each time you redistribute the Program (or any work based on the
303     Program), the recipient automatically receives a license from the
304     original licensor to copy, distribute or modify the Program
305     subject to these terms and conditions.  You may not impose any
306     further restrictions on the recipients' exercise of the rights
307     granted herein.  You are not responsible for enforcing compliance
308     by third parties to this License.
309
310  7. If, as a consequence of a court judgment or allegation of patent
311     infringement or for any other reason (not limited to patent
312     issues), conditions are imposed on you (whether by court order,
313     agreement or otherwise) that contradict the conditions of this
314     License, they do not excuse you from the conditions of this
315     License.  If you cannot distribute so as to satisfy simultaneously
316     your obligations under this License and any other pertinent
317     obligations, then as a consequence you may not distribute the
318     Program at all.  For example, if a patent license would not permit
319     royalty-free redistribution of the Program by all those who
320     receive copies directly or indirectly through you, then the only
321     way you could satisfy both it and this License would be to refrain
322     entirely from distribution of the Program.
323
324     If any portion of this section is held invalid or unenforceable
325     under any particular circumstance, the balance of the section is
326     intended to apply and the section as a whole is intended to apply
327     in other circumstances.
328
329     It is not the purpose of this section to induce you to infringe any
330     patents or other property right claims or to contest validity of
331     any such claims; this section has the sole purpose of protecting
332     the integrity of the free software distribution system, which is
333     implemented by public license practices.  Many people have made
334     generous contributions to the wide range of software distributed
335     through that system in reliance on consistent application of that
336     system; it is up to the author/donor to decide if he or she is
337     willing to distribute software through any other system and a
338     licensee cannot impose that choice.
339
340     This section is intended to make thoroughly clear what is believed
341     to be a consequence of the rest of this License.
342
343  8. If the distribution and/or use of the Program is restricted in
344     certain countries either by patents or by copyrighted interfaces,
345     the original copyright holder who places the Program under this
346     License may add an explicit geographical distribution limitation
347     excluding those countries, so that distribution is permitted only
348     in or among countries not thus excluded.  In such case, this
349     License incorporates the limitation as if written in the body of
350     this License.
351
352  9. The Free Software Foundation may publish revised and/or new
353     versions of the General Public License from time to time.  Such
354     new versions will be similar in spirit to the present version, but
355     may differ in detail to address new problems or concerns.
356
357     Each version is given a distinguishing version number.  If the
358     Program specifies a version number of this License which applies
359     to it and "any later version", you have the option of following
360     the terms and conditions either of that version or of any later
361     version published by the Free Software Foundation.  If the Program
362     does not specify a version number of this License, you may choose
363     any version ever published by the Free Software Foundation.
364
365 10. If you wish to incorporate parts of the Program into other free
366     programs whose distribution conditions are different, write to the
367     author to ask for permission.  For software which is copyrighted
368     by the Free Software Foundation, write to the Free Software
369     Foundation; we sometimes make exceptions for this.  Our decision
370     will be guided by the two goals of preserving the free status of
371     all derivatives of our free software and of promoting the sharing
372     and reuse of software generally.
373
374                                NO WARRANTY
375 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO
376     WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE
377     LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
378     HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
379     WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT
380     NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
381     FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS TO THE
382     QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
383     PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
384     SERVICING, REPAIR OR CORRECTION.
385
386 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
387     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY
388     MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE
389     LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL,
390     INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR
391     INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
392     DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU
393     OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
394     OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN
395     ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
396
397                      END OF TERMS AND CONDITIONS
398Appendix: How to Apply These Terms to Your New Programs
399=======================================================
400
401If you develop a new program, and you want it to be of the greatest
402possible use to the public, the best way to achieve this is to make it
403free software which everyone can redistribute and change under these
404terms.
405
406   To do so, attach the following notices to the program.  It is safest
407to attach them to the start of each source file to most effectively
408convey the exclusion of warranty; and each file should have at least
409the "copyright" line and a pointer to where the full notice is found.
410
411     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
412     Copyright (C) YEAR  NAME OF AUTHOR
413
414     This program is free software; you can redistribute it and/or modify
415     it under the terms of the GNU General Public License as published by
416     the Free Software Foundation; either version 2 of the License, or
417     (at your option) any later version.
418
419     This program is distributed in the hope that it will be useful,
420     but WITHOUT ANY WARRANTY; without even the implied warranty of
421     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
422     GNU General Public License for more details.
423
424     You should have received a copy of the GNU General Public License
425     along with this program; if not, write to the Free Software
426     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
427
428   Also add information on how to contact you by electronic and paper
429mail.
430
431   If the program is interactive, make it output a short notice like
432this when it starts in an interactive mode:
433
434     Gnomovision version 69, Copyright (C) YEAR NAME OF AUTHOR
435     Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
436     type `show w'.
437     This is free software, and you are welcome to redistribute it
438     under certain conditions; type `show c' for details.
439
440   The hypothetical commands `show w' and `show c' should show the
441appropriate parts of the General Public License.  Of course, the
442commands you use may be called something other than `show w' and `show
443c'; they could even be mouse-clicks or menu items--whatever suits your
444program.
445
446   You should also get your employer (if you work as a programmer) or
447your school, if any, to sign a "copyright disclaimer" for the program,
448if necessary.  Here is a sample; alter the names:
449
450     Yoyodyne, Inc., hereby disclaims all copyright interest in the program
451     `Gnomovision' (which makes passes at compilers) written by James Hacker.
452
453     SIGNATURE OF TY COON, 1 April 1989
454     Ty Coon, President of Vice
455
456   This General Public License does not permit incorporating your
457program into proprietary programs.  If your program is a subroutine
458library, you may consider it more useful to permit linking proprietary
459applications with the library.  If this is what you want to do, use the
460GNU Library General Public License instead of this License.
461
462
463File: gcj.info,  Node: GNU Free Documentation License,  Next: Invoking gcj,  Prev: Copying,  Up: Top
464
465GNU Free Documentation License
466******************************
467
468                      Version 1.2, November 2002
469
470     Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
471     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
472
473     Everyone is permitted to copy and distribute verbatim copies
474     of this license document, but changing it is not allowed.
475
476  0. PREAMBLE
477
478     The purpose of this License is to make a manual, textbook, or other
479     functional and useful document "free" in the sense of freedom: to
480     assure everyone the effective freedom to copy and redistribute it,
481     with or without modifying it, either commercially or
482     noncommercially.  Secondarily, this License preserves for the
483     author and publisher a way to get credit for their work, while not
484     being considered responsible for modifications made by others.
485
486     This License is a kind of "copyleft", which means that derivative
487     works of the document must themselves be free in the same sense.
488     It complements the GNU General Public License, which is a copyleft
489     license designed for free software.
490
491     We have designed this License in order to use it for manuals for
492     free software, because free software needs free documentation: a
493     free program should come with manuals providing the same freedoms
494     that the software does.  But this License is not limited to
495     software manuals; it can be used for any textual work, regardless
496     of subject matter or whether it is published as a printed book.
497     We recommend this License principally for works whose purpose is
498     instruction or reference.
499
500  1. APPLICABILITY AND DEFINITIONS
501
502     This License applies to any manual or other work, in any medium,
503     that contains a notice placed by the copyright holder saying it
504     can be distributed under the terms of this License.  Such a notice
505     grants a world-wide, royalty-free license, unlimited in duration,
506     to use that work under the conditions stated herein.  The
507     "Document", below, refers to any such manual or work.  Any member
508     of the public is a licensee, and is addressed as "you".  You
509     accept the license if you copy, modify or distribute the work in a
510     way requiring permission under copyright law.
511
512     A "Modified Version" of the Document means any work containing the
513     Document or a portion of it, either copied verbatim, or with
514     modifications and/or translated into another language.
515
516     A "Secondary Section" is a named appendix or a front-matter section
517     of the Document that deals exclusively with the relationship of the
518     publishers or authors of the Document to the Document's overall
519     subject (or to related matters) and contains nothing that could
520     fall directly within that overall subject.  (Thus, if the Document
521     is in part a textbook of mathematics, a Secondary Section may not
522     explain any mathematics.)  The relationship could be a matter of
523     historical connection with the subject or with related matters, or
524     of legal, commercial, philosophical, ethical or political position
525     regarding them.
526
527     The "Invariant Sections" are certain Secondary Sections whose
528     titles are designated, as being those of Invariant Sections, in
529     the notice that says that the Document is released under this
530     License.  If a section does not fit the above definition of
531     Secondary then it is not allowed to be designated as Invariant.
532     The Document may contain zero Invariant Sections.  If the Document
533     does not identify any Invariant Sections then there are none.
534
535     The "Cover Texts" are certain short passages of text that are
536     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
537     that says that the Document is released under this License.  A
538     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
539     be at most 25 words.
540
541     A "Transparent" copy of the Document means a machine-readable copy,
542     represented in a format whose specification is available to the
543     general public, that is suitable for revising the document
544     straightforwardly with generic text editors or (for images
545     composed of pixels) generic paint programs or (for drawings) some
546     widely available drawing editor, and that is suitable for input to
547     text formatters or for automatic translation to a variety of
548     formats suitable for input to text formatters.  A copy made in an
549     otherwise Transparent file format whose markup, or absence of
550     markup, has been arranged to thwart or discourage subsequent
551     modification by readers is not Transparent.  An image format is
552     not Transparent if used for any substantial amount of text.  A
553     copy that is not "Transparent" is called "Opaque".
554
555     Examples of suitable formats for Transparent copies include plain
556     ASCII without markup, Texinfo input format, LaTeX input format,
557     SGML or XML using a publicly available DTD, and
558     standard-conforming simple HTML, PostScript or PDF designed for
559     human modification.  Examples of transparent image formats include
560     PNG, XCF and JPG.  Opaque formats include proprietary formats that
561     can be read and edited only by proprietary word processors, SGML or
562     XML for which the DTD and/or processing tools are not generally
563     available, and the machine-generated HTML, PostScript or PDF
564     produced by some word processors for output purposes only.
565
566     The "Title Page" means, for a printed book, the title page itself,
567     plus such following pages as are needed to hold, legibly, the
568     material this License requires to appear in the title page.  For
569     works in formats which do not have any title page as such, "Title
570     Page" means the text near the most prominent appearance of the
571     work's title, preceding the beginning of the body of the text.
572
573     A section "Entitled XYZ" means a named subunit of the Document
574     whose title either is precisely XYZ or contains XYZ in parentheses
575     following text that translates XYZ in another language.  (Here XYZ
576     stands for a specific section name mentioned below, such as
577     "Acknowledgements", "Dedications", "Endorsements", or "History".)
578     To "Preserve the Title" of such a section when you modify the
579     Document means that it remains a section "Entitled XYZ" according
580     to this definition.
581
582     The Document may include Warranty Disclaimers next to the notice
583     which states that this License applies to the Document.  These
584     Warranty Disclaimers are considered to be included by reference in
585     this License, but only as regards disclaiming warranties: any other
586     implication that these Warranty Disclaimers may have is void and
587     has no effect on the meaning of this License.
588
589  2. VERBATIM COPYING
590
591     You may copy and distribute the Document in any medium, either
592     commercially or noncommercially, provided that this License, the
593     copyright notices, and the license notice saying this License
594     applies to the Document are reproduced in all copies, and that you
595     add no other conditions whatsoever to those of this License.  You
596     may not use technical measures to obstruct or control the reading
597     or further copying of the copies you make or distribute.  However,
598     you may accept compensation in exchange for copies.  If you
599     distribute a large enough number of copies you must also follow
600     the conditions in section 3.
601
602     You may also lend copies, under the same conditions stated above,
603     and you may publicly display copies.
604
605  3. COPYING IN QUANTITY
606
607     If you publish printed copies (or copies in media that commonly
608     have printed covers) of the Document, numbering more than 100, and
609     the Document's license notice requires Cover Texts, you must
610     enclose the copies in covers that carry, clearly and legibly, all
611     these Cover Texts: Front-Cover Texts on the front cover, and
612     Back-Cover Texts on the back cover.  Both covers must also clearly
613     and legibly identify you as the publisher of these copies.  The
614     front cover must present the full title with all words of the
615     title equally prominent and visible.  You may add other material
616     on the covers in addition.  Copying with changes limited to the
617     covers, as long as they preserve the title of the Document and
618     satisfy these conditions, can be treated as verbatim copying in
619     other respects.
620
621     If the required texts for either cover are too voluminous to fit
622     legibly, you should put the first ones listed (as many as fit
623     reasonably) on the actual cover, and continue the rest onto
624     adjacent pages.
625
626     If you publish or distribute Opaque copies of the Document
627     numbering more than 100, you must either include a
628     machine-readable Transparent copy along with each Opaque copy, or
629     state in or with each Opaque copy a computer-network location from
630     which the general network-using public has access to download
631     using public-standard network protocols a complete Transparent
632     copy of the Document, free of added material.  If you use the
633     latter option, you must take reasonably prudent steps, when you
634     begin distribution of Opaque copies in quantity, to ensure that
635     this Transparent copy will remain thus accessible at the stated
636     location until at least one year after the last time you
637     distribute an Opaque copy (directly or through your agents or
638     retailers) of that edition to the public.
639
640     It is requested, but not required, that you contact the authors of
641     the Document well before redistributing any large number of
642     copies, to give them a chance to provide you with an updated
643     version of the Document.
644
645  4. MODIFICATIONS
646
647     You may copy and distribute a Modified Version of the Document
648     under the conditions of sections 2 and 3 above, provided that you
649     release the Modified Version under precisely this License, with
650     the Modified Version filling the role of the Document, thus
651     licensing distribution and modification of the Modified Version to
652     whoever possesses a copy of it.  In addition, you must do these
653     things in the Modified Version:
654
655       A. Use in the Title Page (and on the covers, if any) a title
656          distinct from that of the Document, and from those of
657          previous versions (which should, if there were any, be listed
658          in the History section of the Document).  You may use the
659          same title as a previous version if the original publisher of
660          that version gives permission.
661
662       B. List on the Title Page, as authors, one or more persons or
663          entities responsible for authorship of the modifications in
664          the Modified Version, together with at least five of the
665          principal authors of the Document (all of its principal
666          authors, if it has fewer than five), unless they release you
667          from this requirement.
668
669       C. State on the Title page the name of the publisher of the
670          Modified Version, as the publisher.
671
672       D. Preserve all the copyright notices of the Document.
673
674       E. Add an appropriate copyright notice for your modifications
675          adjacent to the other copyright notices.
676
677       F. Include, immediately after the copyright notices, a license
678          notice giving the public permission to use the Modified
679          Version under the terms of this License, in the form shown in
680          the Addendum below.
681
682       G. Preserve in that license notice the full lists of Invariant
683          Sections and required Cover Texts given in the Document's
684          license notice.
685
686       H. Include an unaltered copy of this License.
687
688       I. Preserve the section Entitled "History", Preserve its Title,
689          and add to it an item stating at least the title, year, new
690          authors, and publisher of the Modified Version as given on
691          the Title Page.  If there is no section Entitled "History" in
692          the Document, create one stating the title, year, authors,
693          and publisher of the Document as given on its Title Page,
694          then add an item describing the Modified Version as stated in
695          the previous sentence.
696
697       J. Preserve the network location, if any, given in the Document
698          for public access to a Transparent copy of the Document, and
699          likewise the network locations given in the Document for
700          previous versions it was based on.  These may be placed in
701          the "History" section.  You may omit a network location for a
702          work that was published at least four years before the
703          Document itself, or if the original publisher of the version
704          it refers to gives permission.
705
706       K. For any section Entitled "Acknowledgements" or "Dedications",
707          Preserve the Title of the section, and preserve in the
708          section all the substance and tone of each of the contributor
709          acknowledgements and/or dedications given therein.
710
711       L. Preserve all the Invariant Sections of the Document,
712          unaltered in their text and in their titles.  Section numbers
713          or the equivalent are not considered part of the section
714          titles.
715
716       M. Delete any section Entitled "Endorsements".  Such a section
717          may not be included in the Modified Version.
718
719       N. Do not retitle any existing section to be Entitled
720          "Endorsements" or to conflict in title with any Invariant
721          Section.
722
723       O. Preserve any Warranty Disclaimers.
724
725     If the Modified Version includes new front-matter sections or
726     appendices that qualify as Secondary Sections and contain no
727     material copied from the Document, you may at your option
728     designate some or all of these sections as invariant.  To do this,
729     add their titles to the list of Invariant Sections in the Modified
730     Version's license notice.  These titles must be distinct from any
731     other section titles.
732
733     You may add a section Entitled "Endorsements", provided it contains
734     nothing but endorsements of your Modified Version by various
735     parties--for example, statements of peer review or that the text
736     has been approved by an organization as the authoritative
737     definition of a standard.
738
739     You may add a passage of up to five words as a Front-Cover Text,
740     and a passage of up to 25 words as a Back-Cover Text, to the end
741     of the list of Cover Texts in the Modified Version.  Only one
742     passage of Front-Cover Text and one of Back-Cover Text may be
743     added by (or through arrangements made by) any one entity.  If the
744     Document already includes a cover text for the same cover,
745     previously added by you or by arrangement made by the same entity
746     you are acting on behalf of, you may not add another; but you may
747     replace the old one, on explicit permission from the previous
748     publisher that added the old one.
749
750     The author(s) and publisher(s) of the Document do not by this
751     License give permission to use their names for publicity for or to
752     assert or imply endorsement of any Modified Version.
753
754  5. COMBINING DOCUMENTS
755
756     You may combine the Document with other documents released under
757     this License, under the terms defined in section 4 above for
758     modified versions, provided that you include in the combination
759     all of the Invariant Sections of all of the original documents,
760     unmodified, and list them all as Invariant Sections of your
761     combined work in its license notice, and that you preserve all
762     their Warranty Disclaimers.
763
764     The combined work need only contain one copy of this License, and
765     multiple identical Invariant Sections may be replaced with a single
766     copy.  If there are multiple Invariant Sections with the same name
767     but different contents, make the title of each such section unique
768     by adding at the end of it, in parentheses, the name of the
769     original author or publisher of that section if known, or else a
770     unique number.  Make the same adjustment to the section titles in
771     the list of Invariant Sections in the license notice of the
772     combined work.
773
774     In the combination, you must combine any sections Entitled
775     "History" in the various original documents, forming one section
776     Entitled "History"; likewise combine any sections Entitled
777     "Acknowledgements", and any sections Entitled "Dedications".  You
778     must delete all sections Entitled "Endorsements."
779
780  6. COLLECTIONS OF DOCUMENTS
781
782     You may make a collection consisting of the Document and other
783     documents released under this License, and replace the individual
784     copies of this License in the various documents with a single copy
785     that is included in the collection, provided that you follow the
786     rules of this License for verbatim copying of each of the
787     documents in all other respects.
788
789     You may extract a single document from such a collection, and
790     distribute it individually under this License, provided you insert
791     a copy of this License into the extracted document, and follow
792     this License in all other respects regarding verbatim copying of
793     that document.
794
795  7. AGGREGATION WITH INDEPENDENT WORKS
796
797     A compilation of the Document or its derivatives with other
798     separate and independent documents or works, in or on a volume of
799     a storage or distribution medium, is called an "aggregate" if the
800     copyright resulting from the compilation is not used to limit the
801     legal rights of the compilation's users beyond what the individual
802     works permit.  When the Document is included in an aggregate, this
803     License does not apply to the other works in the aggregate which
804     are not themselves derivative works of the Document.
805
806     If the Cover Text requirement of section 3 is applicable to these
807     copies of the Document, then if the Document is less than one half
808     of the entire aggregate, the Document's Cover Texts may be placed
809     on covers that bracket the Document within the aggregate, or the
810     electronic equivalent of covers if the Document is in electronic
811     form.  Otherwise they must appear on printed covers that bracket
812     the whole aggregate.
813
814  8. TRANSLATION
815
816     Translation is considered a kind of modification, so you may
817     distribute translations of the Document under the terms of section
818     4.  Replacing Invariant Sections with translations requires special
819     permission from their copyright holders, but you may include
820     translations of some or all Invariant Sections in addition to the
821     original versions of these Invariant Sections.  You may include a
822     translation of this License, and all the license notices in the
823     Document, and any Warranty Disclaimers, provided that you also
824     include the original English version of this License and the
825     original versions of those notices and disclaimers.  In case of a
826     disagreement between the translation and the original version of
827     this License or a notice or disclaimer, the original version will
828     prevail.
829
830     If a section in the Document is Entitled "Acknowledgements",
831     "Dedications", or "History", the requirement (section 4) to
832     Preserve its Title (section 1) will typically require changing the
833     actual title.
834
835  9. TERMINATION
836
837     You may not copy, modify, sublicense, or distribute the Document
838     except as expressly provided for under this License.  Any other
839     attempt to copy, modify, sublicense or distribute the Document is
840     void, and will automatically terminate your rights under this
841     License.  However, parties who have received copies, or rights,
842     from you under this License will not have their licenses
843     terminated so long as such parties remain in full compliance.
844
845 10. FUTURE REVISIONS OF THIS LICENSE
846
847     The Free Software Foundation may publish new, revised versions of
848     the GNU Free Documentation License from time to time.  Such new
849     versions will be similar in spirit to the present version, but may
850     differ in detail to address new problems or concerns.  See
851     `http://www.gnu.org/copyleft/'.
852
853     Each version of the License is given a distinguishing version
854     number.  If the Document specifies that a particular numbered
855     version of this License "or any later version" applies to it, you
856     have the option of following the terms and conditions either of
857     that specified version or of any later version that has been
858     published (not as a draft) by the Free Software Foundation.  If
859     the Document does not specify a version number of this License,
860     you may choose any version ever published (not as a draft) by the
861     Free Software Foundation.
862
863ADDENDUM: How to use this License for your documents
864====================================================
865
866To use this License in a document you have written, include a copy of
867the License in the document and put the following copyright and license
868notices just after the title page:
869
870       Copyright (C)  YEAR  YOUR NAME.
871       Permission is granted to copy, distribute and/or modify this document
872       under the terms of the GNU Free Documentation License, Version 1.2
873       or any later version published by the Free Software Foundation;
874       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
875       Texts.  A copy of the license is included in the section entitled ``GNU
876       Free Documentation License''.
877
878   If you have Invariant Sections, Front-Cover Texts and Back-Cover
879Texts, replace the "with...Texts." line with this:
880
881         with the Invariant Sections being LIST THEIR TITLES, with
882         the Front-Cover Texts being LIST, and with the Back-Cover Texts
883         being LIST.
884
885   If you have Invariant Sections without Cover Texts, or some other
886combination of the three, merge those two alternatives to suit the
887situation.
888
889   If your document contains nontrivial examples of program code, we
890recommend releasing these examples in parallel under your choice of
891free software license, such as the GNU General Public License, to
892permit their use in free software.
893
894
895File: gcj.info,  Node: Invoking gcj,  Next: Compatibility,  Prev: GNU Free Documentation License,  Up: Top
896
8971 Invoking gcj
898**************
899
900As `gcj' is just another front end to `gcc', it supports many of the
901same options as gcc.  *Note Option Summary: (gcc)Option Summary.  This
902manual only documents the options specific to `gcj'.
903
904* Menu:
905
906* Input and output files::
907* Input Options::		How gcj finds files
908* Encodings::                   Options controlling source file encoding
909* Warnings::			Options controlling warnings specific to gcj
910* Linking::			Options for making an executable
911* Code Generation::		Options controlling the output of gcj
912* Configure-time Options::	Options you won't use
913
914
915File: gcj.info,  Node: Input and output files,  Next: Input Options,  Up: Invoking gcj
916
9171.1 Input and output files
918==========================
919
920A `gcj' command is like a `gcc' command, in that it consists of a
921number of options and file names.  The following kinds of input file
922names are supported:
923
924`FILE.java'
925     Java source files.
926
927`FILE.class'
928     Java bytecode files.
929
930`FILE.zip'
931`FILE.jar'
932     An archive containing one or more `.class' files, all of which are
933     compiled.  The archive may be compressed.  Files in an archive
934     which don't end with `.class' are treated as resource files; they
935     are compiled into the resulting object file as `core:' URLs.
936
937`@FILE'
938     A file containing a whitespace-separated list of input file names.
939     (Currently, these must all be `.java' source files, but that may
940     change.)  Each named file is compiled, just as if it had been on
941     the command line.
942
943`LIBRARY.a'
944`LIBRARY.so'
945`-lLIBNAME'
946     Libraries to use when linking.  See the `gcc' manual.
947
948   You can specify more than one input file on the `gcj' command line,
949in which case they will all be compiled.  If you specify a `-o FILENAME'
950option, all the input files will be compiled together, producing a
951single output file, named FILENAME.  This is allowed even when using
952`-S' or `-c', but not when using `-C' or `--resource'.  (This is an
953extension beyond the what plain `gcc' allows.)  (If more than one input
954file is specified, all must currently be `.java' files, though we hope
955to fix this.)
956
957
958File: gcj.info,  Node: Input Options,  Next: Encodings,  Prev: Input and output files,  Up: Invoking gcj
959
9601.2 Input Options
961=================
962
963`gcj' has options to control where it looks to find files it needs.
964For instance, `gcj' might need to load a class that is referenced by
965the file it has been asked to compile.  Like other compilers for the
966Java language, `gcj' has a notion of a "class path".  There are several
967options and environment variables which can be used to manipulate the
968class path.  When `gcj' looks for a given class, it searches the class
969path looking for matching `.class' or `.java' file.  `gcj' comes with a
970built-in class path which points at the installed `libgcj.jar', a file
971which contains all the standard classes.
972
973   In the below, a directory or path component can refer either to an
974actual directory on the filesystem, or to a `.zip' or `.jar' file,
975which `gcj' will search as if it is a directory.
976
977`-IDIR'
978     All directories specified by `-I' are kept in order and prepended
979     to the class path constructed from all the other options.  Unless
980     compatibility with tools like `javac' is important, we recommend
981     always using `-I' instead of the other options for manipulating the
982     class path.
983
984`--classpath=PATH'
985     This sets the class path to PATH, a colon-separated list of paths
986     (on Windows-based systems, a semicolon-separate list of paths).
987     This does not override the builtin ("boot") search path.
988
989`--CLASSPATH=PATH'
990     Deprecated synonym for `--classpath'.
991
992`--bootclasspath=PATH'
993     Where to find the standard builtin classes, such as
994     `java.lang.String'.
995
996`--extdirs=PATH'
997     For each directory in the PATH, place the contents of that
998     directory at the end of the class path.
999
1000`CLASSPATH'
1001     This is an environment variable which holds a list of paths.
1002
1003   The final class path is constructed like so:
1004
1005   * First come all directories specified via `-I'.
1006
1007   * If `--classpath' is specified, its value is appended.  Otherwise,
1008     if the `CLASSPATH' environment variable is specified, then its
1009     value is appended.  Otherwise, the current directory (`"."') is
1010     appended.
1011
1012   * If `--bootclasspath' was specified, append its value.  Otherwise,
1013     append the built-in system directory, `libgcj.jar'.
1014
1015   * Finally, if `--extdirs' was specified, append the contents of the
1016     specified directories at the end of the class path.  Otherwise,
1017     append the contents of the built-in extdirs at
1018     `$(prefix)/share/java/ext'.
1019
1020   The classfile built by `gcj' for the class `java.lang.Object' (and
1021placed in `libgcj.jar') contains a special zero length attribute
1022`gnu.gcj.gcj-compiled'. The compiler looks for this attribute when
1023loading `java.lang.Object' and will report an error if it isn't found,
1024unless it compiles to bytecode (the option
1025`-fforce-classes-archive-check' can be used to override this behavior
1026in this particular case.)
1027
1028`-fforce-classes-archive-check'
1029     This forces the compiler to always check for the special zero
1030     length attribute `gnu.gcj.gcj-compiled' in `java.lang.Object' and
1031     issue an error if it isn't found.
1032
1033
1034File: gcj.info,  Node: Encodings,  Next: Warnings,  Prev: Input Options,  Up: Invoking gcj
1035
10361.3 Encodings
1037=============
1038
1039The Java programming language uses Unicode throughout.  In an effort to
1040integrate well with other locales, `gcj' allows `.java' files to be
1041written using almost any encoding.  `gcj' knows how to convert these
1042encodings into its internal encoding at compile time.
1043
1044   You can use the `--encoding=NAME' option to specify an encoding (of
1045a particular character set) to use for source files.  If this is not
1046specified, the default encoding comes from your current locale.  If
1047your host system has insufficient locale support, then `gcj' assumes
1048the default encoding to be the `UTF-8' encoding of Unicode.
1049
1050   To implement `--encoding', `gcj' simply uses the host platform's
1051`iconv' conversion routine.  This means that in practice `gcj' is
1052limited by the capabilities of the host platform.
1053
1054   The names allowed for the argument `--encoding' vary from platform
1055to platform (since they are not standardized anywhere).  However, `gcj'
1056implements the encoding named `UTF-8' internally, so if you choose to
1057use this for your source files you can be assured that it will work on
1058every host.
1059
1060
1061File: gcj.info,  Node: Warnings,  Next: Linking,  Prev: Encodings,  Up: Invoking gcj
1062
10631.4 Warnings
1064============
1065
1066`gcj' implements several warnings.  As with other generic `gcc'
1067warnings, if an option of the form `-Wfoo' enables a warning, then
1068`-Wno-foo' will disable it.  Here we've chosen to document the form of
1069the warning which will have an effect - the default being the opposite
1070of what is listed.
1071
1072`-Wredundant-modifiers'
1073     With this flag, `gcj' will warn about redundant modifiers.  For
1074     instance, it will warn if an interface method is declared `public'.
1075
1076`-Wextraneous-semicolon'
1077     This causes `gcj' to warn about empty statements.  Empty statements
1078     have been deprecated.
1079
1080`-Wno-out-of-date'
1081     This option will cause `gcj' not to warn when a source file is
1082     newer than its matching class file.  By default `gcj' will warn
1083     about this.
1084
1085`-Wno-deprecated'
1086     Warn if a deprecated class, method, or field is referred to.
1087
1088`-Wunused'
1089     This is the same as `gcc''s `-Wunused'.
1090
1091`-Wall'
1092     This is the same as `-Wredundant-modifiers -Wextraneous-semicolon
1093     -Wunused'.
1094
1095
1096File: gcj.info,  Node: Linking,  Next: Code Generation,  Prev: Warnings,  Up: Invoking gcj
1097
10981.5 Linking
1099===========
1100
1101To turn a Java application into an executable program, you need to link
1102it with the needed libraries, just as for C or C++.  The linker by
1103default looks for a global function named `main'.  Since Java does not
1104have global functions, and a collection of Java classes may have more
1105than one class with a `main' method, you need to let the linker know
1106which of those `main' methods it should invoke when starting the
1107application.  You can do that in any of these ways:
1108
1109   * Specify the class containing the desired `main' method when you
1110     link the application, using the `--main' flag, described below.
1111
1112   * Link the Java package(s) into a shared library (dll) rather than an
1113     executable.  Then invoke the application using the `gij' program,
1114     making sure that `gij' can find the libraries it needs.
1115
1116   * Link the Java packages(s) with the flag `-lgij', which links in
1117     the `main' routine from the `gij' command.  This allows you to
1118     select the class whose `main' method you want to run when you run
1119     the application.  You can also use other `gij' flags, such as `-D'
1120     flags to set properties.  Using the `-lgij' library (rather than
1121     the `gij' program of the previous mechanism) has some advantages:
1122     it is compatible with static linking, and does not require
1123     configuring or installing libraries.
1124
1125   These `gij' options relate to linking an executable:
1126
1127`--main=CLASSNAME'
1128     This option is used when linking to specify the name of the class
1129     whose `main' method should be invoked when the resulting
1130     executable is run.
1131
1132`-DNAME[=VALUE]'
1133     This option can only be used with `--main'.  It defines a system
1134     property named NAME with value VALUE.  If VALUE is not specified
1135     then it defaults to the empty string.  These system properties are
1136     initialized at the program's startup and can be retrieved at
1137     runtime using the `java.lang.System.getProperty' method.
1138
1139`-lgij'
1140     Create an application whose command-line processing is that of the
1141     `gij' command.
1142
1143     This option is an alternative to using `--main'; you cannot use
1144     both.
1145
1146`-static-libgcj'
1147     This option causes linking to be done against a static version of
1148     the libgcj runtime library.  This option is only available if
1149     corresponding linker support exists.
1150
1151     *Caution:* Static linking of libgcj may cause essential parts of
1152     libgcj to be omitted.  Some parts of libgcj use reflection to load
1153     classes at runtime.  Since the linker does not see these
1154     references at link time, it can omit the referred to classes.  The
1155     result is usually (but not always) a `ClassNotFoundException'
1156     being thrown at runtime. Caution must be used when using this
1157     option.  For more details see:
1158     `http://gcc.gnu.org/wiki/Statically%20linking%20libgcj'
1159
1160
1161File: gcj.info,  Node: Code Generation,  Next: Configure-time Options,  Prev: Linking,  Up: Invoking gcj
1162
11631.6 Code Generation
1164===================
1165
1166In addition to the many `gcc' options controlling code generation,
1167`gcj' has several options specific to itself.
1168
1169`-C'
1170     This option is used to tell `gcj' to generate bytecode (`.class'
1171     files) rather than object code.
1172
1173`--resource RESOURCE-NAME'
1174     This option is used to tell `gcj' to compile the contents of a
1175     given file to object code so it may be accessed at runtime with
1176     the core protocol handler as `core:/RESOURCE-NAME'.  Note that
1177     RESOURCE-NAME is the name of the resource as found at runtime; for
1178     instance, it could be used in a call to `ResourceBundle.getBundle'.
1179     The actual file name to be compiled this way must be specified
1180     separately.
1181
1182`-d DIRECTORY'
1183     When used with `-C', this causes all generated `.class' files to
1184     be put in the appropriate subdirectory of DIRECTORY.  By default
1185     they will be put in subdirectories of the current working
1186     directory.
1187
1188`-fno-bounds-check'
1189     By default, `gcj' generates code which checks the bounds of all
1190     array indexing operations.  With this option, these checks are
1191     omitted, which can improve performance for code that uses arrays
1192     extensively.  Note that this can result in unpredictable behavior
1193     if the code in question actually does violate array bounds
1194     constraints.  It is safe to use this option if you are sure that
1195     your code will never throw an `ArrayIndexOutOfBoundsException'.
1196
1197`-fno-store-check'
1198     Don't generate array store checks.  When storing objects into
1199     arrays, a runtime check is normally generated in order to ensure
1200     that the object is assignment compatible with the component type
1201     of the array (which may not be known at compile-time).  With this
1202     option, these checks are omitted.  This can improve performance
1203     for code which stores objects into arrays frequently.  It is safe
1204     to use this option if you are sure your code will never throw an
1205     `ArrayStoreException'.
1206
1207`-fjni'
1208     With `gcj' there are two options for writing native methods: CNI
1209     and JNI.  By default `gcj' assumes you are using CNI.  If you are
1210     compiling a class with native methods, and these methods are
1211     implemented using JNI, then you must use `-fjni'.  This option
1212     causes `gcj' to generate stubs which will invoke the underlying JNI
1213     methods.
1214
1215`-fno-assert'
1216     Don't recognize the `assert' keyword.  This is for compatibility
1217     with older versions of the language specification.
1218
1219`-fno-optimize-static-class-initialization'
1220     When the optimization level is greater or equal to `-O2', `gcj'
1221     will try to optimize the way calls into the runtime are made to
1222     initialize static classes upon their first use (this optimization
1223     isn't carried out if `-C' was specified.) When compiling to native
1224     code, `-fno-optimize-static-class-initialization' will turn this
1225     optimization off, regardless of the optimization level in use.
1226
1227`--disable-assertions[=CLASS-OR-PACKAGE]'
1228     Don't include code for checking assertions in the compiled code.
1229     If `=CLASS-OR-PACKAGE' is missing disables assertion code
1230     generation for all classes, unless overridden by a more specific
1231     `--enable-assertions' flag.  If CLASS-OR-PACKAGE is a class name,
1232     only disables generating assertion checks within the named class
1233     or its inner classes.  If CLASS-OR-PACKAGE is a package name,
1234     disables generating assertion checks within the named package or a
1235     subpackage.
1236
1237     By default, assertions are enabled when generating class files or
1238     when not optimizing, and disabled when generating optimized
1239     binaries.
1240
1241`--enable-assertions[=CLASS-OR-PACKAGE]'
1242     Generates code to check assertions.  The option is perhaps
1243     misnamed, as you still need to turn on assertion checking at
1244     run-time, and we don't support any easy way to do that.  So this
1245     flag isn't very useful yet, except to partially override
1246     `--disable-assertions'.
1247
1248`-findirect-dispatch'
1249     `gcj' has a special binary compatibility ABI, which is enabled by
1250     the `-findirect-dispatch' option.  In this mode, the code
1251     generated by `gcj' honors the binary compatibility guarantees in
1252     the Java Language Specification, and the resulting object files do
1253     not need to be directly linked against their dependencies.
1254     Instead, all dependencies are looked up at runtime.  This allows
1255     free mixing of interpreted and compiled code.
1256
1257     Note that, at present, `-findirect-dispatch' can only be used when
1258     compiling `.class' files.  It will not work when compiling from
1259     source.  CNI also does not yet work with the binary compatibility
1260     ABI.  These restrictions will be lifted in some future release.
1261
1262     However, if you compile CNI code with the standard ABI, you can
1263     call it from code built with the binary compatibility ABI.
1264
1265`-fbootstrap-classes'
1266     This option can be use to tell `libgcj' that the compiled classes
1267     should be loaded by the bootstrap loader, not the system class
1268     loader.  By default, if you compile a class and link it into an
1269     executable, it will be treated as if it was loaded using the
1270     system class loader.  This is convenient, as it means that things
1271     like `Class.forName()' will search `CLASSPATH' to find the desired
1272     class.
1273
1274`-freduced-reflection'
1275     This option causes the code generated by `gcj' to contain a
1276     reduced amount of the class meta-data used to support runtime
1277     reflection. The cost of this savings is the loss of the ability to
1278     use certain reflection capabilities of the standard Java runtime
1279     environment. When set all meta-data except for that which is
1280     needed to obtain correct runtime semantics is eliminated.
1281
1282     For code that does not use reflection (i.e. the methods in the
1283     `java.lang.reflect' package), `-freduced-reflection' will result
1284     in proper operation with a savings in executable code size.
1285
1286     JNI (`-fjni') and the binary compatibility ABI
1287     (`-findirect-dispatch') do not work properly without full
1288     reflection meta-data.  Because of this, it is an error to use
1289     these options with `-freduced-reflection'.
1290
1291     *Caution:* If there is no reflection meta-data, code that uses a
1292     `SecurityManager' may not work properly.  Also calling
1293     `Class.forName()' may fail if the calling method has no reflection
1294     meta-data.
1295
1296
1297
1298File: gcj.info,  Node: Configure-time Options,  Prev: Code Generation,  Up: Invoking gcj
1299
13001.7 Configure-time Options
1301==========================
1302
1303Some `gcj' code generations options affect the resulting ABI, and so
1304can only be meaningfully given when `libgcj', the runtime package, is
1305configured.  `libgcj' puts the appropriate options from this group into
1306a `spec' file which is read by `gcj'.  These options are listed here
1307for completeness; if you are using `libgcj' then you won't want to
1308touch these options.
1309
1310`-fuse-boehm-gc'
1311     This enables the use of the Boehm GC bitmap marking code.  In
1312     particular this causes `gcj' to put an object marking descriptor
1313     into each vtable.
1314
1315`-fhash-synchronization'
1316     By default, synchronization data (the data used for `synchronize',
1317     `wait', and `notify') is pointed to by a word in each object.
1318     With this option `gcj' assumes that this information is stored in a
1319     hash table and not in the object itself.
1320
1321`-fuse-divide-subroutine'
1322     On some systems, a library routine is called to perform integer
1323     division.  This is required to get exception handling correct when
1324     dividing by zero.
1325
1326`-fcheck-references'
1327     On some systems it's necessary to insert inline checks whenever
1328     accessing an object via a reference.  On other systems you won't
1329     need this because null pointer accesses are caught automatically
1330     by the processor.
1331
1332
1333File: gcj.info,  Node: Compatibility,  Next: Invoking gcjh,  Prev: Invoking gcj,  Up: Top
1334
13352 Compatibility with the Java Platform
1336**************************************
1337
1338As we believe it is important that the Java platform not be fragmented,
1339`gcj' and `libgcj' try to conform to the relevant Java specifications.
1340However, limited manpower and incomplete and unclear documentation work
1341against us.  So, there are caveats to using `gcj'.
1342
1343* Menu:
1344
1345* Limitations::
1346* Extensions::
1347
1348
1349File: gcj.info,  Node: Limitations,  Next: Extensions,  Up: Compatibility
1350
13512.1 Standard features not yet supported
1352=======================================
1353
1354This list of compatibility issues is by no means complete.
1355
1356   * `gcj' implements the JDK 1.2 language.  It supports inner classes
1357     and the new 1.4 `assert' keyword.  It does not yet support the
1358     Java 2 `strictfp' keyword (it recognizes the keyword but ignores
1359     it).
1360
1361   * `libgcj' is largely compatible with the JDK 1.2 libraries.
1362     However, `libgcj' is missing many packages, most notably
1363     `java.awt'.  There are also individual missing classes and methods.
1364     We currently do not have a list showing differences between
1365     `libgcj' and the Java 2 platform.
1366
1367   * Sometimes the `libgcj' implementation of a method or class differs
1368     from the JDK implementation.  This is not always a bug.  Still, if
1369     it affects you, it probably makes sense to report it so that we
1370     can discuss the appropriate response.
1371
1372   * `gcj' does not currently allow for piecemeal replacement of
1373     components within `libgcj'. Unfortunately, programmers often want
1374     to use newer versions of certain packages, such as those provided
1375     by the Apache Software Foundation's Jakarta project.  This has
1376     forced us to place the `org.w3c.dom' and `org.xml.sax' packages
1377     into their own libraries, separate from `libgcj'.  If you intend to
1378     use these classes, you must link them explicitly with
1379     `-l-org-w3c-dom' and `-l-org-xml-sax'.  Future versions of `gcj'
1380     may not have this restriction.
1381
1382
1383File: gcj.info,  Node: Extensions,  Prev: Limitations,  Up: Compatibility
1384
13852.2 Extra features unique to gcj
1386================================
1387
1388The main feature of `gcj' is that it can compile programs written in
1389the Java programming language to native code.  Most extensions that
1390have been added are to facilitate this functionality.
1391
1392   * `gcj' makes it easy and efficient to mix code written in Java and
1393     C++.  *Note About CNI::, for more info on how to use this in your
1394     programs.
1395
1396   * When you compile your classes into a shared library using
1397     `-findirect-dispatch' then add them to the system-wide classmap.db
1398     file using `gcj-dbtool', they will be automatically loaded by the
1399     `libgcj' system classloader.  This is the new, preferred
1400     classname-to-library resolution mechanism.  *Note Invoking
1401     gcj-dbtool::, for more information on using the classmap database.
1402
1403   * The old classname-to-library lookup mechanism is still supported
1404     through the `gnu.gcj.runtime.VMClassLoader.library_control'
1405     property, but it is deprecated and will likely be removed in some
1406     future release.  When trying to load a class `gnu.pkg.SomeClass'
1407     the system classloader will first try to load the shared library
1408     `lib-gnu-pkg-SomeClass.so', if that fails to load the class then
1409     it will try to load `lib-gnu-pkg.so' and finally when the class is
1410     still not loaded it will try to load `lib-gnu.so'.  Note that all
1411     `.'s will be transformed into `-'s and that searching for inner
1412     classes starts with their outermost outer class.  If the class
1413     cannot be found this way the system classloader tries to use the
1414     `libgcj' bytecode interpreter to load the class from the standard
1415     classpath.  This process can be controlled to some degree via the
1416     `gnu.gcj.runtime.VMClassLoader.library_control' property; *Note
1417     libgcj Runtime Properties::.
1418
1419   * `libgcj' includes a special `gcjlib' URL type.  A URL of this form
1420     is like a `jar' URL, and looks like
1421     `gcjlib:/path/to/shared/library.so!/path/to/resource'.  An access
1422     to one of these URLs causes the shared library to be `dlopen()'d,
1423     and then the resource is looked for in that library.  These URLs
1424     are most useful when used in conjunction with
1425     `java.net.URLClassLoader'.  Note that, due to implementation
1426     limitations, currently any such URL can be accessed by only one
1427     class loader, and libraries are never unloaded.  This means some
1428     care must be exercised to make sure that a `gcjlib' URL is not
1429     accessed by more than one class loader at once.  In a future
1430     release this limitation will be lifted, and such libraries will be
1431     mapped privately.
1432
1433   * A program compiled by `gcj' will examine the `GCJ_PROPERTIES'
1434     environment variable and change its behavior in some ways.  In
1435     particular `GCJ_PROPERTIES' holds a list of assignments to global
1436     properties, such as would be set with the `-D' option to `java'.
1437     For instance, `java.compiler=gcj' is a valid (but currently
1438     meaningless) setting.
1439
1440
1441
1442File: gcj.info,  Node: Invoking gcjh,  Next: Invoking gjnih,  Prev: Compatibility,  Up: Top
1443
14443 Invoking gcjh
1445***************
1446
1447The `gcjh' program is used to generate header files from class files.
1448It can generate both CNI and JNI header files, as well as stub
1449implementation files which can be used as a basis for implementing the
1450required native methods.
1451
1452`-stubs'
1453     This causes `gcjh' to generate stub files instead of header files.
1454     By default the stub file will be named after the class, with a
1455     suffix of `.cc'.  In JNI mode, the default output file will have
1456     the suffix `.c'.
1457
1458`-jni'
1459     This tells `gcjh' to generate a JNI header or stub.  By default,
1460     CNI headers are generated.
1461
1462`-force'
1463     This option forces `gcjh' to write the output file.
1464
1465`-old'
1466     This option is accepted but ignored for compatibility.
1467
1468`-trace'
1469     This option is accepted but ignored for compatibility.
1470
1471`-J OPTION'
1472     This option is accepted but ignored for compatibility.
1473
1474`-add TEXT'
1475     Inserts TEXT into the class body.  This is ignored in JNI mode.
1476
1477`-append TEXT'
1478     Inserts TEXT into the header file after the class declaration.
1479     This is ignored in JNI mode.
1480
1481`-friend TEXT'
1482     Inserts TEXT into the class as a `friend' declaration.  This is
1483     ignored in JNI mode.
1484
1485`-prepend TEXT'
1486     Inserts TEXT into the header file before the class declaration.
1487     This is ignored in JNI mode.
1488
1489`--classpath=PATH'
1490`--CLASSPATH=PATH'
1491`--bootclasspath=PATH'
1492`-IDIRECTORY'
1493`-d DIRECTORY'
1494`-o FILE'
1495     These options are all identical to the corresponding `gcj' options.
1496
1497`-o FILE'
1498     Sets the output file name.  This cannot be used if there is more
1499     than one class on the command line.
1500
1501`-td DIRECTORY'
1502     Sets the name of the directory to use for temporary files.
1503
1504`-M'
1505     Print all dependencies to stdout; suppress ordinary output.
1506
1507`-MM'
1508     Print non-system dependencies to stdout; suppress ordinary output.
1509
1510`-MD'
1511     Print all dependencies to stdout.
1512
1513`-MMD'
1514     Print non-system dependencies to stdout.
1515
1516`--help'
1517     Print help about `gcjh' and exit.  No further processing is done.
1518
1519`--version'
1520     Print version information for `gcjh' and exit.  No further
1521     processing is done.
1522
1523`-v, --verbose'
1524     Print extra information while running.
1525
1526   All remaining options are considered to be names of classes.
1527
1528
1529File: gcj.info,  Node: Invoking gjnih,  Next: Invoking jv-scan,  Prev: Invoking gcjh,  Up: Top
1530
15314 Invoking gjnih
1532****************
1533
1534The `gjnih' program is used to generate JNI header files from class
1535files.  Running it is equivalent to running `gcjh -jni'.
1536
1537`-stubs'
1538     This causes `gjnih' to generate stub files instead of header files.
1539     By default the stub file will be named after the class, with a
1540     suffix of `.c'.
1541
1542`-jni'
1543     This option specifies the default behavior which is to generate a
1544     JNI header or stub.
1545
1546`-force'
1547     This option forces `gjnih' to write the output file.
1548
1549`-old'
1550     This option is accepted but ignored for compatibility.
1551
1552`-trace'
1553     This option is accepted but ignored for compatibility.
1554
1555`-J OPTION'
1556     This option is accepted but ignored for compatibility.
1557
1558`-add TEXT'
1559     Inserts TEXT into the class body.  This is ignored in by `gjnih'.
1560
1561`-append TEXT'
1562     Inserts TEXT into the header file after the class declaration.
1563     This is ignored in by `gjnih'.
1564
1565`-friend TEXT'
1566     Inserts TEXT into the class as a `friend' declaration.  This is
1567     ignored by `gjnih'.
1568
1569`-prepend TEXT'
1570     Inserts TEXT into the header file before the class declaration.
1571     This is ignored in by `gjnih'.
1572
1573`--classpath=PATH'
1574`--CLASSPATH=PATH'
1575`--bootclasspath=PATH'
1576`-IDIRECTORY'
1577`-d DIRECTORY'
1578`-o FILE'
1579     These options are all identical to the corresponding `gcj' options.
1580
1581`-o FILE'
1582     Sets the output file name.  This cannot be used if there is more
1583     than one class on the command line.
1584
1585`-td DIRECTORY'
1586     Sets the name of the directory to use for temporary files.
1587
1588`-M'
1589     Print all dependencies to stdout; suppress ordinary output.
1590
1591`-MM'
1592     Print non-system dependencies to stdout; suppress ordinary output.
1593
1594`-MD'
1595     Print all dependencies to stdout.
1596
1597`-MMD'
1598     Print non-system dependencies to stdout.
1599
1600`--help'
1601     Print help about `gjnih' and exit.  No further processing is done.
1602
1603`--version'
1604     Print version information for `gjnih' and exit.  No further
1605     processing is done.
1606
1607`-v, --verbose'
1608     Print extra information while running.
1609
1610   All remaining options are considered to be names of classes.
1611
1612
1613File: gcj.info,  Node: Invoking jv-scan,  Next: Invoking jcf-dump,  Prev: Invoking gjnih,  Up: Top
1614
16155 Invoking jv-scan
1616******************
1617
1618The `jv-scan' program can be used to print information about a Java
1619source file (`.java' file).
1620
1621`--no-assert'
1622     Don't recognize the `assert' keyword, for backwards compatibility
1623     with older versions of the language specification.
1624
1625`--complexity'
1626     This prints a complexity measure, related to cyclomatic
1627     complexity, for each input file.
1628
1629`--encoding=NAME'
1630     This works like the corresponding `gcj' option.
1631
1632`--print-main'
1633     This prints the name of the class in this file containing a `main'
1634     method.
1635
1636`--list-class'
1637     This lists the names of all classes defined in the input files.
1638
1639`--list-filename'
1640     If `--list-class' is given, this option causes `jv-scan' to also
1641     print the name of the file in which each class was found.
1642
1643`-o FILE'
1644     Print output to the named file.
1645
1646`--help'
1647     Print help, then exit.
1648
1649`--version'
1650     Print version number, then exit.
1651
1652
1653File: gcj.info,  Node: Invoking jcf-dump,  Next: Invoking gij,  Prev: Invoking jv-scan,  Up: Top
1654
16556 Invoking jcf-dump
1656*******************
1657
1658This is a class file examiner, similar to `javap'.  It will print
1659information about a number of classes, which are specified by class name
1660or file name.
1661
1662`-c'
1663     Disassemble method bodies.  By default method bodies are not
1664     printed.
1665
1666`--print-constants'
1667     Print the constant pool.  When printing a reference to a constant
1668     also print its index in the constant pool.
1669
1670`--javap'
1671     Generate output in `javap' format.  The implementation of this
1672     feature is very incomplete.
1673
1674`--classpath=PATH'
1675`--CLASSPATH=PATH'
1676`-IDIRECTORY'
1677`-o FILE'
1678     These options as the same as the corresponding `gcj' options.
1679
1680`--help'
1681     Print help, then exit.
1682
1683`--version'
1684     Print version number, then exit.
1685
1686`-v, --verbose'
1687     Print extra information while running.  Implies
1688     `--print-constants'.
1689
1690
1691File: gcj.info,  Node: Invoking gij,  Next: Invoking gcj-dbtool,  Prev: Invoking jcf-dump,  Up: Top
1692
16937 Invoking gij
1694**************
1695
1696`gij' is a Java bytecode interpreter included with `libgcj'.  `gij' is
1697not available on every platform; porting it requires a small amount of
1698assembly programming which has not been done for all the targets
1699supported by `gcj'.
1700
1701   The primary argument to `gij' is the name of a class or, with
1702`-jar', a jar file.  Options before this argument are interpreted by
1703`gij'; remaining options are passed to the interpreted program.
1704
1705   If a class name is specified and this class does not have a `main'
1706method with the appropriate signature (a `static void' method with a
1707`String[]' as its sole argument), then `gij' will print an error and
1708exit.
1709
1710   If a jar file is specified then `gij' will use information in it to
1711determine which class' `main' method will be invoked.
1712
1713   `gij' will invoke the `main' method with all the remaining
1714command-line options.
1715
1716   Note that `gij' is not limited to interpreting code.  Because
1717`libgcj' includes a class loader which can dynamically load shared
1718objects, it is possible to give `gij' the name of a class which has
1719been compiled and put into a shared library on the class path.
1720
1721`-cp PATH'
1722`-classpath PATH'
1723     Set the initial class path.  The class path is used for finding
1724     class and resource files.  If specified, this option overrides the
1725     `CLASSPATH' environment variable.  Note that this option is
1726     ignored if `-jar' is used.
1727
1728`-DNAME[=VALUE]'
1729     This defines a system property named NAME with value VALUE.  If
1730     VALUE is not specified then it defaults to the empty string.
1731     These system properties are initialized at the program's startup
1732     and can be retrieved at runtime using the
1733     `java.lang.System.getProperty' method.
1734
1735`-ms=NUMBER'
1736     Equivalent to `-Xms'.
1737
1738`-mx=NUMBER'
1739     Equivalent to `-Xmx'.
1740
1741`-noverify'
1742     Do not verify compliance of bytecode with the VM specification. In
1743     addition, this option disables type verification which is
1744     otherwise performed on BC-ABI compiled code.
1745
1746`-X'
1747`-XARGUMENT'
1748     Supplying `-X' by itself will cause `gij' to list all the
1749     supported `-X' options.  Currently these options are supported:
1750
1751    `-XmsSIZE'
1752          Set the initial heap size.
1753
1754    `-XmxSIZE'
1755          Set the maximum heap size.
1756
1757    `-XssSIZE'
1758          Set the thread stack size.
1759
1760     Unrecognized `-X' options are ignored, for compatibility with
1761     other runtimes.
1762
1763`-jar'
1764     This indicates that the name passed to `gij' should be interpreted
1765     as the name of a jar file, not a class.
1766
1767`--help'
1768`-?'
1769     Print help, then exit.
1770
1771`--showversion'
1772     Print version number and continue.
1773
1774`--fullversion'
1775     Print detailed version information, then exit.
1776
1777`--version'
1778     Print version number, then exit.
1779
1780`-verbose'
1781`-verbose:class'
1782     Each time a class is initialized, print a short message on
1783     standard error.
1784
1785   `gij' also recognizes and ignores the following options, for
1786compatibility with existing application launch scripts: `-client',
1787`-server', `-hotspot', `-jrockit', `-agentlib', `-agentpath', `-debug',
1788`-d32', `-d64', `-javaagent', `-noclassgc', `-verify', and
1789`-verifyremote'.
1790
1791
1792File: gcj.info,  Node: Invoking gcj-dbtool,  Next: Invoking jv-convert,  Prev: Invoking gij,  Up: Top
1793
17948 Invoking gcj-dbtool.
1795**********************
1796
1797`gcj-dbtool' is a tool for creating and manipulating class file mapping
1798databases.  `libgcj' can use these databases to find a shared library
1799corresponding to the bytecode representation of a class.  This
1800functionality is useful for ahead-of-time compilation of a program that
1801has no knowledge of `gcj'.
1802
1803   `gcj-dbtool' works best if all the jar files added to it are
1804compiled using `-findirect-dispatch'.
1805
1806   Note that `gcj-dbtool' is currently available as "preview
1807technology".  We believe it is a reasonable way to allow
1808application-transparent ahead-of-time compilation, but this is an
1809unexplored area.  We welcome your comments.
1810
1811`-n DBFILE [SIZE]'
1812     This creates a new database.  Currently, databases cannot be
1813     resized; you can choose a larger initial size if desired.  The
1814     default size is 32,749.
1815
1816`-a DBFILE JARFILE LIB'
1817`-f DBFILE JARFILE LIB'
1818     This adds a jar file to the database.  For each class file in the
1819     jar, a cryptographic signature of the bytecode representation of
1820     the class is recorded in the database.  At runtime, a class is
1821     looked up by its signature and the compiled form of the class is
1822     looked for in the corresponding shared library.  The `-a' option
1823     will verify that LIB exists before adding it to the database; `-f'
1824     skips this check.
1825
1826`[`-'][`-0'] -m DBFILE DBFILE,[DBFILE]'
1827     Merge a number of databases.  The output database overwrites any
1828     existing database.  To add databases into an existing database,
1829     include the destination in the list of sources.
1830
1831     If `-' or `-0' are used, the list of files to read is taken from
1832     standard input instead of the command line.  For `-0', Input
1833     filenames are terminated by a null character instead of by
1834     whitespace.  Useful when arguments might contain white space.  The
1835     GNU find -print0 option produces input suitable for this mode.
1836
1837`-t DBFILE'
1838     Test a database.
1839
1840`-l DBFILE'
1841     List the contents of a database.
1842
1843`-p'
1844     Print the name of the default database.  If there is no default
1845     database, this prints a blank line.  If LIBDIR is specified, use
1846     it instead of the default library directory component of the
1847     database name.
1848
1849`--help'
1850     Print a help message, then exit.
1851
1852`--version'
1853`-v'
1854     Print version information, then exit.
1855
1856
1857
1858File: gcj.info,  Node: Invoking jv-convert,  Next: Invoking grmic,  Prev: Invoking gcj-dbtool,  Up: Top
1859
18609 Invoking jv-convert
1861*********************
1862
1863`jv-convert' [`OPTION'] ... [INPUTFILE [OUTPUTFILE]]
1864
1865   `jv-convert' is a utility included with `libgcj' which converts a
1866file from one encoding to another.  It is similar to the Unix `iconv'
1867utility.
1868
1869   The encodings supported by `jv-convert' are platform-dependent.
1870Currently there is no way to get a list of all supported encodings.
1871
1872`--encoding NAME'
1873`--from NAME'
1874     Use NAME as the input encoding.  The default is the current
1875     locale's encoding.
1876
1877`--to NAME'
1878     Use NAME as the output encoding.  The default is the `JavaSrc'
1879     encoding; this is ASCII with `\u' escapes for non-ASCII characters.
1880
1881`-i FILE'
1882     Read from FILE.  The default is to read from standard input.
1883
1884`-o FILE'
1885     Write to FILE.  The default is to write to standard output.
1886
1887`--reverse'
1888     Swap the input and output encodings.
1889
1890`--help'
1891     Print a help message, then exit.
1892
1893`--version'
1894     Print version information, then exit.
1895
1896
1897File: gcj.info,  Node: Invoking grmic,  Next: Invoking grmiregistry,  Prev: Invoking jv-convert,  Up: Top
1898
189910 Invoking grmic
1900*****************
1901
1902`grmic' [`OPTION'] ... CLASS ...
1903
1904   `grmic' is a utility included with `libgcj' which generates stubs
1905for remote objects.
1906
1907   Note that this program isn't yet fully compatible with the JDK
1908`grmic'.  Some options, such as `-classpath', are recognized but
1909currently ignored.  We have left these options undocumented for now.
1910
1911   Long options can also be given with a GNU-style leading `--'.  For
1912instance, `--help' is accepted.
1913
1914`-keep'
1915`-keepgenerated'
1916     By default, `grmic' deletes intermediate files.  Either of these
1917     options causes it not to delete such files.
1918
1919`-v1.1'
1920     Cause `grmic' to create stubs and skeletons for the 1.1 protocol
1921     version.
1922
1923`-vcompat'
1924     Cause `grmic' to create stubs and skeletons compatible with both
1925     the 1.1 and 1.2 protocol versions.  This is the default.
1926
1927`-v1.2'
1928     Cause `grmic' to create stubs and skeletons for the 1.2 protocol
1929     version.
1930
1931`-nocompile'
1932     Don't compile the generated files.
1933
1934`-verbose'
1935     Print information about what `grmic' is doing.
1936
1937`-d DIRECTORY'
1938     Put output files in DIRECTORY.  By default the files are put in
1939     the current working directory.
1940
1941`-help'
1942     Print a help message, then exit.
1943
1944`-version'
1945     Print version information, then exit.
1946
1947
1948File: gcj.info,  Node: Invoking grmiregistry,  Next: About CNI,  Prev: Invoking grmic,  Up: Top
1949
195011 Invoking grmiregistry
1951************************
1952
1953`grmic' [`OPTION'] ... [PORT]
1954
1955   `grmiregistry' starts a remote object registry on the current host.
1956If no port number is specified, then port 1099 is used.
1957
1958`--help'
1959     Print a help message, then exit.
1960
1961`--version'
1962     Print version information, then exit.
1963
1964
1965File: gcj.info,  Node: About CNI,  Next: System properties,  Prev: Invoking grmiregistry,  Up: Top
1966
196712 About CNI
1968************
1969
1970This documents CNI, the Compiled Native Interface, which is is a
1971convenient way to write Java native methods using C++.  This is a more
1972efficient, more convenient, but less portable alternative to the
1973standard JNI (Java Native Interface).
1974
1975* Menu:
1976
1977* Basic concepts::              Introduction to using CNI.
1978* Packages::                    How packages are mapped to C++.
1979* Primitive types::             Handling primitive Java types in C++.
1980* Reference types::             Handling Java reference types in C++.
1981* Interfaces::                  How Java interfaces map to C++.
1982* Objects and Classes::         C++ and Java classes.
1983* Class Initialization::        How objects are initialized.
1984* Object allocation::           How to create Java objects in C++.
1985* Memory allocation::           How to allocate and free memory.
1986* Arrays::                      Dealing with Java arrays in C++.
1987* Methods::                     Java methods in C++.
1988* Strings::                     Information about Java Strings.
1989* Mixing with C++::             How CNI can interoperate with C++.
1990* Exception Handling::          How exceptions are handled.
1991* Synchronization::             Synchronizing between Java and C++.
1992* Invocation::			Starting the Java runtime from C++.
1993* Reflection::                  Using reflection from C++.
1994
1995
1996File: gcj.info,  Node: Basic concepts,  Next: Packages,  Up: About CNI
1997
199812.1 Basic concepts
1999===================
2000
2001In terms of languages features, Java is mostly a subset of C++.  Java
2002has a few important extensions, plus a powerful standard class library,
2003but on the whole that does not change the basic similarity.  Java is a
2004hybrid object-oriented language, with a few native types, in addition
2005to class types.  It is class-based, where a class may have static as
2006well as per-object fields, and static as well as instance methods.
2007Non-static methods may be virtual, and may be overloaded.  Overloading
2008is resolved at compile time by matching the actual argument types
2009against the parameter types.  Virtual methods are implemented using
2010indirect calls through a dispatch table (virtual function table).
2011Objects are allocated on the heap, and initialized using a constructor
2012method.  Classes are organized in a package hierarchy.
2013
2014   All of the listed attributes are also true of C++, though C++ has
2015extra features (for example in C++ objects may be allocated not just on
2016the heap, but also statically or in a local stack frame).  Because
2017`gcj' uses the same compiler technology as G++ (the GNU C++ compiler),
2018it is possible to make the intersection of the two languages use the
2019same ABI (object representation and calling conventions).  The key idea
2020in CNI is that Java objects are C++ objects, and all Java classes are
2021C++ classes (but not the other way around).  So the most important task
2022in integrating Java and C++ is to remove gratuitous incompatibilities.
2023
2024   You write CNI code as a regular C++ source file.  (You do have to use
2025a Java/CNI-aware C++ compiler, specifically a recent version of G++.)
2026
2027A CNI C++ source file must have:
2028
2029     #include <gcj/cni.h>
2030
2031and then must include one header file for each Java class it uses, e.g.:
2032
2033     #include <java/lang/Character.h>
2034     #include <java/util/Date.h>
2035     #include <java/lang/IndexOutOfBoundsException.h>
2036
2037These header files are automatically generated by `gcjh'.
2038
2039   CNI provides some functions and macros to make using Java objects and
2040primitive types from C++ easier.  In general, these CNI functions and
2041macros start with the `Jv' prefix, for example the function
2042`JvNewObjectArray'.  This convention is used to avoid conflicts with
2043other libraries.  Internal functions in CNI start with the prefix
2044`_Jv_'.  You should not call these; if you find a need to, let us know
2045and we will try to come up with an alternate solution.
2046
204712.1.1 Limitations
2048------------------
2049
2050Whilst a Java class is just a C++ class that doesn't mean that you are
2051freed from the shackles of Java, a CNI C++ class must adhere to the
2052rules of the Java programming language.
2053
2054   For example: it is not possible to declare a method in a CNI class
2055that will take a C string (`char*') as an argument, or to declare a
2056member variable of some non-Java datatype.
2057
2058
2059File: gcj.info,  Node: Packages,  Next: Primitive types,  Prev: Basic concepts,  Up: About CNI
2060
206112.2 Packages
2062=============
2063
2064The only global names in Java are class names, and packages.  A
2065"package" can contain zero or more classes, and also zero or more
2066sub-packages.  Every class belongs to either an unnamed package or a
2067package that has a hierarchical and globally unique name.
2068
2069   A Java package is mapped to a C++ "namespace".  The Java class
2070`java.lang.String' is in the package `java.lang', which is a
2071sub-package of `java'.  The C++ equivalent is the class
2072`java::lang::String', which is in the namespace `java::lang' which is
2073in the namespace `java'.
2074
2075Here is how you could express this:
2076
2077     (// Declare the class(es), possibly in a header file:
2078     namespace java {
2079       namespace lang {
2080         class Object;
2081         class String;
2082         ...
2083       }
2084     }
2085
2086     class java::lang::String : public java::lang::Object
2087     {
2088       ...
2089     };
2090
2091The `gcjh' tool automatically generates the necessary namespace
2092declarations.
2093
209412.2.1 Leaving out package names
2095--------------------------------
2096
2097Always using the fully-qualified name of a java class can be tiresomely
2098verbose.  Using the full qualified name also ties the code to a single
2099package making code changes necessary should the class move from one
2100package to another.  The Java `package' declaration specifies that the
2101following class declarations are in the named package, without having
2102to explicitly name the full package qualifiers.  The `package'
2103declaration can be followed by zero or more `import' declarations, which
2104allows either a single class or all the classes in a package to be
2105named by a simple identifier.  C++ provides something similar with the
2106`using' declaration and directive.
2107
2108In Java:
2109
2110     import PACKAGE-NAME.CLASS-NAME;
2111
2112allows the program text to refer to CLASS-NAME as a shorthand for the
2113fully qualified name: `PACKAGE-NAME.CLASS-NAME'.
2114
2115To achieve the same effect C++, you have to do this:
2116
2117     using PACKAGE-NAME::CLASS-NAME;
2118
2119Java can also cause imports on demand, like this:
2120
2121     import PACKAGE-NAME.*;
2122
2123Doing this allows any class from the package PACKAGE-NAME to be
2124referred to only by its class-name within the program text.
2125
2126The same effect can be achieved in C++ like this:
2127
2128     using namespace PACKAGE-NAME;
2129
2130
2131File: gcj.info,  Node: Primitive types,  Next: Reference types,  Prev: Packages,  Up: About CNI
2132
213312.3 Primitive types
2134====================
2135
2136Java provides 8 "primitives" types which represent integers, floats,
2137characters and booleans (and also the void type).  C++ has its own very
2138similar concrete types.  Such types in C++ however are not always
2139implemented in the same way (an int might be 16, 32 or 64 bits for
2140example) so CNI provides a special C++ type for each primitive Java
2141type:
2142
2143*Java type*    *C/C++ typename*   *Description*
2144`char'         `jchar'            16 bit Unicode character
2145`boolean'      `jboolean'         logical (true or false) values
2146`byte'         `jbyte'            8-bit signed integer
2147`short'        `jshort'           16 bit signed integer
2148`int'          `jint'             32 bit signed integer
2149`long'         `jlong'            64 bit signed integer
2150`float'        `jfloat'           32 bit IEEE floating point number
2151`double'       `jdouble'          64 bit IEEE floating point number
2152`void'         `void'             no value
2153
2154   When referring to a Java type You should always use these C++
2155typenames (e.g.: `jint') to avoid disappointment.
2156
215712.3.1 Reference types associated with primitive types
2158------------------------------------------------------
2159
2160In Java each primitive type has an associated reference type, e.g.:
2161`boolean' has an associated `java.lang.Boolean.TYPE' class.  In order
2162to make working with such classes easier GCJ provides the macro
2163`JvPrimClass':
2164
2165 -- macro: JvPrimClass type
2166     Return a pointer to the `Class' object corresponding to the type
2167     supplied.
2168
2169          JvPrimClass(void) => java.lang.Void.TYPE
2170
2171
2172
2173File: gcj.info,  Node: Reference types,  Next: Interfaces,  Prev: Primitive types,  Up: About CNI
2174
217512.4 Reference types
2176====================
2177
2178A Java reference type is treated as a class in C++.  Classes and
2179interfaces are handled this way.  A Java reference is translated to a
2180C++ pointer, so for instance a Java `java.lang.String' becomes, in C++,
2181`java::lang::String *'.
2182
2183   CNI provides a few built-in typedefs for the most common classes:
2184*Java type*            *C++ typename*     *Description*
2185`java.lang.Object'     `jobject'          Object type
2186`java.lang.String'     `jstring'          String type
2187`java.lang.Class'      `jclass'           Class type
2188
2189   Every Java class or interface has a corresponding `Class' instance.
2190These can be accessed in CNI via the static `class$' field of a class.
2191The `class$' field is of type `Class' (and not `Class *'), so you will
2192typically take the address of it.
2193
2194   Here is how you can refer to the class of `String', which in Java
2195would be written `String.class':
2196
2197     using namespace java::lang;
2198     doSomething (&String::class$);
2199
2200
2201File: gcj.info,  Node: Interfaces,  Next: Objects and Classes,  Prev: Reference types,  Up: About CNI
2202
220312.5 Interfaces
2204===============
2205
2206A Java class can "implement" zero or more "interfaces", in addition to
2207inheriting from a single base class.
2208
2209   CNI allows CNI code to implement methods of interfaces.  You can
2210also call methods through interface references, with some limitations.
2211
2212   CNI doesn't understand interface inheritance at all yet.  So, you
2213can only call an interface method when the declared type of the field
2214being called matches the interface which declares that method.  The
2215workaround is to cast the interface reference to the right
2216superinterface.
2217
2218   For example if you have:
2219
2220     interface A
2221     {
2222       void a();
2223     }
2224
2225     interface B extends A
2226     {
2227       void b();
2228     }
2229
2230   and declare a variable of type `B' in C++, you can't call `a()'
2231unless you cast it to an `A' first.
2232
2233
2234File: gcj.info,  Node: Objects and Classes,  Next: Class Initialization,  Prev: Interfaces,  Up: About CNI
2235
223612.6 Objects and Classes
2237========================
2238
223912.6.1 Classes
2240--------------
2241
2242All Java classes are derived from `java.lang.Object'.  C++ does not
2243have a unique root class, but we use the C++ class `java::lang::Object'
2244as the C++ version of the `java.lang.Object' Java class.  All other
2245Java classes are mapped into corresponding C++ classes derived from
2246`java::lang::Object'.
2247
2248   Interface inheritance (the `implements' keyword) is currently not
2249reflected in the C++ mapping.
2250
225112.6.2 Object fields
2252--------------------
2253
2254Each object contains an object header, followed by the instance fields
2255of the class, in order.  The object header consists of a single pointer
2256to a dispatch or virtual function table.  (There may be extra fields
2257_in front of_ the object, for example for memory management, but this
2258is invisible to the application, and the reference to the object points
2259to the dispatch table pointer.)
2260
2261   The fields are laid out in the same order, alignment, and size as in
2262C++.  Specifically, 8-bit and 16-bit native types (`byte', `short',
2263`char', and `boolean') are _not_ widened to 32 bits.  Note that the
2264Java VM does extend 8-bit and 16-bit types to 32 bits when on the VM
2265stack or temporary registers.
2266
2267   If you include the `gcjh'-generated header for a class, you can
2268access fields of Java classes in the _natural_ way.  For example, given
2269the following Java class:
2270
2271     public class Int
2272     {
2273       public int i;
2274       public Int (int i) { this.i = i; }
2275       public static Int zero = new Int(0);
2276     }
2277
2278   you can write:
2279
2280     #include <gcj/cni.h>;
2281     #include <Int>;
2282
2283     Int*
2284     mult (Int *p, jint k)
2285     {
2286       if (k == 0)
2287         return Int::zero;  // Static member access.
2288       return new Int(p->i * k);
2289     }
2290
229112.6.3 Access specifiers
2292------------------------
2293
2294CNI does not strictly enforce the Java access specifiers, because Java
2295permissions cannot be directly mapped into C++ permission.  Private
2296Java fields and methods are mapped to private C++ fields and methods,
2297but other fields and methods are mapped to public fields and methods.
2298
2299
2300File: gcj.info,  Node: Class Initialization,  Next: Object allocation,  Prev: Objects and Classes,  Up: About CNI
2301
230212.7 Class Initialization
2303=========================
2304
2305Java requires that each class be automatically initialized at the time
2306of the first active use.  Initializing a class involves initializing
2307the static fields, running code in class initializer methods, and
2308initializing base classes.  There may also be some implementation
2309specific actions, such as allocating `String' objects corresponding to
2310string literals in the code.
2311
2312   The GCJ compiler inserts calls to `JvInitClass' at appropriate
2313places to ensure that a class is initialized when required.  The C++
2314compiler does not insert these calls automatically--it is the
2315programmer's responsibility to make sure classes are initialized.
2316However, this is fairly painless because of the conventions assumed by
2317the Java system.
2318
2319   First, `libgcj' will make sure a class is initialized before an
2320instance of that object is created.  This is one of the
2321responsibilities of the `new' operation.  This is taken care of both in
2322Java code, and in C++ code.  When G++ sees a `new' of a Java class, it
2323will call a routine in `libgcj' to allocate the object, and that
2324routine will take care of initializing the class.  Note however that
2325this does not happen for Java arrays; you must allocate those using the
2326appropriate CNI function.  It follows that you can access an instance
2327field, or call an instance (non-static) method and be safe in the
2328knowledge that the class and all of its base classes have been
2329initialized.
2330
2331   Invoking a static method is also safe.  This is because the Java
2332compiler adds code to the start of a static method to make sure the
2333class is initialized.  However, the C++ compiler does not add this
2334extra code.  Hence, if you write a native static method using CNI, you
2335are responsible for calling `JvInitClass' before doing anything else in
2336the method (unless you are sure it is safe to leave it out).
2337
2338   Accessing a static field also requires the class of the field to be
2339initialized.  The Java compiler will generate code to call
2340`JvInitClass' before getting or setting the field.  However, the C++
2341compiler will not generate this extra code, so it is your
2342responsibility to make sure the class is initialized before you access
2343a static field from C++.
2344
2345
2346File: gcj.info,  Node: Object allocation,  Next: Memory allocation,  Prev: Class Initialization,  Up: About CNI
2347
234812.8 Object allocation
2349======================
2350
2351New Java objects are allocated using a "class instance creation
2352expression", e.g.:
2353
2354     new TYPE ( ... )
2355
2356   The same syntax is used in C++.  The main difference is that C++
2357objects have to be explicitly deleted; in Java they are automatically
2358deleted by the garbage collector.  Using CNI, you can allocate a new
2359Java object using standard C++ syntax and the C++ compiler will allocate
2360memory from the garbage collector.  If you have overloaded
2361constructors, the compiler will choose the correct one using standard
2362C++ overload resolution rules.
2363
2364For example:
2365
2366     java::util::Hashtable *ht = new java::util::Hashtable(120);
2367
2368
2369File: gcj.info,  Node: Memory allocation,  Next: Arrays,  Prev: Object allocation,  Up: About CNI
2370
237112.9 Memory allocation
2372======================
2373
2374When allocating memory in CNI methods it is best to handle
2375out-of-memory conditions by throwing a Java exception.  These functions
2376are provided for that purpose:
2377
2378 -- Function: void* JvMalloc (jsize SIZE)
2379     Calls malloc.  Throws `java.lang.OutOfMemoryError' if allocation
2380     fails.
2381
2382 -- Function: void* JvRealloc (void* PTR, jsize SIZE)
2383     Calls realloc.  Throws `java.lang.OutOfMemoryError' if
2384     reallocation fails.
2385
2386 -- Function: void JvFree (void* PTR)
2387     Calls free.
2388
2389
2390File: gcj.info,  Node: Arrays,  Next: Methods,  Prev: Memory allocation,  Up: About CNI
2391
239212.10 Arrays
2393============
2394
2395While in many ways Java is similar to C and C++, it is quite different
2396in its treatment of arrays.  C arrays are based on the idea of pointer
2397arithmetic, which would be incompatible with Java's security
2398requirements.  Java arrays are true objects (array types inherit from
2399`java.lang.Object').  An array-valued variable is one that contains a
2400reference (pointer) to an array object.
2401
2402   Referencing a Java array in C++ code is done using the `JArray'
2403template, which as defined as follows:
2404
2405     class __JArray : public java::lang::Object
2406     {
2407     public:
2408       int length;
2409     };
2410
2411     template<class T>
2412     class JArray : public __JArray
2413     {
2414       T data[0];
2415     public:
2416       T& operator[](jint i) { return data[i]; }
2417     };
2418
2419   There are a number of `typedef's which correspond to `typedef's from
2420the JNI.  Each is the type of an array holding objects of the relevant
2421type:
2422
2423     typedef __JArray *jarray;
2424     typedef JArray<jobject> *jobjectArray;
2425     typedef JArray<jboolean> *jbooleanArray;
2426     typedef JArray<jbyte> *jbyteArray;
2427     typedef JArray<jchar> *jcharArray;
2428     typedef JArray<jshort> *jshortArray;
2429     typedef JArray<jint> *jintArray;
2430     typedef JArray<jlong> *jlongArray;
2431     typedef JArray<jfloat> *jfloatArray;
2432     typedef JArray<jdouble> *jdoubleArray;
2433
2434 -- Method on template<class T>: T* elements (JArray<T> ARRAY)
2435     This template function can be used to get a pointer to the
2436     elements of the `array'.  For instance, you can fetch a pointer to
2437     the integers that make up an `int[]' like so:
2438
2439          extern jintArray foo;
2440          jint *intp = elements (foo);
2441
2442     The name of this function may change in the future.
2443
2444 -- Function: jobjectArray JvNewObjectArray (jsize LENGTH, jclass
2445          KLASS, jobject INIT)
2446     This creates a new array whose elements have reference type.
2447     `klass' is the type of elements of the array and `init' is the
2448     initial value put into every slot in the array.
2449
2450     using namespace java::lang;
2451     JArray<String *> *array
2452       = (JArray<String *> *) JvNewObjectArray(length, &String::class$, NULL);
2453
245412.10.1 Creating arrays
2455-----------------------
2456
2457For each primitive type there is a function which can be used to create
2458a new array of that type.  The name of the function is of the form:
2459
2460     JvNewTYPEArray
2461
2462For example:
2463
2464     JvNewBooleanArray
2465
2466can be used to create an array of Java primitive boolean types.
2467
2468The following function definition is the template for all such
2469functions:
2470
2471 -- Function: jbooleanArray JvNewBooleanArray (jint LENGTH)
2472     Create's an array LENGTH indices long.
2473
2474 -- Function: jsize JvGetArrayLength (jarray ARRAY)
2475     Returns the length of the ARRAY.
2476
2477
2478File: gcj.info,  Node: Methods,  Next: Strings,  Prev: Arrays,  Up: About CNI
2479
248012.11 Methods
2481=============
2482
2483Java methods are mapped directly into C++ methods.  The header files
2484generated by `gcjh' include the appropriate method definitions.
2485Basically, the generated methods have the same names and
2486_corresponding_ types as the Java methods, and are called in the
2487natural manner.
2488
248912.11.1 Overloading
2490-------------------
2491
2492Both Java and C++ provide method overloading, where multiple methods in
2493a class have the same name, and the correct one is chosen (at compile
2494time) depending on the argument types.  The rules for choosing the
2495correct method are (as expected) more complicated in C++ than in Java,
2496but given a set of overloaded methods generated by `gcjh' the C++
2497compiler will choose the expected one.
2498
2499   Common assemblers and linkers are not aware of C++ overloading, so
2500the standard implementation strategy is to encode the parameter types
2501of a method into its assembly-level name.  This encoding is called
2502"mangling", and the encoded name is the "mangled name".  The same
2503mechanism is used to implement Java overloading.  For C++/Java
2504interoperability, it is important that both the Java and C++ compilers
2505use the _same_ encoding scheme.
2506
250712.11.2 Static methods
2508----------------------
2509
2510Static Java methods are invoked in CNI using the standard C++ syntax,
2511using the `::' operator rather than the `.' operator.
2512
2513For example:
2514
2515     jint i = java::lang::Math::round((jfloat) 2.3);
2516
2517C++ method definition syntax is used to define a static native method.
2518For example:
2519
2520     #include <java/lang/Integer>
2521     java::lang::Integer*
2522     java::lang::Integer::getInteger(jstring str)
2523     {
2524       ...
2525     }
2526
252712.11.3 Object Constructors
2528---------------------------
2529
2530Constructors are called implicitly as part of object allocation using
2531the `new' operator.
2532
2533For example:
2534
2535     java::lang::Integer *x = new java::lang::Integer(234);
2536
2537   Java does not allow a constructor to be a native method.  This
2538limitation can be coded round however because a constructor can _call_
2539a native method.
2540
254112.11.4 Instance methods
2542------------------------
2543
2544Calling a Java instance method from a C++ CNI method is done using the
2545standard C++ syntax, e.g.:
2546
2547     // First create the Java object.
2548     java::lang::Integer *x = new java::lang::Integer(234);
2549     // Now call a method.
2550     jint prim_value = x->intValue();
2551     if (x->longValue == 0)
2552       ...
2553
2554Defining a Java native instance method is also done the natural way:
2555
2556     #include <java/lang/Integer.h>
2557
2558     jdouble
2559     java::lang:Integer::doubleValue()
2560     {
2561       return (jdouble) value;
2562     }
2563
256412.11.5 Interface methods
2565-------------------------
2566
2567In Java you can call a method using an interface reference.  This is
2568supported, but not completely.  *Note Interfaces::.
2569
2570
2571File: gcj.info,  Node: Strings,  Next: Mixing with C++,  Prev: Methods,  Up: About CNI
2572
257312.12 Strings
2574=============
2575
2576CNI provides a number of utility functions for working with Java Java
2577`String' objects.  The names and interfaces are analogous to those of
2578JNI.
2579
2580 -- Function: jstring JvNewString (const char* CHARS, jsize LEN)
2581     Returns a Java `String' object with characters from the C string
2582     CHARS up to the index LEN in that array.
2583
2584 -- Function: jstring JvNewStringLatin1 (const char* BYTES, jsize LEN)
2585     Returns a Java `String' made up of LEN bytes from BYTES.
2586
2587 -- Function: jstring JvNewStringLatin1 (const char* BYTES)
2588     As above but the length of the `String' is `strlen(BYTES)'.
2589
2590 -- Function: jstring JvNewStringUTF (const char* BYTES)
2591     Returns a `String' which is made up of the UTF encoded characters
2592     present in the C string BYTES.
2593
2594 -- Function: jchar* JvGetStringChars (jstring STR)
2595     Returns a pointer to an array of characters making up the `String'
2596     STR.
2597
2598 -- Function: int JvGetStringUTFLength (jstring STR)
2599     Returns the number of bytes required to encode the contents of the
2600     `String' STR in UTF-8.
2601
2602 -- Function: jsize JvGetStringUTFRegion (jstring STR, jsize START,
2603          jsize LEN, char* BUF)
2604     Puts the UTF-8 encoding of a region of the `String' STR into the
2605     buffer `buf'.  The region to fetch is marked by START and LEN.
2606
2607     Note that BUF is a buffer, not a C string.  It is _not_ null
2608     terminated.
2609
2610
2611File: gcj.info,  Node: Mixing with C++,  Next: Exception Handling,  Prev: Strings,  Up: About CNI
2612
261312.13 Interoperating with C/C++
2614===============================
2615
2616Because CNI is designed to represent Java classes and methods it cannot
2617be mixed readily with C/C++ types.
2618
2619   One important restriction is that Java classes cannot have non-Java
2620type instance or static variables and cannot have methods which take
2621non-Java types as arguments or return non-Java types.
2622
2623None of the following is possible with CNI:
2624
2625
2626     class ::MyClass : public java::lang::Object
2627     {
2628        char* variable;  // char* is not a valid Java type.
2629     }
2630
2631
2632     uint
2633     ::SomeClass::someMethod (char *arg)
2634     {
2635       .
2636       .
2637       .
2638     }   // `uint' is not a valid Java type, neither is `char*'
2639
2640Of course, it is ok to use C/C++ types within the scope of a method:
2641
2642     jint
2643     ::SomeClass::otherMethod (jstring str)
2644     {
2645        char *arg = ...
2646        .
2647        .
2648        .
2649     }
2650
265112.13.1 RawData
2652---------------
2653
2654The above restriction can be problematic, so CNI includes the
2655`gnu.gcj.RawData' class.  The `RawData' class is a "non-scanned
2656reference" type.  In other words variables declared of type `RawData'
2657can contain any data and are not checked by the compiler or memory
2658manager in any way.
2659
2660   This means that you can put C/C++ data structures (including classes)
2661in your CNI classes, as long as you use the appropriate cast.
2662
2663Here are some examples:
2664
2665
2666     class ::MyClass : public java::lang::Object
2667     {
2668        gnu.gcj.RawData string;
2669
2670        MyClass ();
2671        gnu.gcj.RawData getText ();
2672        void printText ();
2673     }
2674
2675     ::MyClass::MyClass ()
2676     {
2677        char* text = ...
2678        string = text;
2679     }
2680
2681     gnu.gcj.RawData
2682     ::MyClass::getText ()
2683     {
2684        return string;
2685     }
2686
2687     void
2688     ::MyClass::printText ()
2689     {
2690       printf("%s\n", (char*) string);
2691     }
2692
269312.13.2 RawDataManaged
2694----------------------
2695
2696`gnu.gcj.RawDataManaged' is another type used to indicate special data
2697used by native code. Unlike the `RawData' type, fields declared as
2698`RawDataManaged' will be "marked" by the memory manager and considered
2699for garbage collection.
2700
2701   Native data which is allocated using CNI's `JvAllocBytes()' function
2702and stored in a `RawDataManaged' will be automatically freed when the
2703Java object it is associated with becomes unreachable.
2704
270512.13.3 Native memory allocation
2706--------------------------------
2707
2708 -- Function: void* JvAllocBytes (jsize SIZE)
2709     Allocates SIZE bytes from the heap.  The memory returned is zeroed.
2710     This memory is not scanned for pointers by the garbage collector,
2711     but will be freed if no references to it are discovered.
2712
2713     This function can be useful if you need to associate some native
2714     data with a Java object. Using a CNI's special `RawDataManaged'
2715     type, native data allocated with `JvAllocBytes' will be
2716     automatically freed when the Java object itself becomes
2717     unreachable.
2718
271912.13.4 Posix signals
2720---------------------
2721
2722On Posix based systems the `libgcj' library uses several signals
2723internally.  CNI code should not attempt to use the same signals as
2724doing so may cause `libgcj' and/or the CNI code to fail.
2725
2726   SIGSEGV is used on many systems to generate `NullPointerExceptions'.
2727SIGCHLD is used internally by `Runtime.exec()'.  Several other signals
2728(that vary from platform to platform) can be used by the memory manager
2729and by `Thread.interrupt()'.
2730
2731
2732File: gcj.info,  Node: Exception Handling,  Next: Synchronization,  Prev: Mixing with C++,  Up: About CNI
2733
273412.14 Exception Handling
2735========================
2736
2737While C++ and Java share a common exception handling framework, things
2738are not yet perfectly integrated.  The main issue is that the run-time
2739type information facilities of the two languages are not integrated.
2740
2741   Still, things work fairly well.  You can throw a Java exception from
2742C++ using the ordinary `throw' construct, and this exception can be
2743caught by Java code.  Similarly, you can catch an exception thrown from
2744Java using the C++ `catch' construct.
2745
2746Here is an example:
2747
2748     if (i >= count)
2749        throw new java::lang::IndexOutOfBoundsException();
2750
2751   Normally, G++ will automatically detect when you are writing C++
2752code that uses Java exceptions, and handle them appropriately.
2753However, if C++ code only needs to execute destructors when Java
2754exceptions are thrown through it, GCC will guess incorrectly.  Sample
2755problematic code:
2756
2757     struct S { ~S(); };
2758
2759     extern void bar();    // Is implemented in Java and may throw exceptions.
2760
2761     void foo()
2762     {
2763       S s;
2764       bar();
2765     }
2766
2767   The usual effect of an incorrect guess is a link failure,
2768complaining of a missing routine called `__gxx_personality_v0'.
2769
2770   You can inform the compiler that Java exceptions are to be used in a
2771translation unit, irrespective of what it might think, by writing
2772`#pragma GCC java_exceptions' at the head of the file.  This `#pragma'
2773must appear before any functions that throw or catch exceptions, or run
2774destructors when exceptions are thrown through them.
2775
2776
2777File: gcj.info,  Node: Synchronization,  Next: Invocation,  Prev: Exception Handling,  Up: About CNI
2778
277912.15 Synchronization
2780=====================
2781
2782Each Java object has an implicit monitor.  The Java VM uses the
2783instruction `monitorenter' to acquire and lock a monitor, and
2784`monitorexit' to release it.
2785
2786   The corresponding CNI macros are `JvMonitorEnter' and
2787`JvMonitorExit' (JNI has similar  methods `MonitorEnter' and
2788`MonitorExit').
2789
2790   The Java source language does not provide direct access to these
2791primitives.  Instead, there is a `synchronized' statement that does an
2792implicit `monitorenter' before entry to the block, and does a
2793`monitorexit' on exit from the block.  Note that the lock has to be
2794released even when the block is abnormally terminated by an exception,
2795which means there is an implicit `try finally' surrounding
2796synchronization locks.
2797
2798   From C++, it makes sense to use a destructor to release a lock.  CNI
2799defines the following utility class:
2800
2801     class JvSynchronize() {
2802       jobject obj;
2803       JvSynchronize(jobject o) { obj = o; JvMonitorEnter(o); }
2804       ~JvSynchronize() { JvMonitorExit(obj); }
2805     };
2806
2807   So this Java code:
2808
2809     synchronized (OBJ)
2810     {
2811        CODE
2812     }
2813
2814might become this C++ code:
2815
2816     {
2817        JvSynchronize dummy (OBJ);
2818        CODE;
2819     }
2820
2821   Java also has methods with the `synchronized' attribute.  This is
2822equivalent to wrapping the entire method body in a `synchronized'
2823statement.  (Alternatively, an implementation could require the caller
2824to do the synchronization.  This is not practical for a compiler,
2825because each virtual method call would have to test at run-time if
2826synchronization is needed.)  Since in `gcj' the `synchronized'
2827attribute is handled by the method implementation, it is up to the
2828programmer of a synchronized native method to handle the synchronization
2829(in the C++ implementation of the method).  In other words, you need to
2830manually add `JvSynchronize' in a `native synchronized' method.
2831
2832
2833File: gcj.info,  Node: Invocation,  Next: Reflection,  Prev: Synchronization,  Up: About CNI
2834
283512.16 Invocation
2836================
2837
2838CNI permits C++ applications to make calls into Java classes, in
2839addition to allowing Java code to call into C++. Several functions,
2840known as the "invocation API", are provided to support this.
2841
2842 -- Function: jint JvCreateJavaVM (JvVMInitArgs* VM_ARGS)
2843     Initializes the Java runtime. This function performs essential
2844     initialization of the threads interface, garbage collector,
2845     exception handling and other key aspects of the runtime. It must
2846     be called once by an application with a non-Java `main()'
2847     function, before any other Java or CNI calls are made.  It is
2848     safe, but not recommended, to call `JvCreateJavaVM()' more than
2849     once provided it is only called from a single thread.  The VMARGS
2850     parameter can be used to specify initialization parameters for the
2851     Java runtime. It may be `NULL'.
2852
2853     JvVMInitArgs represents a list of virtual machine initialization
2854     arguments. `JvCreateJavaVM()' ignores the version field.
2855
2856          typedef struct JvVMOption
2857          {
2858            // a VM initialization option
2859            char* optionString;
2860            // extra information associated with this option
2861            void* extraInfo;
2862          } JvVMOption;
2863
2864          typedef struct JvVMInitArgs
2865          {
2866            // for compatibility with JavaVMInitArgs
2867            jint version;
2868
2869            // number of VM initialization options
2870            jint nOptions;
2871
2872            // an array of VM initialization options
2873            JvVMOption* options;
2874
2875            // true if the option parser should ignore unrecognized options
2876            jboolean ignoreUnrecognized;
2877          } JvVMInitArgs;
2878
2879     `JvCreateJavaVM()' returns `0' upon success, or `-1' if the
2880     runtime is already initialized.
2881
2882     _Note:_ In GCJ 3.1, the `vm_args' parameter is ignored. It is
2883     recognized and used as of release 4.0.
2884
2885 -- Function: java::lang::Thread* JvAttachCurrentThread (jstring NAME,
2886          java::lang::ThreadGroup* GROUP)
2887     Registers an existing thread with the Java runtime.  This must be
2888     called once from each thread, before that thread makes any other
2889     Java or CNI calls. It must be called after `JvCreateJavaVM'.  NAME
2890     specifies a name for the thread. It may be `NULL', in which case a
2891     name will be generated.  GROUP is the ThreadGroup in which this
2892     thread will be a member. If it is `NULL', the thread will be a
2893     member of the main thread group.  The return value is the Java
2894     `Thread' object that represents the thread.  It is safe to call
2895     `JvAttachCurrentThread()' more than once from the same thread. If
2896     the thread is already attached, the call is ignored and the current
2897     thread object is returned.
2898
2899 -- Function: jint JvDetachCurrentThread ()
2900     Unregisters a thread from the Java runtime. This should be called
2901     by threads that were attached using `JvAttachCurrentThread()',
2902     after they have finished making calls to Java code. This ensures
2903     that any resources associated with the thread become eligible for
2904     garbage collection.  This function returns `0' upon success, or
2905     `-1' if the current thread is not attached.
2906
290712.16.1 Handling uncaught exceptions
2908------------------------------------
2909
2910If an exception is thrown from Java code called using the invocation
2911API, and no handler for the exception can be found, the runtime will
2912abort the application. In order to make the application more robust, it
2913is recommended that code which uses the invocation API be wrapped by a
2914top-level try/catch block that catches all Java exceptions.
2915
291612.16.2 Example
2917---------------
2918
2919The following code demonstrates the use of the invocation API. In this
2920example, the C++ application initializes the Java runtime and attaches
2921itself. The `java.lang.System' class is initialized in order to access
2922its `out' field, and a Java string is printed. Finally, the thread is
2923detached from the runtime once it has finished making Java calls.
2924Everything is wrapped with a try/catch block to provide a default
2925handler for any uncaught exceptions.
2926
2927   The example can be compiled with `c++ -c test.cc; gcj test.o'.
2928
2929     // test.cc
2930     #include <gcj/cni.h>
2931     #include <java/lang/System.h>
2932     #include <java/io/PrintStream.h>
2933     #include <java/lang/Throwable.h>
2934
2935     int main(int argc, char *argv[])
2936     {
2937       using namespace java::lang;
2938
2939       try
2940       {
2941         JvCreateJavaVM(NULL);
2942         JvAttachCurrentThread(NULL, NULL);
2943
2944         String *message = JvNewStringLatin1("Hello from C++");
2945         JvInitClass(&System::class$);
2946         System::out->println(message);
2947
2948         JvDetachCurrentThread();
2949       }
2950       catch (Throwable *t)
2951       {
2952         System::err->println(JvNewStringLatin1("Unhandled Java exception:"));
2953         t->printStackTrace();
2954       }
2955     }
2956
2957
2958File: gcj.info,  Node: Reflection,  Prev: Invocation,  Up: About CNI
2959
296012.17 Reflection
2961================
2962
2963Reflection is possible with CNI code, it functions similarly to how it
2964functions with JNI.
2965
2966   The types `jfieldID' and `jmethodID' are as in JNI.
2967
2968The functions:
2969
2970   * `JvFromReflectedField',
2971
2972   * `JvFromReflectedMethod',
2973
2974   * `JvToReflectedField'
2975
2976   * `JvToFromReflectedMethod'
2977
2978will be added shortly, as will other functions corresponding to JNI.
2979
2980
2981File: gcj.info,  Node: System properties,  Next: Resources,  Prev: About CNI,  Up: Top
2982
298313 System properties
2984********************
2985
2986The runtime behavior of the `libgcj' library can be modified by setting
2987certain system properties.  These properties can be compiled into the
2988program using the `-DNAME[=VALUE]' option to `gcj' or by setting them
2989explicitly in the program by calling the
2990`java.lang.System.setProperty()' method.  Some system properties are
2991only used for informational purposes (like giving a version number or a
2992user name).  A program can inspect the current value of a property by
2993calling the `java.lang.System.getProperty()' method.
2994
2995* Menu:
2996
2997* Standard Properties::         Standard properties supported by `libgcj'
2998* GNU Classpath Properties::    Properties found in Classpath based libraries
2999* libgcj Runtime Properties::   Properties specific to `libgcj'
3000
3001
3002File: gcj.info,  Node: Standard Properties,  Next: GNU Classpath Properties,  Up: System properties
3003
300413.1 Standard Properties
3005========================
3006
3007The following properties are normally found in all implementations of
3008the core libraries for the Java language.
3009
3010`java.version'
3011     The `libgcj' version number.
3012
3013`java.vendor'
3014     Set to `The Free Software Foundation, Inc.'
3015
3016`java.vendor.url'
3017     Set to `http://gcc.gnu.org/java/'.
3018
3019`java.home'
3020     The directory where `gcj' was installed.  Taken from the `--prefix'
3021     option given to `configure'.
3022
3023`java.class.version'
3024     The class format version number supported by the libgcj byte code
3025     interpreter.  (Currently `46.0')
3026
3027`java.vm.specification.version'
3028     The Virtual Machine Specification version implemented by `libgcj'.
3029     (Currently `1.0')
3030
3031`java.vm.specification.vendor'
3032     The name of the Virtual Machine specification designer.
3033
3034`java.vm.specification.name'
3035     The name of the Virtual Machine specification (Set to `Java
3036     Virtual Machine Specification').
3037
3038`java.vm.version'
3039     The `gcj' version number.
3040
3041`java.vm.vendor'
3042     Set to `The Free Software Foundation, Inc.'
3043
3044`java.vm.name'
3045     Set to `GNU libgcj'.
3046
3047`java.specification.version'
3048     The Runtime Environment specification version implemented by
3049     `libgcj'.  (Currently set to `1.3')
3050
3051`java.specification.vendor'
3052     The Runtime Environment specification designer.
3053
3054`java.specification.name'
3055     The name of the Runtime Environment specification (Set to `Java
3056     Platform API Specification').
3057
3058`java.class.path'
3059     The paths (jar files, zip files and directories) used for finding
3060     class files.
3061
3062`java.library.path'
3063     Directory path used for finding native libraries.
3064
3065`java.io.tmpdir'
3066     The directory used to put temporary files in.
3067
3068`java.compiler'
3069     Name of the Just In Time compiler to use by the byte code
3070     interpreter.  Currently not used in `libgcj'.
3071
3072`java.ext.dirs'
3073     Directories containing jar files with extra libraries.  Will be
3074     used when resolving classes.
3075
3076`java.protocol.handler.pkgs'
3077     A `|' separated list of package names that is used to find classes
3078     that implement handlers for `java.net.URL'.
3079
3080`java.rmi.server.codebase'
3081     A list of URLs that is used by the `java.rmi.server.RMIClassLoader'
3082     to load classes from.
3083
3084`jdbc.drivers'
3085     A list of class names that will be loaded by the
3086     `java.sql.DriverManager' when it starts up.
3087
3088`file.separator'
3089     The separator used in when directories are included in a filename
3090     (normally `/' or `\' ).
3091
3092`file.encoding'
3093     The default character encoding used when converting platform
3094     native files to Unicode (usually set to `8859_1').
3095
3096`path.separator'
3097     The standard separator used when a string contains multiple paths
3098     (normally `:' or `;'), the string is usually not a valid character
3099     to use in normal directory names.)
3100
3101`line.separator'
3102     The default line separator used on the platform (normally `\n',
3103     `\r' or a combination of those two characters).
3104
3105`policy.provider'
3106     The class name used for the default policy provider returned by
3107     `java.security.Policy.getPolicy'.
3108
3109`user.name'
3110     The name of the user running the program.  Can be the full name,
3111     the login name or empty if unknown.
3112
3113`user.home'
3114     The default directory to put user specific files in.
3115
3116`user.dir'
3117     The current working directory from which the program was started.
3118
3119`user.language'
3120     The default language as used by the `java.util.Locale' class.
3121
3122`user.region'
3123     The default region as used by the `java.util.Local' class.
3124
3125`user.variant'
3126     The default variant of the language and region local used.
3127
3128`user.timezone'
3129     The default timezone as used by the `java.util.TimeZone' class.
3130
3131`os.name'
3132     The operating system/kernel name that the program runs on.
3133
3134`os.arch'
3135     The hardware that we are running on.
3136
3137`os.version'
3138     The version number of the operating system/kernel.
3139
3140`awt.appletWarning'
3141     The string to display when an untrusted applet is displayed.
3142     Returned by `java.awt.Window.getWarningString()' when the window is
3143     "insecure".
3144
3145`awt.toolkit'
3146     The class name used for initializing the default
3147     `java.awt.Toolkit'.  Defaults to `gnu.awt.gtk.GtkToolkit'.
3148
3149`http.proxyHost'
3150     Name of proxy host for http connections.
3151
3152`http.proxyPort'
3153     Port number to use when a proxy host is in use.
3154
3155
3156
3157File: gcj.info,  Node: GNU Classpath Properties,  Next: libgcj Runtime Properties,  Prev: Standard Properties,  Up: System properties
3158
315913.2 GNU Classpath Properties
3160=============================
3161
3162`libgcj' is based on the GNU Classpath (Essential Libraries for Java) a
3163GNU project to create free core class libraries for use with virtual
3164machines and compilers for the Java language.  The following properties
3165are common to libraries based on GNU Classpath.
3166
3167`gcj.dumpobject'
3168     Enables printing serialization debugging by the
3169     `java.io.ObjectInput' and `java.io.ObjectOutput' classes when set
3170     to something else then the empty string.  Only used when running a
3171     debug build of the library.
3172
3173`gnu.classpath.vm.shortname'
3174     This is a succinct name of the virtual machine.  For `libgcj',
3175     this will always be `libgcj'.
3176
3177`gnu.classpath.home.url'
3178     A base URL used for finding system property files (e.g.,
3179     `classpath.security').  By default this is a `file:' URL pointing
3180     to the `lib' directory under `java.home'.
3181
3182
3183
3184File: gcj.info,  Node: libgcj Runtime Properties,  Prev: GNU Classpath Properties,  Up: System properties
3185
318613.3 libgcj Runtime Properties
3187==============================
3188
3189The following properties are specific to the `libgcj' runtime and will
3190normally not be found in other core libraries for the java language.
3191
3192`java.fullversion'
3193     The combination of `java.vm.name' and `java.vm.version'.
3194
3195`java.vm.info'
3196     Same as `java.fullversion'.
3197
3198`impl.prefix'
3199     Used by the `java.net.DatagramSocket' class when set to something
3200     else then the empty string.  When set all newly created
3201     `DatagramSocket's will try to load a class
3202     `java.net.[impl.prefix]DatagramSocketImpl' instead of the normal
3203     `java.net.PlainDatagramSocketImpl'.
3204
3205`gnu.gcj.progname'
3206     The class or binary name that was used to invoke the program. This
3207     will be the name of the "main" class in the case where the `gij'
3208     front end is used, or the program binary name in the case where an
3209     application is compiled to a native binary.
3210
3211`gnu.gcj.user.realname'
3212     The real name of the user, as taken from the password file.  This
3213     may not always hold only the user's name (as some sites put extra
3214     information in this field).  Also, this property is not available
3215     on all platforms.
3216
3217`gnu.gcj.runtime.NameFinder.use_addr2line'
3218     Whether an external process, `addr2line', should be used to
3219     determine line number information when tracing the stack. Setting
3220     this to `false' may suppress line numbers when printing stack
3221     traces and when using the java.util.logging infrastructure.
3222     However, performance may improve significantly for applications
3223     that print stack traces or make logging calls frequently.
3224
3225`gnu.gcj.runtime.NameFinder.show_raw'
3226     Whether the address of a stack frame should be printed when the
3227     line number is unavailable. Setting this to `true' will cause the
3228     name of the object and the offset within that object to be printed
3229     when no line number is available.  This allows for off-line
3230     decoding of stack traces if necessary debug information is
3231     available.  The default is `false', no raw addresses are printed.
3232
3233`gnu.gcj.runtime.NameFinder.remove_unknown'
3234     Whether stack frames for non-java code should be included in a
3235     stack trace.  The default value is `true', stack frames for
3236     non-java code are suppressed.  Setting this to `false' will cause
3237     any non-java stack frames to be printed in addition to frames for
3238     the java code.
3239
3240`gnu.gcj.runtime.VMClassLoader.library_control'
3241     This controls how shared libraries are automatically loaded by the
3242     built-in class loader.  If this property is set to `full', a full
3243     search is done for each requested class.  If this property is set
3244     to `cache', then any failed lookups are cached and not tried again.
3245     If this property is set to `never' (the default), then lookups are
3246     never done.  For more information, *Note Extensions::.
3247
3248`gnu.gcj.runtime.endorsed.dirs'
3249     This is like the standard `java.endorsed.dirs', property, but
3250     specifies some extra directories which are searched after the
3251     standard endorsed directories.  This is primarily useful for
3252     telling `libgcj' about additional libraries which are ordinarily
3253     incorporated into the JDK, and which should be loaded by the
3254     bootstrap class loader, but which are not yet part of `libgcj'
3255     itself for some reason.
3256
3257`gnu.gcj.jit.compiler'
3258     This is the full path to `gcj' executable which should be used to
3259     compile classes just-in-time when `ClassLoader.defineClass' is
3260     called.  If not set, `gcj' will not be invoked by the runtime;
3261     this can also be controlled via `Compiler.disable'.
3262
3263`gnu.gcj.jit.options'
3264     This is a space-separated string of options which should be passed
3265     to `gcj' when in JIT mode.  If not set, a sensible default is
3266     chosen.
3267
3268`gnu.gcj.jit.cachedir'
3269     This is the directory where cached shared library files are
3270     stored.  If not set, JIT compilation is disabled.  This should
3271     never be set to a directory that is writable by any other user.
3272
3273`gnu.gcj.precompiled.db.path'
3274     This is a sequence of file names, each referring to a file created
3275     by `gcj-dbtool'.  These files will be used by `libgcj' to find
3276     shared libraries corresponding to classes that are loaded from
3277     bytecode.  `libgcj' often has a built-in default database; it can
3278     be queried using `gcj-dbtool -p'.
3279
3280
3281
3282File: gcj.info,  Node: Resources,  Next: Index,  Prev: System properties,  Up: Top
3283
328414 Resources
3285************
3286
3287While writing `gcj' and `libgcj' we have, of course, relied heavily on
3288documentation from Sun Microsystems.  In particular we have used The
3289Java Language Specification (both first and second editions), the Java
3290Class Libraries (volumes one and two), and the Java Virtual Machine
3291Specification.  In addition we've used the online documentation at
3292`http://java.sun.com/'.
3293
3294   The current `gcj' home page is `http://gcc.gnu.org/java/'.
3295
3296   For more information on gcc, see `http://gcc.gnu.org/'.
3297
3298   Some `libgcj' testing is done using the Mauve test suite.  This is a
3299free software Java class library test suite which is being written
3300because the JCK is not free.  See `http://sources.redhat.com/mauve/'
3301for more information.
3302
3303
3304File: gcj.info,  Node: Index,  Prev: Resources,  Up: Top
3305
3306Index
3307*****
3308
3309�[index�]
3310* Menu:
3311
3312* class path:                            Input Options.        (line  6)
3313* class$:                                Reference types.      (line 20)
3314* elements on template<class T>:         Arrays.               (line 46)
3315* FDL, GNU Free Documentation License:   GNU Free Documentation License.
3316                                                               (line  6)
3317* GCJ_PROPERTIES:                        Extensions.           (line 56)
3318* jclass:                                Reference types.      (line 16)
3319* jobject:                               Reference types.      (line 16)
3320* jstring:                               Reference types.      (line 16)
3321* JvAllocBytes:                          Mixing with C++.      (line 99)
3322* JvAttachCurrentThread:                 Invocation.           (line 55)
3323* JvCreateJavaVM:                        Invocation.           (line 11)
3324* JvDetachCurrentThread:                 Invocation.           (line 68)
3325* JvFree:                                Memory allocation.    (line 19)
3326* JvGetArrayLength:                      Arrays.               (line 86)
3327* JvGetStringChars:                      Strings.              (line 25)
3328* JvGetStringUTFLength:                  Strings.              (line 29)
3329* JvGetStringUTFRegion:                  Strings.              (line 34)
3330* JvMalloc:                              Memory allocation.    (line 11)
3331* JvNewBooleanArray:                     Arrays.               (line 83)
3332* JvNewObjectArray:                      Arrays.               (line 57)
3333* JvNewString:                           Strings.              (line 11)
3334* JvNewStringLatin1:                     Strings.              (line 15)
3335* JvNewStringUTF:                        Strings.              (line 21)
3336* JvPrimClass:                           Primitive types.      (line 36)
3337* JvRealloc:                             Memory allocation.    (line 15)
3338
3339
3340
3341Tag Table:
3342Node: Top2846
3343Node: Copying4168
3344Node: GNU Free Documentation License23363
3345Node: Invoking gcj45775
3346Node: Input and output files46474
3347Node: Input Options48000
3348Node: Encodings51148
3349Node: Warnings52354
3350Node: Linking53467
3351Node: Code Generation56406
3352Node: Configure-time Options62956
3353Node: Compatibility64379
3354Node: Limitations64859
3355Node: Extensions66441
3356Node: Invoking gcjh69535
3357Node: Invoking gjnih71890
3358Node: Invoking jv-scan74078
3359Node: Invoking jcf-dump75120
3360Node: Invoking gij76068
3361Node: Invoking gcj-dbtool79319
3362Node: Invoking jv-convert81785
3363Node: Invoking grmic82864
3364Node: Invoking grmiregistry84254
3365Node: About CNI84667
3366Node: Basic concepts86109
3367Node: Packages89005
3368Node: Primitive types91333
3369Node: Reference types93011
3370Node: Interfaces94100
3371Node: Objects and Classes95011
3372Node: Class Initialization97206
3373Node: Object allocation99548
3374Node: Memory allocation100338
3375Node: Arrays100970
3376Node: Methods103781
3377Node: Strings106602
3378Node: Mixing with C++108086
3379Node: Exception Handling111557
3380Node: Synchronization113191
3381Node: Invocation115181
3382Node: Reflection120117
3383Node: System properties120578
3384Node: Standard Properties121455
3385Node: GNU Classpath Properties125887
3386Node: libgcj Runtime Properties126934
3387Node: Resources131436
3388Node: Index132274
3389
3390End Tag Table
3391