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