Annotation of gcc/gcc.texi, revision 1.1.1.9

1.1       root        1: \input texinfo  @c -*-texinfo-*-
1.1.1.5   root        2: @c %**start of header 
1.1       root        3: @setfilename gcc.info
                      4: @c @setfilename usegcc.info
1.1.1.5   root        5: @c @setfilename portgcc.info
1.1       root        6: @c To produce the full manual, use the "gcc.info" setfilename, and
1.1.1.5   root        7: @c make sure the following do NOT begin with '@c' (and the @clear lines DO)
1.1       root        8: @set INTERNALS
1.1.1.5   root        9: @set USING
1.1       root       10: @c To produce a user-only manual, use the "usegcc.info" setfilename, and
                     11: @c make sure the following does NOT begin with '@c':
                     12: @c @clear INTERNALS
1.1.1.5   root       13: @c To produce a porter-only manual, use the "portgcc.info" setfilename,
                     14: @c and make sure the following does NOT begin with '@c':
                     15: @c @clear USING
                     16: 
                     17: @c i have commented out the smallbook command below, and reformatted
                     18: @c this manual in the regular book size for distribution.  in addition,
                     19: @c i commented out the commands that shift the text to one or the other
                     20: @c side of the page for smallbook printing (which makes it easier for
                     21: @c the photocopying people to handle...).     -mew, 15june93 
1.1.1.7   root       22: 
                     23: @c (For FSF printing, turn on smallbook, comment out finalout below; 
                     24: @c that is all that is needed.)
                     25: 
                     26: @c smallbook
1.1.1.5   root       27: 
                     28: @c i also commented out the finalout command, so if there *are* any
                     29: @c overfulls, you'll (hopefully) see the rectangle in the right hand
                     30: @c margin. -mew 15june93
1.1.1.7   root       31: @c finalout
1.1.1.5   root       32: 
                     33: @c NOTE: checks/things to do:
                     34: @c 
                     35: @c -have bob do a search in all seven files for "mew" (ideally --mew,
                     36: @c  but i may have forgotten the occasional "--"..).
                     37: @c -item/itemx, text after all (sub/sub)section titles, etc..
                     38: @c -consider putting the lists of options on pp 17--> etc in columns or
1.1.1.8   root       39: @c  some such.
1.1.1.5   root       40: @c -spellcheck
                     41: @c -continuity of phrasing; ie, bit-field vs bitfield in rtl.texi
                     42: @c -overfulls.  do a search for "mew" in the files, and you will see
                     43: @c   overfulls that i noted but could not deal with.
                     44: @c -have to add text:  beginning of chapter 8
                     45: 
                     46: @c
                     47: @c anything else?                       --mew 10feb93
                     48: 
                     49: 
1.1       root       50: 
                     51: @ifset INTERNALS
1.1.1.5   root       52: @ifset USING
1.1       root       53: @settitle Using and Porting GNU CC
                     54: @end ifset
1.1.1.5   root       55: @end ifset
                     56: @c seems reasonable to assume at least one of INTERNALS or USING is set...
1.1       root       57: @ifclear INTERNALS
                     58: @settitle Using GNU CC
                     59: @end ifclear
1.1.1.5   root       60: @ifclear USING
                     61: @settitle Porting GNU CC
                     62: @end ifclear 
1.1       root       63: 
                     64: @syncodeindex fn cp
1.1.1.2   root       65: @syncodeindex vr cp
1.1.1.5   root       66: @c %**end of header
                     67: 
                     68: @c Use with @@smallbook.
                     69: 
                     70: @c Cause even numbered pages to be printed on the left hand side of
                     71: @c the page and odd numbered pages to be printed on the right hand
                     72: @c side of the page.  Using this, you can print on both sides of a
                     73: @c sheet of paper and have the text on the same part of the sheet.
                     74: 
                     75: @c The text on right hand pages is pushed towards the right hand
                     76: @c margin and the text on left hand pages is pushed toward the left
                     77: @c hand margin.  
                     78: @c (To provide the reverse effect, set bindingoffset to -0.75in.)
                     79: 
                     80: @c @tex
                     81: @c \global\bindingoffset=0.75in
                     82: @c \global\normaloffset =0.75in
                     83: @c @end tex
1.1       root       84: 
                     85: @ifinfo
                     86: @ifset INTERNALS
1.1.1.5   root       87: @ifset USING
                     88: This file documents the use and the internals of the GNU compiler.
1.1       root       89: @end ifset
1.1.1.5   root       90: @end ifset
                     91: @ifclear USING
                     92: This file documents the internals of the GNU compiler.
                     93: @end ifclear
                     94: @ifclear INTERNALS
                     95: This file documents the use of the GNU compiler.
                     96: @end ifclear
1.1       root       97: 
1.1.1.5   root       98: Published by the Free Software Foundation
1.1.1.8   root       99: 59 Temple Place - Suite 330
                    100: Boston, MA 02111-1307 USA
1.1.1.5   root      101: 
1.1.1.8   root      102: Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
1.1       root      103: 
                    104: Permission is granted to make and distribute verbatim copies of
                    105: this manual provided the copyright notice and this permission notice
                    106: are preserved on all copies.
                    107: 
                    108: @ignore
                    109: Permission is granted to process this file through Tex and print the
                    110: results, provided the printed document carries copying permission
                    111: notice identical to this one except for the removal of this paragraph
                    112: (this paragraph not being relevant to the printed manual).
                    113: 
                    114: @end ignore
                    115: Permission is granted to copy and distribute modified versions of this
                    116: manual under the conditions for verbatim copying, provided also that the
1.1.1.7   root      117: sections entitled ``GNU General Public License,'' ``Funding for Free
                    118: Software,'' and ``Protect Your Freedom---Fight `Look And Feel'@w{}'' are
                    119: included exactly as in the original, and provided that the entire
                    120: resulting derived work is distributed under the terms of a permission
                    121: notice identical to this one.
1.1       root      122: 
                    123: Permission is granted to copy and distribute translations of this manual
                    124: into another language, under the above conditions for modified versions,
1.1.1.7   root      125: except that the sections entitled ``GNU General Public License,''
                    126: ``Funding for Free Software,'' and ``Protect Your Freedom---Fight `Look
                    127: And Feel'@w{}'', and this permission notice, may be included in
                    128: translations approved by the Free Software Foundation instead of in the
                    129: original English.
1.1       root      130: @end ifinfo
                    131: 
                    132: @setchapternewpage odd
                    133: 
                    134: @titlepage
                    135: @ifset INTERNALS
1.1.1.5   root      136: @ifset USING
1.1       root      137: @center @titlefont{Using and Porting GNU CC}
1.1.1.5   root      138: 
                    139: @end ifset
1.1       root      140: @end ifset
                    141: @ifclear INTERNALS
                    142: @title Using GNU CC
                    143: @end ifclear
1.1.1.5   root      144: @ifclear USING
                    145: @title Porting GNU CC
                    146: @end ifclear
1.1       root      147: @sp 2
                    148: @center Richard M. Stallman
                    149: @sp 3
1.1.1.9 ! root      150: @center Last updated 29 June 1996
1.1       root      151: @sp 1
1.1.1.5   root      152: @c The version number appears twice more in this file.  
                    153: 
1.1.1.9 ! root      154: @center for version 2.7.2.1
1.1       root      155: @page
                    156: @vskip 0pt plus 1filll
1.1.1.8   root      157: Copyright @copyright{} 1988, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
1.1.1.5   root      158: @sp 2
1.1.1.8   root      159: For GCC Version 2.7.2@*
1.1.1.5   root      160: @sp 1
                    161: Published by the Free Software Foundation @*
1.1.1.8   root      162: 59 Temple Place - Suite 330@*
                    163: Boston, MA 02111-1307, USA@*
                    164: Last printed November, 1995.@*
                    165: Printed copies are available for $50 each.@*
                    166: ISBN 1-882114-66-3
1.1.1.5   root      167: @sp 1
1.1       root      168: Permission is granted to make and distribute verbatim copies of
                    169: this manual provided the copyright notice and this permission notice
                    170: are preserved on all copies.
                    171: 
                    172: Permission is granted to copy and distribute modified versions of this
                    173: manual under the conditions for verbatim copying, provided also that the
1.1.1.7   root      174: sections entitled ``GNU General Public License,'' ``Funding for Free
                    175: Software,'' and ``Protect Your Freedom---Fight `Look And Feel'@w{}'' are
                    176: included exactly as in the original, and provided that the entire
                    177: resulting derived work is distributed under the terms of a permission
                    178: notice identical to this one.
1.1       root      179: 
                    180: Permission is granted to copy and distribute translations of this manual
                    181: into another language, under the above conditions for modified versions,
1.1.1.7   root      182: except that the sections entitled ``GNU General Public License,''
                    183: ``Funding for Free Software,'' and ``Protect Your Freedom---Fight `Look
                    184: And Feel'@w{}'', and this permission notice, may be included in
                    185: translations approved by the Free Software Foundation instead of in the
                    186: original English.
1.1       root      187: @end titlepage
                    188: @page
                    189: 
                    190: @ifinfo
                    191: 
                    192: @node Top, Copying,, (DIR)
1.1.1.3   root      193: @top Introduction
1.1       root      194: @cindex introduction
                    195: 
                    196: @ifset INTERNALS
1.1.1.5   root      197: @ifset USING
                    198: This manual documents how to run, install and port the GNU
                    199: compiler, as well as its new features and incompatibilities, and how to
1.1.1.8   root      200: report bugs.  It corresponds to GNU CC version 2.7.2.
1.1.1.5   root      201: @end ifset
1.1       root      202: @end ifset
                    203: 
                    204: @ifclear INTERNALS
1.1.1.5   root      205: This manual documents how to run and install the GNU compiler,
                    206: as well as its new features and incompatibilities, and how to report
1.1.1.8   root      207: bugs.  It corresponds to GNU CC version 2.7.2.
1.1.1.5   root      208: @end ifclear
                    209: @ifclear USING
                    210: This manual documents how to port the GNU compiler,
                    211: as well as its new features and incompatibilities, and how to report
1.1.1.8   root      212: bugs.  It corresponds to GNU CC version 2.7.1.
1.1       root      213: @end ifclear
                    214: 
                    215: @end ifinfo
                    216: @menu
                    217: * Copying::         GNU General Public License says
                    218:                      how you can copy and share GNU CC.
                    219: * Contributors::    People who have contributed to GNU CC.
1.1.1.7   root      220: * Funding::         How to help assure funding for free software.
                    221: * Look and Feel::   Protect your freedom---fight ``look and feel''.
1.1.1.5   root      222: @ifset USING
                    223: * G++ and GCC::     You can compile C or C++ programs.
1.1.1.3   root      224: * Invoking GCC::    Command options supported by @samp{gcc}.
1.1       root      225: * Installation::    How to configure, compile and install GNU CC.
1.1.1.5   root      226: * C Extensions::    GNU extensions to the C language family.
                    227: * C++ Extensions::  GNU extensions to the C++ language.
1.1       root      228: * Trouble::         If you have trouble installing GNU CC.
1.1.1.3   root      229: * Bugs::            How, why and where to report bugs.
1.1       root      230: * Service::         How to find suppliers of support for GNU CC.
                    231: * VMS::             Using GNU CC on VMS.
1.1.1.5   root      232: @end ifset
                    233: @ifset INTERNALS
1.1       root      234: * Portability::     Goals of GNU CC's portability features.
                    235: * Interface::       Function-call interface of GNU CC output.
                    236: * Passes::          Order of passes, what they do, and what each file is for.
                    237: * RTL::             The intermediate representation that most passes work on.
                    238: * Machine Desc::    How to write machine description instruction patterns.
1.1.1.2   root      239: * Target Macros::   How to write the machine description C macros.
1.1       root      240: * Config::          Writing the @file{xm-@var{machine}.h} file.
1.1.1.8   root      241: * Fragments::       Writing the @file{t-@var{target}} and @file{x-@var{host}} files.
1.1       root      242: @end ifset
1.1.1.5   root      243: 
1.1       root      244: * Index::          Index of concepts and symbol names.
                    245: @end menu
                    246: 
1.1.1.7   root      247: @node Copying
1.1       root      248: @unnumbered GNU GENERAL PUBLIC LICENSE
                    249: @center Version 2, June 1991
                    250: 
                    251: @display
                    252: Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
1.1.1.8   root      253: 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
1.1       root      254: 
                    255: Everyone is permitted to copy and distribute verbatim copies
                    256: of this license document, but changing it is not allowed.
                    257: @end display
                    258: 
                    259: @unnumberedsec Preamble
                    260: 
                    261:   The licenses for most software are designed to take away your
                    262: freedom to share and change it.  By contrast, the GNU General Public
                    263: License is intended to guarantee your freedom to share and change free
                    264: software---to make sure the software is free for all its users.  This
                    265: General Public License applies to most of the Free Software
                    266: Foundation's software and to any other program whose authors commit to
                    267: using it.  (Some other Free Software Foundation software is covered by
                    268: the GNU Library General Public License instead.)  You can apply it to
                    269: your programs, too.
                    270: 
                    271:   When we speak of free software, we are referring to freedom, not
                    272: price.  Our General Public Licenses are designed to make sure that you
                    273: have the freedom to distribute copies of free software (and charge for
                    274: this service if you wish), that you receive source code or can get it
                    275: if you want it, that you can change the software or use pieces of it
                    276: in new free programs; and that you know you can do these things.
                    277: 
                    278:   To protect your rights, we need to make restrictions that forbid
                    279: anyone to deny you these rights or to ask you to surrender the rights.
                    280: These restrictions translate to certain responsibilities for you if you
                    281: distribute copies of the software, or if you modify it.
                    282: 
                    283:   For example, if you distribute copies of such a program, whether
                    284: gratis or for a fee, you must give the recipients all the rights that
                    285: you have.  You must make sure that they, too, receive or can get the
                    286: source code.  And you must show them these terms so they know their
                    287: rights.
                    288: 
                    289:   We protect your rights with two steps: (1) copyright the software, and
                    290: (2) offer you this license which gives you legal permission to copy,
                    291: distribute and/or modify the software.
                    292: 
                    293:   Also, for each author's protection and ours, we want to make certain
                    294: that everyone understands that there is no warranty for this free
                    295: software.  If the software is modified by someone else and passed on, we
                    296: want its recipients to know that what they have is not the original, so
                    297: that any problems introduced by others will not reflect on the original
                    298: authors' reputations.
                    299: 
                    300:   Finally, any free program is threatened constantly by software
                    301: patents.  We wish to avoid the danger that redistributors of a free
                    302: program will individually obtain patent licenses, in effect making the
                    303: program proprietary.  To prevent this, we have made it clear that any
                    304: patent must be licensed for everyone's free use or not licensed at all.
                    305: 
                    306:   The precise terms and conditions for copying, distribution and
                    307: modification follow.
                    308: 
                    309: @iftex
                    310: @unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
                    311: @end iftex
                    312: @ifinfo
                    313: @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
                    314: @end ifinfo
                    315: 
1.1.1.5   root      316: @enumerate 0
1.1       root      317: @item
                    318: This License applies to any program or other work which contains
                    319: a notice placed by the copyright holder saying it may be distributed
                    320: under the terms of this General Public License.  The ``Program'', below,
                    321: refers to any such program or work, and a ``work based on the Program''
                    322: means either the Program or any derivative work under copyright law:
                    323: that is to say, a work containing the Program or a portion of it,
                    324: either verbatim or with modifications and/or translated into another
                    325: language.  (Hereinafter, translation is included without limitation in
                    326: the term ``modification''.)  Each licensee is addressed as ``you''.
                    327: 
                    328: Activities other than copying, distribution and modification are not
                    329: covered by this License; they are outside its scope.  The act of
                    330: running the Program is not restricted, and the output from the Program
                    331: is covered only if its contents constitute a work based on the
                    332: Program (independent of having been made by running the Program).
                    333: Whether that is true depends on what the Program does.
                    334: 
                    335: @item
                    336: You may copy and distribute verbatim copies of the Program's
                    337: source code as you receive it, in any medium, provided that you
                    338: conspicuously and appropriately publish on each copy an appropriate
                    339: copyright notice and disclaimer of warranty; keep intact all the
                    340: notices that refer to this License and to the absence of any warranty;
                    341: and give any other recipients of the Program a copy of this License
                    342: along with the Program.
                    343: 
                    344: You may charge a fee for the physical act of transferring a copy, and
                    345: you may at your option offer warranty protection in exchange for a fee.
                    346: 
                    347: @item
                    348: You may modify your copy or copies of the Program or any portion
                    349: of it, thus forming a work based on the Program, and copy and
                    350: distribute such modifications or work under the terms of Section 1
                    351: above, provided that you also meet all of these conditions:
                    352: 
                    353: @enumerate a
                    354: @item
                    355: You must cause the modified files to carry prominent notices
                    356: stating that you changed the files and the date of any change.
                    357: 
                    358: @item
                    359: You must cause any work that you distribute or publish, that in
                    360: whole or in part contains or is derived from the Program or any
                    361: part thereof, to be licensed as a whole at no charge to all third
                    362: parties under the terms of this License.
                    363: 
                    364: @item
                    365: If the modified program normally reads commands interactively
                    366: when run, you must cause it, when started running for such
                    367: interactive use in the most ordinary way, to print or display an
                    368: announcement including an appropriate copyright notice and a
                    369: notice that there is no warranty (or else, saying that you provide
                    370: a warranty) and that users may redistribute the program under
                    371: these conditions, and telling the user how to view a copy of this
                    372: License.  (Exception: if the Program itself is interactive but
                    373: does not normally print such an announcement, your work based on
                    374: the Program is not required to print an announcement.)
                    375: @end enumerate
                    376: 
                    377: These requirements apply to the modified work as a whole.  If
                    378: identifiable sections of that work are not derived from the Program,
                    379: and can be reasonably considered independent and separate works in
                    380: themselves, then this License, and its terms, do not apply to those
                    381: sections when you distribute them as separate works.  But when you
                    382: distribute the same sections as part of a whole which is a work based
                    383: on the Program, the distribution of the whole must be on the terms of
                    384: this License, whose permissions for other licensees extend to the
                    385: entire whole, and thus to each and every part regardless of who wrote it.
                    386: 
                    387: Thus, it is not the intent of this section to claim rights or contest
                    388: your rights to work written entirely by you; rather, the intent is to
                    389: exercise the right to control the distribution of derivative or
                    390: collective works based on the Program.
                    391: 
                    392: In addition, mere aggregation of another work not based on the Program
                    393: with the Program (or with a work based on the Program) on a volume of
                    394: a storage or distribution medium does not bring the other work under
                    395: the scope of this License.
                    396: 
                    397: @item
                    398: You may copy and distribute the Program (or a work based on it,
                    399: under Section 2) in object code or executable form under the terms of
                    400: Sections 1 and 2 above provided that you also do one of the following:
                    401: 
                    402: @enumerate a
                    403: @item
                    404: Accompany it with the complete corresponding machine-readable
                    405: source code, which must be distributed under the terms of Sections
                    406: 1 and 2 above on a medium customarily used for software interchange; or,
                    407: 
                    408: @item
                    409: Accompany it with a written offer, valid for at least three
                    410: years, to give any third party, for a charge no more than your
                    411: cost of physically performing source distribution, a complete
                    412: machine-readable copy of the corresponding source code, to be
                    413: distributed under the terms of Sections 1 and 2 above on a medium
                    414: customarily used for software interchange; or,
                    415: 
                    416: @item
                    417: Accompany it with the information you received as to the offer
                    418: to distribute corresponding source code.  (This alternative is
                    419: allowed only for noncommercial distribution and only if you
                    420: received the program in object code or executable form with such
                    421: an offer, in accord with Subsection b above.)
                    422: @end enumerate
                    423: 
                    424: The source code for a work means the preferred form of the work for
                    425: making modifications to it.  For an executable work, complete source
                    426: code means all the source code for all modules it contains, plus any
                    427: associated interface definition files, plus the scripts used to
                    428: control compilation and installation of the executable.  However, as a
                    429: special exception, the source code distributed need not include
                    430: anything that is normally distributed (in either source or binary
                    431: form) with the major components (compiler, kernel, and so on) of the
                    432: operating system on which the executable runs, unless that component
                    433: itself accompanies the executable.
                    434: 
                    435: If distribution of executable or object code is made by offering
                    436: access to copy from a designated place, then offering equivalent
                    437: access to copy the source code from the same place counts as
                    438: distribution of the source code, even though third parties are not
                    439: compelled to copy the source along with the object code.
                    440: 
                    441: @item
                    442: You may not copy, modify, sublicense, or distribute the Program
                    443: except as expressly provided under this License.  Any attempt
                    444: otherwise to copy, modify, sublicense or distribute the Program is
                    445: void, and will automatically terminate your rights under this License.
                    446: However, parties who have received copies, or rights, from you under
                    447: this License will not have their licenses terminated so long as such
                    448: parties remain in full compliance.
                    449: 
                    450: @item
                    451: You are not required to accept this License, since you have not
                    452: signed it.  However, nothing else grants you permission to modify or
                    453: distribute the Program or its derivative works.  These actions are
                    454: prohibited by law if you do not accept this License.  Therefore, by
                    455: modifying or distributing the Program (or any work based on the
                    456: Program), you indicate your acceptance of this License to do so, and
                    457: all its terms and conditions for copying, distributing or modifying
                    458: the Program or works based on it.
                    459: 
                    460: @item
                    461: Each time you redistribute the Program (or any work based on the
                    462: Program), the recipient automatically receives a license from the
                    463: original licensor to copy, distribute or modify the Program subject to
                    464: these terms and conditions.  You may not impose any further
                    465: restrictions on the recipients' exercise of the rights granted herein.
                    466: You are not responsible for enforcing compliance by third parties to
                    467: this License.
                    468: 
                    469: @item
                    470: If, as a consequence of a court judgment or allegation of patent
                    471: infringement or for any other reason (not limited to patent issues),
                    472: conditions are imposed on you (whether by court order, agreement or
                    473: otherwise) that contradict the conditions of this License, they do not
                    474: excuse you from the conditions of this License.  If you cannot
                    475: distribute so as to satisfy simultaneously your obligations under this
                    476: License and any other pertinent obligations, then as a consequence you
                    477: may not distribute the Program at all.  For example, if a patent
                    478: license would not permit royalty-free redistribution of the Program by
                    479: all those who receive copies directly or indirectly through you, then
                    480: the only way you could satisfy both it and this License would be to
                    481: refrain entirely from distribution of the Program.
                    482: 
                    483: If any portion of this section is held invalid or unenforceable under
                    484: any particular circumstance, the balance of the section is intended to
                    485: apply and the section as a whole is intended to apply in other
                    486: circumstances.
                    487: 
                    488: It is not the purpose of this section to induce you to infringe any
                    489: patents or other property right claims or to contest validity of any
                    490: such claims; this section has the sole purpose of protecting the
                    491: integrity of the free software distribution system, which is
                    492: implemented by public license practices.  Many people have made
                    493: generous contributions to the wide range of software distributed
                    494: through that system in reliance on consistent application of that
                    495: system; it is up to the author/donor to decide if he or she is willing
                    496: to distribute software through any other system and a licensee cannot
                    497: impose that choice.
                    498: 
                    499: This section is intended to make thoroughly clear what is believed to
                    500: be a consequence of the rest of this License.
                    501: 
                    502: @item
                    503: If the distribution and/or use of the Program is restricted in
                    504: certain countries either by patents or by copyrighted interfaces, the
                    505: original copyright holder who places the Program under this License
                    506: may add an explicit geographical distribution limitation excluding
                    507: those countries, so that distribution is permitted only in or among
                    508: countries not thus excluded.  In such case, this License incorporates
                    509: the limitation as if written in the body of this License.
                    510: 
                    511: @item
                    512: The Free Software Foundation may publish revised and/or new versions
                    513: of the General Public License from time to time.  Such new versions will
                    514: be similar in spirit to the present version, but may differ in detail to
                    515: address new problems or concerns.
                    516: 
                    517: Each version is given a distinguishing version number.  If the Program
                    518: specifies a version number of this License which applies to it and ``any
                    519: later version'', you have the option of following the terms and conditions
                    520: either of that version or of any later version published by the Free
                    521: Software Foundation.  If the Program does not specify a version number of
                    522: this License, you may choose any version ever published by the Free Software
                    523: Foundation.
                    524: 
                    525: @item
                    526: If you wish to incorporate parts of the Program into other free
                    527: programs whose distribution conditions are different, write to the author
                    528: to ask for permission.  For software which is copyrighted by the Free
                    529: Software Foundation, write to the Free Software Foundation; we sometimes
                    530: make exceptions for this.  Our decision will be guided by the two goals
                    531: of preserving the free status of all derivatives of our free software and
                    532: of promoting the sharing and reuse of software generally.
                    533: 
                    534: @iftex
                    535: @heading NO WARRANTY
                    536: @end iftex
                    537: @ifinfo
                    538: @center NO WARRANTY
                    539: @end ifinfo
                    540: 
                    541: @item
                    542: BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
                    543: FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
                    544: OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
                    545: PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
                    546: OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
                    547: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
                    548: TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
                    549: PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
                    550: REPAIR OR CORRECTION.
                    551: 
                    552: @item
                    553: IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
                    554: WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
                    555: REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
                    556: INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
                    557: OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
                    558: TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
                    559: YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
                    560: PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
                    561: POSSIBILITY OF SUCH DAMAGES.
                    562: @end enumerate
                    563: 
                    564: @iftex
                    565: @heading END OF TERMS AND CONDITIONS
                    566: @end iftex
                    567: @ifinfo
                    568: @center END OF TERMS AND CONDITIONS
                    569: @end ifinfo
                    570: 
                    571: @page
1.1.1.4   root      572: @unnumberedsec How to Apply These Terms to Your New Programs
1.1       root      573: 
                    574:   If you develop a new program, and you want it to be of the greatest
                    575: possible use to the public, the best way to achieve this is to make it
                    576: free software which everyone can redistribute and change under these terms.
                    577: 
                    578:   To do so, attach the following notices to the program.  It is safest
                    579: to attach them to the start of each source file to most effectively
                    580: convey the exclusion of warranty; and each file should have at least
                    581: the ``copyright'' line and a pointer to where the full notice is found.
                    582: 
                    583: @smallexample
1.1.1.5   root      584: @var{one line to give the program's name and a brief idea of what it does.}
1.1       root      585: Copyright (C) 19@var{yy}  @var{name of author}
                    586: 
1.1.1.5   root      587: This program is free software; you can redistribute it and/or modify 
                    588: it under the terms of the GNU General Public License as published by 
                    589: the Free Software Foundation; either version 2 of the License, or 
                    590: (at your option) any later version.
1.1       root      591: 
                    592: This program is distributed in the hope that it will be useful,
                    593: but WITHOUT ANY WARRANTY; without even the implied warranty of
                    594: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                    595: GNU General Public License for more details.
                    596: 
                    597: You should have received a copy of the GNU General Public License
                    598: along with this program; if not, write to the Free Software
1.1.1.8   root      599: Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1.1       root      600: @end smallexample
                    601: 
                    602: Also add information on how to contact you by electronic and paper mail.
                    603: 
                    604: If the program is interactive, make it output a short notice like this
                    605: when it starts in an interactive mode:
                    606: 
                    607: @smallexample
                    608: Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
1.1.1.4   root      609: Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
1.1.1.5   root      610: type `show w'.  
                    611: This is free software, and you are welcome to redistribute it 
                    612: under certain conditions; type `show c' for details.
1.1       root      613: @end smallexample
                    614: 
                    615: The hypothetical commands @samp{show w} and @samp{show c} should show
                    616: the appropriate parts of the General Public License.  Of course, the
                    617: commands you use may be called something other than @samp{show w} and
                    618: @samp{show c}; they could even be mouse-clicks or menu items---whatever
                    619: suits your program.
                    620: 
                    621: You should also get your employer (if you work as a programmer) or your
                    622: school, if any, to sign a ``copyright disclaimer'' for the program, if
                    623: necessary.  Here is a sample; alter the names:
                    624: 
1.1.1.5   root      625: @smallexample
                    626: Yoyodyne, Inc., hereby disclaims all copyright interest in the program
                    627: `Gnomovision' (which makes passes at compilers) written by James Hacker.
1.1       root      628: 
                    629: @var{signature of Ty Coon}, 1 April 1989
                    630: Ty Coon, President of Vice
1.1.1.5   root      631: @end smallexample
1.1       root      632: 
                    633: This General Public License does not permit incorporating your program into
                    634: proprietary programs.  If your program is a subroutine library, you may
                    635: consider it more useful to permit linking proprietary applications with the
                    636: library.  If this is what you want to do, use the GNU Library General
                    637: Public License instead of this License.
                    638: 
1.1.1.7   root      639: @node Contributors
1.1       root      640: @unnumbered Contributors to GNU CC
                    641: @cindex contributors
                    642: 
                    643: In addition to Richard Stallman, several people have written parts
                    644: of GNU CC.
                    645: 
                    646: @itemize @bullet
                    647: @item
                    648: The idea of using RTL and some of the optimization ideas came from the
1.1.1.2   root      649: program PO written at the University of Arizona by Jack Davidson and
1.1       root      650: Christopher Fraser.  See ``Register Allocation and Exhaustive Peephole
                    651: Optimization'', Software Practice and Experience 14 (9), Sept. 1984,
                    652: 857-866.
                    653: 
                    654: @item
                    655: Paul Rubin wrote most of the preprocessor.
                    656: 
                    657: @item
                    658: Leonard Tower wrote parts of the parser, RTL generator, and RTL
                    659: definitions, and of the Vax machine description.
                    660: 
                    661: @item
                    662: Ted Lemon wrote parts of the RTL reader and printer.
                    663: 
                    664: @item
                    665: Jim Wilson implemented loop strength reduction and some other
                    666: loop optimizations.
                    667: 
                    668: @item
                    669: Nobuyuki Hikichi of Software Research Associates, Tokyo, contributed
                    670: the support for the Sony NEWS machine.
                    671: 
                    672: @item
                    673: Charles LaBrec contributed the support for the Integrated Solutions
                    674: 68020 system.
                    675: 
                    676: @item
                    677: Michael Tiemann of Cygnus Support wrote the front end for C++, as well
                    678: as the support for inline functions and instruction scheduling.  Also
                    679: the descriptions of the National Semiconductor 32000 series cpu, the
                    680: SPARC cpu and part of the Motorola 88000 cpu.
                    681: 
                    682: @item
1.1.1.7   root      683: Gerald Baumgartner added the signature extension to the C++ front-end.
                    684: 
                    685: @item
1.1       root      686: Jan Stein of the Chalmers Computer Society provided support for
                    687: Genix, as well as part of the 32000 machine description.
                    688: 
                    689: @item
                    690: Randy Smith finished the Sun FPA support.
                    691: 
                    692: @item
                    693: Robert Brown implemented the support for Encore 32000 systems.
                    694: 
                    695: @item
1.1.1.8   root      696: David Kashtan of SRI adapted GNU CC to VMS.
1.1       root      697: 
                    698: @item
                    699: Alex Crain provided changes for the 3b1.
                    700: 
                    701: @item
                    702: Greg Satz and Chris Hanson assisted in making GNU CC work on HP-UX for
                    703: the 9000 series 300.
                    704: 
                    705: @item
                    706: William Schelter did most of the work on the Intel 80386 support.
                    707: 
                    708: @item
                    709: Christopher Smith did the port for Convex machines.
                    710: 
                    711: @item
                    712: Paul Petersen wrote the machine description for the Alliant FX/8.
                    713: 
                    714: @item
1.1.1.7   root      715: Dario Dariol contributed the four varieties of sample programs
                    716: that print a copy of their source.
                    717: 
                    718: @item
1.1       root      719: Alain Lichnewsky ported GNU CC to the Mips cpu.
                    720: 
                    721: @item
                    722: Devon Bowen, Dale Wiles and Kevin Zachmann ported GNU CC to the Tahoe.
                    723: 
                    724: @item
                    725: Jonathan Stone wrote the machine description for the Pyramid computer.
                    726: 
                    727: @item
1.1.1.3   root      728: Gary Miller ported GNU CC to Charles River Data Systems machines.
                    729: 
                    730: @item
1.1.1.4   root      731: Richard Kenner of the New York University Ultracomputer Research
                    732: Laboratory wrote the machine descriptions for the AMD 29000, the DEC
                    733: Alpha, the IBM RT PC, and the IBM RS/6000 as well as the support for
                    734: instruction attributes.  He also made changes to better support RISC
1.1       root      735: processors including changes to common subexpression elimination,
                    736: strength reduction, function calling sequence handling, and condition
                    737: code support, in addition to generalizing the code for frame pointer
                    738: elimination.
                    739: 
                    740: @item
                    741: Richard Kenner and Michael Tiemann jointly developed reorg.c, the delay
                    742: slot scheduler.
                    743: 
                    744: @item
                    745: Mike Meissner and Tom Wood of Data General finished the port to the
                    746: Motorola 88000.
                    747: 
                    748: @item 
                    749: Masanobu Yuhara of Fujitsu Laboratories implemented the machine
                    750: description for the Tron architecture (specifically, the Gmicro).
                    751: 
                    752: @item
                    753: NeXT, Inc.@: donated the front end that supports the Objective C
                    754: language.
                    755: @c We need to be careful to make it clear that "Objective C"
                    756: @c is the name of a language, not that of a program or product.
                    757: 
                    758: @item
                    759: James van Artsdalen wrote the code that makes efficient use of
                    760: the Intel 80387 register stack.
                    761: 
                    762: @item
                    763: Mike Meissner at the Open Software Foundation finished the port to the
1.1.1.7   root      764: MIPS cpu, including adding ECOFF debug support, and worked on the
                    765: Intel port for the Intel 80386 cpu.
1.1       root      766: 
                    767: @item
1.1.1.4   root      768: Ron Guilmette implemented the @code{protoize} and @code{unprotoize}
                    769: tools, the support for Dwarf symbolic debugging information, and much of
                    770: the support for System V Release 4.  He has also worked heavily on the
                    771: Intel 386 and 860 support.
1.1.1.2   root      772: 
                    773: @item
1.1.1.8   root      774: Torbjorn Granlund implemented multiply- and divide-by-constant
                    775: optimization, improved long long support, and improved leaf function
                    776: register allocation.
1.1.1.4   root      777: 
                    778: @item
                    779: Mike Stump implemented the support for Elxsi 64 bit CPU.
1.1.1.5   root      780: 
                    781: @item
                    782: John Wehle added the machine description for the Western Electric 32000
                    783: processor used in several 3b series machines (no relation to the
                    784: National Semiconductor 32000 processor).
                    785: 
                    786: @ignore @c These features aren't advertised yet, since they don't fully work.
                    787: @item
                    788: Analog Devices helped implement the support for complex data types
                    789: and iterators.
                    790: @end ignore
                    791: 
                    792: @item
                    793: Holger Teutsch provided the support for the Clipper cpu.
                    794: 
                    795: @item
                    796: Kresten Krab Thorup wrote the run time support for the Objective C
                    797: language.
                    798: 
                    799: @item
                    800: Stephen Moshier contributed the floating point emulator that assists in
                    801: cross-compilation and permits support for floating point numbers wider
                    802: than 64 bits.
                    803: 
                    804: @item
1.1.1.6   root      805: David Edelsohn contributed the changes to RS/6000 port to make it
                    806: support the PowerPC and POWER2 architectures.
                    807: 
                    808: @item
1.1.1.5   root      809: Steve Chamberlain wrote the support for the Hitachi SH processor.
1.1.1.6   root      810: 
                    811: @item
                    812: Peter Schauer wrote the code to allow debugging to work on the Alpha.
1.1.1.7   root      813: 
                    814: @item
                    815: Oliver M. Kellogg of Deutsche Aerospace contributed the port to the
                    816: MIL-STD-1750A.
1.1.1.8   root      817: 
                    818: @item
                    819: Michael K. Gschwind contributed the port to the PDP-11.
1.1       root      820: @end itemize
                    821: 
1.1.1.7   root      822: @node Funding
                    823: @chapter Funding Free Software
                    824: 
                    825: If you want to have more free software a few years from now, it makes
                    826: sense for you to help encourage people to contribute funds for its
                    827: development.  The most effective approach known is to encourage
                    828: commercial redistributors to donate.
                    829: 
                    830: Users of free software systems can boost the pace of development by
                    831: encouraging for-a-fee distributors to donate part of their selling price
                    832: to free software developers---the Free Software Foundation, and others.
                    833: 
                    834: The way to convince distributors to do this is to demand it and expect
                    835: it from them.  So when you compare distributors, judge them partly by
                    836: how much they give to free software development.  Show distributors
                    837: they must compete to be the one who gives the most.
                    838: 
                    839: To make this approach work, you must insist on numbers that you can
                    840: compare, such as, ``We will donate ten dollars to the Frobnitz project
                    841: for each disk sold.''  Don't be satisfied with a vague promise, such as
                    842: ``A portion of the profits are donated,'' since it doesn't give a basis
                    843: for comparison.
                    844: 
                    845: Even a precise fraction ``of the profits from this disk'' is not very
                    846: meaningful, since creative accounting and unrelated business decisions
                    847: can greatly alter what fraction of the sales price counts as profit.
                    848: If the price you pay is $50, ten percent of the profit is probably
                    849: less than a dollar; it might be a few cents, or nothing at all.
                    850: 
                    851: Some redistributors do development work themselves.  This is useful too;
                    852: but to keep everyone honest, you need to inquire how much they do, and
                    853: what kind.  Some kinds of development make much more long-term
                    854: difference than others.  For example, maintaining a separate version of
                    855: a program contributes very little; maintaining the standard version of a
                    856: program for the whole community contributes much.  Easy new ports
                    857: contribute little, since someone else would surely do them; difficult
                    858: ports such as adding a new CPU to the GNU C compiler contribute more;
                    859: major new features or packages contribute the most.
                    860: 
                    861: By establishing the idea that supporting further development is ``the
                    862: proper thing to do'' when distributing free software for a fee, we can
                    863: assure a steady flow of resources into making more free software.
                    864: 
                    865: @display
                    866: Copyright (C) 1994 Free Software Foundation, Inc.
                    867: Verbatim copying and redistribution of this section is permitted
                    868: without royalty; alteration is not permitted.
                    869: @end display
                    870: 
                    871: @node Look and Feel
1.1       root      872: @chapter Protect Your Freedom---Fight ``Look And Feel''
1.1.1.5   root      873: @c the above chapter heading overflows onto the next line. --mew 1/26/93 
1.1       root      874: 
                    875: @quotation
                    876: @i{This section is a political message from the League for Programming
1.1.1.7   root      877: Freedom to the users of GNU CC.  We have included it here because the
                    878: issue of interface copyright is important to the GNU project.}
1.1       root      879: @end quotation
                    880: 
1.1.1.8   root      881: Apple, Lotus, and now CDC have tried to create a new form of legal
                    882: monopoly: a copyright on a user interface.
1.1.1.7   root      883: 
                    884: An interface is a kind of language---a set of conventions for
                    885: communication between two entities, human or machine.  Until a few years
                    886: ago, the law seemed clear: interfaces were outside the domain of
                    887: copyright, so programmers could program freely and implement whatever
                    888: interface the users demanded.  Imitating de-facto standard interfaces,
                    889: sometimes with improvements, was standard practice in the computer
                    890: field.  These improvements, if accepted by the users, caught on and
                    891: became the norm; in this way, much progress took place.
                    892: 
                    893: Computer users, and most software developers, were happy with this state
                    894: of affairs.  However, large companies such as Apple and Lotus would
                    895: prefer a different system---one in which they can own interfaces and
                    896: thereby rid themselves of all serious competitors.  They hope that
                    897: interface copyright will give them, in effect, monopolies on major
                    898: classes of software.
                    899: 
                    900: Other large companies such as IBM and Digital also favor interface
                    901: monopolies, for the same reason: if languages become property, they
                    902: expect to own many de-facto standard languages.  But Apple and Lotus are
1.1.1.8   root      903: the ones who have actually sued.  Apple's lawsuit was defeated, for
                    904: reasons only partly related to the general issue of interface copyright.
                    905: 
                    906: Lotus won lawsuits against two small companies, which were thus put out
1.1.1.9 ! root      907: of business.  Then Lotus sued Borland; Lotus won in the trial court (no
1.1.1.8   root      908: surprise, since it was the same court that had ruled for Lotus twice
1.1.1.9 ! root      909: before), but the court of appeals ruled in favor of Borland, which was
        !           910: assisted by a friend-of-the-court brief from the League for Programming
        !           911: Freedom.
        !           912: 
        !           913: Lotus appealed the case to the Supreme Court, which heard the case but
        !           914: was unable to reach a decision.  This failure means that the appeals
        !           915: court decision stands, in one portion of the United States, and may
        !           916: influence the other appeals courts, but it does not set a nationwide
        !           917: precedent.  The battle is not over, and it is not limited to the United
        !           918: States.
        !           919: 
        !           920: The battle is extending into other areas of software as well.  In 1995 a
        !           921: company that produced a simulator for a CDC computer was shut down by a
        !           922: copyright lawsuit, in which CDC charged that the simulator infringed the
        !           923: copyright on the manuals for the computer.
1.1       root      924: 
1.1.1.7   root      925: If the monopolists get their way, they will hobble the software field:
1.1       root      926: 
                    927: @itemize @bullet
                    928: @item
1.1.1.7   root      929: Gratuitous incompatibilities will burden users.  Imagine if each car
                    930: manufacturer had to design a different way to start, stop, and steer a
                    931: car.
1.1       root      932: 
                    933: @item
1.1.1.7   root      934: Users will be ``locked in'' to whichever interface they learn; then they
                    935: will be prisoners of one supplier, who will charge a monopolistic price.
1.1       root      936: 
                    937: @item
                    938: Large companies have an unfair advantage wherever lawsuits become
1.1.1.7   root      939: commonplace.  Since they can afford to sue, they can intimidate smaller
                    940: developers with threats even when they don't really have a case.
1.1       root      941: 
                    942: @item
1.1.1.7   root      943: Interface improvements will come slower, since incremental evolution
                    944: through creative partial imitation will no longer occur.
                    945: @end itemize
                    946: 
                    947: If interface monopolies are accepted, other large companies are waiting
                    948: to grab theirs:
1.1       root      949: 
1.1.1.7   root      950: @itemize @bullet
1.1       root      951: @item
1.1.1.8   root      952: Adobe is expected to claim a monopoly on the interfaces of various
                    953: popular application programs, if Lotus ultimately wins the case against
                    954: Borland.
1.1       root      955: 
                    956: @item
1.1.1.7   root      957: Open Computing magazine reported a Microsoft vice president as threatening
1.1.1.8   root      958: to sue people who imitate the interface of Windows.
1.1       root      959: @end itemize
                    960: 
1.1.1.7   root      961: Users invest a great deal of time and money in learning to use computer
                    962: interfaces.  Far more, in fact, than software developers invest in
                    963: developing @emph{and even implementing} the interfaces.  Whoever can own
                    964: an interface, has made its users into captives, and misappropriated
                    965: their investment.
                    966: 
                    967: To protect our freedom from monopolies like these, a group of
                    968: programmers and users have formed a grass-roots political organization,
                    969: the League for Programming Freedom.
                    970: 
                    971: The purpose of the League is to oppose monopolistic practices such as
                    972: interface copyright and software patents.  The League calls for a return
                    973: to the legal policies of the recent past, in which programmers could
                    974: program freely.  The League is not concerned with free software as an
                    975: issue, and is not affiliated with the Free Software Foundation.
                    976: 
1.1.1.8   root      977: The League's activities include publicizing the issues, as is being done
1.1.1.7   root      978: here, and filing friend-of-the-court briefs on behalf of defendants sued
1.1.1.8   root      979: by monopolists.
1.1       root      980: 
1.1.1.8   root      981: The League's membership rolls include Donald Knuth, the foremost
                    982: authority on algorithms, John McCarthy, inventor of Lisp, Marvin Minsky,
                    983: founder of the MIT Artificial Intelligence lab, Guy L.  Steele, Jr.,
                    984: author of well-known books on Lisp and C, as well as Richard Stallman,
                    985: the developer of GNU CC.  Please join and add your name to the list.
                    986: Membership dues in the League are $42 per year for programmers, managers
                    987: and professionals; $10.50 for students; $21 for others.
1.1       root      988: 
1.1.1.7   root      989: Activist members are especially important, but members who have no time
                    990: to give are also important.  Surveys at major ACM conferences have
1.1.1.8   root      991: indicated a vast majority of attendees agree with the League on both
                    992: issues (interface copyrights and software patents).  If just ten percent
                    993: of the programmers who agree with the League join the League, we will
                    994: probably triumph.
1.1       root      995: 
1.1.1.4   root      996: To join, or for more information, phone (617) 243-4091 or write to:
1.1       root      997: 
                    998: @display
                    999: League for Programming Freedom
                   1000: 1 Kendall Square #143
                   1001: P.O. Box 9171
                   1002: Cambridge, MA 02139
                   1003: @end display
                   1004: 
1.1.1.7   root     1005: You can also send electronic mail to @code{lpf@@uunet.uu.net}.
1.1       root     1006: 
1.1.1.7   root     1007: In addition to joining the League, here are some suggestions from the
                   1008: League for other things you can do to protect your freedom to write
                   1009: programs:
1.1       root     1010: 
                   1011: @itemize @bullet
                   1012: @item
1.1.1.7   root     1013: Tell your friends and colleagues about this issue and how it threatens
                   1014: to ruin the computer industry.
1.1       root     1015: 
                   1016: @item
1.1.1.7   root     1017: Mention that you are a League member in your @file{.signature}, and
                   1018: mention the League's email address for inquiries.
1.1       root     1019: 
                   1020: @item
1.1.1.7   root     1021: Ask the companies you consider working for or working with to make
                   1022: statements against software monopolies, and give preference to those
                   1023: that do.
1.1       root     1024: 
                   1025: @item
1.1.1.8   root     1026: When employers ask you to sign contracts giving them copyright on your
                   1027: work, insist on a clause saying they will not claim the copyright covers
                   1028: imitating the interface.
1.1       root     1029: 
                   1030: @item
1.1.1.8   root     1031: When employers ask you to sign contracts giving them patent rights,
                   1032: insist on clauses saying they can use these rights only defensively.
                   1033: Don't rely on ``company policy,'' since that can change at any time;
                   1034: don't rely on an individual executive's private word, since that person
                   1035: may be replaced.  Get a commitment just as binding as the commitment
                   1036: they get from you.
                   1037: 
                   1038: @item
                   1039: Write to Congress to explain the importance of these issues.
1.1       root     1040: 
                   1041: @display
                   1042: House Subcommittee on Intellectual Property
                   1043: 2137 Rayburn Bldg
                   1044: Washington, DC 20515
                   1045: 
                   1046: Senate Subcommittee on Patents, Trademarks and Copyrights
                   1047: United States Senate
                   1048: Washington, DC 20510
                   1049: @end display
                   1050: 
                   1051: (These committees have received lots of mail already; let's give them
                   1052: even more.)
                   1053: @end itemize
                   1054: 
1.1.1.7   root     1055: Democracy means nothing if you don't use it.  Stand up and be counted!
1.1.1.5   root     1056: @ifset USING
                   1057: @node G++ and GCC
                   1058: @chapter Compile C, C++, or Objective C
                   1059: 
                   1060: @cindex Objective C
                   1061: The C, C++, and Objective C versions of the compiler are integrated; the
                   1062: GNU C compiler can compile programs written in C, C++, or Objective C.
                   1063: 
                   1064: @cindex GCC
                   1065: ``GCC'' is a common shorthand term for the GNU C compiler.  This is both
                   1066: the most general name for the compiler, and the name used when the
                   1067: emphasis is on compiling C programs.
                   1068: 
                   1069: @cindex C++
                   1070: @cindex G++
                   1071: When referring to C++ compilation, it is usual to call the compiler
                   1072: ``G++''.  Since there is only one compiler, it is also accurate to call
                   1073: it ``GCC'' no matter what the language context; however, the term
                   1074: ``G++'' is more useful when the emphasis is on compiling C++ programs.
                   1075: 
1.1.1.7   root     1076: We use the name ``GNU CC'' to refer to the compilation system as a
                   1077: whole, and more specifically to the language-independent part of the
                   1078: compiler.  For example, we refer to the optimization options as
                   1079: affecting the behavior of ``GNU CC'' or sometimes just ``the compiler''.
                   1080: 
                   1081: Front ends for other languages, such as Ada 9X, Fortran, Modula-3, and
                   1082: Pascal, are under development.  These front-ends, like that for C++, are
                   1083: built in subdirectories of GNU CC and link to it.  The result is an
                   1084: integrated compiler that can compile programs written in C, C++,
                   1085: Objective C, or any of the languages for which you have installed front
                   1086: ends.
                   1087: 
                   1088: In this manual, we only discuss the options for the C, Objective-C, and
                   1089: C++ compilers and those of the GNU CC core.  Consult the documentation
                   1090: of the other front ends for the options to use when compiling programs
                   1091: written in other languages.
                   1092: 
1.1.1.5   root     1093: @cindex compiler compared to C++ preprocessor
                   1094: @cindex intermediate C version, nonexistent
                   1095: @cindex C intermediate output, nonexistent
                   1096: G++ is a @emph{compiler}, not merely a preprocessor.  G++ builds object
                   1097: code directly from your C++ program source.  There is no intermediate C
                   1098: version of the program.  (By contrast, for example, some other
                   1099: implementations use a program that generates a C program from your C++
                   1100: source.)  Avoiding an intermediate C representation of the program means
                   1101: that you get better object code, and better debugging information.  The
                   1102: GNU debugger, GDB, works with this information in the object code to
                   1103: give you comprehensive C++ source-level editing capabilities
                   1104: (@pxref{C,,C and C++,gdb.info, Debugging with GDB}).
                   1105: 
                   1106: @c FIXME!  Someone who knows something about Objective C ought to put in
                   1107: @c a paragraph or two about it here, and move the index entry down when
                   1108: @c there is more to point to than the general mention in the 1st par.
                   1109: 
1.1       root     1110: @include invoke.texi
                   1111: 
1.1.1.3   root     1112: @include install.texi
                   1113: 
                   1114: @include extend.texi
                   1115: 
                   1116: @node Trouble
                   1117: @chapter Known Causes of Trouble with GNU CC
                   1118: @cindex bugs, known
                   1119: @cindex installation trouble
                   1120: @cindex known causes of trouble
1.1       root     1121: 
1.1.1.3   root     1122: This section describes known problems that affect users of GNU CC.  Most
                   1123: of these are not GNU CC bugs per se---if they were, we would fix them.
                   1124: But the result for a user may be like the result of a bug.
                   1125: 
                   1126: Some of these problems are due to bugs in other software, some are
                   1127: missing features that are too much work to add, and some are places
                   1128: where people's opinions differ as to what is best.
1.1       root     1129: 
                   1130: @menu
1.1.1.3   root     1131: * Actual Bugs::                      Bugs we will fix later.
                   1132: * Installation Problems::     Problems that manifest when you install GNU CC.
                   1133: * Cross-Compiler Problems::   Common problems of cross compiling with GNU CC.
                   1134: * Interoperation::      Problems using GNU CC with other compilers,
                   1135:                           and with certain linkers, assemblers and debuggers.
1.1.1.5   root     1136: * External Bugs::      Problems compiling certain programs.
1.1.1.3   root     1137: * Incompatibilities::   GNU CC is incompatible with traditional C.
1.1.1.6   root     1138: * Fixed Headers::       GNU C uses corrected versions of system header files.
                   1139:                            This is necessary, but doesn't always work smoothly.
1.1.1.8   root     1140: * Standard Libraries::  GNU C uses the system C library, which might not be 
                   1141:                            compliant with the ISO/ANSI C standard.
1.1.1.3   root     1142: * Disappointments::     Regrettable things we can't change, but not quite bugs.
1.1.1.5   root     1143: * C++ Misunderstandings::     Common misunderstandings with GNU C++.
1.1.1.4   root     1144: * Protoize Caveats::    Things to watch out for when using @code{protoize}.
1.1.1.3   root     1145: * Non-bugs::           Things we think are right, but some others disagree.
1.1.1.5   root     1146: * Warnings and Errors:: Which problems in your code get warnings,
                   1147:                          and which get errors.
1.1       root     1148: @end menu
                   1149: 
1.1.1.3   root     1150: @node Actual Bugs
                   1151: @section Actual Bugs We Haven't Fixed Yet
1.1       root     1152: 
1.1.1.3   root     1153: @itemize @bullet
1.1       root     1154: @item
1.1.1.5   root     1155: The @code{fixincludes} script interacts badly with automounters; if the
                   1156: directory of system header files is automounted, it tends to be
                   1157: unmounted while @code{fixincludes} is running.  This would seem to be a
                   1158: bug in the automounter.  We don't know any good way to work around it.
                   1159: 
                   1160: @item
1.1.1.6   root     1161: The @code{fixproto} script will sometimes add prototypes for the
                   1162: @code{sigsetjmp} and @code{siglongjmp} functions that reference the
                   1163: @code{jmp_buf} type before that type is defined.  To work around this,
                   1164: edit the offending file and place the typedef in front of the
                   1165: prototypes.
                   1166: 
                   1167: @item
1.1.1.7   root     1168: There are several obscure case of mis-using struct, union, and 
                   1169: enum tags that are not detected as errors by the compiler.
                   1170: 
                   1171: @item
                   1172: When @samp{-pedantic-errors} is specified, GNU C will incorrectly give
                   1173: an error message when a function name is specified in an expression
                   1174: involving the comma operator.
                   1175: 
                   1176: @item
1.1.1.4   root     1177: Loop unrolling doesn't work properly for certain C++ programs.  This is
1.1.1.7   root     1178: a bug in the C++ front end.  It sometimes emits incorrect debug info, and
                   1179: the loop unrolling code is unable to recover from this error.
1.1.1.3   root     1180: @end itemize
1.1       root     1181: 
1.1.1.3   root     1182: @node Installation Problems
                   1183: @section Installation Problems
1.1.1.4   root     1184: 
1.1.1.3   root     1185: This is a list of problems (and some apparent problems which don't
                   1186: really mean anything is wrong) that show up during installation of GNU
                   1187: CC.
1.1       root     1188: 
                   1189: @itemize @bullet
                   1190: @item
1.1.1.3   root     1191: On certain systems, defining certain environment variables such as
                   1192: @code{CC} can interfere with the functioning of @code{make}.
1.1       root     1193: 
                   1194: @item
1.1.1.3   root     1195: If you encounter seemingly strange errors when trying to build the
                   1196: compiler in a directory other than the source directory, it could be
                   1197: because you have previously configured the compiler in the source
                   1198: directory.  Make sure you have done all the necessary preparations.
                   1199: @xref{Other Dir}.
1.1       root     1200: 
                   1201: @item
1.1.1.6   root     1202: If you build GNU CC on a BSD system using a directory stored in a System
                   1203: V file system, problems may occur in running @code{fixincludes} if the
                   1204: System V file system doesn't support symbolic links.  These problems
                   1205: result in a failure to fix the declaration of @code{size_t} in
                   1206: @file{sys/types.h}.  If you find that @code{size_t} is a signed type and
                   1207: that type mismatches occur, this could be the cause.
                   1208: 
                   1209: The solution is not to use such a directory for building GNU CC.
                   1210: 
                   1211: @item
1.1.1.3   root     1212: In previous versions of GNU CC, the @code{gcc} driver program looked for
1.1.1.5   root     1213: @code{as} and @code{ld} in various places; for example, in files
                   1214: beginning with @file{/usr/local/lib/gcc-}.  GNU CC version 2 looks for
                   1215: them in the directory
                   1216: @file{/usr/local/lib/gcc-lib/@var{target}/@var{version}}.
1.1       root     1217: 
1.1.1.3   root     1218: Thus, to use a version of @code{as} or @code{ld} that is not the system
                   1219: default, for example @code{gas} or GNU @code{ld}, you must put them in
                   1220: that directory (or make links to them from that directory).
1.1       root     1221: 
                   1222: @item
1.1.1.3   root     1223: Some commands executed when making the compiler may fail (return a
                   1224: non-zero status) and be ignored by @code{make}.  These failures, which
                   1225: are often due to files that were not found, are expected, and can safely
                   1226: be ignored.
1.1       root     1227: 
                   1228: @item
1.1.1.3   root     1229: It is normal to have warnings in compiling certain files about
                   1230: unreachable code and about enumeration type clashes.  These files' names
1.1.1.5   root     1231: begin with @samp{insn-}.  Also, @file{real.c} may get some warnings that
                   1232: you can ignore.
1.1       root     1233: 
                   1234: @item
1.1.1.3   root     1235: Sometimes @code{make} recompiles parts of the compiler when installing
                   1236: the compiler.  In one case, this was traced down to a bug in
                   1237: @code{make}.  Either ignore the problem or switch to GNU Make.
1.1       root     1238: 
1.1.1.4   root     1239: @item
1.1.1.5   root     1240: If you have installed a program known as purify, you may find that it
                   1241: causes errors while linking @code{enquire}, which is part of building
                   1242: GNU CC.  The fix is to get rid of the file @code{real-ld} which purify
                   1243: installs---so that GNU CC won't try to use it.
                   1244: 
                   1245: @item 
1.1.1.9 ! root     1246: On SLS 1.01, a Linux-based GNU system, there is a problem with
        !          1247: @file{libc.a}: it does not contain the obstack functions.  However, GNU
        !          1248: CC assumes that the obstack functions are in @file{libc.a} when it is
        !          1249: the GNU C library.  To work around this problem, change the
        !          1250: @code{__GNU_LIBRARY__} conditional around line 31 to @samp{#if 1}.
1.1.1.5   root     1251: 
                   1252: @item
1.1.1.4   root     1253: On some 386 systems, building the compiler never finishes because
                   1254: @code{enquire} hangs due to a hardware problem in the motherboard---it
                   1255: reports floating point exceptions to the kernel incorrectly.  You can
                   1256: install GNU CC except for @file{float.h} by patching out the command to
                   1257: run @code{enquire}.  You may also be able to fix the problem for real by
                   1258: getting a replacement motherboard.  This problem was observed in
                   1259: Revision E of the Micronics motherboard, and is fixed in Revision F.
1.1.1.6   root     1260: It has also been observed in the MYLEX MXA-33 motherboard.
                   1261: 
                   1262: If you encounter this problem, you may also want to consider removing
                   1263: the FPU from the socket during the compilation.  Alternatively, if you
                   1264: are running SCO Unix, you can reboot and force the FPU to be ignored.
                   1265: To do this, type @samp{hd(40)unix auto ignorefpu}.
1.1.1.4   root     1266: 
                   1267: @item
                   1268: On some 386 systems, GNU CC crashes trying to compile @file{enquire.c}.
                   1269: This happens on machines that don't have a 387 FPU chip.  On 386
                   1270: machines, the system kernel is supposed to emulate the 387 when you
                   1271: don't have one.  The crash is due to a bug in the emulator.
                   1272: 
                   1273: One of these systems is the Unix from Interactive Systems: 386/ix.
                   1274: On this system, an alternate emulator is provided, and it does work.
                   1275: To use it, execute this command as super-user:
                   1276: 
                   1277: @example
                   1278: ln /etc/emulator.rel1 /etc/emulator
                   1279: @end example
                   1280: 
                   1281: @noindent
                   1282: and then reboot the system.  (The default emulator file remains present
                   1283: under the name @file{emulator.dflt}.)
                   1284: 
1.1.1.5   root     1285: Try using @file{/etc/emulator.att}, if you have such a problem on the
                   1286: SCO system.
1.1.1.4   root     1287: 
                   1288: Another system which has this problem is Esix.  We don't know whether it
                   1289: has an alternate emulator that works.
                   1290: 
1.1.1.5   root     1291: On NetBSD 0.8, a similar problem manifests itself as these error messages:
                   1292: 
                   1293: @example
                   1294: enquire.c: In function `fprop':
                   1295: enquire.c:2328: floating overflow
                   1296: @end example
                   1297: 
1.1.1.6   root     1298: @item
                   1299: On SCO systems, when compiling GNU CC with the system's compiler,
                   1300: do not use @samp{-O}.  Some versions of the system's compiler miscompile
                   1301: GNU CC with @samp{-O}.
                   1302: 
1.1.1.3   root     1303: @cindex @code{genflags}, crash on Sun 4
1.1       root     1304: @item
1.1.1.3   root     1305: Sometimes on a Sun 4 you may observe a crash in the program
1.1.1.4   root     1306: @code{genflags} or @code{genoutput} while building GNU CC.  This is said to
1.1.1.3   root     1307: be due to a bug in @code{sh}.  You can probably get around it by running
                   1308: @code{genflags} or @code{genoutput} manually and then retrying the
                   1309: @code{make}.
1.1       root     1310: 
1.1.1.3   root     1311: @item
1.1.1.5   root     1312: On Solaris 2, executables of GNU CC version 2.0.2 are commonly
                   1313: available, but they have a bug that shows up when compiling current
                   1314: versions of GNU CC: undefined symbol errors occur during assembly if you
                   1315: use @samp{-g}.
                   1316: 
                   1317: The solution is to compile the current version of GNU CC without
                   1318: @samp{-g}.  That makes a working compiler which you can use to recompile
                   1319: with @samp{-g}.
                   1320: 
                   1321: @item
1.1.1.6   root     1322: Solaris 2 comes with a number of optional OS packages.  Some of these
1.1.1.5   root     1323: packages are needed to use GNU CC fully.  If you did not install all
                   1324: optional packages when installing Solaris, you will need to verify that
1.1.1.6   root     1325: the packages that GNU CC needs are installed.
1.1.1.5   root     1326: 
1.1.1.6   root     1327: To check whether an optional package is installed, use
1.1.1.5   root     1328: the @code{pkginfo} command.  To add an optional package, use the
                   1329: @code{pkgadd} command.  For further details, see the Solaris
                   1330: documentation.
                   1331: 
1.1.1.6   root     1332: For Solaris 2.0 and 2.1, GNU CC needs six packages: @samp{SUNWarc},
                   1333: @samp{SUNWbtool}, @samp{SUNWesu}, @samp{SUNWhea}, @samp{SUNWlibm}, and
                   1334: @samp{SUNWtoo}.  
                   1335: 
                   1336: For Solaris 2.2, GNU CC needs an additional seventh package: @samp{SUNWsprot}.
                   1337: 
1.1.1.5   root     1338: @item
                   1339: On Solaris 2, trying to use the linker and other tools in
                   1340: @file{/usr/ucb} to install GNU CC has been observed to cause trouble.
                   1341: For example, the linker may hang indefinitely.  The fix is to remove
                   1342: @file{/usr/ucb} from your @code{PATH}.
                   1343: 
                   1344: @item
1.1.1.3   root     1345: If you use the 1.31 version of the MIPS assembler (such as was shipped
                   1346: with Ultrix 3.1), you will need to use the -fno-delayed-branch switch
                   1347: when optimizing floating point code.  Otherwise, the assembler will
                   1348: complain when the GCC compiler fills a branch delay slot with a
1.1.1.6   root     1349: floating point instruction, such as @code{add.d}.
1.1.1.3   root     1350: 
                   1351: @item
1.1.1.5   root     1352: If on a MIPS system you get an error message saying ``does not have gp
                   1353: sections for all it's [sic] sectons [sic]'', don't worry about it.  This
                   1354: happens whenever you use GAS with the MIPS linker, but there is not
                   1355: really anything wrong, and it is okay to use the output file.  You can
                   1356: stop such warnings by installing the GNU linker.
                   1357: 
                   1358: It would be nice to extend GAS to produce the gp tables, but they are
                   1359: optional, and there should not be a warning about their absence.
                   1360: 
                   1361: @item
1.1.1.6   root     1362: In Ultrix 4.0 on the MIPS machine, @file{stdio.h} does not work with GNU
                   1363: CC at all unless it has been fixed with @code{fixincludes}.  This causes
                   1364: problems in building GNU CC.  Once GNU CC is installed, the problems go
                   1365: away.
                   1366: 
                   1367: To work around this problem, when making the stage 1 compiler, specify
                   1368: this option to Make:
                   1369: 
                   1370: @example
                   1371: GCC_FOR_TARGET="./xgcc -B./ -I./include"
                   1372: @end example
                   1373: 
                   1374: When making stage 2 and stage 3, specify this option:
                   1375: 
                   1376: @example
                   1377: CFLAGS="-g -I./include"
                   1378: @end example
                   1379: 
                   1380: @item
1.1.1.3   root     1381: Users have reported some problems with version 2.0 of the MIPS
                   1382: compiler tools that were shipped with Ultrix 4.1.  Version 2.10
                   1383: which came with Ultrix 4.2 seems to work fine.
1.1       root     1384: 
1.1.1.7   root     1385: Users have also reported some problems with version 2.20 of the
                   1386: MIPS compiler tools that were shipped with RISC/os 4.x.  The earlier
                   1387: version 2.11 seems to work fine.
                   1388: 
1.1       root     1389: @item
1.1.1.4   root     1390: Some versions of the MIPS linker will issue an assertion failure
                   1391: when linking code that uses @code{alloca} against shared
                   1392: libraries on RISC-OS 5.0, and DEC's OSF/1 systems.  This is a bug
                   1393: in the linker, that is supposed to be fixed in future revisions.
1.1.1.6   root     1394: To protect against this, GNU CC passes @samp{-non_shared} to the
1.1.1.4   root     1395: linker unless you pass an explicit @samp{-shared} or
                   1396: @samp{-call_shared} switch.
                   1397: 
                   1398: @item
                   1399: On System V release 3, you may get this error message
                   1400: while linking:
                   1401: 
                   1402: @smallexample
                   1403: ld fatal: failed to write symbol name @var{something} 
                   1404:  in strings table for file @var{whatever}
                   1405: @end smallexample
                   1406: 
1.1.1.5   root     1407: This probably indicates that the disk is full or your ULIMIT won't allow
1.1.1.4   root     1408: the file to be as large as it needs to be.
                   1409: 
1.1.1.5   root     1410: This problem can also result because the kernel parameter @code{MAXUMEM}
                   1411: is too small.  If so, you must regenerate the kernel and make the value
                   1412: much larger.  The default value is reported to be 1024; a value of 32768
                   1413: is said to work.  Smaller values may also work.
                   1414: 
                   1415: @item
                   1416: On System V, if you get an error like this,
                   1417: 
                   1418: @example
                   1419: /usr/local/lib/bison.simple: In function `yyparse':
                   1420: /usr/local/lib/bison.simple:625: virtual memory exhausted
                   1421: @end example
                   1422: 
                   1423: @noindent
                   1424: that too indicates a problem with disk space, ULIMIT, or @code{MAXUMEM}.
                   1425: 
                   1426: @item
                   1427: Current GNU CC versions probably do not work on version 2 of the NeXT
                   1428: operating system.
                   1429: 
                   1430: @item
1.1.1.6   root     1431: On NeXTStep 3.0, the Objective C compiler does not work, due,
                   1432: apparently, to a kernel bug that it happens to trigger.  This problem
                   1433: does not happen on 3.1.
                   1434: 
                   1435: @item
1.1.1.5   root     1436: On the Tower models 4@var{n}0 and 6@var{n}0, by default a process is not
                   1437: allowed to have more than one megabyte of memory.  GNU CC cannot compile
                   1438: itself (or many other programs) with @samp{-O} in that much memory.
                   1439: 
                   1440: To solve this problem, reconfigure the kernel adding the following line
                   1441: to the configuration file:
                   1442: 
                   1443: @smallexample
                   1444: MAXUMEM = 4096
                   1445: @end smallexample
                   1446: 
1.1.1.4   root     1447: @item
1.1.1.3   root     1448: On HP 9000 series 300 or 400 running HP-UX release 8.0, there is a bug
                   1449: in the assembler that must be fixed before GNU CC can be built.  This
                   1450: bug manifests itself during the first stage of compilation, while
                   1451: building @file{libgcc2.a}:
1.1       root     1452: 
1.1.1.5   root     1453: @smallexample
1.1.1.3   root     1454: _floatdisf
                   1455: cc1: warning: `-g' option not supported on this version of GCC
                   1456: cc1: warning: `-g1' option not supported on this version of GCC
1.1.1.5   root     1457: ./xgcc: Internal compiler error: program as got fatal signal 11
                   1458: @end smallexample
1.1       root     1459: 
1.1.1.3   root     1460: A patched version of the assembler is available by anonymous ftp from
                   1461: @code{altdorf.ai.mit.edu} as the file
                   1462: @file{archive/cph/hpux-8.0-assembler}.  If you have HP software support,
                   1463: the patch can also be obtained directly from HP, as described in the
                   1464: following note:
1.1       root     1465: 
1.1.1.3   root     1466: @quotation
                   1467: This is the patched assembler, to patch SR#1653-010439, where the
                   1468: assembler aborts on floating point constants.
1.1       root     1469: 
1.1.1.3   root     1470: The bug is not really in the assembler, but in the shared library
                   1471: version of the function ``cvtnum(3c)''.  The bug on ``cvtnum(3c)'' is
                   1472: SR#4701-078451.  Anyway, the attached assembler uses the archive
                   1473: library version of ``cvtnum(3c)'' and thus does not exhibit the bug.
                   1474: @end quotation
1.1       root     1475: 
1.1.1.7   root     1476: This patch is also known as PHCO_4484.
1.1       root     1477: 
1.1.1.3   root     1478: @item
1.1.1.6   root     1479: On HP-UX version 8.05, but not on 8.07 or more recent versions,
                   1480: the @code{fixproto} shell script triggers a bug in the system shell.
                   1481: If you encounter this problem, upgrade your operating system or
                   1482: use BASH (the GNU shell) to run @code{fixproto}.
1.1       root     1483: 
1.1.1.3   root     1484: @item
                   1485: Some versions of the Pyramid C compiler are reported to be unable to
                   1486: compile GNU CC.  You must use an older version of GNU CC for
                   1487: bootstrapping.  One indication of this problem is if you get a crash
                   1488: when GNU CC compiles the function @code{muldi3} in file @file{libgcc2.c}.
1.1       root     1489: 
1.1.1.3   root     1490: You may be able to succeed by getting GNU CC version 1, installing it,
                   1491: and using it to compile GNU CC version 2.  The bug in the Pyramid C
                   1492: compiler does not seem to affect GNU CC version 1.
1.1       root     1493: 
1.1.1.3   root     1494: @item
1.1.1.5   root     1495: There may be similar problems on System V Release 3.1 on 386 systems.
1.1       root     1496: 
                   1497: @item
1.1.1.6   root     1498: On the Intel Paragon (an i860 machine), if you are using operating
                   1499: system version 1.0, you will get warnings or errors about redefinition
                   1500: of @code{va_arg} when you build GNU CC.
                   1501: 
                   1502: If this happens, then you need to link most programs with the library
                   1503: @file{iclib.a}.  You must also modify @file{stdio.h} as follows: before
                   1504: the lines
                   1505: 
                   1506: @example
                   1507: #if     defined(__i860__) && !defined(_VA_LIST)
                   1508: #include <va_list.h>
                   1509: @end example
                   1510: 
                   1511: @noindent
                   1512: insert the line
                   1513: 
                   1514: @example
                   1515: #if __PGC__
                   1516: @end example
                   1517: 
                   1518: @noindent
                   1519: and after the lines
                   1520: 
                   1521: @example
                   1522: extern int  vprintf(const char *, va_list );
                   1523: extern int  vsprintf(char *, const char *, va_list );
                   1524: #endif
                   1525: @end example
                   1526: 
                   1527: @noindent
                   1528: insert the line
                   1529: 
                   1530: @example
                   1531: #endif /* __PGC__ */
                   1532: @end example
                   1533: 
                   1534: These problems don't exist in operating system version 1.1.
                   1535: 
                   1536: @item
1.1.1.3   root     1537: On the Altos 3068, programs compiled with GNU CC won't work unless you
                   1538: fix a kernel bug.  This happens using system versions V.2.2 1.0gT1 and
                   1539: V.2.2 1.0e and perhaps later versions as well.  See the file
                   1540: @file{README.ALTOS}.
1.1.1.4   root     1541: 
                   1542: @item
                   1543: You will get several sorts of compilation and linking errors on the
1.1.1.7   root     1544: we32k if you don't follow the special instructions.  @xref{Configurations}.
                   1545: 
                   1546: @item
                   1547: A bug in the HP-UX 8.05 (and earlier) shell will cause the fixproto
                   1548: program to report an error of the form:
                   1549: 
                   1550: @example
                   1551: ./fixproto: sh internal 1K buffer overflow
                   1552: @end example
                   1553: 
                   1554: To fix this, change the first line of the fixproto script to look like:
                   1555: 
                   1556: @example
                   1557: #!/bin/ksh
                   1558: @end example
1.1.1.3   root     1559: @end itemize
1.1       root     1560: 
1.1.1.3   root     1561: @node Cross-Compiler Problems
                   1562: @section Cross-Compiler Problems
1.1       root     1563: 
1.1.1.5   root     1564: You may run into problems with cross compilation on certain machines,
                   1565: for several reasons.
                   1566: 
1.1.1.3   root     1567: @itemize @bullet
                   1568: @item
                   1569: Cross compilation can run into trouble for certain machines because
                   1570: some target machines' assemblers require floating point numbers to be
                   1571: written as @emph{integer} constants in certain contexts.
1.1       root     1572: 
1.1.1.3   root     1573: The compiler writes these integer constants by examining the floating
                   1574: point value as an integer and printing that integer, because this is
                   1575: simple to write and independent of the details of the floating point
                   1576: representation.  But this does not work if the compiler is running on
                   1577: a different machine with an incompatible floating point format, or
                   1578: even a different byte-ordering.
1.1       root     1579: 
1.1.1.3   root     1580: In addition, correct constant folding of floating point values
                   1581: requires representing them in the target machine's format.
                   1582: (The C standard does not quite require this, but in practice
                   1583: it is the only way to win.)
1.1.1.2   root     1584: 
1.1.1.3   root     1585: It is now possible to overcome these problems by defining macros such
                   1586: as @code{REAL_VALUE_TYPE}.  But doing so is a substantial amount of
1.1.1.5   root     1587: work for each target machine.
                   1588: @ifset INTERNALS
                   1589: @xref{Cross-compilation}.
1.1.1.3   root     1590: @end ifset
                   1591: @ifclear INTERNALS
1.1.1.5   root     1592: @xref{Cross-compilation,,Cross Compilation and Floating Point Format,
                   1593: gcc.info, Using and Porting GCC}.
1.1.1.3   root     1594: @end ifclear
1.1       root     1595: 
                   1596: @item
1.1.1.3   root     1597: At present, the program @file{mips-tfile} which adds debug
                   1598: support to object files on MIPS systems does not work in a cross
                   1599: compile environment.
                   1600: @end itemize
1.1       root     1601: 
1.1.1.3   root     1602: @node Interoperation
                   1603: @section Interoperation
1.1       root     1604: 
1.1.1.3   root     1605: This section lists various difficulties encountered in using GNU C or
1.1.1.4   root     1606: GNU C++ together with other compilers or with the assemblers, linkers,
                   1607: libraries and debuggers on certain systems.
1.1       root     1608: 
1.1.1.3   root     1609: @itemize @bullet
                   1610: @item
1.1.1.7   root     1611: Objective C does not work on the RS/6000.
1.1       root     1612: 
                   1613: @item
1.1.1.3   root     1614: GNU C++ does not do name mangling in the same way as other C++
                   1615: compilers.  This means that object files compiled with one compiler
                   1616: cannot be used with another.
1.1       root     1617: 
1.1.1.5   root     1618: This effect is intentional, to protect you from more subtle problems.
                   1619: Compilers differ as to many internal details of C++ implementation,
                   1620: including: how class instances are laid out, how multiple inheritance is
                   1621: implemented, and how virtual function calls are handled.  If the name
                   1622: encoding were made the same, your programs would link against libraries
                   1623: provided from other compilers---but the programs would then crash when
                   1624: run.  Incompatible libraries are then detected at link time, rather than
                   1625: at run time.
1.1       root     1626: 
1.1.1.3   root     1627: @item
                   1628: Older GDB versions sometimes fail to read the output of GNU CC version
                   1629: 2.  If you have trouble, get GDB version 4.4 or later.
1.1       root     1630: 
                   1631: @item
1.1.1.3   root     1632: @cindex DBX
                   1633: DBX rejects some files produced by GNU CC, though it accepts similar
                   1634: constructs in output from PCC.  Until someone can supply a coherent
                   1635: description of what is valid DBX input and what is not, there is
                   1636: nothing I can do about these problems.  You are on your own.
1.1       root     1637: 
1.1.1.3   root     1638: @item
                   1639: The GNU assembler (GAS) does not support PIC.  To generate PIC code, you
                   1640: must use some other assembler, such as @file{/bin/as}.
1.1       root     1641: 
1.1.1.3   root     1642: @item
1.1.1.6   root     1643: On some BSD systems, including some versions of Ultrix, use of profiling
1.1.1.3   root     1644: causes static variable destructors (currently used only in C++) not to
                   1645: be run.
1.1       root     1646: 
1.1.1.4   root     1647: @item
                   1648: Use of @samp{-I/usr/include} may cause trouble.
                   1649: 
                   1650: Many systems come with header files that won't work with GNU CC unless
                   1651: corrected by @code{fixincludes}.  The corrected header files go in a new
                   1652: directory; GNU CC searches this directory before @file{/usr/include}.
                   1653: If you use @samp{-I/usr/include}, this tells GNU CC to search
                   1654: @file{/usr/include} earlier on, before the corrected headers.  The
                   1655: result is that you get the uncorrected header files.
                   1656: 
1.1.1.5   root     1657: Instead, you should use these options (when compiling C programs):
1.1.1.4   root     1658: 
1.1.1.5   root     1659: @smallexample
1.1.1.4   root     1660: -I/usr/local/lib/gcc-lib/@var{target}/@var{version}/include -I/usr/include
1.1.1.5   root     1661: @end smallexample
                   1662: 
                   1663: For C++ programs, GNU CC also uses a special directory that defines C++
                   1664: interfaces to standard C subroutines.  This directory is meant to be
                   1665: searched @emph{before} other standard include directories, so that it
                   1666: takes precedence.  If you are compiling C++ programs and specifying
                   1667: include directories explicitly, use this option first, then the two
                   1668: options above:
                   1669: 
                   1670: @example
                   1671: -I/usr/local/lib/g++-include
1.1.1.4   root     1672: @end example
                   1673: 
1.1.1.3   root     1674: @ignore
                   1675: @cindex @code{vfork}, for the Sun-4
                   1676: @item
                   1677: There is a bug in @code{vfork} on the Sun-4 which causes the registers
                   1678: of the child process to clobber those of the parent.  Because of this,
                   1679: programs that call @code{vfork} are likely to lose when compiled
                   1680: optimized with GNU CC when the child code alters registers which contain
                   1681: C variables in the parent.  This affects variables which are live in the
                   1682: parent across the call to @code{vfork}.
1.1       root     1683: 
1.1.1.3   root     1684: If you encounter this, you can work around the problem by declaring
                   1685: variables @code{volatile} in the function that calls @code{vfork}, until
                   1686: the problem goes away, or by not declaring them @code{register} and not
                   1687: using @samp{-O} for those source files.
                   1688: @end ignore
1.1       root     1689: 
1.1.1.3   root     1690: @item
1.1.1.6   root     1691: On some SGI systems, when you use @samp{-lgl_s} as an option,
                   1692: it gets translated magically to @samp{-lgl_s -lX11_s -lc_s}.
                   1693: Naturally, this does not happen when you use GNU CC.
                   1694: You must specify all three options explicitly.
                   1695: 
                   1696: @item
1.1.1.4   root     1697: On a Sparc, GNU CC aligns all values of type @code{double} on an 8-byte
                   1698: boundary, and it expects every @code{double} to be so aligned.  The Sun
                   1699: compiler usually gives @code{double} values 8-byte alignment, with one
                   1700: exception: function arguments of type @code{double} may not be aligned.
                   1701: 
                   1702: As a result, if a function compiled with Sun CC takes the address of an
                   1703: argument of type @code{double} and passes this pointer of type
                   1704: @code{double *} to a function compiled with GNU CC, dereferencing the
                   1705: pointer may cause a fatal signal.
                   1706: 
                   1707: One way to solve this problem is to compile your entire program with GNU
                   1708: CC.  Another solution is to modify the function that is compiled with
                   1709: Sun CC to copy the argument into a local variable; local variables
                   1710: are always properly aligned.  A third solution is to modify the function
                   1711: that uses the pointer to dereference it via the following function
                   1712: @code{access_double} instead of directly with @samp{*}:
                   1713: 
1.1.1.5   root     1714: @smallexample
1.1.1.4   root     1715: inline double
                   1716: access_double (double *unaligned_ptr)
                   1717: @{
                   1718:   union d2i @{ double d; int i[2]; @};
                   1719: 
                   1720:   union d2i *p = (union d2i *) unaligned_ptr;
                   1721:   union d2i u;
                   1722: 
                   1723:   u.i[0] = p->i[0];
                   1724:   u.i[1] = p->i[1];
                   1725: 
                   1726:   return u.d;
                   1727: @}
1.1.1.5   root     1728: @end smallexample
1.1.1.4   root     1729: 
                   1730: @noindent
                   1731: Storing into the pointer can be done likewise with the same union.
                   1732: 
                   1733: @item
1.1.1.5   root     1734: On Solaris, the @code{malloc} function in the @file{libmalloc.a} library
                   1735: may allocate memory that is only 4 byte aligned.  Since GNU CC on the
                   1736: Sparc assumes that doubles are 8 byte aligned, this may result in a
                   1737: fatal signal if doubles are stored in memory allocated by the
                   1738: @file{libmalloc.a} library.
                   1739: 
                   1740: The solution is to not use the @file{libmalloc.a} library.  Use instead
                   1741: @code{malloc} and related functions from @file{libc.a}; they do not have
                   1742: this problem.
                   1743: 
                   1744: @item
1.1.1.3   root     1745: Sun forgot to include a static version of @file{libdl.a} with some
                   1746: versions of SunOS (mainly 4.1).  This results in undefined symbols when
                   1747: linking static binaries (that is, if you use @samp{-static}).  If you
                   1748: see undefined symbols @code{_dlclose}, @code{_dlsym} or @code{_dlopen}
                   1749: when linking, compile and link against the file
                   1750: @file{mit/util/misc/dlsym.c} from the MIT version of X windows.
1.1       root     1751: 
                   1752: @item
1.1.1.6   root     1753: The 128-bit long double format that the Sparc port supports currently
                   1754: works by using the architecturally defined quad-word floating point
1.1.1.8   root     1755: instructions.  Since there is no hardware that supports these
                   1756: instructions they must be emulated by the operating system.  Long
                   1757: doubles do not work in Sun OS versions 4.0.3 and earlier, because the
                   1758: kernel emulator uses an obsolete and incompatible format.  Long doubles
                   1759: do not work in Sun OS version 4.1.1 due to a problem in a Sun library.
                   1760: Long doubles do work on Sun OS versions 4.1.2 and higher, but GNU CC
                   1761: does not enable them by default.  Long doubles appear to work in Sun OS
                   1762: 5.x (Solaris 2.x).
1.1.1.6   root     1763: 
                   1764: @item
                   1765: On HP-UX version 9.01 on the HP PA, the HP compiler @code{cc} does not
                   1766: compile GNU CC correctly.  We do not yet know why.  However, GNU CC
                   1767: compiled on earlier HP-UX versions works properly on HP-UX 9.01 and can
                   1768: compile itself properly on 9.01.
                   1769: 
                   1770: @item
1.1.1.3   root     1771: On the HP PA machine, ADB sometimes fails to work on functions compiled
                   1772: with GNU CC.  Specifically, it fails to work on functions that use
                   1773: @code{alloca} or variable-size arrays.  This is because GNU CC doesn't
1.1.1.4   root     1774: generate HP-UX unwind descriptors for such functions.  It may even be
1.1.1.3   root     1775: impossible to generate them.
1.1.1.2   root     1776: 
1.1.1.3   root     1777: @item 
1.1.1.4   root     1778: Debugging (@samp{-g}) is not supported on the HP PA machine, unless you use 
                   1779: the preliminary GNU tools (@pxref{Installation}).
1.1.1.2   root     1780: 
                   1781: @item
1.1.1.4   root     1782: Taking the address of a label may generate errors from the HP-UX
                   1783: PA assembler.  GAS for the PA does not have this problem.
                   1784: 
                   1785: @item
1.1.1.6   root     1786: Using floating point parameters for indirect calls to static functions
                   1787: will not work when using the HP assembler.  There simply is no way for GCC
                   1788: to specify what registers hold arguments for static functions when using
                   1789: the HP assembler.  GAS for the PA does not have this problem.
                   1790: 
                   1791: @item
1.1.1.8   root     1792: In extremely rare cases involving some very large functions you may
                   1793: receive errors from the HP linker complaining about an out of bounds
                   1794: unconditional branch offset.  This used to occur more often in previous
                   1795: versions of GNU CC, but is now exceptionally rare.  If you should run
                   1796: into it, you can work around by making your function smaller.
1.1       root     1797: 
1.1.1.3   root     1798: @item
1.1.1.5   root     1799: GNU CC compiled code sometimes emits warnings from the HP-UX assembler of
                   1800: the form:
                   1801: 
                   1802: @smallexample
                   1803: (warning) Use of GR3 when
                   1804:   frame >= 8192 may cause conflict.
                   1805: @end smallexample
                   1806: 
                   1807: These warnings are harmless and can be safely ignored.
                   1808: 
                   1809: @item
1.1.1.3   root     1810: The current version of the assembler (@file{/bin/as}) for the RS/6000
                   1811: has certain problems that prevent the @samp{-g} option in GCC from
1.1.1.5   root     1812: working.  Note that @file{Makefile.in} uses @samp{-g} by default when
                   1813: compiling @file{libgcc2.c}.
                   1814: 
                   1815: IBM has produced a fixed version of the assembler.  The upgraded
                   1816: assembler unfortunately was not included in any of the AIX 3.2 update
                   1817: PTF releases (3.2.2, 3.2.3, or 3.2.3e).  Users of AIX 3.1 should request
                   1818: PTF U403044 from IBM and users of AIX 3.2 should request PTF U416277.
                   1819: See the file @file{README.RS6000} for more details on these updates.
                   1820: 
                   1821: You can test for the presense of a fixed assembler by using the
                   1822: command
1.1       root     1823: 
1.1.1.5   root     1824: @smallexample
                   1825: as -u < /dev/null
                   1826: @end smallexample
                   1827: 
                   1828: @noindent
                   1829: If the command exits normally, the assembler fix already is installed.
                   1830: If the assembler complains that "-u" is an unknown flag, you need to
                   1831: order the fix.
1.1       root     1832: 
                   1833: @item
1.1.1.3   root     1834: On the IBM RS/6000, compiling code of the form
1.1       root     1835: 
1.1.1.5   root     1836: @smallexample
1.1.1.3   root     1837: extern int foo;
1.1       root     1838: 
1.1.1.3   root     1839: @dots{} foo @dots{}
1.1       root     1840: 
1.1.1.3   root     1841: static int foo;
1.1.1.5   root     1842: @end smallexample
1.1       root     1843: 
1.1.1.3   root     1844: @noindent
                   1845: will cause the linker to report an undefined symbol @code{foo}.
                   1846: Although this behavior differs from most other systems, it is not a
                   1847: bug because redefining an @code{extern} variable as @code{static}
                   1848: is undefined in ANSI C.
1.1       root     1849: 
                   1850: @item
1.1.1.5   root     1851: AIX on the RS/6000 provides support (NLS) for environments outside of
                   1852: the United States.  Compilers and assemblers use NLS to support
                   1853: locale-specific representations of various objects including
                   1854: floating-point numbers ("." vs "," for separating decimal fractions).
                   1855: There have been problems reported where the library linked with GCC does
                   1856: not produce the same floating-point formats that the assembler accepts.
                   1857: If you have this problem, set the LANG environment variable to "C" or
                   1858: "En_US".
                   1859: 
                   1860: @item
1.1.1.7   root     1861: Even if you specify @samp{-fdollars-in-identifiers},
                   1862: you cannot successfully use @samp{$} in identifiers on the RS/6000 due
                   1863: to a restriction in the IBM assembler.  GAS supports these
                   1864: identifiers.
                   1865: 
                   1866: @item
                   1867: On the RS/6000, XLC version 1.3.0.0 will miscompile @file{jump.c}.  XLC
                   1868: version 1.3.0.1 or later fixes this problem.  You can obtain XLC-1.3.0.2
                   1869: by requesting PTF 421749 from IBM.
1.1.1.6   root     1870: 
                   1871: @item
1.1.1.5   root     1872: There is an assembler bug in versions of DG/UX prior to 5.4.2.01 that
                   1873: occurs when the @samp{fldcr} instruction is used.  GNU CC uses
                   1874: @samp{fldcr} on the 88100 to serialize volatile memory references.  Use
1.1.1.6   root     1875: the option @samp{-mno-serialize-volatile} if your version of the
1.1.1.5   root     1876: assembler has this bug.
                   1877: 
                   1878: @item
1.1.1.3   root     1879: On VMS, GAS versions 1.38.1 and earlier may cause spurious warning
                   1880: messages from the linker.  These warning messages complain of mismatched
                   1881: psect attributes.  You can ignore them.  @xref{VMS Install}.
1.1       root     1882: 
1.1.1.4   root     1883: @item
1.1.1.5   root     1884: On NewsOS version 3, if you include both of the files @file{stddef.h}
                   1885: and @file{sys/types.h}, you get an error because there are two typedefs
                   1886: of @code{size_t}.  You should change @file{sys/types.h} by adding these
1.1.1.4   root     1887: lines around the definition of @code{size_t}:
                   1888: 
1.1.1.5   root     1889: @smallexample
1.1.1.4   root     1890: #ifndef _SIZE_T
                   1891: #define _SIZE_T
                   1892: @var{actual typedef here}
                   1893: #endif
1.1.1.5   root     1894: @end smallexample
1.1.1.4   root     1895: 
1.1.1.3   root     1896: @cindex Alliant
1.1       root     1897: @item
1.1.1.3   root     1898: On the Alliant, the system's own convention for returning structures
                   1899: and unions is unusual, and is not compatible with GNU CC no matter
                   1900: what options are used.
1.1       root     1901: 
1.1.1.3   root     1902: @cindex RT PC
                   1903: @cindex IBM RT PC
1.1       root     1904: @item
1.1.1.5   root     1905: On the IBM RT PC, the MetaWare HighC compiler (hc) uses a different
                   1906: convention for structure and union returning.  Use the option
1.1.1.3   root     1907: @samp{-mhc-struct-return} to tell GNU CC to use a convention compatible
                   1908: with it.
1.1.1.2   root     1909: 
1.1.1.3   root     1910: @cindex Vax calling convention
                   1911: @cindex Ultrix calling convention
1.1.1.2   root     1912: @item
1.1.1.3   root     1913: On Ultrix, the Fortran compiler expects registers 2 through 5 to be saved
                   1914: by function calls.  However, the C compiler uses conventions compatible
                   1915: with BSD Unix: registers 2 through 5 may be clobbered by function calls.
1.1       root     1916: 
1.1.1.3   root     1917: GNU CC uses the same convention as the Ultrix C compiler.  You can use
                   1918: these options to produce code compatible with the Fortran compiler:
1.1       root     1919: 
1.1.1.3   root     1920: @smallexample
                   1921: -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5
                   1922: @end smallexample
1.1.1.4   root     1923: 
                   1924: @item
                   1925: On the WE32k, you may find that programs compiled with GNU CC do not
1.1.1.8   root     1926: work with the standard shared C library.  You may need to link with
1.1.1.4   root     1927: the ordinary C compiler.  If you do so, you must specify the following
                   1928: options:
                   1929: 
                   1930: @smallexample
1.1.1.8   root     1931: -L/usr/local/lib/gcc-lib/we32k-att-sysv/2.7.1 -lgcc -lc_s
1.1.1.4   root     1932: @end smallexample
                   1933: 
                   1934: The first specifies where to find the library @file{libgcc.a}
                   1935: specified with the @samp{-lgcc} option.
                   1936: 
                   1937: GNU CC does linking by invoking @code{ld}, just as @code{cc} does, and
                   1938: there is no reason why it @emph{should} matter which compilation program
                   1939: you use to invoke @code{ld}.  If someone tracks this problem down,
                   1940: it can probably be fixed easily.
1.1.1.5   root     1941: 
                   1942: @item
                   1943: On the Alpha, you may get assembler errors about invalid syntax as a
                   1944: result of floating point constants.  This is due to a bug in the C
                   1945: library functions @code{ecvt}, @code{fcvt} and @code{gcvt}.  Given valid
                   1946: floating point numbers, they sometimes print @samp{NaN}.
                   1947: 
                   1948: @item
                   1949: On Irix 4.0.5F (and perhaps in some other versions), an assembler bug
                   1950: sometimes reorders instructions incorrectly when optimization is turned
                   1951: on.  If you think this may be happening to you, try using the GNU
                   1952: assembler; GAS version 2.1 supports ECOFF on Irix.
                   1953: 
                   1954: Or use the @samp{-noasmopt} option when you compile GNU CC with itself,
                   1955: and then again when you compile your program.  (This is a temporary
                   1956: kludge to turn off assembler optimization on Irix.)  If this proves to
                   1957: be what you need, edit the assembler spec in the file @file{specs} so
                   1958: that it unconditionally passes @samp{-O0} to the assembler, and never
                   1959: passes @samp{-O2} or @samp{-O3}.
                   1960: @end itemize
                   1961: 
                   1962: @node External Bugs
                   1963: @section Problems Compiling Certain Programs
                   1964: 
1.1.1.7   root     1965: @c prevent bad page break with this line
                   1966: Certain programs have problems compiling.
                   1967: 
1.1.1.5   root     1968: @itemize @bullet
                   1969: @item
                   1970: Parse errors may occur compiling X11 on a Decstation running Ultrix 4.2
                   1971: because of problems in DEC's versions of the X11 header files
                   1972: @file{X11/Xlib.h} and @file{X11/Xutil.h}.  People recommend adding
                   1973: @samp{-I/usr/include/mit} to use the MIT versions of the header files,
                   1974: using the @samp{-traditional} switch to turn off ANSI C, or fixing the
                   1975: header files by adding this:
                   1976: 
                   1977: @example
                   1978: #ifdef __STDC__
                   1979: #define NeedFunctionPrototypes 0
                   1980: #endif
                   1981: @end example
                   1982: 
                   1983: @item
1.1.1.6   root     1984: If you have trouble compiling Perl on a SunOS 4 system, it may be
                   1985: because Perl specifies @samp{-I/usr/ucbinclude}.  This accesses the
                   1986: unfixed header files.  Perl specifies the options 
                   1987: 
                   1988: @example
                   1989: -traditional -Dvolatile=__volatile__
                   1990: -I/usr/include/sun -I/usr/ucbinclude
                   1991: -fpcc-struct-return
                   1992: @end example
                   1993: 
                   1994: @noindent
1.1.1.7   root     1995: most of which are unnecessary with GCC 2.4.5 and newer versions.  You
                   1996: can make a properly working Perl by setting @code{ccflags} to
                   1997: @samp{-fwritable-strings} (implied by the @samp{-traditional} in the
                   1998: original options) and @code{cppflags} to empty in @file{config.sh}, then
                   1999: typing @samp{./doSH; make depend; make}.
1.1.1.6   root     2000: 
                   2001: @item
1.1.1.5   root     2002: On various 386 Unix systems derived from System V, including SCO, ISC,
                   2003: and ESIX, you may get error messages about running out of virtual memory
                   2004: while compiling certain programs.
                   2005: 
                   2006: You can prevent this problem by linking GNU CC with the GNU malloc
                   2007: (which thus replaces the malloc that comes with the system).  GNU malloc
                   2008: is available as a separate package, and also in the file
                   2009: @file{src/gmalloc.c} in the GNU Emacs 19 distribution.
                   2010: 
                   2011: If you have installed GNU malloc as a separate library package, use this
                   2012: option when you relink GNU CC:
                   2013: 
                   2014: @example
                   2015: MALLOC=/usr/local/lib/libgmalloc.a 
                   2016: @end example
                   2017: 
                   2018: Alternatively, if you have compiled @file{gmalloc.c} from Emacs 19, copy
                   2019: the object file to @file{gmalloc.o} and use this option when you relink
                   2020: GNU CC:
                   2021: 
                   2022: @example
                   2023: MALLOC=gmalloc.o
                   2024: @end example
1.1       root     2025: @end itemize
                   2026: 
1.1.1.3   root     2027: @node Incompatibilities
                   2028: @section Incompatibilities of GNU CC
1.1       root     2029: @cindex incompatibilities of GNU CC
                   2030: 
                   2031: There are several noteworthy incompatibilities between GNU C and most
                   2032: existing (non-ANSI) versions of C.  The @samp{-traditional} option
1.1.1.3   root     2033: eliminates many of these incompatibilities, @emph{but not all}, by
1.1       root     2034: telling GNU C to behave like the other C compilers.
                   2035: 
                   2036: @itemize @bullet
                   2037: @cindex string constants
                   2038: @cindex read-only strings
                   2039: @cindex shared strings
                   2040: @item
                   2041: GNU CC normally makes string constants read-only.  If several
                   2042: identical-looking string constants are used, GNU CC stores only one
                   2043: copy of the string.
                   2044: 
                   2045: @cindex @code{mktemp}, and constant strings
                   2046: One consequence is that you cannot call @code{mktemp} with a string
                   2047: constant argument.  The function @code{mktemp} always alters the
                   2048: string its argument points to.
                   2049: 
                   2050: @cindex @code{sscanf}, and constant strings
                   2051: @cindex @code{fscanf}, and constant strings
                   2052: @cindex @code{scanf}, and constant strings
                   2053: Another consequence is that @code{sscanf} does not work on some systems
                   2054: when passed a string constant as its format control string or input.
                   2055: This is because @code{sscanf} incorrectly tries to write into the string
                   2056: constant.  Likewise @code{fscanf} and @code{scanf}.
                   2057: 
                   2058: The best solution to these problems is to change the program to use
                   2059: @code{char}-array variables with initialization strings for these
                   2060: purposes instead of string constants.  But if this is not possible,
                   2061: you can use the @samp{-fwritable-strings} flag, which directs GNU CC
                   2062: to handle string constants the same way most C compilers do.
                   2063: @samp{-traditional} also has this effect, among others.
                   2064: 
                   2065: @item
1.1.1.3   root     2066: @code{-2147483648} is positive.
                   2067: 
                   2068: This is because 2147483648 cannot fit in the type @code{int}, so
                   2069: (following the ANSI C rules) its data type is @code{unsigned long int}.
                   2070: Negating this value yields 2147483648 again.
                   2071: 
                   2072: @item
1.1       root     2073: GNU CC does not substitute macro arguments when they appear inside of
                   2074: string constants.  For example, the following macro in GNU CC
                   2075: 
                   2076: @example
                   2077: #define foo(a) "a"
                   2078: @end example
                   2079: 
                   2080: @noindent
                   2081: will produce output @code{"a"} regardless of what the argument @var{a} is.
                   2082: 
                   2083: The @samp{-traditional} option directs GNU CC to handle such cases
                   2084: (among others) in the old-fashioned (non-ANSI) fashion.
                   2085: 
                   2086: @cindex @code{setjmp} incompatibilities
                   2087: @cindex @code{longjmp} incompatibilities
                   2088: @item
                   2089: When you use @code{setjmp} and @code{longjmp}, the only automatic
                   2090: variables guaranteed to remain valid are those declared
                   2091: @code{volatile}.  This is a consequence of automatic register
                   2092: allocation.  Consider this function:
                   2093: 
                   2094: @example
                   2095: jmp_buf j;
                   2096: 
                   2097: foo ()
                   2098: @{
                   2099:   int a, b;
                   2100: 
                   2101:   a = fun1 ();
                   2102:   if (setjmp (j))
                   2103:     return a;
                   2104: 
                   2105:   a = fun2 ();
                   2106:   /* @r{@code{longjmp (j)} may occur in @code{fun3}.} */
                   2107:   return a + fun3 ();
                   2108: @}
                   2109: @end example
                   2110: 
                   2111: Here @code{a} may or may not be restored to its first value when the
                   2112: @code{longjmp} occurs.  If @code{a} is allocated in a register, then
                   2113: its first value is restored; otherwise, it keeps the last value stored
                   2114: in it.
                   2115: 
                   2116: If you use the @samp{-W} option with the @samp{-O} option, you will
                   2117: get a warning when GNU CC thinks such a problem might be possible.
                   2118: 
                   2119: The @samp{-traditional} option directs GNU C to put variables in
                   2120: the stack by default, rather than in registers, in functions that
                   2121: call @code{setjmp}.  This results in the behavior found in
                   2122: traditional C compilers.
                   2123: 
1.1.1.3   root     2124: @item
1.1.1.8   root     2125: Programs that use preprocessing directives in the middle of macro
1.1.1.3   root     2126: arguments do not work with GNU CC.  For example, a program like this
                   2127: will not work:
                   2128: 
                   2129: @example
                   2130: foobar (
                   2131: #define luser
                   2132:         hack)
                   2133: @end example
                   2134: 
                   2135: ANSI C does not permit such a construct.  It would make sense to support
                   2136: it when @samp{-traditional} is used, but it is too much work to
                   2137: implement.
                   2138: 
1.1       root     2139: @cindex external declaration scope
                   2140: @cindex scope of external declarations
                   2141: @cindex declaration scope
                   2142: @item
                   2143: Declarations of external variables and functions within a block apply
                   2144: only to the block containing the declaration.  In other words, they
                   2145: have the same scope as any other declaration in the same place.
                   2146: 
                   2147: In some other C compilers, a @code{extern} declaration affects all the
                   2148: rest of the file even if it happens within a block.
                   2149: 
                   2150: The @samp{-traditional} option directs GNU C to treat all @code{extern}
                   2151: declarations as global, like traditional compilers.
                   2152: 
                   2153: @item
                   2154: In traditional C, you can combine @code{long}, etc., with a typedef name,
                   2155: as shown here:
                   2156: 
                   2157: @example
                   2158: typedef int foo;
                   2159: typedef long foo bar;
                   2160: @end example
                   2161: 
                   2162: In ANSI C, this is not allowed: @code{long} and other type modifiers
                   2163: require an explicit @code{int}.  Because this criterion is expressed
                   2164: by Bison grammar rules rather than C code, the @samp{-traditional}
                   2165: flag cannot alter it.
                   2166: 
                   2167: @cindex typedef names as function parameters
                   2168: @item
                   2169: PCC allows typedef names to be used as function parameters.  The
                   2170: difficulty described immediately above applies here too.
                   2171: 
                   2172: @cindex whitespace
                   2173: @item
                   2174: PCC allows whitespace in the middle of compound assignment operators
                   2175: such as @samp{+=}.  GNU CC, following the ANSI standard, does not
                   2176: allow this.  The difficulty described immediately above applies here
                   2177: too.
                   2178: 
                   2179: @cindex apostrophes
                   2180: @cindex '
                   2181: @item
1.1.1.4   root     2182: GNU CC complains about unterminated character constants inside of
1.1.1.8   root     2183: preprocessing conditionals that fail.  Some programs have English
1.1.1.4   root     2184: comments enclosed in conditionals that are guaranteed to fail; if these
                   2185: comments contain apostrophes, GNU CC will probably report an error.  For
                   2186: example, this code would produce an error:
1.1       root     2187: 
                   2188: @example
                   2189: #if 0
                   2190: You can't expect this to work.
                   2191: #endif
                   2192: @end example
                   2193: 
                   2194: The best solution to such a problem is to put the text into an actual
                   2195: C comment delimited by @samp{/*@dots{}*/}.  However,
                   2196: @samp{-traditional} suppresses these error messages.
                   2197: 
1.1.1.4   root     2198: @item
                   2199: Many user programs contain the declaration @samp{long time ();}.  In the
                   2200: past, the system header files on many systems did not actually declare
                   2201: @code{time}, so it did not matter what type your program declared it to
                   2202: return.  But in systems with ANSI C headers, @code{time} is declared to
                   2203: return @code{time_t}, and if that is not the same as @code{long}, then
                   2204: @samp{long time ();} is erroneous.
                   2205: 
                   2206: The solution is to change your program to use @code{time_t} as the return
                   2207: type of @code{time}.
                   2208: 
1.1       root     2209: @cindex @code{float} as function value type
                   2210: @item
                   2211: When compiling functions that return @code{float}, PCC converts it to
                   2212: a double.  GNU CC actually returns a @code{float}.  If you are concerned
                   2213: with PCC compatibility, you should declare your functions to return
                   2214: @code{double}; you might as well say what you mean.
                   2215: 
                   2216: @cindex structures
                   2217: @cindex unions
                   2218: @item
                   2219: When compiling functions that return structures or unions, GNU CC
                   2220: output code normally uses a method different from that used on most
                   2221: versions of Unix.  As a result, code compiled with GNU CC cannot call
                   2222: a structure-returning function compiled with PCC, and vice versa.
                   2223: 
                   2224: The method used by GNU CC is as follows: a structure or union which is
                   2225: 1, 2, 4 or 8 bytes long is returned like a scalar.  A structure or union
                   2226: with any other size is stored into an address supplied by the caller
                   2227: (usually in a special, fixed register, but on some machines it is passed
                   2228: on the stack).  The machine-description macros @code{STRUCT_VALUE} and
                   2229: @code{STRUCT_INCOMING_VALUE} tell GNU CC where to pass this address.
                   2230: 
1.1.1.3   root     2231: By contrast, PCC on most target machines returns structures and unions
                   2232: of any size by copying the data into an area of static storage, and then
                   2233: returning the address of that storage as if it were a pointer value.
                   2234: The caller must copy the data from that memory area to the place where
                   2235: the value is wanted.  GNU CC does not use this method because it is
                   2236: slower and nonreentrant.
                   2237: 
                   2238: On some newer machines, PCC uses a reentrant convention for all
                   2239: structure and union returning.  GNU CC on most of these machines uses a
                   2240: compatible convention when returning structures and unions in memory,
                   2241: but still returns small structures and unions in registers.
                   2242: 
                   2243: You can tell GNU CC to use a compatible convention for all structure and
                   2244: union returning with the option @samp{-fpcc-struct-return}.
1.1.1.6   root     2245: 
                   2246: @cindex preprocessing tokens
                   2247: @cindex preprocessing numbers
                   2248: @item
                   2249: GNU C complains about program fragments such as @samp{0x74ae-0x4000}
                   2250: which appear to be two hexadecimal constants separated by the minus
                   2251: operator.  Actually, this string is a single @dfn{preprocessing token}.
                   2252: Each such token must correspond to one token in C.  Since this does not,
                   2253: GNU C prints an error message.  Although it may appear obvious that what
                   2254: is meant is an operator and two values, the ANSI C standard specifically
                   2255: requires that this be treated as erroneous. 
                   2256: 
                   2257: A @dfn{preprocessing token} is a @dfn{preprocessing number} if it
                   2258: begins with a digit and is followed by letters, underscores, digits,
                   2259: periods and @samp{e+}, @samp{e-}, @samp{E+}, or @samp{E-} character
                   2260: sequences.
                   2261: 
                   2262: To make the above program fragment valid, place whitespace in front of
                   2263: the minus sign.  This whitespace will end the preprocessing number.
                   2264: @end itemize
                   2265: 
                   2266: @node Fixed Headers
                   2267: @section Fixed Header Files
                   2268: 
                   2269: GNU CC needs to install corrected versions of some system header files.
                   2270: This is because most target systems have some header files that won't
                   2271: work with GNU CC unless they are changed.  Some have bugs, some are
                   2272: incompatible with ANSI C, and some depend on special features of other
                   2273: compilers.
                   2274: 
                   2275: Installing GNU CC automatically creates and installs the fixed header
                   2276: files, by running a program called @code{fixincludes} (or for certain
                   2277: targets an alternative such as @code{fixinc.svr4}).  Normally, you
                   2278: don't need to pay attention to this.  But there are cases where it
                   2279: doesn't do the right thing automatically.
                   2280: 
                   2281: @itemize @bullet
                   2282: @item
                   2283: If you update the system's header files, such as by installing a new
                   2284: system version, the fixed header files of GNU CC are not automatically
                   2285: updated.  The easiest way to update them is to reinstall GNU CC.  (If
                   2286: you want to be clever, look in the makefile and you can find a
                   2287: shortcut.)
                   2288: 
                   2289: @item
                   2290: On some systems, in particular SunOS 4, header file directories contain
                   2291: machine-specific symbolic links in certain places.  This makes it
                   2292: possible to share most of the header files among hosts running the
                   2293: same version of SunOS 4 on different machine models.
                   2294: 
                   2295: The programs that fix the header files do not understand this special
                   2296: way of using symbolic links; therefore, the directory of fixed header
                   2297: files is good only for the machine model used to build it.
                   2298: 
                   2299: In SunOS 4, only programs that look inside the kernel will notice the
                   2300: difference between machine models.  Therefore, for most purposes, you
                   2301: need not be concerned about this.
                   2302: 
                   2303: It is possible to make separate sets of fixed header files for the
                   2304: different machine models, and arrange a structure of symbolic links so
                   2305: as to use the proper set, but you'll have to do this by hand.
                   2306: 
                   2307: @item
                   2308: On Lynxos, GNU CC by default does not fix the header files.  This is
                   2309: because bugs in the shell cause the @code{fixincludes} script to fail.
                   2310: 
                   2311: This means you will encounter problems due to bugs in the system header
                   2312: files.  It may be no comfort that they aren't GNU CC's fault, but it
                   2313: does mean that there's nothing for us to do about them.
1.1.1.3   root     2314: @end itemize
                   2315: 
1.1.1.8   root     2316: @node Standard Libraries
                   2317: @section Standard Libraries
                   2318: 
                   2319: GNU CC by itself attempts to be what the ISO/ANSI C standard calls a
                   2320: @dfn{conforming freestanding implementation}.  This means all ANSI
                   2321: C language features are available, as well as the contents of
                   2322: @file{float.h}, @file{limits.h}, @file{stdarg.h}, and
                   2323: @file{stddef.h}.  The rest of the C library is supplied by the
                   2324: vendor of the operating system.  If that C library doesn't conform to
                   2325: the C standards, then your programs might get warnings (especially when
                   2326: using @samp{-Wall}) that you don't expect.
                   2327: 
                   2328: For example, the @code{sprintf} function on SunOS 4.1.3 returns
                   2329: @code{char *} while the C standard says that @code{sprintf} returns an
                   2330: @code{int}.  The @code{fixincludes} program could make the prototype for
                   2331: this function match the Standard, but that would be wrong, since the
                   2332: function will still return @code{char *}.
                   2333: 
                   2334: If you need a Standard compliant library, then you need to find one, as
                   2335: GNU CC does not provide one.  The GNU C library (called @code{glibc})
                   2336: has been ported to a number of operating systems, and provides ANSI/ISO,
                   2337: POSIX, BSD and SystemV compatibility.  You could also ask your operating
                   2338: system vendor if newer libraries are available.
                   2339: 
1.1.1.3   root     2340: @node Disappointments
                   2341: @section Disappointments and Misunderstandings
                   2342: 
                   2343: These problems are perhaps regrettable, but we don't know any practical
                   2344: way around them.
                   2345: 
                   2346: @itemize @bullet
                   2347: @item
                   2348: Certain local variables aren't recognized by debuggers when you compile
                   2349: with optimization.
                   2350: 
                   2351: This occurs because sometimes GNU CC optimizes the variable out of
                   2352: existence.  There is no way to tell the debugger how to compute the
                   2353: value such a variable ``would have had'', and it is not clear that would
                   2354: be desirable anyway.  So GNU CC simply does not mention the eliminated
                   2355: variable when it writes debugging information.
                   2356: 
                   2357: You have to expect a certain amount of disagreement between the
                   2358: executable and your source code, when you use optimization.
                   2359: 
                   2360: @cindex conflicting types
                   2361: @cindex scope of declaration
                   2362: @item
                   2363: Users often think it is a bug when GNU CC reports an error for code
                   2364: like this:
                   2365: 
                   2366: @example
                   2367: int foo (struct mumble *);
                   2368: 
                   2369: struct mumble @{ @dots{} @};
                   2370: 
                   2371: int foo (struct mumble *x)
                   2372: @{ @dots{} @}
                   2373: @end example
                   2374: 
                   2375: This code really is erroneous, because the scope of @code{struct
1.1.1.4   root     2376: mumble} in the prototype is limited to the argument list containing it.
1.1.1.3   root     2377: It does not refer to the @code{struct mumble} defined with file scope
                   2378: immediately below---they are two unrelated types with similar names in
                   2379: different scopes.
                   2380: 
                   2381: But in the definition of @code{foo}, the file-scope type is used
                   2382: because that is available to be inherited.  Thus, the definition and
                   2383: the prototype do not match, and you get an error.
                   2384: 
                   2385: This behavior may seem silly, but it's what the ANSI standard specifies.
                   2386: It is easy enough for you to make your code work by moving the
                   2387: definition of @code{struct mumble} above the prototype.  It's not worth
                   2388: being incompatible with ANSI C just to avoid an error for the example
                   2389: shown above.
1.1.1.4   root     2390: 
                   2391: @item
                   2392: Accesses to bitfields even in volatile objects works by accessing larger
                   2393: objects, such as a byte or a word.  You cannot rely on what size of
                   2394: object is accessed in order to read or write the bitfield; it may even
                   2395: vary for a given bitfield according to the precise usage.
                   2396: 
                   2397: If you care about controlling the amount of memory that is accessed, use
                   2398: volatile but do not use bitfields.
                   2399: 
                   2400: @item
1.1.1.5   root     2401: GNU CC comes with shell scripts to fix certain known problems in system
                   2402: header files.  They install corrected copies of various header files in
                   2403: a special directory where only GNU CC will normally look for them.  The
                   2404: scripts adapt to various systems by searching all the system header
                   2405: files for the problem cases that we know about.
                   2406: 
                   2407: If new system header files are installed, nothing automatically arranges
                   2408: to update the corrected header files.  You will have to reinstall GNU CC
                   2409: to fix the new header files.  More specifically, go to the build
                   2410: directory and delete the files @file{stmp-fixinc} and
                   2411: @file{stmp-headers}, and the subdirectory @code{include}; then do
                   2412: @samp{make install} again.
                   2413: 
                   2414: @item
1.1.1.4   root     2415: On 68000 systems, you can get paradoxical results if you test the
                   2416: precise values of floating point numbers.  For example, you can find
                   2417: that a floating point value which is not a NaN is not equal to itself.
                   2418: This results from the fact that the the floating point registers hold a
                   2419: few more bits of precision than fit in a @code{double} in memory.
                   2420: Compiled code moves values between memory and floating point registers
                   2421: at its convenience, and moving them into memory truncates them.
                   2422: 
1.1.1.5   root     2423: You can partially avoid this problem by using the @samp{-ffloat-store}
                   2424: option (@pxref{Optimize Options}).
1.1.1.4   root     2425: 
                   2426: @item
                   2427: On the MIPS, variable argument functions using @file{varargs.h}
                   2428: cannot have a floating point value for the first argument.  The
                   2429: reason for this is that in the absence of a prototype in scope,
                   2430: if the first argument is a floating point, it is passed in a
1.1.1.5   root     2431: floating point register, rather than an integer register.
1.1.1.4   root     2432: 
                   2433: If the code is rewritten to use the ANSI standard @file{stdarg.h}
                   2434: method of variable arguments, and the prototype is in scope at
                   2435: the time of the call, everything will work fine.
1.1.1.3   root     2436: @end itemize
                   2437: 
1.1.1.5   root     2438: @node C++ Misunderstandings
                   2439: @section Common Misunderstandings with GNU C++
                   2440: 
                   2441: @cindex misunderstandings in C++
                   2442: @cindex surprises in C++
                   2443: @cindex C++ misunderstandings
                   2444: C++ is a complex language and an evolving one, and its standard definition
                   2445: (the ANSI C++ draft standard) is also evolving.  As a result, 
                   2446: your C++ compiler may occasionally surprise you, even when its behavior is
                   2447: correct.  This section discusses some areas that frequently give rise to
                   2448: questions of this sort.
                   2449: 
                   2450: @menu
                   2451: * Static Definitions::  Static member declarations are not definitions
                   2452: * Temporaries::         Temporaries may vanish before you expect
                   2453: @end menu
                   2454: 
                   2455: @node Static Definitions
                   2456: @subsection Declare @emph{and} Define Static Members
                   2457: 
                   2458: @cindex C++ static data, declaring and defining
                   2459: @cindex static data in C++, declaring and defining
                   2460: @cindex declaring static data in C++
                   2461: @cindex defining static data in C++
                   2462: When a class has static data members, it is not enough to @emph{declare}
                   2463: the static member; you must also @emph{define} it.  For example:
                   2464: 
                   2465: @example
                   2466: class Foo
                   2467: @{
                   2468:   @dots{}
                   2469:   void method();
                   2470:   static int bar;
                   2471: @};
                   2472: @end example
                   2473: 
                   2474: This declaration only establishes that the class @code{Foo} has an
                   2475: @code{int} named @code{Foo::bar}, and a member function named
                   2476: @code{Foo::method}.  But you still need to define @emph{both}
                   2477: @code{method} and @code{bar} elsewhere.  According to the draft ANSI
                   2478: standard, you must supply an initializer in one (and only one) source
                   2479: file, such as:
                   2480: 
                   2481: @example
                   2482: int Foo::bar = 0;
                   2483: @end example
                   2484: 
                   2485: Other C++ compilers may not correctly implement the standard behavior.
                   2486: As a result, when you switch to @code{g++} from one of these compilers,
                   2487: you may discover that a program that appeared to work correctly in fact
                   2488: does not conform to the standard: @code{g++} reports as undefined
                   2489: symbols any static data members that lack definitions.
                   2490: 
                   2491: @node Temporaries
                   2492: @subsection Temporaries May Vanish Before You Expect
                   2493: 
                   2494: @cindex temporaries, lifetime of
                   2495: @cindex portions of temporary objects, pointers to
                   2496: It is dangerous to use pointers or references to @emph{portions} of a
                   2497: temporary object.  The compiler may very well delete the object before
                   2498: you expect it to, leaving a pointer to garbage.  The most common place
                   2499: where this problem crops up is in classes like the libg++
                   2500: @code{String} class, that define a conversion function to type
                   2501: @code{char *} or @code{const char *}.  However, any class that returns
                   2502: a pointer to some internal structure is potentially subject to this
                   2503: problem.
                   2504: 
                   2505: For example, a program may use a function @code{strfunc} that returns
                   2506: @code{String} objects, and another function @code{charfunc} that
                   2507: operates on pointers to @code{char}:
                   2508: 
                   2509: @example
                   2510: String strfunc ();
                   2511: void charfunc (const char *);
                   2512: @end example
                   2513: 
                   2514: @noindent
                   2515: In this situation, it may seem natural to write @w{@samp{charfunc
                   2516: (strfunc ());}} based on the knowledge that class @code{String} has an
                   2517: explicit conversion to @code{char} pointers.  However, what really
                   2518: happens is akin to @samp{charfunc (@w{strfunc ()}.@w{convert ()});},
                   2519: where the @code{convert} method is a function to do the same data
                   2520: conversion normally performed by a cast.  Since the last use of the
                   2521: temporary @code{String} object is the call to the conversion function,
                   2522: the compiler may delete that object before actually calling
                   2523: @code{charfunc}.  The compiler has no way of knowing that deleting the
                   2524: @code{String} object will invalidate the pointer.  The pointer then
                   2525: points to garbage, so that by the time @code{charfunc} is called, it
                   2526: gets an invalid argument.
                   2527: 
                   2528: Code like this may run successfully under some other compilers,
                   2529: especially those that delete temporaries relatively late.  However, the
1.1.1.8   root     2530: GNU C++ behavior is also standard-conforming, so if your program depends
1.1.1.5   root     2531: on late destruction of temporaries it is not portable.
                   2532: 
                   2533: If you think this is surprising, you should be aware that the ANSI C++
                   2534: committee continues to debate the lifetime-of-temporaries problem.
                   2535: 
                   2536: For now, at least, the safe way to write such code is to give the
                   2537: temporary a name, which forces it to remain until the end of the scope of
                   2538: the name.  For example:
                   2539: 
                   2540: @example
                   2541: String& tmp = strfunc ();
                   2542: charfunc (tmp);
                   2543: @end example
                   2544: 
1.1.1.4   root     2545: @node Protoize Caveats
                   2546: @section Caveats of using @code{protoize}
                   2547: 
                   2548: The conversion programs @code{protoize} and @code{unprotoize} can
                   2549: sometimes change a source file in a way that won't work unless you
                   2550: rearrange it.
                   2551: 
                   2552: @itemize @bullet
                   2553: @item
                   2554: @code{protoize} can insert references to a type name or type tag before
                   2555: the definition, or in a file where they are not defined.
                   2556: 
                   2557: If this happens, compiler error messages should show you where the new
                   2558: references are, so fixing the file by hand is straightforward.
                   2559: 
                   2560: @item
                   2561: There are some C constructs which @code{protoize} cannot figure out.
                   2562: For example, it can't determine argument types for declaring a
                   2563: pointer-to-function variable; this you must do by hand.  @code{protoize}
                   2564: inserts a comment containing @samp{???} each time it finds such a
                   2565: variable; so you can find all such variables by searching for this
                   2566: string.  ANSI C does not require declaring the argument types of
                   2567: pointer-to-function types.
                   2568: 
                   2569: @item
                   2570: Using @code{unprotoize} can easily introduce bugs.  If the program
                   2571: relied on prototypes to bring about conversion of arguments, these
                   2572: conversions will not take place in the program without prototypes.
                   2573: One case in which you can be sure @code{unprotoize} is safe is when
                   2574: you are removing prototypes that were made with @code{protoize}; if
                   2575: the program worked before without any prototypes, it will work again
                   2576: without them.
                   2577: 
                   2578: You can find all the places where this problem might occur by compiling
                   2579: the program with the @samp{-Wconversion} option.  It prints a warning
                   2580: whenever an argument is converted.
                   2581: 
                   2582: @item
                   2583: Both conversion programs can be confused if there are macro calls in and
                   2584: around the text to be converted.  In other words, the standard syntax
                   2585: for a declaration or definition must not result from expanding a macro.
                   2586: This problem is inherent in the design of C and cannot be fixed.  If
                   2587: only a few functions have confusing macro calls, you can easily convert
                   2588: them manually.
                   2589: 
                   2590: @item
                   2591: @code{protoize} cannot get the argument types for a function whose
1.1.1.8   root     2592: definition was not actually compiled due to preprocessing conditionals.
1.1.1.4   root     2593: When this happens, @code{protoize} changes nothing in regard to such 
                   2594: a function.  @code{protoize} tries to detect such instances and warn
                   2595: about them.
                   2596: 
                   2597: You can generally work around this problem by using @code{protoize} step
                   2598: by step, each time specifying a different set of @samp{-D} options for
                   2599: compilation, until all of the functions have been converted.  There is
                   2600: no automatic way to verify that you have got them all, however.
                   2601: 
                   2602: @item
                   2603: Confusion may result if there is an occasion to convert a function
                   2604: declaration or definition in a region of source code where there is more
                   2605: than one formal parameter list present.  Thus, attempts to convert code
                   2606: containing multiple (conditionally compiled) versions of a single
                   2607: function header (in the same vicinity) may not produce the desired (or
                   2608: expected) results.
                   2609: 
                   2610: If you plan on converting source files which contain such code, it is
                   2611: recommended that you first make sure that each conditionally compiled
                   2612: region of source code which contains an alternative function header also
                   2613: contains at least one additional follower token (past the final right
                   2614: parenthesis of the function header).  This should circumvent the
                   2615: problem.
                   2616: 
                   2617: @item
                   2618: @code{unprotoize} can become confused when trying to convert a function
                   2619: definition or declaration which contains a declaration for a
                   2620: pointer-to-function formal argument which has the same name as the
                   2621: function being defined or declared.  We recommand you avoid such choices
                   2622: of formal parameter names.
                   2623: 
                   2624: @item
                   2625: You might also want to correct some of the indentation by hand and break
                   2626: long lines.  (The conversion programs don't write lines longer than
                   2627: eighty characters in any case.)
                   2628: @end itemize
                   2629: 
                   2630: @node Non-bugs
1.1.1.3   root     2631: @section Certain Changes We Don't Want to Make
                   2632: 
                   2633: This section lists changes that people frequently request, but which
                   2634: we do not make because we think GNU CC is better without them.
                   2635: 
                   2636: @itemize @bullet
                   2637: @item 
                   2638: Checking the number and type of arguments to a function which has an
                   2639: old-fashioned definition and no prototype.
                   2640: 
                   2641: Such a feature would work only occasionally---only for calls that appear
                   2642: in the same file as the called function, following the definition.  The
                   2643: only way to check all calls reliably is to add a prototype for the
                   2644: function.  But adding a prototype eliminates the motivation for this
                   2645: feature.  So the feature is not worthwhile.
                   2646: 
                   2647: @item 
                   2648: Warning about using an expression whose type is signed as a shift count.
                   2649: 
                   2650: Shift count operands are probably signed more often than unsigned.
                   2651: Warning about this would cause far more annoyance than good.
                   2652: 
                   2653: @item
                   2654: Warning about assigning a signed value to an unsigned variable.
                   2655: 
                   2656: Such assignments must be very common; warning about them would cause
                   2657: more annoyance than good.
                   2658: 
1.1.1.4   root     2659: @item 
                   2660: Warning about unreachable code.
                   2661: 
                   2662: It's very common to have unreachable code in machine-generated
                   2663: programs.  For example, this happens normally in some files of GNU C
                   2664: itself.
                   2665: 
1.1.1.3   root     2666: @item
                   2667: Warning when a non-void function value is ignored.
                   2668: 
                   2669: Coming as I do from a Lisp background, I balk at the idea that there is
                   2670: something dangerous about discarding a value.  There are functions that
                   2671: return values which some callers may find useful; it makes no sense to
                   2672: clutter the program with a cast to @code{void} whenever the value isn't
                   2673: useful.
                   2674: 
                   2675: @item
                   2676: Assuming (for optimization) that the address of an external symbol is
                   2677: never zero.
                   2678: 
                   2679: This assumption is false on certain systems when @samp{#pragma weak} is
                   2680: used.
                   2681: 
                   2682: @item
                   2683: Making @samp{-fshort-enums} the default.
                   2684: 
                   2685: This would cause storage layout to be incompatible with most other C
                   2686: compilers.  And it doesn't seem very important, given that you can get
                   2687: the same result in other ways.  The case where it matters most is when
                   2688: the enumeration-valued object is inside a structure, and in that case
                   2689: you can specify a field width explicitly.
                   2690: 
                   2691: @item
                   2692: Making bitfields unsigned by default on particular machines where ``the
                   2693: ABI standard'' says to do so.
                   2694: 
                   2695: The ANSI C standard leaves it up to the implementation whether a bitfield
                   2696: declared plain @code{int} is signed or not.  This in effect creates two
                   2697: alternative dialects of C.
                   2698: 
1.1.1.5   root     2699: The GNU C compiler supports both dialects; you can specify the signed
                   2700: dialect with @samp{-fsigned-bitfields} and the unsigned dialect with
                   2701: @samp{-funsigned-bitfields}.  However, this leaves open the question of
                   2702: which dialect to use by default.
1.1.1.3   root     2703: 
                   2704: Currently, the preferred dialect makes plain bitfields signed, because
                   2705: this is simplest.  Since @code{int} is the same as @code{signed int} in
                   2706: every other context, it is cleanest for them to be the same in bitfields
                   2707: as well.
                   2708: 
                   2709: Some computer manufacturers have published Application Binary Interface
                   2710: standards which specify that plain bitfields should be unsigned.  It is
                   2711: a mistake, however, to say anything about this issue in an ABI.  This is
                   2712: because the handling of plain bitfields distinguishes two dialects of C.
                   2713: Both dialects are meaningful on every type of machine.  Whether a
                   2714: particular object file was compiled using signed bitfields or unsigned
                   2715: is of no concern to other object files, even if they access the same
                   2716: bitfields in the same data structures.
                   2717: 
                   2718: A given program is written in one or the other of these two dialects.
                   2719: The program stands a chance to work on most any machine if it is
                   2720: compiled with the proper dialect.  It is unlikely to work at all if
                   2721: compiled with the wrong dialect.
                   2722: 
                   2723: Many users appreciate the GNU C compiler because it provides an
                   2724: environment that is uniform across machines.  These users would be
                   2725: inconvenienced if the compiler treated plain bitfields differently on
                   2726: certain machines.
                   2727: 
                   2728: Occasionally users write programs intended only for a particular machine
                   2729: type.  On these occasions, the users would benefit if the GNU C compiler
                   2730: were to support by default the same dialect as the other compilers on
                   2731: that machine.  But such applications are rare.  And users writing a
                   2732: program to run on more than one type of machine cannot possibly benefit
                   2733: from this kind of compatibility.
                   2734: 
                   2735: This is why GNU CC does and will treat plain bitfields in the same
                   2736: fashion on all types of machines (by default).
                   2737: 
                   2738: There are some arguments for making bitfields unsigned by default on all
                   2739: machines.  If, for example, this becomes a universal de facto standard,
                   2740: it would make sense for GNU CC to go along with it.  This is something
                   2741: to be considered in the future.
1.1       root     2742: 
1.1.1.3   root     2743: (Of course, users strongly concerned about portability should indicate
                   2744: explicitly in each bitfield whether it is signed or not.  In this way,
                   2745: they write programs which have the same meaning in both C dialects.)
1.1       root     2746: 
1.1.1.3   root     2747: @item
                   2748: Undefining @code{__STDC__} when @samp{-ansi} is not used.
1.1       root     2749: 
1.1.1.3   root     2750: Currently, GNU CC defines @code{__STDC__} as long as you don't use
                   2751: @samp{-traditional}.  This provides good results in practice.
1.1       root     2752: 
1.1.1.3   root     2753: Programmers normally use conditionals on @code{__STDC__} to ask whether
                   2754: it is safe to use certain features of ANSI C, such as function
                   2755: prototypes or ANSI token concatenation.  Since plain @samp{gcc} supports
                   2756: all the features of ANSI C, the correct answer to these questions is
                   2757: ``yes''.
1.1       root     2758: 
1.1.1.3   root     2759: Some users try to use @code{__STDC__} to check for the availability of
                   2760: certain library facilities.  This is actually incorrect usage in an ANSI
                   2761: C program, because the ANSI C standard says that a conforming
                   2762: freestanding implementation should define @code{__STDC__} even though it
                   2763: does not have the library facilities.  @samp{gcc -ansi -pedantic} is a
                   2764: conforming freestanding implementation, and it is therefore required to
                   2765: define @code{__STDC__}, even though it does not come with an ANSI C
                   2766: library.
1.1       root     2767: 
1.1.1.3   root     2768: Sometimes people say that defining @code{__STDC__} in a compiler that
                   2769: does not completely conform to the ANSI C standard somehow violates the
                   2770: standard.  This is illogical.  The standard is a standard for compilers
                   2771: that claim to support ANSI C, such as @samp{gcc -ansi}---not for other
                   2772: compilers such as plain @samp{gcc}.  Whatever the ANSI C standard says
                   2773: is relevant to the design of plain @samp{gcc} without @samp{-ansi} only
                   2774: for pragmatic reasons, not as a requirement.
1.1       root     2775: 
                   2776: @item
1.1.1.3   root     2777: Undefining @code{__STDC__} in C++.
1.1       root     2778: 
1.1.1.3   root     2779: Programs written to compile with C++-to-C translators get the
                   2780: value of @code{__STDC__} that goes with the C compiler that is
                   2781: subsequently used.  These programs must test @code{__STDC__}
                   2782: to determine what kind of C preprocessor that compiler uses:
                   2783: whether they should concatenate tokens in the ANSI C fashion
                   2784: or in the traditional fashion.
1.1       root     2785: 
1.1.1.3   root     2786: These programs work properly with GNU C++ if @code{__STDC__} is defined.
                   2787: They would not work otherwise.
                   2788: 
                   2789: In addition, many header files are written to provide prototypes in ANSI
                   2790: C but not in traditional C.  Many of these header files can work without
                   2791: change in C++ provided @code{__STDC__} is defined.  If @code{__STDC__}
                   2792: is not defined, they will all fail, and will all need to be changed to
                   2793: test explicitly for C++ as well.
1.1       root     2794: 
                   2795: @item
1.1.1.3   root     2796: Deleting ``empty'' loops.
1.1       root     2797: 
1.1.1.3   root     2798: GNU CC does not delete ``empty'' loops because the most likely reason
                   2799: you would put one in a program is to have a delay.  Deleting them will
                   2800: not make real programs run any faster, so it would be pointless.
1.1       root     2801: 
1.1.1.3   root     2802: It would be different if optimization of a nonempty loop could produce
                   2803: an empty one.  But this generally can't happen.
1.1.1.5   root     2804: 
                   2805: @item
                   2806: Making side effects happen in the same order as in some other compiler.
                   2807: 
                   2808: @cindex side effects, order of evaluation
                   2809: @cindex order of evaluation, side effects
                   2810: It is never safe to depend on the order of evaluation of side effects.
                   2811: For example, a function call like this may very well behave differently
                   2812: from one compiler to another:
                   2813: 
                   2814: @example
                   2815: void func (int, int);
                   2816: 
                   2817: int i = 2;
                   2818: func (i++, i++);
                   2819: @end example
                   2820: 
                   2821: There is no guarantee (in either the C or the C++ standard language
                   2822: definitions) that the increments will be evaluated in any particular
                   2823: order.  Either increment might happen first.  @code{func} might get the
1.1.1.8   root     2824: arguments @samp{2, 3}, or it might get @samp{3, 2}, or even @samp{2, 2}.
1.1.1.5   root     2825: 
                   2826: @item
1.1.1.7   root     2827: Not allowing structures with volatile fields in registers.
1.1.1.5   root     2828: 
1.1.1.7   root     2829: Strictly speaking, there is no prohibition in the ANSI C standard
                   2830: against allowing structures with volatile fields in registers, but
                   2831: it does not seem to make any sense and is probably not what you wanted
                   2832: to do.  So the compiler will give an error message in this case.
1.1.1.5   root     2833: @end itemize
                   2834: 
                   2835: @node Warnings and Errors
                   2836: @section Warning Messages and Error Messages
                   2837: 
                   2838: @cindex error messages
                   2839: @cindex warnings vs errors
                   2840: @cindex messages, warning and error
                   2841: The GNU compiler can produce two kinds of diagnostics: errors and
                   2842: warnings.  Each kind has a different purpose:
                   2843: 
                   2844: @itemize @w{}
                   2845: @item 
                   2846: @emph{Errors} report problems that make it impossible to compile your
                   2847: program.  GNU CC reports errors with the source file name and line
                   2848: number where the problem is apparent.
                   2849: 
                   2850: @item
                   2851: @emph{Warnings} report other unusual conditions in your code that
                   2852: @emph{may} indicate a problem, although compilation can (and does)
                   2853: proceed.  Warning messages also report the source file name and line
                   2854: number, but include the text @samp{warning:} to distinguish them
                   2855: from error messages.
1.1.1.3   root     2856: @end itemize
                   2857: 
1.1.1.5   root     2858: Warnings may indicate danger points where you should check to make sure
                   2859: that your program really does what you intend; or the use of obsolete
                   2860: features; or the use of nonstandard features of GNU C or C++.  Many
                   2861: warnings are issued only if you ask for them, with one of the @samp{-W}
                   2862: options (for instance, @samp{-Wall} requests a variety of useful
                   2863: warnings).
                   2864: 
                   2865: GNU CC always tries to compile your program if possible; it never
1.1.1.8   root     2866: gratuitously rejects a program whose meaning is clear merely because
1.1.1.5   root     2867: (for instance) it fails to conform to a standard.  In some cases,
                   2868: however, the C and C++ standards specify that certain extensions are
                   2869: forbidden, and a diagnostic @emph{must} be issued by a conforming
                   2870: compiler.  The @samp{-pedantic} option tells GNU CC to issue warnings in
                   2871: such cases; @samp{-pedantic-errors} says to make them errors instead.
                   2872: This does not mean that @emph{all} non-ANSI constructs get warnings
                   2873: or errors.
                   2874: 
                   2875: @xref{Warning Options,,Options to Request or Suppress Warnings}, for
                   2876: more detail on these and related command-line options.
                   2877: 
1.1.1.3   root     2878: @node Bugs
1.1       root     2879: @chapter Reporting Bugs
                   2880: @cindex bugs
                   2881: @cindex reporting bugs
                   2882: 
                   2883: Your bug reports play an essential role in making GNU CC reliable.
                   2884: 
                   2885: When you encounter a problem, the first thing to do is to see if it is
1.1.1.3   root     2886: already known.  @xref{Trouble}.  If it isn't known, then you should
                   2887: report the problem.
1.1       root     2888: 
                   2889: Reporting a bug may help you by bringing a solution to your problem, or
                   2890: it may not.  (If it does not, look in the service directory; see
                   2891: @ref{Service}.)  In any case, the principal function of a bug report is
                   2892: to help the entire community by making the next version of GNU CC work
                   2893: better.  Bug reports are your contribution to the maintenance of GNU CC.
                   2894: 
1.1.1.6   root     2895: Since the maintainers are very overloaded, we cannot respond to every
                   2896: bug report.  However, if the bug has not been fixed, we are likely to
                   2897: send you a patch and ask you to tell us whether it works. 
                   2898: 
1.1       root     2899: In order for a bug report to serve its purpose, you must include the
                   2900: information that makes for fixing the bug.
                   2901: 
                   2902: @menu
                   2903: * Criteria:  Bug Criteria.   Have you really found a bug?
1.1.1.3   root     2904: * Where: Bug Lists.         Where to send your bug report.
1.1       root     2905: * Reporting: Bug Reporting.  How to report a bug effectively.
1.1.1.3   root     2906: * Patches: Sending Patches.  How to send a patch for GNU CC.
1.1       root     2907: * Known: Trouble.            Known problems.
                   2908: * Help: Service.             Where to ask for help.
                   2909: @end menu
                   2910: 
1.1.1.3   root     2911: @node Bug Criteria
1.1       root     2912: @section Have You Found a Bug?
                   2913: @cindex bug criteria
                   2914: 
                   2915: If you are not sure whether you have found a bug, here are some guidelines:
                   2916: 
                   2917: @itemize @bullet
                   2918: @cindex fatal signal
                   2919: @cindex core dump
                   2920: @item
                   2921: If the compiler gets a fatal signal, for any input whatever, that is a
                   2922: compiler bug.  Reliable compilers never crash.
                   2923: 
                   2924: @cindex invalid assembly code
                   2925: @cindex assembly code, invalid
                   2926: @item
                   2927: If the compiler produces invalid assembly code, for any input whatever
                   2928: (except an @code{asm} statement), that is a compiler bug, unless the
                   2929: compiler reports errors (not just warnings) which would ordinarily
                   2930: prevent the assembler from being run.
                   2931: 
                   2932: @cindex undefined behavior
                   2933: @cindex undefined function value
                   2934: @cindex increment operators
                   2935: @item
                   2936: If the compiler produces valid assembly code that does not correctly
                   2937: execute the input source code, that is a compiler bug.
                   2938: 
                   2939: However, you must double-check to make sure, because you may have run
                   2940: into an incompatibility between GNU C and traditional C
                   2941: (@pxref{Incompatibilities}).  These incompatibilities might be considered
                   2942: bugs, but they are inescapable consequences of valuable features.
                   2943: 
                   2944: Or you may have a program whose behavior is undefined, which happened
1.1.1.3   root     2945: by chance to give the desired results with another C or C++ compiler.
1.1       root     2946: 
                   2947: For example, in many nonoptimizing compilers, you can write @samp{x;}
                   2948: at the end of a function instead of @samp{return x;}, with the same
                   2949: results.  But the value of the function is undefined if @code{return}
                   2950: is omitted; it is not a bug when GNU CC produces different results.
                   2951: 
                   2952: Problems often result from expressions with two increment operators,
                   2953: as in @code{f (*p++, *p++)}.  Your previous compiler might have
                   2954: interpreted that expression the way you intended; GNU CC might
                   2955: interpret it another way.  Neither compiler is wrong.  The bug is
                   2956: in your code.
                   2957: 
                   2958: After you have localized the error to a single source line, it should
                   2959: be easy to check for these things.  If your program is correct and
                   2960: well defined, you have found a compiler bug.
                   2961: 
                   2962: @item
                   2963: If the compiler produces an error message for valid input, that is a
                   2964: compiler bug.
                   2965: 
                   2966: @cindex invalid input
                   2967: @item
                   2968: If the compiler does not produce an error message for invalid input,
                   2969: that is a compiler bug.  However, you should note that your idea of
                   2970: ``invalid input'' might be my idea of ``an extension'' or ``support
                   2971: for traditional practice''.
                   2972: 
                   2973: @item
1.1.1.3   root     2974: If you are an experienced user of C or C++ compilers, your suggestions
                   2975: for improvement of GNU CC or GNU C++ are welcome in any case.
1.1       root     2976: @end itemize
                   2977: 
1.1.1.3   root     2978: @node Bug Lists
                   2979: @section Where to Report Bugs
                   2980: @cindex bug report mailing lists
1.1.1.5   root     2981: @kindex bug-gcc@@prep.ai.mit.edu
1.1.1.7   root     2982: Send bug reports for GNU C to @samp{bug-gcc@@prep.ai.mit.edu}.
1.1       root     2983: 
1.1.1.5   root     2984: @kindex bug-g++@@prep.ai.mit.edu
                   2985: @kindex bug-libg++@@prep.ai.mit.edu
1.1.1.7   root     2986: Send bug reports for GNU C++ to @samp{bug-g++@@prep.ai.mit.edu}.
1.1.1.5   root     2987: If your bug involves the C++ class library libg++, send mail to
                   2988: @samp{bug-lib-g++@@prep.ai.mit.edu}.  If you're not sure, you can send
                   2989: the bug report to both lists.
                   2990: 
1.1.1.7   root     2991: @strong{Do not send bug reports to @samp{help-gcc@@prep.ai.mit.edu} or
1.1.1.5   root     2992: to the newsgroup @samp{gnu.gcc.help}.} Most users of GNU CC do not want
                   2993: to receive bug reports.  Those that do, have asked to be on
                   2994: @samp{bug-gcc} and/or @samp{bug-g++}.
1.1.1.3   root     2995: 
                   2996: The mailing lists @samp{bug-gcc} and @samp{bug-g++} both have newsgroups
                   2997: which serve as repeaters: @samp{gnu.gcc.bug} and @samp{gnu.g++.bug}.
                   2998: Each mailing list and its newsgroup carry exactly the same messages.
                   2999: 
                   3000: Often people think of posting bug reports to the newsgroup instead of
                   3001: mailing them.  This appears to work, but it has one problem which can be
                   3002: crucial: a newsgroup posting does not contain a mail path back to the
1.1.1.4   root     3003: sender.  Thus, if maintainers need more information, they may be unable
1.1.1.3   root     3004: to reach you.  For this reason, you should always send bug reports by
                   3005: mail to the proper mailing list.
1.1       root     3006: 
                   3007: As a last resort, send bug reports on paper to:
                   3008: 
                   3009: @example
                   3010: GNU Compiler Bugs
                   3011: Free Software Foundation
1.1.1.8   root     3012: 59 Temple Place - Suite 330
                   3013: Boston, MA 02111-1307, USA
1.1       root     3014: @end example
                   3015: 
1.1.1.3   root     3016: @node Bug Reporting
                   3017: @section How to Report Bugs
                   3018: @cindex compiler bugs, reporting
                   3019: 
1.1       root     3020: The fundamental principle of reporting bugs usefully is this:
                   3021: @strong{report all the facts}.  If you are not sure whether to state a
                   3022: fact or leave it out, state it!
                   3023: 
                   3024: Often people omit facts because they think they know what causes the
                   3025: problem and they conclude that some details don't matter.  Thus, you might
                   3026: assume that the name of the variable you use in an example does not matter.
                   3027: Well, probably it doesn't, but one cannot be sure.  Perhaps the bug is a
                   3028: stray memory reference which happens to fetch from the location where that
                   3029: name is stored in memory; perhaps, if the name were different, the contents
                   3030: of that location would fool the compiler into doing the right thing despite
                   3031: the bug.  Play it safe and give a specific, complete example.  That is the
                   3032: easiest thing for you to do, and the most helpful.
                   3033: 
1.1.1.3   root     3034: Keep in mind that the purpose of a bug report is to enable someone to
                   3035: fix the bug if it is not known.  It isn't very important what happens if
1.1       root     3036: the bug is already known.  Therefore, always write your bug reports on
                   3037: the assumption that the bug is not known.
                   3038: 
                   3039: Sometimes people give a few sketchy facts and ask, ``Does this ring a
1.1.1.3   root     3040: bell?''  This cannot help us fix a bug, so it is basically useless.  We
                   3041: respond by asking for enough details to enable us to investigate.
                   3042: You might as well expedite matters by sending them to begin with.
                   3043: 
                   3044: Try to make your bug report self-contained.  If we have to ask you for
                   3045: more information, it is best if you include all the previous information
                   3046: in your response, as well as the information that was missing.
1.1       root     3047: 
1.1.1.7   root     3048: Please report each bug in a separate message.  This makes it easier for
                   3049: us to track which bugs have been fixed and to forward your bugs reports
                   3050: to the appropriate maintainer.
                   3051: 
1.1.1.8   root     3052: Do not compress and encode any part of your bug report using programs
                   3053: such as @file{uuencode}.  If you do so it will slow down the processing
                   3054: of your bug.  If you must submit multiple large files, use @file{shar},
                   3055: which allows us to read your message without having to run any
                   3056: decompression programs.
                   3057: 
1.1.1.3   root     3058: To enable someone to investigate the bug, you should include all these
                   3059: things:
1.1       root     3060: 
                   3061: @itemize @bullet
                   3062: @item
                   3063: The version of GNU CC.  You can get this by running it with the
                   3064: @samp{-v} option.
                   3065: 
1.1.1.3   root     3066: Without this, we won't know whether there is any point in looking for
1.1       root     3067: the bug in the current version of GNU CC.
                   3068: 
                   3069: @item
1.1.1.3   root     3070: A complete input file that will reproduce the bug.  If the bug is in the
                   3071: C preprocessor, send a source file and any header files that it
1.1       root     3072: requires.  If the bug is in the compiler proper (@file{cc1}), run your
                   3073: source file through the C preprocessor by doing @samp{gcc -E
                   3074: @var{sourcefile} > @var{outfile}}, then include the contents of
1.1.1.3   root     3075: @var{outfile} in the bug report.  (When you do this, use the same
                   3076: @samp{-I}, @samp{-D} or @samp{-U} options that you used in actual
                   3077: compilation.)
1.1       root     3078: 
1.1.1.4   root     3079: A single statement is not enough of an example.  In order to compile it,
                   3080: it must be embedded in a complete file of compiler input; and the bug
                   3081: might depend on the details of how this is done.
1.1       root     3082: 
1.1.1.3   root     3083: Without a real example one can compile, all anyone can do about your bug
1.1       root     3084: report is wish you luck.  It would be futile to try to guess how to
1.1.1.3   root     3085: provoke the bug.  For example, bugs in register allocation and reloading
                   3086: frequently depend on every little detail of the function they happen in.
1.1       root     3087: 
1.1.1.4   root     3088: Even if the input file that fails comes from a GNU program, you should
                   3089: still send the complete test case.  Don't ask the GNU CC maintainers to
                   3090: do the extra work of obtaining the program in question---they are all
                   3091: overworked as it is.  Also, the problem may depend on what is in the
                   3092: header files on your system; it is unreliable for the GNU CC maintainers
                   3093: to try the problem with the header files available to them.  By sending
1.1.1.5   root     3094: CPP output, you can eliminate this source of uncertainty and save us
                   3095: a certain percentage of wild goose chases.
1.1.1.4   root     3096: 
1.1       root     3097: @item
1.1.1.3   root     3098: The command arguments you gave GNU CC or GNU C++ to compile that example
                   3099: and observe the bug.  For example, did you use @samp{-O}?  To guarantee
                   3100: you won't omit something important, list all the options.
1.1       root     3101: 
1.1.1.3   root     3102: If we were to try to guess the arguments, we would probably guess wrong
                   3103: and then we would not encounter the bug.
1.1       root     3104: 
                   3105: @item
                   3106: The type of machine you are using, and the operating system name and
                   3107: version number.
                   3108: 
                   3109: @item
                   3110: The operands you gave to the @code{configure} command when you installed
                   3111: the compiler.
                   3112: 
                   3113: @item
1.1.1.3   root     3114: A complete list of any modifications you have made to the compiler
                   3115: source.  (We don't promise to investigate the bug unless it happens in
                   3116: an unmodified compiler.  But if you've made modifications and don't tell
                   3117: us, then you are sending us on a wild goose chase.)
1.1       root     3118: 
1.1.1.4   root     3119: Be precise about these changes.  A description in English is not
                   3120: enough---send a context diff for them.
1.1       root     3121: 
1.1.1.3   root     3122: Adding files of your own (such as a machine description for a machine we
                   3123: don't support) is a modification of the compiler source.
1.1       root     3124: 
                   3125: @item
1.1.1.3   root     3126: Details of any other deviations from the standard procedure for installing
                   3127: GNU CC.
1.1       root     3128: 
                   3129: @item
1.1.1.3   root     3130: A description of what behavior you observe that you believe is
                   3131: incorrect.  For example, ``The compiler gets a fatal signal,'' or,
                   3132: ``The assembler instruction at line 208 in the output is incorrect.''
1.1       root     3133: 
1.1.1.3   root     3134: Of course, if the bug is that the compiler gets a fatal signal, then one
                   3135: can't miss it.  But if the bug is incorrect output, the maintainer might
                   3136: not notice unless it is glaringly wrong.  None of us has time to study
                   3137: all the assembler code from a 50-line C program just on the chance that
1.1.1.4   root     3138: one instruction might be wrong.  We need @emph{you} to do this part!
1.1       root     3139: 
1.1.1.3   root     3140: Even if the problem you experience is a fatal signal, you should still
                   3141: say so explicitly.  Suppose something strange is going on, such as, your
                   3142: copy of the compiler is out of synch, or you have encountered a bug in
                   3143: the C library on your system.  (This has happened!)  Your copy might
                   3144: crash and the copy here would not.  If you @i{said} to expect a crash,
                   3145: then when the compiler here fails to crash, we would know that the bug
                   3146: was not happening.  If you don't say to expect a crash, then we would
                   3147: not know whether the bug was happening.  We would not be able to draw
                   3148: any conclusion from our observations.
                   3149: 
1.1.1.4   root     3150: If the problem is a diagnostic when compiling GNU CC with some other
                   3151: compiler, say whether it is a warning or an error.
                   3152: 
1.1.1.3   root     3153: Often the observed symptom is incorrect output when your program is run.
                   3154: Sad to say, this is not enough information unless the program is short
                   3155: and simple.  None of us has time to study a large program to figure out
                   3156: how it would work if compiled correctly, much less which line of it was
                   3157: compiled wrong.  So you will have to do that.  Tell us which source line
                   3158: it is, and what incorrect result happens when that line is executed.  A
                   3159: person who understands the program can find this as easily as finding a
                   3160: bug in the program itself.
                   3161: 
                   3162: @item
                   3163: If you send examples of assembler code output from GNU CC or GNU C++,
                   3164: please use @samp{-g} when you make them.  The debugging information
                   3165: includes source line numbers which are essential for correlating the
                   3166: output with the input.
                   3167: 
                   3168: @item
1.1.1.4   root     3169: If you wish to mention something in the GNU CC source, refer to it by
                   3170: context, not by line number.
1.1.1.3   root     3171: 
                   3172: The line numbers in the development sources don't match those in your
                   3173: sources.  Your line numbers would convey no useful information to the
                   3174: maintainers.
                   3175: 
                   3176: @item
                   3177: Additional information from a debugger might enable someone to find a
                   3178: problem on a machine which he does not have available.  However, you
                   3179: need to think when you collect this information if you want it to have
                   3180: any chance of being useful.
1.1       root     3181: 
                   3182: @cindex backtrace for bug reports
                   3183: For example, many people send just a backtrace, but that is never
                   3184: useful by itself.  A simple backtrace with arguments conveys little
                   3185: about GNU CC because the compiler is largely data-driven; the same
                   3186: functions are called over and over for different RTL insns, doing
                   3187: different things depending on the details of the insn.
                   3188: 
                   3189: Most of the arguments listed in the backtrace are useless because they
                   3190: are pointers to RTL list structure.  The numeric values of the
                   3191: pointers, which the debugger prints in the backtrace, have no
                   3192: significance whatever; all that matters is the contents of the objects
                   3193: they point to (and most of the contents are other such pointers).
                   3194: 
                   3195: In addition, most compiler passes consist of one or more loops that
                   3196: scan the RTL insn sequence.  The most vital piece of information about
                   3197: such a loop---which insn it has reached---is usually in a local variable,
                   3198: not in an argument.
                   3199: 
                   3200: @findex debug_rtx
                   3201: What you need to provide in addition to a backtrace are the values of
                   3202: the local variables for several stack frames up.  When a local
                   3203: variable or an argument is an RTX, first print its value and then use
                   3204: the GDB command @code{pr} to print the RTL expression that it points
                   3205: to.  (If GDB doesn't run on your machine, use your debugger to call
                   3206: the function @code{debug_rtx} with the RTX as an argument.)  In
                   3207: general, whenever a variable is a pointer, its value is no use
                   3208: without the data it points to.
                   3209: @end itemize
                   3210: 
                   3211: Here are some things that are not necessary:
                   3212: 
                   3213: @itemize @bullet
                   3214: @item
                   3215: A description of the envelope of the bug.
                   3216: 
                   3217: Often people who encounter a bug spend a lot of time investigating
                   3218: which changes to the input file will make the bug go away and which
                   3219: changes will not affect it.
                   3220: 
1.1.1.3   root     3221: This is often time consuming and not very useful, because the way we
                   3222: will find the bug is by running a single example under the debugger with
                   3223: breakpoints, not by pure deduction from a series of examples.  You might
                   3224: as well save your time for something else.
                   3225: 
                   3226: Of course, if you can find a simpler example to report @emph{instead} of
                   3227: the original one, that is a convenience.  Errors in the output will be
                   3228: easier to spot, running under the debugger will take less time, etc.
                   3229: Most GNU CC bugs involve just one function, so the most straightforward
                   3230: way to simplify an example is to delete all the function definitions
                   3231: except the one where the bug occurs.  Those earlier in the file may be
                   3232: replaced by external declarations if the crucial function depends on
                   3233: them.  (Exception: inline functions may affect compilation of functions
                   3234: defined later in the file.)
1.1       root     3235: 
                   3236: However, simplification is not vital; if you don't want to do this,
1.1.1.3   root     3237: report the bug anyway and send the entire test case you used.
1.1       root     3238: 
                   3239: @item
1.1.1.4   root     3240: In particular, some people insert conditionals @samp{#ifdef BUG} around
                   3241: a statement which, if removed, makes the bug not happen.  These are just
                   3242: clutter; we won't pay any attention to them anyway.  Besides, you should
                   3243: send us cpp output, and that can't have conditionals.
                   3244: 
                   3245: @item
1.1       root     3246: A patch for the bug.
                   3247: 
1.1.1.3   root     3248: A patch for the bug is useful if it is a good one.  But don't omit the
                   3249: necessary information, such as the test case, on the assumption that a
                   3250: patch is all we need.  We might see problems with your patch and decide
                   3251: to fix the problem another way, or we might not understand it at all.
1.1       root     3252: 
                   3253: Sometimes with a program as complicated as GNU CC it is very hard to
                   3254: construct an example that will make the program follow a certain path
1.1.1.3   root     3255: through the code.  If you don't send the example, we won't be able to
                   3256: construct one, so we won't be able to verify that the bug is fixed.
                   3257: 
                   3258: And if we can't understand what bug you are trying to fix, or why your
                   3259: patch should be an improvement, we won't install it.  A test case will
                   3260: help us to understand.
1.1       root     3261: 
1.1.1.3   root     3262: @xref{Sending Patches}, for guidelines on how to make it easy for us to
                   3263: understand and install your patches.
1.1       root     3264: 
                   3265: @item
                   3266: A guess about what the bug is or what it depends on.
                   3267: 
                   3268: Such guesses are usually wrong.  Even I can't guess right about such
                   3269: things without first using the debugger to find the facts.
1.1.1.4   root     3270: 
                   3271: @item
                   3272: A core dump file.
                   3273: 
                   3274: We have no way of examining a core dump for your type of machine
                   3275: unless we have an identical system---and if we do have one,
                   3276: we should be able to reproduce the crash ourselves.
1.1       root     3277: @end itemize
                   3278: 
1.1.1.3   root     3279: @node Sending Patches,, Bug Reporting, Bugs
                   3280: @section Sending Patches for GNU CC
1.1       root     3281: 
1.1.1.3   root     3282: If you would like to write bug fixes or improvements for the GNU C
1.1.1.8   root     3283: compiler, that is very helpful.  Send suggested fixes to the bug report
                   3284: mailing list, @code{bug-gcc@@prep.ai.mit.edu}.
1.1.1.3   root     3285: 
1.1.1.8   root     3286: Please follow these guidelines so we can study your patches efficiently.
1.1.1.3   root     3287: If you don't follow these guidelines, your information might still be
                   3288: useful, but using it will take extra work.  Maintaining GNU C is a lot
                   3289: of work in the best of circumstances, and we can't keep up unless you do
                   3290: your best to help.
1.1       root     3291: 
                   3292: @itemize @bullet
                   3293: @item
1.1.1.3   root     3294: Send an explanation with your changes of what problem they fix or what
                   3295: improvement they bring about.  For a bug fix, just include a copy of the
                   3296: bug report, and explain why the change fixes the bug.
1.1       root     3297: 
1.1.1.3   root     3298: (Referring to a bug report is not as good as including it, because then
                   3299: we will have to look it up, and we have probably already deleted it if
                   3300: we've already fixed the bug.)
1.1       root     3301: 
                   3302: @item
1.1.1.3   root     3303: Always include a proper bug report for the problem you think you have
                   3304: fixed.  We need to convince ourselves that the change is right before
                   3305: installing it.  Even if it is right, we might have trouble judging it if
                   3306: we don't have a way to reproduce the problem.
1.1.1.2   root     3307: 
1.1.1.3   root     3308: @item
                   3309: Include all the comments that are appropriate to help people reading the
                   3310: source in the future understand why this change was needed.
1.1.1.2   root     3311: 
                   3312: @item
1.1.1.3   root     3313: Don't mix together changes made for different reasons.
                   3314: Send them @emph{individually}.
1.1       root     3315: 
1.1.1.3   root     3316: If you make two changes for separate reasons, then we might not want to
                   3317: install them both.  We might want to install just one.  If you send them
                   3318: all jumbled together in a single set of diffs, we have to do extra work
                   3319: to disentangle them---to figure out which parts of the change serve
                   3320: which purpose.  If we don't have time for this, we might have to ignore
                   3321: your changes entirely.
1.1       root     3322: 
1.1.1.3   root     3323: If you send each change as soon as you have written it, with its own
                   3324: explanation, then the two changes never get tangled up, and we can
                   3325: consider each one properly without any extra work to disentangle them.
1.1       root     3326: 
1.1.1.3   root     3327: Ideally, each change you send should be impossible to subdivide into
                   3328: parts that we might want to consider separately, because each of its
                   3329: parts gets its motivation from the other parts.
1.1       root     3330: 
1.1.1.3   root     3331: @item
                   3332: Send each change as soon as that change is finished.  Sometimes people
                   3333: think they are helping us by accumulating many changes to send them all
                   3334: together.  As explained above, this is absolutely the worst thing you
                   3335: could do.
1.1       root     3336: 
1.1.1.3   root     3337: Since you should send each change separately, you might as well send it
                   3338: right away.  That gives us the option of installing it immediately if it
                   3339: is important.
1.1       root     3340: 
1.1.1.3   root     3341: @item
                   3342: Use @samp{diff -c} to make your diffs.  Diffs without context are hard
                   3343: for us to install reliably.  More than that, they make it hard for us to
                   3344: study the diffs to decide whether we want to install them.  Unidiff
                   3345: format is better than contextless diffs, but not as easy to read as
                   3346: @samp{-c} format.
1.1       root     3347: 
1.1.1.3   root     3348: If you have GNU diff, use @samp{diff -cp}, which shows the name of the
                   3349: function that each change occurs in.
1.1       root     3350: 
1.1.1.3   root     3351: @item
                   3352: Write the change log entries for your changes.  We get lots of changes,
                   3353: and we don't have time to do all the change log writing ourselves.
1.1       root     3354: 
1.1.1.3   root     3355: Read the @file{ChangeLog} file to see what sorts of information to put
                   3356: in, and to learn the style that we use.  The purpose of the change log
                   3357: is to show people where to find what was changed.  So you need to be
                   3358: specific about what functions you changed; in large functions, it's
                   3359: often helpful to indicate where within the function the change was.
1.1.1.2   root     3360: 
1.1.1.3   root     3361: On the other hand, once you have shown people where to find the change,
1.1.1.5   root     3362: you need not explain its purpose.  Thus, if you add a new function, all
1.1.1.3   root     3363: you need to say about it is that it is new.  If you feel that the
                   3364: purpose needs explaining, it probably does---but the explanation will be
                   3365: much more useful if you put it in comments in the code.
                   3366: 
                   3367: If you would like your name to appear in the header line for who made
                   3368: the change, send us the header line.
1.1       root     3369: 
                   3370: @item
1.1.1.4   root     3371: When you write the fix, keep in mind that we can't install a change that
1.1.1.3   root     3372: would break other systems.
1.1       root     3373: 
1.1.1.3   root     3374: People often suggest fixing a problem by changing machine-independent
                   3375: files such as @file{toplev.c} to do something special that a particular
                   3376: system needs.  Sometimes it is totally obvious that such changes would
                   3377: break GNU CC for almost all users.  We can't possibly make a change like
                   3378: that.  At best it might tell us how to write another patch that would
                   3379: solve the problem acceptably.
1.1       root     3380: 
1.1.1.3   root     3381: Sometimes people send fixes that @emph{might} be an improvement in
                   3382: general---but it is hard to be sure of this.  It's hard to install
                   3383: such changes because we have to study them very carefully.  Of course,
                   3384: a good explanation of the reasoning by which you concluded the change
                   3385: was correct can help convince us.
1.1       root     3386: 
1.1.1.3   root     3387: The safest changes are changes to the configuration files for a
                   3388: particular machine.  These are safe because they can't create new bugs
                   3389: on other machines.
1.1       root     3390: 
1.1.1.3   root     3391: Please help us keep up with the workload by designing the patch in a
                   3392: form that is good to install.
                   3393: @end itemize
1.1       root     3394: 
1.1.1.3   root     3395: @node Service
                   3396: @chapter How To Get Help with GNU CC
1.1       root     3397: 
1.1.1.3   root     3398: If you need help installing, using or changing GNU CC, there are two
                   3399: ways to find it:
1.1       root     3400: 
1.1.1.3   root     3401: @itemize @bullet
                   3402: @item
                   3403: Send a message to a suitable network mailing list.  First try
                   3404: @code{bug-gcc@@prep.ai.mit.edu}, and if that brings no response, try
                   3405: @code{help-gcc@@prep.ai.mit.edu}.
1.1       root     3406: 
1.1.1.3   root     3407: @item
                   3408: Look in the service directory for someone who might help you for a fee.
                   3409: The service directory is found in the file named @file{SERVICE} in the
                   3410: GNU CC distribution.
1.1       root     3411: @end itemize
                   3412: 
1.1.1.3   root     3413: @node VMS
1.1       root     3414: @chapter Using GNU CC on VMS
                   3415: 
1.1.1.7   root     3416: @c prevent bad page break with this line
                   3417: Here is how to use GNU CC on VMS.
                   3418: 
1.1       root     3419: @menu
                   3420: * Include Files and VMS::  Where the preprocessor looks for the include files.
                   3421: * Global Declarations::    How to do globaldef, globalref and globalvalue with
                   3422:                            GNU CC.
                   3423: * VMS Misc::              Misc information.
                   3424: @end menu
                   3425: 
1.1.1.3   root     3426: @node Include Files and VMS
1.1       root     3427: @section Include Files and VMS
                   3428: 
                   3429: @cindex include files and VMS
                   3430: @cindex VMS and include files
                   3431: @cindex header files and VMS
                   3432: Due to the differences between the filesystems of Unix and VMS, GNU CC
                   3433: attempts to translate file names in @samp{#include} into names that VMS
                   3434: will understand.  The basic strategy is to prepend a prefix to the
                   3435: specification of the include file, convert the whole filename to a VMS
                   3436: filename, and then try to open the file.  GNU CC tries various prefixes
                   3437: one by one until one of them succeeds:
                   3438: 
                   3439: @enumerate
                   3440: @item
                   3441: The first prefix is the @samp{GNU_CC_INCLUDE:} logical name: this is
                   3442: where GNU C header files are traditionally stored.  If you wish to store
                   3443: header files in non-standard locations, then you can assign the logical
                   3444: @samp{GNU_CC_INCLUDE} to be a search list, where each element of the
                   3445: list is suitable for use with a rooted logical.
                   3446: 
                   3447: @item
                   3448: The next prefix tried is @samp{SYS$SYSROOT:[SYSLIB.]}.  This is where
                   3449: VAX-C header files are traditionally stored.
                   3450: 
                   3451: @item 
                   3452: If the include file specification by itself is a valid VMS filename, the
                   3453: preprocessor then uses this name with no prefix in an attempt to open
                   3454: the include file.
                   3455: 
                   3456: @item
                   3457: If the file specification is not a valid VMS filename (i.e. does not
                   3458: contain a device or a directory specifier, and contains a @samp{/}
                   3459: character), the preprocessor tries to convert it from Unix syntax to 
                   3460: VMS syntax.
                   3461: 
                   3462: Conversion works like this: the first directory name becomes a device,
                   3463: and the rest of the directories are converted into VMS-format directory
1.1.1.5   root     3464: names.  For example, the name @file{X11/foobar.h} is
                   3465: translated to @file{X11:[000000]foobar.h} or @file{X11:foobar.h},
                   3466: whichever one can be opened.  This strategy allows you to assign a
                   3467: logical name to point to the actual location of the header files.
1.1       root     3468: 
                   3469: @item
                   3470: If none of these strategies succeeds, the @samp{#include} fails.
                   3471: @end enumerate
                   3472: 
                   3473: Include directives of the form:
                   3474: 
                   3475: @example
                   3476: #include foobar
                   3477: @end example
                   3478: 
                   3479: @noindent
                   3480: are a common source of incompatibility between VAX-C and GNU CC.  VAX-C
                   3481: treats this much like a standard @code{#include <foobar.h>} directive.
                   3482: That is incompatible with the ANSI C behavior implemented by GNU CC: to
                   3483: expand the name @code{foobar} as a macro.  Macro expansion should
                   3484: eventually yield one of the two standard formats for @code{#include}:
                   3485: 
                   3486: @example
                   3487: #include "@var{file}"
                   3488: #include <@var{file}>
                   3489: @end example
                   3490: 
                   3491: If you have this problem, the best solution is to modify the source to
                   3492: convert the @code{#include} directives to one of the two standard forms.
                   3493: That will work with either compiler.  If you want a quick and dirty fix,
                   3494: define the file names as macros with the proper expansion, like this:
                   3495: 
                   3496: @example
                   3497: #define stdio <stdio.h>
                   3498: @end example
                   3499: 
                   3500: @noindent
                   3501: This will work, as long as the name doesn't conflict with anything else
                   3502: in the program.
                   3503: 
                   3504: Another source of incompatibility is that VAX-C assumes that:
                   3505: 
                   3506: @example
                   3507: #include "foobar"
                   3508: @end example
                   3509: 
                   3510: @noindent
                   3511: is actually asking for the file @file{foobar.h}.  GNU CC does not
                   3512: make this assumption, and instead takes what you ask for literally;
                   3513: it tries to read the file @file{foobar}.  The best way to avoid this
                   3514: problem is to always specify the desired file extension in your include
                   3515: directives.
                   3516: 
                   3517: GNU CC for VMS is distributed with a set of include files that is
                   3518: sufficient to compile most general purpose programs.  Even though the
                   3519: GNU CC distribution does not contain header files to define constants
                   3520: and structures for some VMS system-specific functions, there is no
                   3521: reason why you cannot use GNU CC with any of these functions.  You first
                   3522: may have to generate or create header files, either by using the public
                   3523: domain utility @code{UNSDL} (which can be found on a DECUS tape), or by
                   3524: extracting the relevant modules from one of the system macro libraries,
                   3525: and using an editor to construct a C header file.
                   3526: 
1.1.1.4   root     3527: A @code{#include} file name cannot contain a DECNET node name.  The
                   3528: preprocessor reports an I/O error if you attempt to use a node name,
                   3529: whether explicitly, or implicitly via a logical name.
                   3530: 
1.1.1.3   root     3531: @node Global Declarations
1.1       root     3532: @section Global Declarations and VMS
                   3533: 
                   3534: @findex GLOBALREF
                   3535: @findex GLOBALDEF
                   3536: @findex GLOBALVALUEDEF
                   3537: @findex GLOBALVALUEREF
                   3538: GNU CC does not provide the @code{globalref}, @code{globaldef} and
                   3539: @code{globalvalue} keywords of VAX-C.  You can get the same effect with
                   3540: an obscure feature of GAS, the GNU assembler.  (This requires GAS
                   3541: version 1.39 or later.)  The following macros allow you to use this
                   3542: feature in a fairly natural way:
                   3543: 
                   3544: @smallexample
                   3545: #ifdef __GNUC__
1.1.1.2   root     3546: #define GLOBALREF(TYPE,NAME)                      \
                   3547:   TYPE NAME                                       \
                   3548:   asm ("_$$PsectAttributes_GLOBALSYMBOL$$" #NAME)
                   3549: #define GLOBALDEF(TYPE,NAME,VALUE)                \
                   3550:   TYPE NAME                                       \
                   3551:   asm ("_$$PsectAttributes_GLOBALSYMBOL$$" #NAME) \
                   3552:     = VALUE
                   3553: #define GLOBALVALUEREF(TYPE,NAME)                 \
                   3554:   const TYPE NAME[1]                              \     
                   3555:   asm ("_$$PsectAttributes_GLOBALVALUE$$" #NAME)
                   3556: #define GLOBALVALUEDEF(TYPE,NAME,VALUE)           \
                   3557:   const TYPE NAME[1]                              \
                   3558:   asm ("_$$PsectAttributes_GLOBALVALUE$$" #NAME)  \
                   3559:     = @{VALUE@}
1.1       root     3560: #else
1.1.1.2   root     3561: #define GLOBALREF(TYPE,NAME) \
                   3562:   globalref TYPE NAME
                   3563: #define GLOBALDEF(TYPE,NAME,VALUE) \
                   3564:   globaldef TYPE NAME = VALUE
                   3565: #define GLOBALVALUEDEF(TYPE,NAME,VALUE) \
                   3566:   globalvalue TYPE NAME = VALUE
                   3567: #define GLOBALVALUEREF(TYPE,NAME) \
                   3568:   globalvalue TYPE NAME
1.1       root     3569: #endif
                   3570: @end smallexample
                   3571: 
                   3572: @noindent
                   3573: (The @code{_$$PsectAttributes_GLOBALSYMBOL} prefix at the start of the
                   3574: name is removed by the assembler, after it has modified the attributes
                   3575: of the symbol).  These macros are provided in the VMS binaries
                   3576: distribution in a header file @file{GNU_HACKS.H}.  An example of the
                   3577: usage is:
                   3578: 
                   3579: @example
1.1.1.2   root     3580: GLOBALREF (int, ijk);
                   3581: GLOBALDEF (int, jkl, 0);
1.1       root     3582: @end example
                   3583: 
                   3584: The macros @code{GLOBALREF} and @code{GLOBALDEF} cannot be used
                   3585: straightforwardly for arrays, since there is no way to insert the array
                   3586: dimension into the declaration at the right place.  However, you can
                   3587: declare an array with these macros if you first define a typedef for the
                   3588: array type, like this:
                   3589: 
                   3590: @example
                   3591: typedef int intvector[10];
1.1.1.2   root     3592: GLOBALREF (intvector, foo);
1.1       root     3593: @end example
                   3594: 
                   3595: Array and structure initializers will also break the macros; you can
                   3596: define the initializer to be a macro of its own, or you can expand the
                   3597: @code{GLOBALDEF} macro by hand.  You may find a case where you wish to
                   3598: use the @code{GLOBALDEF} macro with a large array, but you are not
                   3599: interested in explicitly initializing each element of the array.  In
                   3600: such cases you can use an initializer like: @code{@{0,@}}, which will
                   3601: initialize the entire array to @code{0}.
                   3602: 
                   3603: A shortcoming of this implementation is that a variable declared with
                   3604: @code{GLOBALVALUEREF} or @code{GLOBALVALUEDEF} is always an array.  For
                   3605: example, the declaration:
                   3606: 
                   3607: @example
1.1.1.2   root     3608: GLOBALVALUEREF(int, ijk);
1.1       root     3609: @end example
                   3610: 
                   3611: @noindent
                   3612: declares the variable @code{ijk} as an array of type @code{int [1]}.
                   3613: This is done because a globalvalue is actually a constant; its ``value''
                   3614: is what the linker would normally consider an address.  That is not how
                   3615: an integer value works in C, but it is how an array works.  So treating
                   3616: the symbol as an array name gives consistent results---with the
                   3617: exception that the value seems to have the wrong type.  @strong{Don't
                   3618: try to access an element of the array.}  It doesn't have any elements.
                   3619: The array ``address'' may not be the address of actual storage.
                   3620: 
                   3621: The fact that the symbol is an array may lead to warnings where the
                   3622: variable is used.  Insert type casts to avoid the warnings.  Here is an
                   3623: example; it takes advantage of the ANSI C feature allowing macros that
                   3624: expand to use the same name as the macro itself.
                   3625: 
                   3626: @example
1.1.1.2   root     3627: GLOBALVALUEREF (int, ss$_normal);
                   3628: GLOBALVALUEDEF (int, xyzzy,123);
1.1       root     3629: #ifdef __GNUC__
                   3630: #define ss$_normal ((int) ss$_normal)
                   3631: #define xyzzy ((int) xyzzy)
                   3632: #endif
                   3633: @end example
                   3634: 
                   3635: Don't use @code{globaldef} or @code{globalref} with a variable whose
                   3636: type is an enumeration type; this is not implemented.  Instead, make the
                   3637: variable an integer, and use a @code{globalvaluedef} for each of the
                   3638: enumeration values.  An example of this would be:
                   3639: 
                   3640: @example
                   3641: #ifdef __GNUC__
1.1.1.2   root     3642: GLOBALDEF (int, color, 0);
                   3643: GLOBALVALUEDEF (int, RED, 0);
                   3644: GLOBALVALUEDEF (int, BLUE, 1);
                   3645: GLOBALVALUEDEF (int, GREEN, 3);
1.1       root     3646: #else
                   3647: enum globaldef color @{RED, BLUE, GREEN = 3@};
                   3648: #endif
                   3649: @end example
                   3650: 
1.1.1.3   root     3651: @node VMS Misc
1.1       root     3652: @section Other VMS Issues
                   3653: 
                   3654: @cindex exit status and VMS
                   3655: @cindex return value of @code{main}
                   3656: @cindex @code{main} and the exit status
                   3657: GNU CC automatically arranges for @code{main} to return 1 by default if
                   3658: you fail to specify an explicit return value.  This will be interpreted
                   3659: by VMS as a status code indicating a normal successful completion.
                   3660: Version 1 of GNU CC did not provide this default.
                   3661: 
                   3662: GNU CC on VMS works only with the GNU assembler, GAS.  You need version
                   3663: 1.37 or later of GAS in order to produce value debugging information for
                   3664: the VMS debugger.  Use the ordinary VMS linker with the object files
                   3665: produced by GAS.
                   3666: 
                   3667: @cindex shared VMS run time system
                   3668: @cindex @file{VAXCRTL}
                   3669: Under previous versions of GNU CC, the generated code would occasionally
                   3670: give strange results when linked to the sharable @file{VAXCRTL} library.
                   3671: Now this should work.
                   3672: 
                   3673: A caveat for use of @code{const} global variables: the @code{const}
                   3674: modifier must be specified in every external declaration of the variable
                   3675: in all of the source files that use that variable.  Otherwise the linker
                   3676: will issue warnings about conflicting attributes for the variable.  Your
                   3677: program will still work despite the warnings, but the variable will be
                   3678: placed in writable storage.
                   3679: 
                   3680: @cindex name augmentation
                   3681: @cindex case sensitivity and VMS
                   3682: @cindex VMS and case sensitivity
1.1.1.4   root     3683: Although the VMS linker does distinguish between upper and lower case
                   3684: letters in global symbols, most VMS compilers convert all such symbols
                   3685: into upper case and most run-time library routines also have upper case
                   3686: names.  To be able to reliably call such routines, GNU CC (by means of
                   3687: the assembler GAS) converts global symbols into upper case like other
                   3688: VMS compilers.  However, since the usual practice in C is to distinguish
                   3689: case, GNU CC (via GAS) tries to preserve usual C behavior by augmenting
                   3690: each name that is not all lower case.  This means truncating the name
                   3691: to at most 23 characters and then adding more characters at the end
                   3692: which encode the case pattern of those 23.   Names which contain at
                   3693: least one dollar sign are an exception; they are converted directly into
                   3694: upper case without augmentation.
1.1       root     3695: 
                   3696: Name augmentation yields bad results for programs that use precompiled
                   3697: libraries (such as Xlib) which were generated by another compiler.  You
                   3698: can use the compiler option @samp{/NOCASE_HACK} to inhibit augmentation;
                   3699: it makes external C functions and variables case-independent as is usual
                   3700: on VMS.  Alternatively, you could write all references to the functions
                   3701: and variables in such libraries using lower case; this will work on VMS,
1.1.1.4   root     3702: but is not portable to other systems.  The compiler option @samp{/NAMES}
                   3703: also provides control over global name handling.
1.1       root     3704: 
                   3705: Function and variable names are handled somewhat differently with GNU
                   3706: C++.  The GNU C++ compiler performs @dfn{name mangling} on function
                   3707: names, which means that it adds information to the function name to
1.1.1.5   root     3708: describe the data types of the arguments that the function takes.  One
1.1       root     3709: result of this is that the name of a function can become very long.
                   3710: Since the VMS linker only recognizes the first 31 characters in a name,
                   3711: special action is taken to ensure that each function and variable has a
                   3712: unique name that can be represented in 31 characters.
                   3713: 
                   3714: If the name (plus a name augmentation, if required) is less than 32
1.1.1.5   root     3715: characters in length, then no special action is performed.  If the name
1.1       root     3716: is longer than 31 characters, the assembler (GAS) will generate a
                   3717: hash string based upon the function name, truncate the function name to
                   3718: 23 characters, and append the hash string to the truncated name.  If the
                   3719: @samp{/VERBOSE} compiler option is used, the assembler will print both
                   3720: the full and truncated names of each symbol that is truncated.
                   3721: 
                   3722: The @samp{/NOCASE_HACK} compiler option should not be used when you are
1.1.1.5   root     3723: compiling programs that use libg++.  libg++ has several instances of
1.1       root     3724: objects (i.e.  @code{Filebuf} and @code{filebuf}) which become
                   3725: indistinguishable in a case-insensitive environment.  This leads to
                   3726: cases where you need to inhibit augmentation selectively (if you were
                   3727: using libg++ and Xlib in the same program, for example).  There is no
                   3728: special feature for doing this, but you can get the result by defining a
                   3729: macro for each mixed case symbol for which you wish to inhibit
                   3730: augmentation.  The macro should expand into the lower case equivalent of
                   3731: itself.  For example:
                   3732: 
                   3733: @example
                   3734: #define StuDlyCapS studlycaps
                   3735: @end example
                   3736: 
                   3737: These macro definitions can be placed in a header file to minimize the
                   3738: number of changes to your source code.
1.1.1.5   root     3739: @end ifset
1.1       root     3740: 
                   3741: @ifset INTERNALS
1.1.1.3   root     3742: @node Portability
1.1       root     3743: @chapter GNU CC and Portability
                   3744: @cindex portability
                   3745: @cindex GNU CC and portability
                   3746: 
                   3747: The main goal of GNU CC was to make a good, fast compiler for machines in
                   3748: the class that the GNU system aims to run on: 32-bit machines that address
                   3749: 8-bit bytes and have several general registers.  Elegance, theoretical
                   3750: power and simplicity are only secondary.
                   3751: 
                   3752: GNU CC gets most of the information about the target machine from a machine
                   3753: description which gives an algebraic formula for each of the machine's
                   3754: instructions.  This is a very clean way to describe the target.  But when
                   3755: the compiler needs information that is difficult to express in this
                   3756: fashion, I have not hesitated to define an ad-hoc parameter to the machine
                   3757: description.  The purpose of portability is to reduce the total work needed
                   3758: on the compiler; it was not of interest for its own sake.
                   3759: 
                   3760: @cindex endianness
                   3761: @cindex autoincrement addressing, availability
                   3762: @findex abort
                   3763: GNU CC does not contain machine dependent code, but it does contain code
                   3764: that depends on machine parameters such as endianness (whether the most
                   3765: significant byte has the highest or lowest address of the bytes in a word)
                   3766: and the availability of autoincrement addressing.  In the RTL-generation
                   3767: pass, it is often necessary to have multiple strategies for generating code
                   3768: for a particular kind of syntax tree, strategies that are usable for different
                   3769: combinations of parameters.  Often I have not tried to address all possible
                   3770: cases, but only the common ones or only the ones that I have encountered.
                   3771: As a result, a new target may require additional strategies.  You will know
                   3772: if this happens because the compiler will call @code{abort}.  Fortunately,
                   3773: the new strategies can be added in a machine-independent fashion, and will
                   3774: affect only the target machines that need them.
                   3775: @end ifset
                   3776: 
                   3777: @ifset INTERNALS
1.1.1.3   root     3778: @node Interface
1.1       root     3779: @chapter Interfacing to GNU CC Output
                   3780: @cindex interfacing to GNU CC output
                   3781: @cindex run-time conventions
                   3782: @cindex function call conventions
                   3783: @cindex conventions, run-time
                   3784: 
                   3785: GNU CC is normally configured to use the same function calling convention
                   3786: normally in use on the target system.  This is done with the
1.1.1.2   root     3787: machine-description macros described (@pxref{Target Macros}).
1.1       root     3788: 
                   3789: @cindex unions, returning
                   3790: @cindex structures, returning
                   3791: @cindex returning structures and unions
                   3792: However, returning of structure and union values is done differently on
                   3793: some target machines.  As a result, functions compiled with PCC
                   3794: returning such types cannot be called from code compiled with GNU CC,
                   3795: and vice versa.  This does not cause trouble often because few Unix
                   3796: library routines return structures or unions.
                   3797: 
                   3798: GNU CC code returns structures and unions that are 1, 2, 4 or 8 bytes
                   3799: long in the same registers used for @code{int} or @code{double} return
                   3800: values.  (GNU CC typically allocates variables of such types in
                   3801: registers also.)  Structures and unions of other sizes are returned by
                   3802: storing them into an address passed by the caller (usually in a
                   3803: register).  The machine-description macros @code{STRUCT_VALUE} and
                   3804: @code{STRUCT_INCOMING_VALUE} tell GNU CC where to pass this address.
                   3805: 
                   3806: By contrast, PCC on most target machines returns structures and unions
                   3807: of any size by copying the data into an area of static storage, and then
                   3808: returning the address of that storage as if it were a pointer value.
                   3809: The caller must copy the data from that memory area to the place where
                   3810: the value is wanted.  This is slower than the method used by GNU CC, and
                   3811: fails to be reentrant.
                   3812: 
                   3813: On some target machines, such as RISC machines and the 80386, the
                   3814: standard system convention is to pass to the subroutine the address of
                   3815: where to return the value.  On these machines, GNU CC has been
                   3816: configured to be compatible with the standard compiler, when this method
                   3817: is used.  It may not be compatible for structures of 1, 2, 4 or 8 bytes.
                   3818: 
                   3819: @cindex argument passing
                   3820: @cindex passing arguments
                   3821: GNU CC uses the system's standard convention for passing arguments.  On
                   3822: some machines, the first few arguments are passed in registers; in
                   3823: others, all are passed on the stack.  It would be possible to use
                   3824: registers for argument passing on any machine, and this would probably
                   3825: result in a significant speedup.  But the result would be complete
                   3826: incompatibility with code that follows the standard convention.  So this
                   3827: change is practical only if you are switching to GNU CC as the sole C
                   3828: compiler for the system.  We may implement register argument passing on
                   3829: certain machines once we have a complete GNU system so that we can
                   3830: compile the libraries with GNU CC.
                   3831: 
                   3832: On some machines (particularly the Sparc), certain types of arguments
                   3833: are passed ``by invisible reference''.  This means that the value is
                   3834: stored in memory, and the address of the memory location is passed to
                   3835: the subroutine.
                   3836: 
                   3837: @cindex @code{longjmp} and automatic variables
                   3838: If you use @code{longjmp}, beware of automatic variables.  ANSI C says that
                   3839: automatic variables that are not declared @code{volatile} have undefined
                   3840: values after a @code{longjmp}.  And this is all GNU CC promises to do,
                   3841: because it is very difficult to restore register variables correctly, and
                   3842: one of GNU CC's features is that it can put variables in registers without
                   3843: your asking it to.
                   3844: 
                   3845: If you want a variable to be unaltered by @code{longjmp}, and you don't
                   3846: want to write @code{volatile} because old C compilers don't accept it,
                   3847: just take the address of the variable.  If a variable's address is ever
                   3848: taken, even if just to compute it and ignore it, then the variable cannot
                   3849: go in a register:
                   3850: 
                   3851: @example
                   3852: @{
                   3853:   int careful;
                   3854:   &careful;
                   3855:   @dots{}
                   3856: @}
                   3857: @end example
                   3858: 
                   3859: @cindex arithmetic libraries
                   3860: @cindex math libraries
                   3861: Code compiled with GNU CC may call certain library routines.  Most of
                   3862: them handle arithmetic for which there are no instructions.  This
                   3863: includes multiply and divide on some machines, and floating point
                   3864: operations on any machine for which floating point support is disabled
                   3865: with @samp{-msoft-float}.  Some standard parts of the C library, such as
                   3866: @code{bcopy} or @code{memcpy}, are also called automatically.  The usual
                   3867: function call interface is used for calling the library routines.
                   3868: 
                   3869: These library routines should be defined in the library @file{libgcc.a},
                   3870: which GNU CC automatically searches whenever it links a program.  On
                   3871: machines that have multiply and divide instructions, if hardware
                   3872: floating point is in use, normally @file{libgcc.a} is not needed, but it
                   3873: is searched just in case.
                   3874: 
                   3875: Each arithmetic function is defined in @file{libgcc1.c} to use the
                   3876: corresponding C arithmetic operator.  As long as the file is compiled
                   3877: with another C compiler, which supports all the C arithmetic operators,
                   3878: this file will work portably.  However, @file{libgcc1.c} does not work if
                   3879: compiled with GNU CC, because each arithmetic function would compile
                   3880: into a call to itself!
                   3881: @end ifset
                   3882: 
                   3883: @ifset INTERNALS
1.1.1.3   root     3884: @node Passes
1.1       root     3885: @chapter Passes and Files of the Compiler
                   3886: @cindex passes and files of the compiler
                   3887: @cindex files and passes of the compiler
                   3888: @cindex compiler passes and files
                   3889: 
                   3890: @cindex top level of compiler
                   3891: The overall control structure of the compiler is in @file{toplev.c}.  This
                   3892: file is responsible for initialization, decoding arguments, opening and
                   3893: closing files, and sequencing the passes.
                   3894: 
                   3895: @cindex parsing pass
                   3896: The parsing pass is invoked only once, to parse the entire input.  The RTL
                   3897: intermediate code for a function is generated as the function is parsed, a
                   3898: statement at a time.  Each statement is read in as a syntax tree and then
                   3899: converted to RTL; then the storage for the tree for the statement is
                   3900: reclaimed.  Storage for types (and the expressions for their sizes),
                   3901: declarations, and a representation of the binding contours and how they nest,
                   3902: remain until the function is finished being compiled; these are all needed
                   3903: to output the debugging information.
                   3904: 
                   3905: @findex rest_of_compilation
                   3906: @findex rest_of_decl_compilation
                   3907: Each time the parsing pass reads a complete function definition or
1.1.1.5   root     3908: top-level declaration, it calls either the function
                   3909: @code{rest_of_compilation}, or the function
                   3910: @code{rest_of_decl_compilation} in @file{toplev.c}, which are
                   3911: responsible for all further processing necessary, ending with output of
                   3912: the assembler language.  All other compiler passes run, in sequence,
                   3913: within @code{rest_of_compilation}.  When that function returns from
                   3914: compiling a function definition, the storage used for that function
                   3915: definition's compilation is entirely freed, unless it is an inline
                   3916: function
                   3917: @ifset USING
                   3918: (@pxref{Inline,,An Inline Function is As Fast As a Macro}).
                   3919: @end ifset
                   3920: @ifclear USING
                   3921: (@pxref{Inline,,An Inline Function is As Fast As a Macro,gcc.texi,Using GCC}).
                   3922: @end ifclear
1.1       root     3923: 
                   3924: Here is a list of all the passes of the compiler and their source files.
                   3925: Also included is a description of where debugging dumps can be requested
                   3926: with @samp{-d} options.
                   3927: 
                   3928: @itemize @bullet
                   3929: @item
                   3930: Parsing.  This pass reads the entire text of a function definition,
                   3931: constructing partial syntax trees.  This and RTL generation are no longer
                   3932: truly separate passes (formerly they were), but it is easier to think
                   3933: of them as separate.
                   3934: 
                   3935: The tree representation does not entirely follow C syntax, because it is
                   3936: intended to support other languages as well.
                   3937: 
                   3938: Language-specific data type analysis is also done in this pass, and every
                   3939: tree node that represents an expression has a data type attached.
                   3940: Variables are represented as declaration nodes.
                   3941: 
                   3942: @cindex constant folding
                   3943: @cindex arithmetic simplifications
                   3944: @cindex simplifications, arithmetic
                   3945: Constant folding and some arithmetic simplifications are also done
                   3946: during this pass.
                   3947: 
                   3948: The language-independent source files for parsing are
                   3949: @file{stor-layout.c}, @file{fold-const.c}, and @file{tree.c}.
                   3950: There are also header files @file{tree.h} and @file{tree.def}
                   3951: which define the format of the tree representation.@refill
                   3952: 
1.1.1.5   root     3953: @c Avoiding overfull is tricky here.
                   3954: The source files to parse C are 
                   3955: @file{c-parse.in}, 
                   3956: @file{c-decl.c},
                   3957: @file{c-typeck.c}, 
                   3958: @file{c-aux-info.c},
                   3959: @file{c-convert.c}, 
                   3960: and @file{c-lang.c}
                   3961: along with header files 
                   3962: @file{c-lex.h}, and
1.1       root     3963: @file{c-tree.h}.
                   3964: 
                   3965: The source files for parsing C++ are @file{cp-parse.y},
1.1.1.4   root     3966: @file{cp-class.c},@*
                   3967: @file{cp-cvt.c}, @file{cp-decl.c}, @file{cp-decl2.c},
1.1       root     3968: @file{cp-dem.c}, @file{cp-except.c},@*
                   3969: @file{cp-expr.c}, @file{cp-init.c}, @file{cp-lex.c},
                   3970: @file{cp-method.c}, @file{cp-ptree.c},@*
                   3971: @file{cp-search.c}, @file{cp-tree.c}, @file{cp-type2.c}, and
                   3972: @file{cp-typeck.c}, along with header files @file{cp-tree.def},
                   3973: @file{cp-tree.h}, and @file{cp-decl.h}.
                   3974: 
                   3975: The special source files for parsing Objective C are
                   3976: @file{objc-parse.y}, @file{objc-actions.c}, @file{objc-tree.def}, and
                   3977: @file{objc-actions.h}.  Certain C-specific files are used for this as
                   3978: well.
                   3979: 
                   3980: The file @file{c-common.c} is also used for all of the above languages.
                   3981: 
                   3982: @cindex RTL generation
                   3983: @item
                   3984: RTL generation.  This is the conversion of syntax tree into RTL code.
                   3985: It is actually done statement-by-statement during parsing, but for
                   3986: most purposes it can be thought of as a separate pass.
                   3987: 
                   3988: @cindex target-parameter-dependent code
                   3989: This is where the bulk of target-parameter-dependent code is found,
                   3990: since often it is necessary for strategies to apply only when certain
                   3991: standard kinds of instructions are available.  The purpose of named
                   3992: instruction patterns is to provide this information to the RTL
                   3993: generation pass.
                   3994: 
                   3995: @cindex tail recursion optimization
                   3996: Optimization is done in this pass for @code{if}-conditions that are
                   3997: comparisons, boolean operations or conditional expressions.  Tail
                   3998: recursion is detected at this time also.  Decisions are made about how
                   3999: best to arrange loops and how to output @code{switch} statements.
                   4000: 
1.1.1.5   root     4001: @c Avoiding overfull is tricky here.
                   4002: The source files for RTL generation include 
                   4003: @file{stmt.c},
                   4004: @file{calls.c}, 
                   4005: @file{expr.c}, 
                   4006: @file{explow.c},
                   4007: @file{expmed.c}, 
                   4008: @file{function.c}, 
                   4009: @file{optabs.c} 
                   4010: and @file{emit-rtl.c}.  
                   4011: Also, the file
1.1       root     4012: @file{insn-emit.c}, generated from the machine description by the
                   4013: program @code{genemit}, is used in this pass.  The header file
                   4014: @file{expr.h} is used for communication within this pass.@refill
                   4015: 
                   4016: @findex genflags
                   4017: @findex gencodes
                   4018: The header files @file{insn-flags.h} and @file{insn-codes.h},
                   4019: generated from the machine description by the programs @code{genflags}
                   4020: and @code{gencodes}, tell this pass which standard names are available
                   4021: for use and which patterns correspond to them.@refill
                   4022: 
                   4023: Aside from debugging information output, none of the following passes
                   4024: refers to the tree structure representation of the function (only
                   4025: part of which is saved).
                   4026: 
                   4027: @cindex inline, automatic
                   4028: The decision of whether the function can and should be expanded inline
                   4029: in its subsequent callers is made at the end of rtl generation.  The
                   4030: function must meet certain criteria, currently related to the size of
                   4031: the function and the types and number of parameters it has.  Note that
                   4032: this function may contain loops, recursive calls to itself
                   4033: (tail-recursive functions can be inlined!), gotos, in short, all
                   4034: constructs supported by GNU CC.  The file @file{integrate.c} contains
                   4035: the code to save a function's rtl for later inlining and to inline that
                   4036: rtl when the function is called.  The header file @file{integrate.h}
                   4037: is also used for this purpose.
                   4038: 
                   4039: The option @samp{-dr} causes a debugging dump of the RTL code after
                   4040: this pass.  This dump file's name is made by appending @samp{.rtl} to
                   4041: the input file name.
                   4042: 
                   4043: @cindex jump optimization
                   4044: @cindex unreachable code
                   4045: @cindex dead code
                   4046: @item
                   4047: Jump optimization.  This pass simplifies jumps to the following
                   4048: instruction, jumps across jumps, and jumps to jumps.  It deletes
                   4049: unreferenced labels and unreachable code, except that unreachable code
                   4050: that contains a loop is not recognized as unreachable in this pass.
                   4051: (Such loops are deleted later in the basic block analysis.)  It also
                   4052: converts some code originally written with jumps into sequences of
                   4053: instructions that directly set values from the results of comparisons,
                   4054: if the machine has such instructions.
                   4055: 
                   4056: Jump optimization is performed two or three times.  The first time is
                   4057: immediately following RTL generation.  The second time is after CSE,
                   4058: but only if CSE says repeated jump optimization is needed.  The
                   4059: last time is right before the final pass.  That time, cross-jumping
                   4060: and deletion of no-op move instructions are done together with the
                   4061: optimizations described above.
                   4062: 
                   4063: The source file of this pass is @file{jump.c}.
                   4064: 
                   4065: The option @samp{-dj} causes a debugging dump of the RTL code after
                   4066: this pass is run for the first time.  This dump file's name is made by
                   4067: appending @samp{.jump} to the input file name.
                   4068: 
                   4069: @cindex register use analysis
                   4070: @item
                   4071: Register scan.  This pass finds the first and last use of each
                   4072: register, as a guide for common subexpression elimination.  Its source
                   4073: is in @file{regclass.c}.
                   4074: 
                   4075: @cindex jump threading
                   4076: @item
                   4077: Jump threading.  This pass detects a condition jump that branches to an
                   4078: identical or inverse test.  Such jumps can be @samp{threaded} through
                   4079: the second conditional test.  The source code for this pass is in
                   4080: @file{jump.c}.  This optimization is only performed if
                   4081: @samp{-fthread-jumps} is enabled.
                   4082: 
                   4083: @cindex common subexpression elimination
                   4084: @cindex constant propagation
                   4085: @item
                   4086: Common subexpression elimination.  This pass also does constant
                   4087: propagation.  Its source file is @file{cse.c}.  If constant
                   4088: propagation causes conditional jumps to become unconditional or to
                   4089: become no-ops, jump optimization is run again when CSE is finished.
                   4090: 
                   4091: The option @samp{-ds} causes a debugging dump of the RTL code after
                   4092: this pass.  This dump file's name is made by appending @samp{.cse} to
                   4093: the input file name.
                   4094: 
                   4095: @cindex loop optimization
                   4096: @cindex code motion
                   4097: @cindex strength-reduction
                   4098: @item
                   4099: Loop optimization.  This pass moves constant expressions out of loops,
                   4100: and optionally does strength-reduction and loop unrolling as well.
                   4101: Its source files are @file{loop.c} and @file{unroll.c}, plus the header
                   4102: @file{loop.h} used for communication between them.  Loop unrolling uses
                   4103: some functions in @file{integrate.c} and the header @file{integrate.h}.
                   4104: 
                   4105: The option @samp{-dL} causes a debugging dump of the RTL code after
                   4106: this pass.  This dump file's name is made by appending @samp{.loop} to
                   4107: the input file name.
                   4108: 
                   4109: @item
                   4110: If @samp{-frerun-cse-after-loop} was enabled, a second common
                   4111: subexpression elimination pass is performed after the loop optimization
                   4112: pass.  Jump threading is also done again at this time if it was specified.
                   4113: 
                   4114: The option @samp{-dt} causes a debugging dump of the RTL code after
                   4115: this pass.  This dump file's name is made by appending @samp{.cse2} to
                   4116: the input file name.
                   4117: 
                   4118: @cindex register allocation, stupid
                   4119: @cindex stupid register allocation
                   4120: @item
                   4121: Stupid register allocation is performed at this point in a
                   4122: nonoptimizing compilation.  It does a little data flow analysis as
                   4123: well.  When stupid register allocation is in use, the next pass
                   4124: executed is the reloading pass; the others in between are skipped.
                   4125: The source file is @file{stupid.c}.
                   4126: 
                   4127: @cindex data flow analysis
                   4128: @cindex analysis, data flow
                   4129: @cindex basic blocks
                   4130: @item
                   4131: Data flow analysis (@file{flow.c}).  This pass divides the program
                   4132: into basic blocks (and in the process deletes unreachable loops); then
                   4133: it computes which pseudo-registers are live at each point in the
                   4134: program, and makes the first instruction that uses a value point at
                   4135: the instruction that computed the value.
                   4136: 
                   4137: @cindex autoincrement/decrement analysis
                   4138: This pass also deletes computations whose results are never used, and
                   4139: combines memory references with add or subtract instructions to make
                   4140: autoincrement or autodecrement addressing.
                   4141: 
                   4142: The option @samp{-df} causes a debugging dump of the RTL code after
                   4143: this pass.  This dump file's name is made by appending @samp{.flow} to
                   4144: the input file name.  If stupid register allocation is in use, this
                   4145: dump file reflects the full results of such allocation.
                   4146: 
                   4147: @cindex instruction combination
                   4148: @item
                   4149: Instruction combination (@file{combine.c}).  This pass attempts to
                   4150: combine groups of two or three instructions that are related by data
                   4151: flow into single instructions.  It combines the RTL expressions for
                   4152: the instructions by substitution, simplifies the result using algebra,
                   4153: and then attempts to match the result against the machine description.
                   4154: 
                   4155: The option @samp{-dc} causes a debugging dump of the RTL code after
                   4156: this pass.  This dump file's name is made by appending @samp{.combine}
                   4157: to the input file name.
                   4158: 
                   4159: @cindex instruction scheduling
                   4160: @cindex scheduling, instruction
                   4161: @item
                   4162: Instruction scheduling (@file{sched.c}).  This pass looks for
                   4163: instructions whose output will not be available by the time that it is
                   4164: used in subsequent instructions.  (Memory loads and floating point
                   4165: instructions often have this behavior on RISC machines).  It re-orders
                   4166: instructions within a basic block to try to separate the definition and
                   4167: use of items that otherwise would cause pipeline stalls.
                   4168: 
                   4169: Instruction scheduling is performed twice.  The first time is immediately
                   4170: after instruction combination and the second is immediately after reload.
                   4171: 
                   4172: The option @samp{-dS} causes a debugging dump of the RTL code after this
                   4173: pass is run for the first time.  The dump file's name is made by
                   4174: appending @samp{.sched} to the input file name.
                   4175: 
                   4176: @cindex register class preference pass
                   4177: @item
                   4178: Register class preferencing.  The RTL code is scanned to find out
                   4179: which register class is best for each pseudo register.  The source
                   4180: file is @file{regclass.c}.
                   4181: 
                   4182: @cindex register allocation
                   4183: @cindex local register allocation
                   4184: @item
                   4185: Local register allocation (@file{local-alloc.c}).  This pass allocates
                   4186: hard registers to pseudo registers that are used only within one basic
                   4187: block.  Because the basic block is linear, it can use fast and
                   4188: powerful techniques to do a very good job.
                   4189: 
                   4190: The option @samp{-dl} causes a debugging dump of the RTL code after
                   4191: this pass.  This dump file's name is made by appending @samp{.lreg} to
                   4192: the input file name.
                   4193: 
                   4194: @cindex global register allocation
                   4195: @item
1.1.1.4   root     4196: Global register allocation (@file{global.c}).  This pass
1.1       root     4197: allocates hard registers for the remaining pseudo registers (those
                   4198: whose life spans are not contained in one basic block).
                   4199: 
                   4200: @cindex reloading
                   4201: @item
                   4202: Reloading.  This pass renumbers pseudo registers with the hardware
                   4203: registers numbers they were allocated.  Pseudo registers that did not
                   4204: get hard registers are replaced with stack slots.  Then it finds
                   4205: instructions that are invalid because a value has failed to end up in
                   4206: a register, or has ended up in a register of the wrong kind.  It fixes
                   4207: up these instructions by reloading the problematical values
                   4208: temporarily into registers.  Additional instructions are generated to
                   4209: do the copying.
                   4210: 
                   4211: The reload pass also optionally eliminates the frame pointer and inserts
                   4212: instructions to save and restore call-clobbered registers around calls.
                   4213: 
                   4214: Source files are @file{reload.c} and @file{reload1.c}, plus the header
                   4215: @file{reload.h} used for communication between them.
                   4216: 
                   4217: The option @samp{-dg} causes a debugging dump of the RTL code after
                   4218: this pass.  This dump file's name is made by appending @samp{.greg} to
                   4219: the input file name.
                   4220: 
                   4221: @cindex instruction scheduling
                   4222: @cindex scheduling, instruction
                   4223: @item
                   4224: Instruction scheduling is repeated here to try to avoid pipeline stalls
                   4225: due to memory loads generated for spilled pseudo registers.
                   4226: 
                   4227: The option @samp{-dR} causes a debugging dump of the RTL code after
                   4228: this pass.  This dump file's name is made by appending @samp{.sched2}
                   4229: to the input file name.
                   4230: 
                   4231: @cindex cross-jumping
                   4232: @cindex no-op move instructions
                   4233: @item
                   4234: Jump optimization is repeated, this time including cross-jumping
                   4235: and deletion of no-op move instructions.
                   4236: 
                   4237: The option @samp{-dJ} causes a debugging dump of the RTL code after
                   4238: this pass.  This dump file's name is made by appending @samp{.jump2}
                   4239: to the input file name.
                   4240: 
                   4241: @cindex delayed branch scheduling
                   4242: @cindex scheduling, delayed branch
                   4243: @item
                   4244: Delayed branch scheduling.  This optional pass attempts to find
                   4245: instructions that can go into the delay slots of other instructions,
                   4246: usually jumps and calls.  The source file name is @file{reorg.c}.  
                   4247: 
                   4248: The option @samp{-dd} causes a debugging dump of the RTL code after
                   4249: this pass.  This dump file's name is made by appending @samp{.dbr}
                   4250: to the input file name.
                   4251: 
                   4252: @cindex register-to-stack conversion
                   4253: @item
                   4254: Conversion from usage of some hard registers to usage of a register
                   4255: stack may be done at this point.  Currently, this is supported only
                   4256: for the floating-point registers of the Intel 80387 coprocessor.   The
                   4257: source file name is @file{reg-stack.c}.
                   4258: 
                   4259: The options @samp{-dk} causes a debugging dump of the RTL code after
                   4260: this pass.  This dump file's name is made by appending @samp{.stack}
                   4261: to the input file name.
                   4262: 
                   4263: @cindex final pass
                   4264: @cindex peephole optimization
                   4265: @item
                   4266: Final.  This pass outputs the assembler code for the function.  It is
                   4267: also responsible for identifying spurious test and compare
                   4268: instructions.  Machine-specific peephole optimizations are performed
                   4269: at the same time.  The function entry and exit sequences are generated
                   4270: directly as assembler code in this pass; they never exist as RTL.
                   4271: 
                   4272: The source files are @file{final.c} plus @file{insn-output.c}; the
                   4273: latter is generated automatically from the machine description by the
                   4274: tool @file{genoutput}.  The header file @file{conditions.h} is used
                   4275: for communication between these files.
                   4276: 
                   4277: @cindex debugging information generation
                   4278: @item
                   4279: Debugging information output.  This is run after final because it must
                   4280: output the stack slot offsets for pseudo registers that did not get
                   4281: hard registers.  Source files are @file{dbxout.c} for DBX symbol table
                   4282: format, @file{sdbout.c} for SDB symbol table format, and
                   4283: @file{dwarfout.c} for DWARF symbol table format.
                   4284: @end itemize
                   4285: 
                   4286: Some additional files are used by all or many passes:
                   4287: 
                   4288: @itemize @bullet
                   4289: @item
                   4290: Every pass uses @file{machmode.def} and @file{machmode.h} which define
                   4291: the machine modes.
                   4292: 
                   4293: @item
                   4294: Several passes use @file{real.h}, which defines the default
                   4295: representation of floating point constants and how to operate on them.
                   4296: 
                   4297: @item
                   4298: All the passes that work with RTL use the header files @file{rtl.h}
                   4299: and @file{rtl.def}, and subroutines in file @file{rtl.c}.  The tools
                   4300: @code{gen*} also use these files to read and work with the machine
                   4301: description RTL.
                   4302: 
                   4303: @findex genconfig
                   4304: @item
                   4305: Several passes refer to the header file @file{insn-config.h} which
                   4306: contains a few parameters (C macro definitions) generated
                   4307: automatically from the machine description RTL by the tool
                   4308: @code{genconfig}.
                   4309: 
                   4310: @cindex instruction recognizer
                   4311: @item
                   4312: Several passes use the instruction recognizer, which consists of
                   4313: @file{recog.c} and @file{recog.h}, plus the files @file{insn-recog.c}
                   4314: and @file{insn-extract.c} that are generated automatically from the
                   4315: machine description by the tools @file{genrecog} and
                   4316: @file{genextract}.@refill
                   4317: 
                   4318: @item
                   4319: Several passes use the header files @file{regs.h} which defines the
                   4320: information recorded about pseudo register usage, and @file{basic-block.h}
                   4321: which defines the information recorded about basic blocks.
                   4322: 
                   4323: @item
                   4324: @file{hard-reg-set.h} defines the type @code{HARD_REG_SET}, a bit-vector
                   4325: with a bit for each hard register, and some macros to manipulate it.
                   4326: This type is just @code{int} if the machine has few enough hard registers;
                   4327: otherwise it is an array of @code{int} and some of the macros expand
                   4328: into loops.
                   4329: 
                   4330: @item
                   4331: Several passes use instruction attributes.  A definition of the
                   4332: attributes defined for a particular machine is in file
                   4333: @file{insn-attr.h}, which is generated from the machine description by
                   4334: the program @file{genattr}.  The file @file{insn-attrtab.c} contains
                   4335: subroutines to obtain the attribute values for insns.  It is generated
                   4336: from the machine description by the program @file{genattrtab}.@refill
                   4337: @end itemize
                   4338: @end ifset
                   4339: 
1.1.1.5   root     4340: @ifset INTERNALS
1.1       root     4341: @include rtl.texi
                   4342: @include md.texi
                   4343: @include tm.texi
1.1.1.5   root     4344: @end ifset
1.1       root     4345: 
                   4346: @ifset INTERNALS
1.1.1.3   root     4347: @node Config
1.1       root     4348: @chapter The Configuration File
                   4349: @cindex configuration file
                   4350: @cindex @file{xm-@var{machine}.h}
                   4351: 
                   4352: The configuration file @file{xm-@var{machine}.h} contains macro
                   4353: definitions that describe the machine and system on which the compiler
                   4354: is running, unlike the definitions in @file{@var{machine}.h}, which
                   4355: describe the machine for which the compiler is producing output.  Most
                   4356: of the values in @file{xm-@var{machine}.h} are actually the same on all
                   4357: machines that GNU CC runs on, so large parts of all configuration files
                   4358: are identical.  But there are some macros that vary:
                   4359: 
                   4360: @table @code
                   4361: @findex USG
                   4362: @item USG
                   4363: Define this macro if the host system is System V.
                   4364: 
                   4365: @findex VMS
                   4366: @item VMS
                   4367: Define this macro if the host system is VMS.
                   4368: 
1.1.1.8   root     4369: @findex FATAL_EXIT_CODE
                   4370: @item FATAL_EXIT_CODE
1.1       root     4371: A C expression for the status code to be returned when the compiler
                   4372: exits after serious errors.
                   4373: 
                   4374: @findex SUCCESS_EXIT_CODE
                   4375: @item SUCCESS_EXIT_CODE
                   4376: A C expression for the status code to be returned when the compiler
                   4377: exits without serious errors.
                   4378: 
                   4379: @findex HOST_WORDS_BIG_ENDIAN
                   4380: @item HOST_WORDS_BIG_ENDIAN
                   4381: Defined if the host machine stores words of multi-word values in
                   4382: big-endian order.  (GNU CC does not depend on the host byte ordering
                   4383: within a word.)
                   4384: 
1.1.1.6   root     4385: @findex HOST_FLOAT_WORDS_BIG_ENDIAN
                   4386: @item HOST_FLOAT_WORDS_BIG_ENDIAN
                   4387: Define this macro to be 1 if the host machine stores @code{DFmode},
                   4388: @code{XFmode} or @code{TFmode} floating point numbers in memory with the
                   4389: word containing the sign bit at the lowest address; otherwise, define it
                   4390: to be zero.
                   4391: 
                   4392: This macro need not be defined if the ordering is the same as for
                   4393: multi-word integers.
                   4394: 
1.1       root     4395: @findex HOST_FLOAT_FORMAT
                   4396: @item HOST_FLOAT_FORMAT
                   4397: A numeric code distinguishing the floating point format for the host
                   4398: machine.  See @code{TARGET_FLOAT_FORMAT} in @ref{Storage Layout} for the
                   4399: alternatives and default.
                   4400: 
                   4401: @findex HOST_BITS_PER_CHAR
                   4402: @item HOST_BITS_PER_CHAR
                   4403: A C expression for the number of bits in @code{char} on the host
                   4404: machine.
                   4405: 
                   4406: @findex HOST_BITS_PER_SHORT
                   4407: @item HOST_BITS_PER_SHORT
                   4408: A C expression for the number of bits in @code{short} on the host
                   4409: machine.
                   4410: 
                   4411: @findex HOST_BITS_PER_INT
                   4412: @item HOST_BITS_PER_INT
                   4413: A C expression for the number of bits in @code{int} on the host
                   4414: machine.
                   4415: 
                   4416: @findex HOST_BITS_PER_LONG
                   4417: @item HOST_BITS_PER_LONG
                   4418: A C expression for the number of bits in @code{long} on the host
                   4419: machine.
                   4420: 
                   4421: @findex ONLY_INT_FIELDS
                   4422: @item ONLY_INT_FIELDS
                   4423: Define this macro to indicate that the host compiler only supports
                   4424: @code{int} bit fields, rather than other integral types, including
                   4425: @code{enum}, as do most C compilers.
                   4426: 
                   4427: @findex OBSTACK_CHUNK_SIZE
                   4428: @item OBSTACK_CHUNK_SIZE
                   4429: A C expression for the size of ordinary obstack chunks.
                   4430: If you don't define this, a usually-reasonable default is used.
                   4431: 
                   4432: @findex OBSTACK_CHUNK_ALLOC
                   4433: @item OBSTACK_CHUNK_ALLOC
                   4434: The function used to allocate obstack chunks.
                   4435: If you don't define this, @code{xmalloc} is used.
                   4436: 
                   4437: @findex OBSTACK_CHUNK_FREE
                   4438: @item OBSTACK_CHUNK_FREE
                   4439: The function used to free obstack chunks.
                   4440: If you don't define this, @code{free} is used.
                   4441: 
                   4442: @findex USE_C_ALLOCA
                   4443: @item USE_C_ALLOCA
                   4444: Define this macro to indicate that the compiler is running with the
                   4445: @code{alloca} implemented in C.  This version of @code{alloca} can be
                   4446: found in the file @file{alloca.c}; to use it, you must also alter the
                   4447: @file{Makefile} variable @code{ALLOCA}.  (This is done automatically
                   4448: for the systems on which we know it is needed.)
                   4449: 
                   4450: If you do define this macro, you should probably do it as follows:
                   4451: 
                   4452: @example
                   4453: #ifndef __GNUC__
                   4454: #define USE_C_ALLOCA
                   4455: #else
                   4456: #define alloca __builtin_alloca
                   4457: #endif
                   4458: @end example
                   4459: 
                   4460: @noindent
                   4461: so that when the compiler is compiled with GNU CC it uses the more
                   4462: efficient built-in @code{alloca} function.
                   4463: 
                   4464: @item FUNCTION_CONVERSION_BUG
                   4465: @findex FUNCTION_CONVERSION_BUG
                   4466: Define this macro to indicate that the host compiler does not properly
                   4467: handle converting a function value to a pointer-to-function when it is
                   4468: used in an expression.
1.1.1.2   root     4469: 
                   4470: @findex HAVE_VPRINTF
                   4471: @findex vprintf
                   4472: @item HAVE_VPRINTF
                   4473: Define this if the library function @code{vprintf} is available on your
                   4474: system.
                   4475: 
1.1.1.3   root     4476: @findex MULTIBYTE_CHARS
                   4477: @item MULTIBYTE_CHARS
                   4478: Define this macro to enable support for multibyte characters in the
                   4479: input to GNU CC.  This requires that the host system support the ANSI C
                   4480: library functions for converting multibyte characters to wide
                   4481: characters.
                   4482: 
1.1.1.2   root     4483: @findex HAVE_PUTENV
                   4484: @findex putenv
                   4485: @item HAVE_PUTENV
                   4486: Define this if the library function @code{putenv} is available on your
                   4487: system.
                   4488: 
1.1.1.8   root     4489: @findex POSIX
                   4490: @item POSIX
                   4491: Define this if your system is POSIX.1 compliant.
                   4492: 
1.1.1.2   root     4493: @findex NO_SYS_SIGLIST
                   4494: @item NO_SYS_SIGLIST
                   4495: Define this if your system @emph{does not} provide the variable
                   4496: @code{sys_siglist}.
                   4497: 
1.1.1.7   root     4498: @findex DONT_DECLARE_SYS_SIGLIST
                   4499: @item DONT_DECLARE_SYS_SIGLIST
                   4500: Define this if your system has the variable @code{sys_siglist}, and
                   4501: there is already a declaration of it in the system header files.
                   4502: 
1.1.1.4   root     4503: @findex USE_PROTOTYPES
                   4504: @item USE_PROTOTYPES
                   4505: Define this to be 1 if you know that the host compiler supports
                   4506: prototypes, even if it doesn't define __STDC__, or define
                   4507: it to be 0 if you do not want any prototypes used in compiling
                   4508: GNU CC.  If @samp{USE_PROTOTYPES} is not defined, it will be
                   4509: determined automatically whether your compiler supports
                   4510: prototypes by checking if @samp{__STDC__} is defined.
                   4511: 
                   4512: @findex NO_MD_PROTOTYPES
                   4513: @item NO_MD_PROTOTYPES
                   4514: Define this if you wish suppression of prototypes generated from
                   4515: the machine description file, but to use other prototypes within
                   4516: GNU CC.  If @samp{USE_PROTOTYPES} is defined to be 0, or the
                   4517: host compiler does not support prototypes, this macro has no
                   4518: effect.
                   4519: 
                   4520: @findex MD_CALL_PROTOTYPES
                   4521: @item MD_CALL_PROTOTYPES
                   4522: Define this if you wish to generate prototypes for the
                   4523: @code{gen_call} or @code{gen_call_value} functions generated from
                   4524: the machine description file.  If @samp{USE_PROTOTYPES} is
                   4525: defined to be 0, or the host compiler does not support
                   4526: prototypes, or @samp{NO_MD_PROTOTYPES} is defined, this macro has
                   4527: no effect.  As soon as all of the machine descriptions are
                   4528: modified to have the appropriate number of arguments, this macro
                   4529: will be removed.
                   4530: 
1.1.1.2   root     4531: @vindex sys_siglist
                   4532: Some systems do provide this variable, but with a different name such
                   4533: as @code{_sys_siglist}.  On these systems, you can define
                   4534: @code{sys_siglist} as a macro which expands into the name actually
                   4535: provided.
                   4536: 
                   4537: @findex NO_STAB_H
                   4538: @item NO_STAB_H
                   4539: Define this if your system does not have the include file
                   4540: @file{stab.h}.  If @samp{USG} is defined, @samp{NO_STAB_H} is
                   4541: assumed.
1.1.1.7   root     4542: 
                   4543: @findex PATH_SEPARATOR
                   4544: @item PATH_SEPARATOR
                   4545: Define this macro to be a C character constant representing the
                   4546: character used to separate components in paths.  The default value is.
                   4547: the colon character
                   4548: 
                   4549: @findex DIR_SEPARATOR
                   4550: @item DIR_SEPARATOR
                   4551: If your system uses some character other than slash to separate
                   4552: directory names within a file specification, define this macro to be a C
                   4553: character constant specifying that character.  When GNU CC displays file
                   4554: names, the character you specify will be used.  GNU CC will test for
                   4555: both slash and the character you specify when parsing filenames.
1.1.1.8   root     4556: 
                   4557: @findex OBJECT_SUFFIX
                   4558: @item OBJECT_SUFFIX
                   4559: Define this macro to be a C string representing the suffix for object
                   4560: files on your machine.  If you do not define this macro, GNU CC will use
                   4561: @samp{.o} as the suffix for object files.
                   4562: 
                   4563: @findex EXECUTABLE_SUFFIX
                   4564: @item EXECUTABLE_SUFFIX
                   4565: Define this macro to be a C string representing the suffix for executable
                   4566: files on your machine.  If you do not define this macro, GNU CC will use
                   4567: the null string as the suffix for object files.
                   4568: 
                   4569: @findex COLLECT_EXPORT_LIST
                   4570: @item COLLECT_EXPORT_LIST
                   4571: If defined, @code{collect2} will scan the individual object files
                   4572: specified on its command line and create an export list for the linker.
                   4573: Define this macro for systems like AIX, where the linker discards
                   4574: object files that are not referenced from @code{main} and uses export
                   4575: lists.
1.1       root     4576: @end table
                   4577: 
                   4578: @findex bzero
                   4579: @findex bcmp
                   4580: In addition, configuration files for system V define @code{bcopy},
                   4581: @code{bzero} and @code{bcmp} as aliases.  Some files define @code{alloca}
                   4582: as a macro when compiled with GNU CC, in order to take advantage of the
                   4583: benefit of GNU CC's built-in @code{alloca}.
                   4584: 
1.1.1.8   root     4585: @node Fragments
                   4586: @chapter Makefile Fragments
                   4587: @cindex makefile fragment
                   4588: 
                   4589: When you configure GNU CC using the @file{configure} script
                   4590: (@pxref{Installation}), it will construct the file @file{Makefile} from
                   4591: the template file @file{Makefile.in}.  When it does this, it will
                   4592: incorporate makefile fragment files from the @file{config} directory,
                   4593: named @file{t-@var{target}} and @file{x-@var{host}}.  If these files do
                   4594: not exist, it means nothing needs to be added for a given target or
                   4595: host.
                   4596: 
                   4597: @menu
                   4598: * Target Fragment:: Writing the @file{t-@var{target}} file.
                   4599: * Host Fragment::   Writing the @file{x-@var{host}} file.
                   4600: @end menu
                   4601: 
                   4602: @node Target Fragment
                   4603: @section The Target Makefile Fragment
                   4604: @cindex target makefile fragment
                   4605: @cindex @file{t-@var{target}}
                   4606: 
                   4607: The target makefile fragment, @file{t-@var{target}}, defines special
                   4608: target dependent variables and targets used in the @file{Makefile}:
                   4609: 
                   4610: @table @code
                   4611: @findex LIBGCC1
                   4612: @item LIBGCC1
                   4613: The rule to use to build @file{libgcc1.a}.  
                   4614: If your target does not need to use the functions in @file{libgcc1.a},
                   4615: set this to empty.
                   4616: @xref{Interface}.
                   4617: 
                   4618: @findex CROSS_LIBGCC1
                   4619: @item CROSS_LIBGCC1
                   4620: The rule to use to build @file{libgcc1.a} when building a cross
                   4621: compiler.  If your target does not need to use the functions in
                   4622: @file{libgcc1.a}, set this to empty.  @xref{Cross Runtime}.
                   4623: 
                   4624: @findex LIBGCC2_CFLAGS
                   4625: @item LIBGCC2_CFLAGS
                   4626: Compiler flags to use when compiling @file{libgcc2.c}.
                   4627: 
                   4628: @findex LIB2FUNCS_EXTRA
                   4629: @item LIB2FUNCS_EXTRA
                   4630: A list of source file names to be compiled or assembled and inserted
                   4631: into @file{libgcc.a}.
                   4632: 
                   4633: @findex CRTSTUFF_T_CFLAGS
                   4634: @item CRTSTUFF_T_CFLAGS
                   4635: Special flags used when compiling @file{crtstuff.c}.
                   4636: @xref{Initialization}.
                   4637: 
                   4638: @findex MULTILIB_OPTIONS
                   4639: @item MULTILIB_OPTIONS
                   4640: For some targets, invoking GNU CC in different ways produces objects
                   4641: that can not be linked together.  For example, for some targets GNU CC
                   4642: produces both big and little endian code.  For these targets, you must
                   4643: arrange for multiple versions of @file{libgcc.a} to be compiled, one for
                   4644: each set of incompatible options.  When GNU CC invokes the linker, it
                   4645: arranges to link in the right version of @file{libgcc.a}, based on
                   4646: the command line options used.
                   4647: 
                   4648: The @code{MULTILIB_OPTIONS} macro lists the set of options for which
                   4649: special versions of @file{libgcc.a} must be built.  Write options that
                   4650: are mutually incompatible side by side, separated by a slash.  Write
                   4651: options that may be used together separated by a space.  The build
                   4652: procedure will build all combinations of compatible options.
                   4653: 
                   4654: For example, if you set @code{MULTILIB_OPTIONS} to @samp{m68000/m68020
                   4655: msoft-float}, @file{Makefile} will build special versions of
                   4656: @file{libgcc.a} using the options @samp{-m68000}, @samp{-m68020},
                   4657: @samp{-msoft-float}, @samp{-m68000 -msoft-float}, and @samp{-m68020
                   4658: -msoft-float}.
                   4659: 
                   4660: @findex MULTILIB_DIRNAMES
                   4661: @item MULTILIB_DIRNAMES
                   4662: If @code{MULTILIB_OPTIONS} is used, this variable specifies the
                   4663: directory names that should be used to hold the various libraries.
                   4664: Write one element in @code{MULTILIB_DIRNAMES} for each element in
                   4665: @code{MULTILIB_OPTIONS}.  If @code{MULTILIB_DIRNAMES} is not used, the
                   4666: default value will be @code{MULTILIB_OPTIONS}, with all slashes treated
                   4667: as spaces.
                   4668: 
                   4669: For example, if @code{MULTILIB_OPTIONS} is @samp{m68000/m68020
                   4670: msoft-float}, then the default value of @code{MULTILIB_DIRNAMES} is
                   4671: @samp{m68000 m68020 msoft-float}.  You may specify a different value if
                   4672: you desire a different set of directory names.
                   4673: 
                   4674: @findex MULTILIB_MATCHES
                   4675: @item MULTILIB_MATCHES
                   4676: Sometimes the same option may be written in two different ways.  If an
                   4677: option is listed in @code{MULTILIB_OPTIONS}, GNU CC needs to know about
                   4678: any synonyms.  In that case, set @code{MULTILIB_MATCHES} to a list of
                   4679: items of the form @samp{option=option} to describe all relevant
                   4680: synonyms.  For example, @samp{m68000=mc68000 m68020=mc68020}.
                   4681: @end table
                   4682: 
                   4683: @node Host Fragment
                   4684: @section The Host Makefile Fragment
                   4685: @cindex host makefile fragment
                   4686: @cindex @file{x-@var{host}}
                   4687: 
                   4688: The host makefile fragment, @file{x-@var{host}}, defines special host
                   4689: dependent variables and targets used in the @file{Makefile}:
                   4690: 
                   4691: @table @code
                   4692: @findex CC
                   4693: @item CC
                   4694: The compiler to use when building the first stage.
                   4695: 
                   4696: @findex CLIB
                   4697: @item CLIB
                   4698: Additional host libraries to link with.
                   4699: 
                   4700: @findex OLDCC
                   4701: @item OLDCC
                   4702: The compiler to use when building @file{libgcc1.a} for a native
                   4703: compilation.
                   4704: 
                   4705: @findex OLDAR
                   4706: @item OLDAR
                   4707: The version of @code{ar} to use when building @file{libgcc1.a} for a native
                   4708: compilation.
                   4709: 
                   4710: @findex INSTALL
                   4711: @item INSTALL
                   4712: The install program to use.
                   4713: @end table
1.1       root     4714: 
1.1.1.3   root     4715: @node Index
1.1       root     4716: @unnumbered Index
                   4717: @end ifset
                   4718: 
                   4719: @ifclear INTERNALS
1.1.1.3   root     4720: @node Index
1.1       root     4721: @unnumbered Index
                   4722: @end ifclear
                   4723: 
                   4724: @printindex cp
1.1.1.5   root     4725: @summarycontents
1.1       root     4726: @contents
                   4727: @bye

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.