|
|
1.1 root 1: \input texinfo @c -*-texinfo-*-
2: @setfilename gcc.info
3: @c @setfilename usegcc.info
4: @c To produce the full manual, use the "gcc.info" setfilename, and
5: @c make sure the following does NOT begin with '@c' (and the @clear line DOES)
6: @set INTERNALS
7: @c To produce a user-only manual, use the "usegcc.info" setfilename, and
8: @c make sure the following does NOT begin with '@c':
9: @c @clear INTERNALS
10:
11: @ifset INTERNALS
12: @settitle Using and Porting GNU CC
13: @end ifset
14: @ifclear INTERNALS
15: @settitle Using GNU CC
16: @end ifclear
17:
18: @syncodeindex fn cp
19:
20: @ifinfo
21: This file documents the use
22: @ifset INTERNALS
23: and the internals
24: @end ifset
25: of the GNU compiler.
26:
27: Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
28:
29: Permission is granted to make and distribute verbatim copies of
30: this manual provided the copyright notice and this permission notice
31: are preserved on all copies.
32:
33: @ignore
34: Permission is granted to process this file through Tex and print the
35: results, provided the printed document carries copying permission
36: notice identical to this one except for the removal of this paragraph
37: (this paragraph not being relevant to the printed manual).
38:
39: @end ignore
40: Permission is granted to copy and distribute modified versions of this
41: manual under the conditions for verbatim copying, provided also that the
42: section entitled ``GNU General Public License'' is included exactly as
43: in the original, and provided that the entire resulting derived work is
44: distributed under the terms of a permission notice identical to this one.
45:
46: Permission is granted to copy and distribute translations of this manual
47: into another language, under the above conditions for modified versions,
48: except that the section entitled ``GNU General Public License'' and
49: this permission notice may be included in translations approved by the
50: Free Software Foundation instead of in the original English.
51: @end ifinfo
52:
53: @setchapternewpage odd
54:
55: @titlepage
56: @ifset INTERNALS
57: @center @titlefont{Using and Porting GNU CC}
58: @end ifset
59: @ifclear INTERNALS
60: @title Using GNU CC
61: @end ifclear
62: @sp 2
63: @center Richard M. Stallman
64: @sp 3
65: @center last updated 15 February 1992
66: @sp 1
67: @center for version 2.0
68: @center (preliminary draft, which will change)
69: @page
70: @vskip 0pt plus 1filll
71: Copyright @copyright{} 1988, 1989, 1992 Free Software Foundation, Inc.
72:
73: Permission is granted to make and distribute verbatim copies of
74: this manual provided the copyright notice and this permission notice
75: are preserved on all copies.
76:
77: Permission is granted to copy and distribute modified versions of this
78: manual under the conditions for verbatim copying, provided also that the
79: section entitled ``GNU General Public License'' is included exactly as
80: in the original, and provided that the entire resulting derived work is
81: distributed under the terms of a permission notice identical to this one.
82:
83: Permission is granted to copy and distribute translations of this manual
84: into another language, under the above conditions for modified versions,
85: except that the section entitled ``GNU General Public License'' and
86: this permission notice may be included in translations approved by the
87: Free Software Foundation instead of in the original English.
88: @end titlepage
89: @page
90:
91: @ifinfo
92:
93: @node Top, Copying,, (DIR)
94: @ichapter Introduction
95: @cindex introduction
96:
97: @ifset INTERNALS
98: This manual documents how to run, install and port the GNU C compiler, as
99: well as its new features and incompatibilities, and how to report bugs.
100: It corresponds to GNU CC version 2.0.
101: @end ifset
102:
103: @ifclear INTERNALS
104: This manual documents how to run and install the GNU C compiler, as
105: well as its new features and incompatibilities, and how to report bugs.
106: It corresponds to GNU CC version 2.0.
107: @end ifclear
108:
109: @end ifinfo
110: @ifset INTERNALS
111: @menu
112: * Copying:: GNU General Public License says
113: how you can copy and share GNU CC.
114: * Contributors:: People who have contributed to GNU CC.
115: * Boycott:: Protect your freedom---fight ``look and feel''.
116: * Invoking GCC:: Command options supported by @samp{gcc}.
117: * Installation:: How to configure, compile and install GNU CC.
118: * Trouble:: If you have trouble installing GNU CC.
119: * Service:: How to find suppliers of support for GNU CC.
120: * Incompatibilities:: Incompatibilities of GNU CC.
121: * Extensions:: GNU extensions to the C language.
122: * Bugs:: How to report bugs (if you want to get them fixed).
123: * VMS:: Using GNU CC on VMS.
124: * Portability:: Goals of GNU CC's portability features.
125: * Interface:: Function-call interface of GNU CC output.
126: * Passes:: Order of passes, what they do, and what each file is for.
127: * RTL:: The intermediate representation that most passes work on.
128: * Machine Desc:: How to write machine description instruction patterns.
129: * Machine Macros:: How to write the machine description C macros.
130: * Config:: Writing the @file{xm-@var{machine}.h} file.
131: * Index:: Index of concepts and symbol names.
132: @end menu
133: @end ifset
134: @ifclear INTERNALS
135: @menu
136: * Copying:: GNU General Public License says
137: how you can copy and share GNU CC.
138: * Contributors:: People who have contributed to GNU CC.
139: * Boycott:: Protect your freedom---fight ``look and feel''.
140: * Invoking GCC:: Command options supported by @samp{gcc}.
141: * Installation:: How to configure, compile and install GNU CC.
142: * Trouble:: If you have trouble installing GNU CC.
143: * Service:: How to find suppliers of support for GNU CC.
144: * Incompatibilities:: Incompatibilities of GNU CC.
145: * Extensions:: GNU extensions to the C language.
146: * Bugs:: How to report bugs (if you want to get them fixed).
147: * VMS:: Using GNU CC on VMS.
148: * Index:: Index of concepts and symbol names.
149: @end menu
150: @end ifclear
151:
152: @node Copying, Contributors, Top, Top
153: @unnumbered GNU GENERAL PUBLIC LICENSE
154: @center Version 2, June 1991
155:
156: @display
157: Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
158: 675 Mass Ave, Cambridge, MA 02139, USA
159:
160: Everyone is permitted to copy and distribute verbatim copies
161: of this license document, but changing it is not allowed.
162: @end display
163:
164: @unnumberedsec Preamble
165:
166: The licenses for most software are designed to take away your
167: freedom to share and change it. By contrast, the GNU General Public
168: License is intended to guarantee your freedom to share and change free
169: software---to make sure the software is free for all its users. This
170: General Public License applies to most of the Free Software
171: Foundation's software and to any other program whose authors commit to
172: using it. (Some other Free Software Foundation software is covered by
173: the GNU Library General Public License instead.) You can apply it to
174: your programs, too.
175:
176: When we speak of free software, we are referring to freedom, not
177: price. Our General Public Licenses are designed to make sure that you
178: have the freedom to distribute copies of free software (and charge for
179: this service if you wish), that you receive source code or can get it
180: if you want it, that you can change the software or use pieces of it
181: in new free programs; and that you know you can do these things.
182:
183: To protect your rights, we need to make restrictions that forbid
184: anyone to deny you these rights or to ask you to surrender the rights.
185: These restrictions translate to certain responsibilities for you if you
186: distribute copies of the software, or if you modify it.
187:
188: For example, if you distribute copies of such a program, whether
189: gratis or for a fee, you must give the recipients all the rights that
190: you have. You must make sure that they, too, receive or can get the
191: source code. And you must show them these terms so they know their
192: rights.
193:
194: We protect your rights with two steps: (1) copyright the software, and
195: (2) offer you this license which gives you legal permission to copy,
196: distribute and/or modify the software.
197:
198: Also, for each author's protection and ours, we want to make certain
199: that everyone understands that there is no warranty for this free
200: software. If the software is modified by someone else and passed on, we
201: want its recipients to know that what they have is not the original, so
202: that any problems introduced by others will not reflect on the original
203: authors' reputations.
204:
205: Finally, any free program is threatened constantly by software
206: patents. We wish to avoid the danger that redistributors of a free
207: program will individually obtain patent licenses, in effect making the
208: program proprietary. To prevent this, we have made it clear that any
209: patent must be licensed for everyone's free use or not licensed at all.
210:
211: The precise terms and conditions for copying, distribution and
212: modification follow.
213:
214: @iftex
215: @unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
216: @end iftex
217: @ifinfo
218: @center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
219: @end ifinfo
220:
221: @enumerate
222: @item
223: This License applies to any program or other work which contains
224: a notice placed by the copyright holder saying it may be distributed
225: under the terms of this General Public License. The ``Program'', below,
226: refers to any such program or work, and a ``work based on the Program''
227: means either the Program or any derivative work under copyright law:
228: that is to say, a work containing the Program or a portion of it,
229: either verbatim or with modifications and/or translated into another
230: language. (Hereinafter, translation is included without limitation in
231: the term ``modification''.) Each licensee is addressed as ``you''.
232:
233: Activities other than copying, distribution and modification are not
234: covered by this License; they are outside its scope. The act of
235: running the Program is not restricted, and the output from the Program
236: is covered only if its contents constitute a work based on the
237: Program (independent of having been made by running the Program).
238: Whether that is true depends on what the Program does.
239:
240: @item
241: You may copy and distribute verbatim copies of the Program's
242: source code as you receive it, in any medium, provided that you
243: conspicuously and appropriately publish on each copy an appropriate
244: copyright notice and disclaimer of warranty; keep intact all the
245: notices that refer to this License and to the absence of any warranty;
246: and give any other recipients of the Program a copy of this License
247: along with the Program.
248:
249: You may charge a fee for the physical act of transferring a copy, and
250: you may at your option offer warranty protection in exchange for a fee.
251:
252: @item
253: You may modify your copy or copies of the Program or any portion
254: of it, thus forming a work based on the Program, and copy and
255: distribute such modifications or work under the terms of Section 1
256: above, provided that you also meet all of these conditions:
257:
258: @enumerate a
259: @item
260: You must cause the modified files to carry prominent notices
261: stating that you changed the files and the date of any change.
262:
263: @item
264: You must cause any work that you distribute or publish, that in
265: whole or in part contains or is derived from the Program or any
266: part thereof, to be licensed as a whole at no charge to all third
267: parties under the terms of this License.
268:
269: @item
270: If the modified program normally reads commands interactively
271: when run, you must cause it, when started running for such
272: interactive use in the most ordinary way, to print or display an
273: announcement including an appropriate copyright notice and a
274: notice that there is no warranty (or else, saying that you provide
275: a warranty) and that users may redistribute the program under
276: these conditions, and telling the user how to view a copy of this
277: License. (Exception: if the Program itself is interactive but
278: does not normally print such an announcement, your work based on
279: the Program is not required to print an announcement.)
280: @end enumerate
281:
282: These requirements apply to the modified work as a whole. If
283: identifiable sections of that work are not derived from the Program,
284: and can be reasonably considered independent and separate works in
285: themselves, then this License, and its terms, do not apply to those
286: sections when you distribute them as separate works. But when you
287: distribute the same sections as part of a whole which is a work based
288: on the Program, the distribution of the whole must be on the terms of
289: this License, whose permissions for other licensees extend to the
290: entire whole, and thus to each and every part regardless of who wrote it.
291:
292: Thus, it is not the intent of this section to claim rights or contest
293: your rights to work written entirely by you; rather, the intent is to
294: exercise the right to control the distribution of derivative or
295: collective works based on the Program.
296:
297: In addition, mere aggregation of another work not based on the Program
298: with the Program (or with a work based on the Program) on a volume of
299: a storage or distribution medium does not bring the other work under
300: the scope of this License.
301:
302: @item
303: You may copy and distribute the Program (or a work based on it,
304: under Section 2) in object code or executable form under the terms of
305: Sections 1 and 2 above provided that you also do one of the following:
306:
307: @enumerate a
308: @item
309: Accompany it with the complete corresponding machine-readable
310: source code, which must be distributed under the terms of Sections
311: 1 and 2 above on a medium customarily used for software interchange; or,
312:
313: @item
314: Accompany it with a written offer, valid for at least three
315: years, to give any third party, for a charge no more than your
316: cost of physically performing source distribution, a complete
317: machine-readable copy of the corresponding source code, to be
318: distributed under the terms of Sections 1 and 2 above on a medium
319: customarily used for software interchange; or,
320:
321: @item
322: Accompany it with the information you received as to the offer
323: to distribute corresponding source code. (This alternative is
324: allowed only for noncommercial distribution and only if you
325: received the program in object code or executable form with such
326: an offer, in accord with Subsection b above.)
327: @end enumerate
328:
329: The source code for a work means the preferred form of the work for
330: making modifications to it. For an executable work, complete source
331: code means all the source code for all modules it contains, plus any
332: associated interface definition files, plus the scripts used to
333: control compilation and installation of the executable. However, as a
334: special exception, the source code distributed need not include
335: anything that is normally distributed (in either source or binary
336: form) with the major components (compiler, kernel, and so on) of the
337: operating system on which the executable runs, unless that component
338: itself accompanies the executable.
339:
340: If distribution of executable or object code is made by offering
341: access to copy from a designated place, then offering equivalent
342: access to copy the source code from the same place counts as
343: distribution of the source code, even though third parties are not
344: compelled to copy the source along with the object code.
345:
346: @item
347: You may not copy, modify, sublicense, or distribute the Program
348: except as expressly provided under this License. Any attempt
349: otherwise to copy, modify, sublicense or distribute the Program is
350: void, and will automatically terminate your rights under this License.
351: However, parties who have received copies, or rights, from you under
352: this License will not have their licenses terminated so long as such
353: parties remain in full compliance.
354:
355: @item
356: You are not required to accept this License, since you have not
357: signed it. However, nothing else grants you permission to modify or
358: distribute the Program or its derivative works. These actions are
359: prohibited by law if you do not accept this License. Therefore, by
360: modifying or distributing the Program (or any work based on the
361: Program), you indicate your acceptance of this License to do so, and
362: all its terms and conditions for copying, distributing or modifying
363: the Program or works based on it.
364:
365: @item
366: Each time you redistribute the Program (or any work based on the
367: Program), the recipient automatically receives a license from the
368: original licensor to copy, distribute or modify the Program subject to
369: these terms and conditions. You may not impose any further
370: restrictions on the recipients' exercise of the rights granted herein.
371: You are not responsible for enforcing compliance by third parties to
372: this License.
373:
374: @item
375: If, as a consequence of a court judgment or allegation of patent
376: infringement or for any other reason (not limited to patent issues),
377: conditions are imposed on you (whether by court order, agreement or
378: otherwise) that contradict the conditions of this License, they do not
379: excuse you from the conditions of this License. If you cannot
380: distribute so as to satisfy simultaneously your obligations under this
381: License and any other pertinent obligations, then as a consequence you
382: may not distribute the Program at all. For example, if a patent
383: license would not permit royalty-free redistribution of the Program by
384: all those who receive copies directly or indirectly through you, then
385: the only way you could satisfy both it and this License would be to
386: refrain entirely from distribution of the Program.
387:
388: If any portion of this section is held invalid or unenforceable under
389: any particular circumstance, the balance of the section is intended to
390: apply and the section as a whole is intended to apply in other
391: circumstances.
392:
393: It is not the purpose of this section to induce you to infringe any
394: patents or other property right claims or to contest validity of any
395: such claims; this section has the sole purpose of protecting the
396: integrity of the free software distribution system, which is
397: implemented by public license practices. Many people have made
398: generous contributions to the wide range of software distributed
399: through that system in reliance on consistent application of that
400: system; it is up to the author/donor to decide if he or she is willing
401: to distribute software through any other system and a licensee cannot
402: impose that choice.
403:
404: This section is intended to make thoroughly clear what is believed to
405: be a consequence of the rest of this License.
406:
407: @item
408: If the distribution and/or use of the Program is restricted in
409: certain countries either by patents or by copyrighted interfaces, the
410: original copyright holder who places the Program under this License
411: may add an explicit geographical distribution limitation excluding
412: those countries, so that distribution is permitted only in or among
413: countries not thus excluded. In such case, this License incorporates
414: the limitation as if written in the body of this License.
415:
416: @item
417: The Free Software Foundation may publish revised and/or new versions
418: of the General Public License from time to time. Such new versions will
419: be similar in spirit to the present version, but may differ in detail to
420: address new problems or concerns.
421:
422: Each version is given a distinguishing version number. If the Program
423: specifies a version number of this License which applies to it and ``any
424: later version'', you have the option of following the terms and conditions
425: either of that version or of any later version published by the Free
426: Software Foundation. If the Program does not specify a version number of
427: this License, you may choose any version ever published by the Free Software
428: Foundation.
429:
430: @item
431: If you wish to incorporate parts of the Program into other free
432: programs whose distribution conditions are different, write to the author
433: to ask for permission. For software which is copyrighted by the Free
434: Software Foundation, write to the Free Software Foundation; we sometimes
435: make exceptions for this. Our decision will be guided by the two goals
436: of preserving the free status of all derivatives of our free software and
437: of promoting the sharing and reuse of software generally.
438:
439: @iftex
440: @heading NO WARRANTY
441: @end iftex
442: @ifinfo
443: @center NO WARRANTY
444: @end ifinfo
445:
446: @item
447: BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
448: FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
449: OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
450: PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
451: OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
452: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
453: TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
454: PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
455: REPAIR OR CORRECTION.
456:
457: @item
458: IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
459: WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
460: REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
461: INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
462: OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
463: TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
464: YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
465: PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
466: POSSIBILITY OF SUCH DAMAGES.
467: @end enumerate
468:
469: @iftex
470: @heading END OF TERMS AND CONDITIONS
471: @end iftex
472: @ifinfo
473: @center END OF TERMS AND CONDITIONS
474: @end ifinfo
475:
476: @page
477: @unnumberedsec Appendix: How to Apply These Terms to Your New Programs
478:
479: If you develop a new program, and you want it to be of the greatest
480: possible use to the public, the best way to achieve this is to make it
481: free software which everyone can redistribute and change under these terms.
482:
483: To do so, attach the following notices to the program. It is safest
484: to attach them to the start of each source file to most effectively
485: convey the exclusion of warranty; and each file should have at least
486: the ``copyright'' line and a pointer to where the full notice is found.
487:
488: @smallexample
489: @var{one line to give the program's name and a brief idea of what it does.}
490: Copyright (C) 19@var{yy} @var{name of author}
491:
492: This program is free software; you can redistribute it and/or modify
493: it under the terms of the GNU General Public License as published by
494: the Free Software Foundation; either version 2 of the License, or
495: (at your option) any later version.
496:
497: This program is distributed in the hope that it will be useful,
498: but WITHOUT ANY WARRANTY; without even the implied warranty of
499: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
500: GNU General Public License for more details.
501:
502: You should have received a copy of the GNU General Public License
503: along with this program; if not, write to the Free Software
504: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
505: @end smallexample
506:
507: Also add information on how to contact you by electronic and paper mail.
508:
509: If the program is interactive, make it output a short notice like this
510: when it starts in an interactive mode:
511:
512: @smallexample
513: Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
514: Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
515: This is free software, and you are welcome to redistribute it
516: under certain conditions; type `show c' for details.
517: @end smallexample
518:
519: The hypothetical commands @samp{show w} and @samp{show c} should show
520: the appropriate parts of the General Public License. Of course, the
521: commands you use may be called something other than @samp{show w} and
522: @samp{show c}; they could even be mouse-clicks or menu items---whatever
523: suits your program.
524:
525: You should also get your employer (if you work as a programmer) or your
526: school, if any, to sign a ``copyright disclaimer'' for the program, if
527: necessary. Here is a sample; alter the names:
528:
529: @example
530: Yoyodyne, Inc., hereby disclaims all copyright interest in the program
531: `Gnomovision' (which makes passes at compilers) written by James Hacker.
532:
533: @var{signature of Ty Coon}, 1 April 1989
534: Ty Coon, President of Vice
535: @end example
536:
537: This General Public License does not permit incorporating your program into
538: proprietary programs. If your program is a subroutine library, you may
539: consider it more useful to permit linking proprietary applications with the
540: library. If this is what you want to do, use the GNU Library General
541: Public License instead of this License.
542:
543: @node Contributors, Boycott, Copying, Top
544: @unnumbered Contributors to GNU CC
545: @cindex contributors
546:
547: In addition to Richard Stallman, several people have written parts
548: of GNU CC.
549:
550: @itemize @bullet
551: @item
552: The idea of using RTL and some of the optimization ideas came from the
553: U. of Arizona Portable Optimizer, written by Jack Davidson and
554: Christopher Fraser. See ``Register Allocation and Exhaustive Peephole
555: Optimization'', Software Practice and Experience 14 (9), Sept. 1984,
556: 857-866.
557:
558: @item
559: Paul Rubin wrote most of the preprocessor.
560:
561: @item
562: Leonard Tower wrote parts of the parser, RTL generator, and RTL
563: definitions, and of the Vax machine description.
564:
565: @item
566: Ted Lemon wrote parts of the RTL reader and printer.
567:
568: @item
569: Jim Wilson implemented loop strength reduction and some other
570: loop optimizations.
571:
572: @item
573: Nobuyuki Hikichi of Software Research Associates, Tokyo, contributed
574: the support for the Sony NEWS machine.
575:
576: @item
577: Charles LaBrec contributed the support for the Integrated Solutions
578: 68020 system.
579:
580: @item
581: Michael Tiemann of Cygnus Support wrote the front end for C++, as well
582: as the support for inline functions and instruction scheduling. Also
583: the descriptions of the National Semiconductor 32000 series cpu, the
584: SPARC cpu and part of the Motorola 88000 cpu.
585:
586: @item
587: Jan Stein of the Chalmers Computer Society provided support for
588: Genix, as well as part of the 32000 machine description.
589:
590: @item
591: Randy Smith finished the Sun FPA support.
592:
593: @item
594: Robert Brown implemented the support for Encore 32000 systems.
595:
596: @item
597: David Kashtan of SRI adapted GNU CC to the Vomit-Making System (VMS).
598:
599: @item
600: Alex Crain provided changes for the 3b1.
601:
602: @item
603: Greg Satz and Chris Hanson assisted in making GNU CC work on HP-UX for
604: the 9000 series 300.
605:
606: @item
607: William Schelter did most of the work on the Intel 80386 support.
608:
609: @item
610: Christopher Smith did the port for Convex machines.
611:
612: @item
613: Paul Petersen wrote the machine description for the Alliant FX/8.
614:
615: @item
616: Alain Lichnewsky ported GNU CC to the Mips cpu.
617:
618: @item
619: Devon Bowen, Dale Wiles and Kevin Zachmann ported GNU CC to the Tahoe.
620:
621: @item
622: Jonathan Stone wrote the machine description for the Pyramid computer.
623:
624: @item
625: Richard Kenner of New York University wrote the machine descriptions for
626: the AMD 29000, the IBM RT PC, and the IBM RS/6000 as well as the support
627: for instruction attributes. He also made changes to better support RISC
628: processors including changes to common subexpression elimination,
629: strength reduction, function calling sequence handling, and condition
630: code support, in addition to generalizing the code for frame pointer
631: elimination.
632:
633: @item
634: Richard Kenner and Michael Tiemann jointly developed reorg.c, the delay
635: slot scheduler.
636:
637: @item
638: Mike Meissner and Tom Wood of Data General finished the port to the
639: Motorola 88000.
640:
641: @item
642: Masanobu Yuhara of Fujitsu Laboratories implemented the machine
643: description for the Tron architecture (specifically, the Gmicro).
644:
645: @item
646: NeXT, Inc.@: donated the front end that supports the Objective C
647: language.
648: @c We need to be careful to make it clear that "Objective C"
649: @c is the name of a language, not that of a program or product.
650:
651: @item
652: James van Artsdalen wrote the code that makes efficient use of
653: the Intel 80387 register stack.
654:
655: @item
656: Mike Meissner at the Open Software Foundation finished the port to the
657: MIPS cpu, including adding ECOFF debug support.
658:
659: @item
660: Ron Guilmette implemented the protoize and unprotoize tools, the support
661: for Dwarf symbolic debugging information, and much of the support for
662: System V Release 4. He has also worked heavily on the Intel 386 and 860
663: support.
664: @end itemize
665:
666: @node Boycott, Invoking GCC, Contributors, Top
667: @chapter Protect Your Freedom---Fight ``Look And Feel''
668:
669: @quotation
670: @i{This section is a political message from the League for Programming
671: Freedom to the users of GNU CC. It is included here as an expression
672: of support for the League on the part of the Free Software Foundation.}
673: @end quotation
674:
675: Apple, Lotus and Xerox are trying to create a new form of
676: legal monopoly: a copyright on a class of user interfaces. These
677: monopolies would cause serious problems for users and developers of
678: computer software and systems.
679:
680: Until a few years ago, the law seemed clear: no one could restrict
681: others from using a user interface; programmers were free to implement
682: any interface they chose. Imitating interfaces, sometimes with changes,
683: was standard practice in the computer field. The interfaces we know
684: evolved gradually in this way; for example, the Macintosh user interface
685: drew ideas from the Xerox interface, which in turn drew on work done at
686: Stanford and SRI. 1-2-3 imitated VisiCalc, and dBase imitated a
687: database program from JPL.
688:
689: Most computer companies, and nearly all computer users, were happy with
690: this state of affairs. The companies that are suing say it does not
691: offer ``enough incentive'' to develop their products, but they must have
692: considered it ``enough'' when they made their decision to do so. It
693: seems they are not satisfied with the opportunity to continue to compete
694: in the marketplace---not even with a head start.
695:
696: If Xerox, Lotus, and Apple are permitted to make law through
697: the courts, the precedent will hobble the software industry:
698:
699: @itemize @bullet
700: @item
701: Gratuitous incompatibilities will burden users. Imagine if each
702: car manufacturer had to arrange the pedals in a different order.
703:
704: @item
705: Software will become and remain more expensive. Users will be
706: ``locked in'' to proprietary interfaces, for which there is no real
707: competition.
708:
709: @item
710: Large companies have an unfair advantage wherever lawsuits become
711: commonplace. Since they can easily afford to sue, they can intimidate
712: small companies with threats even when they don't really have a case.
713:
714: @item
715: User interface improvements will come slower, since incremental
716: evolution through creative imitation will no longer be permitted.
717:
718: @item
719: Even Apple, etc., will find it harder to make improvements if
720: they can no longer adapt the good ideas that others introduce, for
721: fear of weakening their own legal positions. Some users suggest that
722: this stagnation may already have started.
723:
724: @item
725: If you use GNU software, you might find it of some concern that user
726: interface copyright will make it hard for the Free Software Foundation
727: to develop programs compatible with the interfaces that you already
728: know.
729: @end itemize
730:
731: To protect our freedom from lawsuits like these, a group of programmers
732: and users have formed a new grass-roots political organization, the
733: League for Programming Freedom.
734:
735: The purpose of the League is to oppose new monopolistic practices such
736: as user-interface copyright and software patents; it calls for a return
737: to the legal policies of the recent past, in which these practices were
738: not allowed. The League is not concerned with free software as an
739: issue, and not affiliated with the Free Software Foundation.
740:
741: The League's membership rolls include John McCarthy, inventor of Lisp,
742: Marvin Minsky, founder of the Artificial Intelligence lab, Guy L.
743: Steele, Jr., author of well-known books on Lisp and C, as well as
744: Richard Stallman, the developer of GNU CC. Please join and add your
745: name to the list. Membership dues in the League are $42 per year for
746: programmers, managers and professionals; $10.50 for students; $21 for
747: others.
748:
749: The League needs both activist members and members who only pay their
750: dues.
751:
752: To join, or for more information, phone (617) 492-0023 or write to:
753:
754: @display
755: League for Programming Freedom
756: 1 Kendall Square #143
757: P.O. Box 9171
758: Cambridge, MA 02139
759: @end display
760:
761: You can also send electronic mail to @code{league@@prep.ai.mit.edu}.
762:
763: Here are some suggestions from the League for things you can do to
764: protect your freedom to write programs:
765:
766: @itemize @bullet
767: @item
768: Don't buy from Xerox, Lotus or Apple. Buy from their competitors or
769: from the defendants they are suing.
770:
771: @item
772: Don't develop software to work with the systems made by these companies.
773:
774: @item
775: Port your existing software to competing systems, so that you encourage
776: users to switch.
777:
778: @item
779: Write letters to company presidents to let them know their conduct
780: is unacceptable.
781:
782: @item
783: Tell your friends and colleagues about this issue and how it threatens
784: to ruin the computer industry.
785:
786: @item
787: Above all, don't work for the look-and-feel plaintiffs, and don't
788: accept contracts from them.
789:
790: @item
791: Write to Congress to explain the importance of this issue.
792:
793: @display
794: House Subcommittee on Intellectual Property
795: 2137 Rayburn Bldg
796: Washington, DC 20515
797:
798: Senate Subcommittee on Patents, Trademarks and Copyrights
799: United States Senate
800: Washington, DC 20510
801: @end display
802:
803: (These committees have received lots of mail already; let's give them
804: even more.)
805: @end itemize
806:
807: Express your opinion! You can make a difference.
808:
809: @include invoke.texi
810:
811: @node Installation, Trouble, Invoking GCC, Top
812: @chapter Installing GNU CC
813: @cindex installing GNU CC
814:
815: Here is the procedure for installing GNU CC on a Unix system.
816:
817: @menu
818: * Other Dir:: Compiling in a separate directory (not where the source is).
819: * Sun Install:: See below for installation on the Sun.
820: * 3B1 Install:: See below for installation on the 3B1.
821: * VMS Install:: See below for installation on VMS.
822: * SCO Install:: See below for installation on SCO System V 3.2.
823: (This may also be a start on solving
824: the problems of installation on Xenix.)
825: * Unos Install:: See below for installation on Unos (from CRDS).
826: @end menu
827: @iftex
828: See below for VMS systems, and modified procedures needed on other
829: systems including Sun, 3B1, SCO Unix and Unos. The following section
830: says how to compile in a separate directory on Unix; here we assume you
831: compile in the same directory that contains the source files.
832: @end iftex
833:
834: @enumerate
835: @item
836: If you have built GNU CC previously in the same directory for a
837: different target machine, do @samp{make cleanconfig} to delete all files
838: that might be invalid.
839:
840: @item
841: On a Sequent system, go to the Berkeley universe.
842:
843: @item
844: On a System V release 4 system, make sure @file{/usr/bin} precedes
845: @file{/usr/ucb} in @code{PATH}. The @code{cc} command in
846: @file{/usr/ucb} uses libraries which have bugs.
847:
848: @item
849: Specify the host and target machine configurations. You do this by
850: running the file @file{configure} with appropriate arguments.
851:
852: If you are building a compiler to produce code for the machine it runs
853: on, specify just one machine type. To build a cross-compiler, specify
854: two configurations, one for the @dfn{host machine} (which the compiler
855: runs on), and one for the @dfn{target machine} (which the compiler
856: produces code for). The command looks like this:
857:
858: @example
859: configure --host=sun3-sunos3 --target=sparc-sun-sunos4.1
860: @end example
861:
862: A configuration name may be canonical or it may be more or less
863: abbreviated.
864:
865: A canonical configuration name has three parts, separated by dashes.
866: It looks like this: @samp{@var{cpu}-@var{company}-@var{system}}.
867: (The three parts may themselves contain dashes; @file{configure}
868: can figure out which dashes serve which purpose.) For example,
869: @samp{m68k-sun-sunos4.1} specifies a Sun 3.
870:
871: You can also replace parts of the configuration by nicknames or aliases.
872: For example, @samp{sun3} stands for @samp{m68k-sun}, so
873: @samp{sun3-sunos4.1} is another way to specify a Sun 3. You can also
874: use simply @samp{sun3-sunos}, since the version of Sunos is assumed by
875: default to be version 4. @samp{sun3-bsd} also works, since
876: @file{configure} knows that the only BSD variant on a Sun 3 is Sunos.
877:
878: You can specify a version number after any of the system types, and some
879: of the CPU types. In most cases, the version is irrelevant, and will be
880: ignored. So you might as well specify the version if you know it.
881:
882: Here are the possible CPU types:
883:
884: @quotation
885: @c gmicro, pyramid, alliant, spur and tahoe omitted since they don't work.
886: a29k, arm, c@var{n}, hppa, i386,
887: i860, m68000, m68k, m88k, mips,
888: ns32k, romp, rs6000, sparc, vax.
889: @end quotation
890:
891: Note that the type hppa currently works only with Berkeley systems,
892: not with HP/UX.
893:
894: Here are the recognized company names. As you can see, customary
895: abbreviations are used rather than the longer official names.
896:
897: @quotation
898: alliant, altos, apollo, att,
899: convergent, convex, crds, dec, dg,
900: encore, harris, hp, ibm, mips,
901: motorola, ncr, next, ns, omron,
902: sequent, sgi, sony, sun, tti,
903: unicom.
904: @end quotation
905:
906: The company name is meaningful only to disambiguate when the rest of
907: the information supplied is insufficient. You can omit it, writing
908: just @samp{@var{cpu}-@var{system}}, if it is not needed. For example,
909: @samp{vax-ultrix4.2} is equivalent to @samp{vax-dec-ultrix4.2}.
910:
911: Here is a list of system types:
912:
913: @quotation
914: bsd, sysv, mach, minix, genix,
915: ultrix, vms, sco, esix, isc,
916: aix, sunos, hpux, unos,
917: luna, dgux, newsos, osfrose, osf,
918: dynix, aos, ctix.
919: @end quotation
920:
921: @noindent
922: You can omit the system type; then @file{configure} guesses the
923: operating system from the CPU and company.
924:
925: Often a particular model of machine has a name. Many of these names are
926: recognized as an alias for a CPU/company combination. The alias
927: @samp{sun3}, mentioned above, is an example of this: it stands for
928: @samp{m68k-sun}. Sometimes we accept a company name as a machine name,
929: when the name is popularly used for a particular machine. Here is a
930: table of the known machine names:
931:
932: @quotation
933: 3300, 3b1, 7300, altos3068, altos,
934: apollo68, att-7300, balance,
935: convex-c@var{n}, crds, decstation-3100,
936: decstation-dec, decstation, delta, encore,
937: gmicro, hp7@var{nn}, hp8@var{nn},
938: hp9k2@var{nn}, hp9k3@var{nn}, hp9k7@var{nn},
939: hp9k8@var{nn}, iris4d, iris, isi68,
940: m3230, magnum, merlin, miniframe,
941: mmax, news-3600, news800, news, next,
942: pbd, pc532, pmax, ps2, risc-news,
943: rtpc, sun2, sun386i, sun386, sun3,
944: sun4, symmetry, tower-32, tower.
945: @end quotation
946:
947: If you specify an impossible combination such as @samp{i860-dg-vms},
948: then you may get an error message from @file{configure}, or it may
949: ignore part of the information and do the best it can with the rest.
950: @file{configure} always prints the canonical name for the alternative
951: that it used.
952:
953: On certain systems, you must specify whether you want GNU CC to work with
954: the usual compilation tools or with the GNU compilation tools (including
955: GAS). Use the @samp{--gas} argument when you run @file{configure}, if
956: you want to use the GNU tools. The systems were this makes a difference
957: are @samp{i386-@var{anything}-sysv}, @samp{i860-@var{anything}-bsd},
958: @samp{m68k-hp-hpux}, @samp{m68k-sony-bsd}, @samp{m68k-altos-sysv},
959: @samp{m68000-hp-hpux}, and @samp{m68000-att-sysv}. On any other
960: system, @samp{--gas} has no effect.
961:
962: On certain systems, you must specify whether the machine has a floating
963: point unit. These systems are @samp{m68k-sun-sunos@var{n}} and
964: @samp{m68k-isi-bsd}. On any other system, @samp{--nfp} currently has no
965: effect, though perhaps there are other systems where it could usefully
966: make a difference.
967:
968: If you want to install your own homemade configuration files, you can
969: use @samp{local} as the company name to access them. If you use
970: configuration @samp{@var{cpu}-local}, the entire configuration name
971: is used to form the configuration file names.
972:
973: Thus, if you specify @samp{m68k-local}, then the files used are
974: @file{m68k-local.md}, @file{m68k-local.h}, @file{m68k-local.c},
975: @file{xm-m68k-local.h}, @file{t-m68k-local}, and @file{x-m68k-local}.
976:
977: Here is a list of configurations that have special treatment:
978:
979: @table @samp
980: @ignore
981: @item fx80
982: Alliant FX/8 computer. Note that the standard installed C compiler in
983: Concentrix 5.0 has a bug which prevent it from compiling GNU CC
984: correctly. You can patch the compiler bug as follows:
985:
986: @example
987: cp /bin/pcc ./pcc
988: adb -w ./pcc - << EOF
989: 15f6?w 6610
990: EOF
991: @end example
992:
993: Then you must use the @samp{-ip12} option when compiling GNU CC
994: with the patched compiler, as shown here:
995:
996: @example
997: make CC="./pcc -ip12" CFLAGS=-w
998: @end example
999:
1000: Note also that Alliant's version of DBX does not manage to work with the
1001: output from GNU CC.
1002: @end ignore
1003:
1004: @item m68000-att
1005: AT&T 3b1, a.k.a. 7300 PC. Special procedures are needed to compile GNU
1006: CC with this machine's standard C compiler, due to bugs in that
1007: compiler. @xref{3b1 Install}. You can bootstrap it more easily with
1008: previous versions of GNU CC if you have them.
1009:
1010: @item m68000-hp-bsd
1011: HP 9000 series 200 running BSD. Note that the C compiler that comes
1012: with this system cannot compile GNU CC; contact @code{law@@super.org}
1013: to get binaries of GNU CC for bootstrapping.
1014:
1015: @item m68k-altos
1016: Altos 3068. You must use the GNU assembler, linker and debugger, with
1017: COFF-encapsulation. Also, you must fix a kernel bug. Details in the
1018: file @file{ALTOS-README}.
1019:
1020: @item m68k-hp-hpux
1021: HP 9000 series 200 or 300 running HPUX. GNU CC does not support the
1022: special symbol table used by HP's debugger, but you can debug programs
1023: with GDB if you specify @samp{--gas} to use the GNU tools instead. In
1024: order to use the GNU tools, you must install a library conversion
1025: program called @code{hpxt}.
1026:
1027: @item m68k-sun
1028: Sun 3. We do not provide a configuration file to use the Sun FPA by
1029: default, because programs that establish signal handlers for floating
1030: point traps inherently cannot work with the FPA.
1031:
1032: @item m88k-dgux
1033: Motorola m88k running DG/UX. To build native or cross compilers on
1034: DG/UX, you must first change to the 88open BCS software development
1035: environment. This is done by issuing this command:
1036:
1037: @example
1038: eval `sde-target m88kbcs`
1039: @end example
1040:
1041: @item ns32k-encore
1042: Encore ns32000 system. Encore systems are supported only under BSD.
1043:
1044: @item ns32k-*-genix
1045: National Semiconductor ns32000 system. Genix has bugs in @code{alloca}
1046: and @code{malloc}; you must get the compiled versions of these from GNU
1047: Emacs.
1048:
1049: @item ns32k-utek
1050: UTEK ns32000 system (``merlin''). The C compiler that comes with this
1051: system cannot compile GNU CC; contact @samp{tektronix!reed!mason} to get
1052: binaries of GNU CC for bootstrapping.
1053:
1054: @item rs6000-ibm
1055: IBM PowerStation/6000 machines. Due to the nonstandard debugging
1056: information required for this machine, @samp{-g} is not available in
1057: this configuration.
1058:
1059: @item vax-dec-ultrix
1060: Don't try compiling with Vax C (@code{vcc}). It produces incorrect code
1061: in some cases (for example, when @code{alloca} is used).
1062:
1063: Meanwhile, compiling @file{cp-parse.c} with pcc does not work because of
1064: an internal table size limitation in that compiler. To avoid this
1065: problem, compile just the GNU C compiler first, and use it to recompile
1066: building all the languages that you want to run.
1067: @end table
1068:
1069: Here we spell out what files will be set up by @code{configure}. Normally
1070: you need not be concerned with these files.
1071:
1072: @itemize @bullet
1073: @item
1074: @ifset INTERNALS
1075: A symbolic link named @file{config.h} is made to the top-level config
1076: file for the machine you will run the compiler on (@pxref{Config}).
1077: This file is responsible for defining information about the host
1078: machine. It includes @file{tm.h}.
1079: @end ifset
1080: @ifclear INTERNALS
1081: A symbolic link named @file{config.h} is made to the top-level config
1082: file for the machine you plan to run the compiler on (@pxref{Config,,The
1083: Configuration File, gcc.info, Using and Porting GCC}). This file is
1084: responsible for defining information about the host machine. It
1085: includes @file{tm.h}.
1086: @end ifclear
1087:
1088: The top-level config file is located in the subdirectory @file{config}.
1089: Its name is always @file{xm-@var{something}.h}; usually
1090: @file{xm-@var{machine}.h}, but there are some exceptions.
1091:
1092: If your system does not support symbolic links, you might want to
1093: set up @file{config.h} to contain a @samp{#include} command which
1094: refers to the appropriate file.
1095:
1096: @item
1097: A symbolic link named @file{tconfig.h} is made to the top-level config
1098: file for your target machine. This is used for compiling certain
1099: programs to run on that machine.
1100:
1101: @item
1102: A symbolic link named @file{tm.h} is made to the machine-description
1103: macro file for your target machine. It should be in the subdirectory
1104: @file{config} and its name is often @file{@var{machine}.h}.
1105:
1106: @item
1107: A symbolic link named @file{md} will be made to the machine description
1108: pattern file. It should be in the @file{config} subdirectory and its
1109: name should be @file{@var{machine}.md}; but @var{machine} is often not
1110: the same as the name used in the @file{tm.h} file because the
1111: @file{md} files are more general.
1112:
1113: @item
1114: A symbolic link named @file{aux-output.c} will be made to the output
1115: subroutine file for your machine. It should be in the @file{config}
1116: subdirectory and its name should be @file{@var{machine}.c}.
1117:
1118: @item
1119: The command file @file{configure} also constructs @file{Makefile} by
1120: adding some text to the template file @file{Makefile.in}. The
1121: additional text comes from files in the @file{config} directory, named
1122: @file{t-@var{target}} and @file{h-@var{host}}. If these files do not
1123: exist, it means nothing needs to be added for a given target or host.
1124: @end itemize
1125:
1126: @cindex Bison parser generator
1127: @cindex parser generator, Bison
1128: @item
1129: Make sure the Bison parser generator is installed. (This is
1130: unnecessary if the Bison output files @file{c-parse.c} and
1131: @file{cexp.c} are more recent than @file{c-parse.y} and @file{cexp.y}
1132: and you do not plan to change the @samp{.y} files.)
1133:
1134: Bison versions older than Sept 8, 1988 will produce incorrect output
1135: for @file{c-parse.c}.
1136:
1137: @item
1138: Build the compiler. Just type @samp{make LANGUAGES=c} in the compiler
1139: directory.
1140:
1141: @samp{LANGUAGES=c} specifies that only the C compiler should be
1142: compiled. The makefile normally builds compilers for all the supported
1143: languages; currently, C, C++ and Objective C. However, C is the only
1144: language that is sure to work when you build with other non-GNU C
1145: compilers. In addition, building anything but C at this stage is a
1146: waste of time.
1147:
1148: In general, you can specify the languages to build by typing the
1149: argument @samp{LANGUAGES="@var{list}"}, where @var{list} is one or more
1150: words from the list @samp{c}, @samp{c++}, and @samp{objective-c}.
1151:
1152: Ignore any warnings you may see about ``statement not reached'' in
1153: @file{insn-emit.c}; they are normal. Any other compilation errors may
1154: represent bugs in the port to your machine or operating system, and
1155: should be investigated and reported (@pxref{Bugs}).
1156:
1157: Some commercial compilers fail to compile GNU CC because they have bugs
1158: or limitations. For example, the Microsoft compiler is said to run out
1159: of macro space. Some Ultrix compilers run out of expression space; then
1160: you need to break up the statement where the problem happens.
1161:
1162: @item
1163: If you are using COFF-encapsulation, you must convert @file{libgcc.a} to
1164: a GNU-format library at this point. See the file @file{README-ENCAP}
1165: in the directory containing the GNU binary file utilities, for
1166: directions.
1167:
1168: @cindex stage1
1169: @item
1170: Move the first-stage object files and executables into a subdirectory
1171: with this command:
1172:
1173: @example
1174: make stage1
1175: @end example
1176:
1177: The files are moved into a subdirectory named @file{stage1}.
1178: Once installation is complete, you may wish to delete these files
1179: with @code{rm -r stage1}.
1180:
1181: @item
1182: Recompile the compiler with itself, with this command:
1183:
1184: @example
1185: make CC=stage1/gcc CFLAGS="-g -O -Bstage1/"
1186: @end example
1187:
1188: This is called making the stage 2 compiler.
1189:
1190: The command shown above builds compilers for all the supported
1191: languages. If you don't want them all, you can specify the languages to
1192: build by typing the argument @samp{LANGUAGES="@var{list}"}. @var{list}
1193: should contain one or more words from the list @samp{c}, @samp{c++}, and
1194: @samp{objective-c}, separated by spaces.
1195:
1196: On a 68000 or 68020 system lacking floating point hardware,
1197: unless you have selected a @file{tm.h} file that expects by default
1198: that there is no such hardware, do this instead:
1199:
1200: @example
1201: make CC=stage1/gcc CFLAGS="-g -O -Bstage1/ -msoft-float"
1202: @end example
1203:
1204: @item
1205: If you wish to test the compiler by compiling it with itself one more
1206: time, do this:
1207:
1208: @example
1209: make stage2
1210: make CC=stage2/gcc CFLAGS="-g -O -Bstage2/"
1211: @end example
1212:
1213: @noindent
1214: This is called making the stage 3 compiler. Aside from the @samp{-B}
1215: option, the options should be the same as when you made the stage 2
1216: compiler.
1217:
1218: Then compare the latest object files with the stage 2 object
1219: files---they ought to be identical, unless they contain time stamps. On
1220: systems where object files do not contain time stamps, you can do this
1221: (in Bourne shell):
1222:
1223: @example
1224: for file in *.o; do
1225: cmp $file stage2/$file
1226: done
1227: @end example
1228:
1229: This will mention any object files that differ between stage 2 and stage
1230: 3. Any difference, no matter how innocuous, indicates that the stage 2
1231: compiler has compiled GNU CC incorrectly, and is therefore a potentially
1232: serious bug which you should investigate and report (@pxref{Bugs}).
1233:
1234: On systems that use COFF object files, bytes 5 to 8 will always be
1235: different, since it is a timestamp. On these systems, you can do the
1236: comparison as follows (in Bourne shell):
1237:
1238: @example
1239: for file in *.o; do
1240: tail +10c $file > foo1
1241: tail +10c stage2/$file > foo2
1242: cmp foo1 foo2 || echo $file
1243: done
1244: @end example
1245:
1246: On MIPS machines, you need to use the shell script @file{ecoff-cmp}
1247: to compare two object files if you have built the compiler with
1248: the @samp{-mno-mips-tfile} option. Thus, do this:
1249:
1250: @example
1251: for file in *.o; do
1252: ecoff-cmp $file stage2/$file
1253: done
1254: @end example
1255:
1256: @item
1257: Install the compiler driver, the compiler's passes and run-time support.
1258: You can use the following command:
1259:
1260: @example
1261: make CC=stage2/gcc install
1262: @end example
1263:
1264: @noindent
1265: (Use the same value for @code{CC} that you used when compiling the files
1266: that are being installed.)
1267:
1268: This copies the files @file{cc1}, @file{cpp} and @file{libgcc.a} to files
1269: @file{cc1}, @file{cpp} and @file{libgcc.a} in directory
1270: @file{/usr/local/lib/gcc/@var{target}/@var{version}}, which is where the
1271: compiler driver program looks for them. Here @var{target} is the target
1272: machine type specified when you ran @file{configure}, and @var{version}
1273: is the version number of GNU CC. This naming scheme permits various
1274: versions and/or cross-compilers to coexist.
1275:
1276: It also copies the driver program @file{gcc} into the directory
1277: @file{/usr/local/bin}, so that it appears in typical execution search
1278: paths.@refill
1279:
1280: @cindex @code{alloca} and SunOs
1281: @strong{Warning: there is a bug in @code{alloca} in the Sun library.
1282: To avoid this bug, install the binaries of GNU CC that were compiled
1283: by GNU CC. They use @code{alloca} as a built-in function and never
1284: the one in the library.}
1285:
1286: @item
1287: If you will be using C++ or Objective C, and your operating system does
1288: not handle constructors, then you must build and install the program
1289: @code{collect2}. Do this with the following command:
1290:
1291: @example
1292: make CC="stage2/gcc -O" install-collect2
1293: @end example
1294:
1295: The systems that @strong{do} handle constructors on their own include
1296: system V release 4, and system V release 3 on the Intel 386.
1297:
1298: Berkeley systems that use the ``a.out'' object file format handle
1299: constructors without @code{collect2} if you use the GNU linker. But if
1300: you don't use the GNU linker, then you need @code{collect2} on these
1301: systems.
1302:
1303: @item
1304: Build and install @code{protoize} if you want it. Type
1305:
1306: @example
1307: make CC="stage2/gcc -O" install-proto
1308: @end example
1309:
1310: There is as yet no documentation for @code{protoize}. Sorry.
1311:
1312: @item
1313: Correct errors in the header files on your machine.
1314:
1315: Various system header files often contain constructs which are
1316: incompatible with ANSI C, and they will not work when you compile
1317: programs with GNU CC. This behavior consists of substituting for macro
1318: argument names when they appear inside of character constants. The most
1319: common offender is @file{ioctl.h}.
1320:
1321: You can overcome this problem when you compile by specifying the
1322: @samp{-traditional} option.
1323:
1324: Alternatively, on Sun systems and 4.3BSD at least, you can correct the
1325: include files by running the shell script @file{fixincludes}. This
1326: installs modified, corrected copies of the files @file{ioctl.h},
1327: @file{ttychars.h} and many others, in a special directory where only
1328: GNU CC will normally look for them. This script will work on various
1329: systems because it chooses the files by searching all the system
1330: headers for the problem cases that we know about.
1331:
1332: Use the following command to do this:
1333:
1334: @example
1335: make install-fixincludes
1336: @end example
1337:
1338: @noindent
1339: If you selected a different directory for GNU CC installation when you
1340: installed it, by specifying the Make variable @code{prefix} or
1341: @code{libdir}, specify it the same way in this command.
1342:
1343: Note that some systems are starting to come with ANSI C system header
1344: files. On these systems, don't run @file{fixincludes}; it may not work,
1345: and is certainly not necessary.
1346: @end enumerate
1347:
1348: If you cannot install the compiler's passes and run-time support in
1349: @file{/usr/local/lib}, you can alternatively use the @samp{-B} option to
1350: specify a prefix by which they may be found. The compiler concatenates
1351: the prefix with the names @file{cpp}, @file{cc1} and @file{libgcc.a}.
1352: Thus, you can put the files in a directory @file{/usr/foo/gcc} and
1353: specify @samp{-B/usr/foo/gcc/} when you run GNU CC.
1354:
1355: Also, you can specify an alternative default directory for these files
1356: by setting the Make variable @code{libdir} when you make GNU CC.
1357:
1358: @node Other Dir, Sun Install, Installation, Installation
1359: @section Compilation in a Separate Directory
1360: @cindex other directory, compilation in
1361: @cindex compilation in a separate directory
1362: @cindex separate directory, compilation in
1363:
1364: If you wish to build the object files and executables in a directory
1365: other than the one containing the source files, here is what you must
1366: do differently:
1367:
1368: @enumerate
1369: @item
1370: Make sure you have a version of Make that supports the @code{VPATH}
1371: feature. (GNU Make supports it, as do Make versions on most BSD
1372: systems.)
1373:
1374: @item
1375: Go to that directory before running @file{configure}:
1376:
1377: @example
1378: mkdir gcc-sun3
1379: cd gcc-sun3
1380: @end example
1381:
1382: On systems that do not support symbolic links, this directory must be
1383: on the same file system as the source code directory.
1384:
1385: @item
1386: Specify where to find @file{configure} when you run it:
1387:
1388: @example
1389: ../gcc-2.00/configure @dots{}
1390: @end example
1391:
1392: This also tells @code{configure} where to find the compiler sources;
1393: @code{configure} takes the directory from the file name that was used to
1394: invoke it. But if you want to be sure, you can specify the source
1395: directory with the @samp{--srcdir} option, like this:
1396:
1397: @example
1398: ../gcc-2.00/configure --srcdir=../gcc-2.00 sun3
1399: @end example
1400:
1401: The directory you specify with @samp{--srcdir} need not be the same
1402: as the one that @code{configure} is found in.
1403: @end enumerate
1404:
1405: Now, you can run @code{make} in that directory. You need not repeat the
1406: configuration steps shown above, when ordinary source files change. You
1407: must, however, run @code{configure} again when the configuration files
1408: change, if your system does not support symbolic links.
1409:
1410: @node Sun Install, 3b1 Install, Other Dir, Installation
1411: @section Installing GNU CC on the Sun
1412: @cindex Sun installation
1413: @cindex installing GNU CC on the Sun
1414:
1415: Make sure the environment variable @code{FLOAT_OPTION} is not set when
1416: you compile @file{libgcc.a}. If this option were set to @code{f68881}
1417: when @file{libgcc.a} is compiled, the resulting code would demand to be
1418: linked with a special startup file and would not link properly without
1419: special pains.
1420:
1421: @cindex @code{alloca}, for SunOs
1422: There is a bug in @code{alloca} in certain versions of the Sun library.
1423: To avoid this bug, install the binaries of GNU CC that were compiled by
1424: GNU CC. They use @code{alloca} as a built-in function and never the one
1425: in the library.
1426:
1427: Some versions of the Sun compiler crash when compiling GNU CC. The
1428: problem is a segmentation fault in cpp. This problem seems to be due to
1429: the bulk of data in the environment variables. You may be able to avoid
1430: it by using the following command to compile GNU CC with Sun CC:
1431:
1432: @example
1433: make CC="TERMCAP=x OBJS=x LIBFUNCS=x STAGESTUFF=x cc"
1434: @end example
1435:
1436: @node 3b1 Install, SCO Install, Sun Install, Installation
1437: @section Installing GNU CC on the 3b1
1438: @cindex 3b1 installation
1439: @cindex installing GNU CC on the 3b1
1440:
1441: Installing GNU CC on the 3b1 is difficult if you do not already have
1442: GNU CC running, due to bugs in the installed C compiler. However,
1443: the following procedure might work. We are unable to test it.
1444:
1445: @enumerate
1446: @item
1447: Comment out the @samp{#include "config.h"} line on line 37 of
1448: @file{cccp.c} and do @samp{make cpp}. This makes a preliminary version
1449: of GNU cpp.
1450:
1451: @item
1452: Save the old @file{/lib/cpp} and copy the preliminary GNU cpp to that
1453: file name.
1454:
1455: @item
1456: Undo your change in @file{cccp.c}, or reinstall the original version,
1457: and do @samp{make cpp} again.
1458:
1459: @item
1460: Copy this final version of GNU cpp into @file{/lib/cpp}.
1461:
1462: @findex obstack_free
1463: @item
1464: Replace every occurrence of @code{obstack_free} in the file
1465: @file{tree.c} with @code{_obstack_free}.
1466:
1467: @item
1468: Run @code{make} to get the first-stage GNU CC.
1469:
1470: @item
1471: Reinstall the original version of @file{/lib/cpp}.
1472:
1473: @item
1474: Now you can compile GNU CC with itself and install it in the normal
1475: fashion.
1476: @end enumerate
1477:
1478: @node SCO Install, Unos Install, 3B1 Install, Installation
1479: @section Installing GNU CC on SCO System V 3.2
1480: @cindex SCO installation
1481: @cindex installation on SCO systems
1482:
1483: The compiler that comes with this system does not work properly with
1484: @samp{-O}. Therefore, you should redefine the Make variable
1485: @code{CCLIBFLAGS} not to use @samp{-O}.
1486:
1487: In addition, the compiler produces incorrect output when compiling parts
1488: of GNU CC; the resulting executable @file{cc1} does not work properly
1489: when it is used with @samp{-O}.
1490:
1491: Therefore, what you must do after building the first stage
1492: is use GNU CC to compile itself without optimization. Here is how:
1493:
1494: @example
1495: make -k cc1 CC="./gcc -B./"
1496: @end example
1497:
1498: You can think of this as ``stage 1.1'' of the installation process.
1499: However, using this command has the effect of discarding the faulty
1500: stage 1 executable for @file{cc1} and replacing it with stage 1.1. You
1501: can then proceed with @samp{make stage1} and the rest of installation.
1502:
1503: On Xenix, the same thing is necessary; in addition, you may have to
1504: remove @samp{-g} from the options used with @code{cc}, and you may have
1505: to simplify complicated statements in the sources of GNU CC to get them
1506: to compile.
1507:
1508: @node Unos Install, VMS Install, SCO Install, Installation
1509: @section Installing GNU CC on Unos
1510: @cindex Unos installation
1511: @cindex installing GNU CC on Unos
1512:
1513: Use @samp{configure unos} for building on Unos.
1514:
1515: The Unos assembler is named @code{casm} instead of @code{as}. For some
1516: strange reason linking @file{/bin/as} to @file{/bin/casm} changes the
1517: behavior, and does not work. So, when installing GNU CC, you should
1518: install the following script as @file{as} in the subdirectory where
1519: the passes of GCC are installed:
1520:
1521: @example
1522: #!/bin/sh
1523: casm $*
1524: @end example
1525:
1526: The default Unos library is named @file{libunos.a} instead of
1527: @file{libc.a}. To allow GNU CC to function, either change all
1528: references to @samp{-lc} in @file{gcc.c} to @samp{-lunos} or link
1529: @file{/lib/libc.a} to @file{/lib/libunos.a}.
1530:
1531: @cindex @code{alloca}, for Unos
1532: When compiling GNU CC with the standard compiler, to overcome bugs in
1533: the support of @code{alloca}, do not use @samp{-O} when making stage 2.
1534: Then use the stage 2 compiler with @samp{-O} to make the stage 3
1535: compiler. This compiler will have the same characteristics as the usual
1536: stage 2 compiler on other systems. Use it to make a stage 4 compiler
1537: and compare that with stage 3 to verify proper compilation.
1538:
1539: Unos uses memory segmentation instead of demand paging, so you will need
1540: a lot of memory. 5 Mb is barely enough if no other tasks are running.
1541: If linking @file{cc1} fails, try putting the object files into a library
1542: and linking from that library.
1543:
1544: @node VMS Install,, Unos Install, Installation
1545: @section Installing GNU CC on VMS
1546: @cindex VMS installation
1547: @cindex installing GNU CC on VMS
1548:
1549: The VMS version of GNU CC is distributed in a backup saveset containing
1550: both source code and precompiled binaries.
1551:
1552: To install the @file{gcc} command so you can use the compiler easily, in
1553: the same manner as you use the VMS C compiler, you must install the VMS CLD
1554: file for GNU CC as follows:
1555:
1556: @enumerate
1557: @item
1558: Define the VMS logical names @samp{GNU_CC} and @samp{GNU_CC_INCLUDE}
1559: to point to the directories where the GNU CC executables
1560: (@file{gcc-cpp}, @file{gcc-cc1}, etc.) and the C include files are
1561: kept. This should be done with the commands:@refill
1562:
1563: @smallexample
1564: $ assign /super /system disk:[gcc.] gnu_cc
1565: $ assign /super /system disk:[gcc.include.] gnu_cc_include
1566: @end smallexample
1567:
1568: @noindent
1569: with the appropriate disk and directory names. These commands can be
1570: placed in your system startup file so they will be executed whenever
1571: the machine is rebooted. You may, if you choose, do this via the
1572: @file{GCC_INSTALL.COM} script in the @file{[GCC]} directory.
1573:
1574: @item
1575: Install the @file{GCC} command with the command line:
1576:
1577: @smallexample
1578: $ set command /table=sys$library:dcltables gnu_cc:[000000]gcc
1579: @end smallexample
1580:
1581: @item
1582: To install the help file, do the following:
1583:
1584: @smallexample
1585: $ lib/help sys$library:helplib.hlb gcc.hlp
1586: @end smallexample
1587:
1588: @noindent
1589: Now you can invoke the compiler with a command like @samp{gcc /verbose
1590: file.c}, which is equivalent to the command @samp{gcc -v -c file.c} in
1591: Unix.
1592: @end enumerate
1593:
1594: If you wish to use GNU C++ you must first install GNU CC, and then
1595: perform the following steps:
1596:
1597: @enumerate
1598: @item
1599: Define the VMS logical name @samp{GNU_GXX_INCLUDE} to point to the
1600: directory where the preprocessor will search for the C++ header files.
1601: This can be done with the command:@refill
1602:
1603: @smallexample
1604: $ assign /super /system disk:[gcc.gxx_include.] gnu_gxx_include
1605: @end smallexample
1606:
1607: @noindent
1608: with the appropriate disk and directory name. If you are going to be
1609: using libg++, you should place the libg++ header files in the directory
1610: that this logical name points to.
1611:
1612: @item
1613: Obtain the file @file{gcc-cc1plus.exe}, and place this in the same
1614: directory that @file{gcc-cc1.exe} is kept.
1615:
1616: @item
1617: You will need several library functions which are used to call the
1618: constructors and destructors for global objects. These functions are
1619: part of the libg++ distribution, and you will automatically get them if
1620: you install libg++.
1621:
1622: If you are not planning to install libg++, you will need to obtain the
1623: files @file{gxx-startup-1.mar} and @file{gstart.cc} from the libg++
1624: distribution, compile them, and supply them to the linker whenever you
1625: link a C++ program.
1626:
1627: The GNU C++ compiler can be invoked with a command like @samp{gcc /plus
1628: /verbose file.cc}, which is equivalent to the command @samp{g++ -v -c
1629: file.cc} in Unix.
1630: @end enumerate
1631:
1632: We try to put corresponding binaries and sources on the VMS distribution
1633: tape. But sometimes the binaries will be from an older version that the
1634: sources, because we don't always have time to update them. (Use the
1635: @samp{/version} option to determine the version number of the binaries and
1636: compare it with the source file @file{version.c} to tell whether this is
1637: so.) In this case, you should use the binaries you get to recompile the
1638: sources. If you must recompile, here is how:
1639:
1640: @enumerate
1641: @item
1642: Copy the file @file{vms.h} to @file{tm.h}, @file{xm-vms.h} to
1643: @file{config.h}, @file{vax.md} to @file{md.} and @file{vax.c}
1644: to @file{aux-output.c}. The files to be copied are found in the
1645: subdirectory named @file{config}; they should be copied to the
1646: main directory of GNU CC. If you wish, you may use the command file
1647: @file{config-gcc.com} to perform these steps for you.@refill
1648:
1649: @item
1650: Setup the logical names and command tables as defined above. In
1651: addition, define the VMS logical name @samp{GNU_BISON} to point at the
1652: to the directories where the Bison executable is kept. This should be
1653: done with the command:@refill
1654:
1655: @smallexample
1656: $ assign /super /system disk:[bison.] gnu_bison
1657: @end smallexample
1658:
1659: You may, if you choose, use the @file{INSTALL_BISON.COM} script in the
1660: @file{[BISON]} directory.
1661:
1662: @item
1663: Install the @samp{BISON} command with the command line:@refill
1664:
1665: @smallexample
1666: $ set command /table=sys$library:dcltables gnu_bison:[000000]bison
1667: @end smallexample
1668:
1669: @item
1670: Type @samp{@@make-gcc} to recompile everything (alternatively, you may
1671: submit the file @file{make-gcc.com} to a batch queue). If you wish to
1672: build the GNU C++ compiler as well as the GNU CC compiler, you must
1673: first edit @file{make-gcc.com} and follow the instructions that appear
1674: in the comments.@refill
1675:
1676: @strong{If you are building GNU CC with a previous version of GNU CC,
1677: you also should check to see that you have the newest version of the
1678: assembler}. In particular, GNU CC version 2 treats global constant
1679: variables slightly differently from GNU CC version 1, and GAS version
1680: 1.38.1 does not have the patches required to work with GCC version 2.
1681: If you use GAS 1.38.1, then @code{extern const} variables will not have
1682: the read-only bit set, and the linker will generate warning messages
1683: about mismatched psect attributes for these variables. These warning
1684: messages are merely a nuisance, and can safely be ignored.
1685:
1686: If you are compiling with a version of GNU CC older than 1.33, specify
1687: @samp{/DEFINE=("inline=")} as an option in all the compilations. This
1688: requires editing all the @code{gcc} commands in @file{make-cc1.com}.
1689: (The older versions had problems supporting @code{inline}.) Once you
1690: have a working 1.33 or newer GNU CC, you can change this file back.
1691: @end enumerate
1692:
1693: Under previous versions of GNU CC, the generated code would occasionally
1694: give strange results when linked to the sharable @file{VAXCRTL} library.
1695: Now this should work.
1696:
1697: Even with this version, however, GNU CC itself should not be linked to
1698: the sharable @file{VAXCRTL}. The @code{qsort} routine supplied with
1699: @file{VAXCRTL} has a bug which can cause a compiler crash.
1700:
1701: Similarly, the preprocessor should not be linked to the sharable
1702: @file{VAXCRTL}. The @code{strncat} routine supplied with @file{VAXCRTL}
1703: has a bug which can cause the preprocessor to go into an infinite loop.
1704:
1705: If you attempt to link to the sharable @file{VAXCRTL}, the VMS linker
1706: will strongly resist any effort to force it to use the @code{qsort} and
1707: @code{strncat} routines from @file{gcclib}. Until the bugs in
1708: @file{VAXCRTL} have been fixed, linking any of the compiler components
1709: to the sharable VAXCRTL is not recommended. (These routines can be
1710: bypassed by placing duplicate copies of @code{qsort} and @code{strncat}
1711: in @file{gcclib} under different names, and patching the compiler
1712: sources to use these routines). Both of the bugs in @file{VAXCRTL} are
1713: still present in VMS version 5.4-1, which is the most recent version as
1714: of this writing.
1715:
1716: The executables that are generated by @file{make-cc1.com} and
1717: @file{make-cccp.com} use the nonshared version of @file{VAXCRTL} (and
1718: thus use the @code{qsort} and @code{strncat} routines from
1719: @file{gcclib.olb}).
1720:
1721: @node Trouble, Service, Installation, Top
1722: @chapter Known Causes of Trouble with GNU CC
1723: @cindex bugs, known
1724: @cindex installation trouble
1725: @cindex known causes of trouble
1726:
1727: Here are some of the things that have caused trouble for people installing
1728: or using GNU CC.
1729:
1730: @itemize @bullet
1731: @item
1732: On certain systems, defining certain environment variables such as
1733: @code{CC} can interfere with the functioning of @code{make}.
1734:
1735: @item
1736: Cross compilation can run into trouble for certain machines because
1737: some target machines' assemblers require floating point numbers to be
1738: written as @emph{integer} constants in certain contexts.
1739:
1740: The compiler writes these integer constants by examining the floating
1741: point value as an integer and printing that integer, because this is
1742: simple to write and independent of the details of the floating point
1743: representation. But this does not work if the compiler is running on
1744: a different machine with an incompatible floating point format, or
1745: even a different byte-ordering.
1746:
1747: In addition, correct constant folding of floating point values
1748: requires representing them in the target machine's format.
1749: (The C standard does not quite require this, but in practice
1750: it is the only way to win.)
1751:
1752: @ifset INTERNALS
1753: It is now possible to overcome these problems by defining macros such
1754: as @code{REAL_VALUE_TYPE}. But doing so is a substantial amount of
1755: work for each target machine. @xref{Cross-compilation}.
1756: @end ifset
1757: @ifclear INTERNALS
1758: It is now possible to overcome these problems by defining macros such
1759: as @code{REAL_VALUE_TYPE}. But doing so is a substantial amount of
1760: work for each target machine. @xref{Cross-compilation,,Cross
1761: Compilation and Floating Point Format, gcc.info, Using and Porting GCC}.
1762: @end ifclear
1763:
1764: @cindex promotion of formal parameters
1765: @item
1766: Users often think it is a bug when GNU CC reports an error for code
1767: like this:
1768:
1769: @example
1770: int foo (short);
1771:
1772: int foo (x)
1773: short x;
1774: @{@dots{}@}
1775: @end example
1776:
1777: The error message is correct: this code really is erroneous, because the
1778: old-style non-prototype definition passes subword integers in their
1779: promoted types. In other words, the argument is really an @code{int},
1780: not a @code{short}. The correct prototype is this:
1781:
1782: @example
1783: int foo (int);
1784: @end example
1785:
1786: @cindex conflicting types
1787: @cindex scope of declaration
1788: @item
1789: Users often think it is a bug when GNU CC reports an error for code
1790: like this:
1791:
1792: @example
1793: int foo (struct mumble *);
1794:
1795: struct mumble @{ @dots{} @};
1796:
1797: int foo (struct mumble *x)
1798: @{ @dots{} @}
1799: @end example
1800:
1801: This code really is erroneous, because the scope of @code{struct
1802: mumble} the prototype is limited to the argument list containing it.
1803: It does not refer to the @code{struct mumble} defined with file scope
1804: immediately below---they are two unrelated types with similar names in
1805: different scopes.
1806:
1807: But in the definition of @code{foo}, the file-scope type is used
1808: because that is available to be inherited. Thus, the definition and
1809: the prototype do not match, and you get an error.
1810:
1811: This behavior may seem silly, but it's what the ANSI standard specifies.
1812: It is easy enough for you to make your code work by moving the
1813: definition of @code{struct mumble} above the prototype. It's not worth
1814: being incompatible with ANSI C just to avoid an error for the example
1815: shown above.
1816:
1817: @item
1818: Certain local variables aren't recognized by debuggers when you compile
1819: with optimization.
1820:
1821: This occurs because sometimes GNU CC optimizes the variable out of
1822: existence. There is no way to tell the debugger how to compute the
1823: value such a variable ``would have had'', and it is not clear that would
1824: be desirable anyway. So GNU CC simply does not mention the eliminated
1825: variable when it writes debugging information.
1826:
1827: You have to expect a certain amount of disagreement between the
1828: executable and your source code, when you use optimization.
1829:
1830: @ignore
1831: @cindex @code{vfork}, for the Sun-4
1832: @item
1833: There is a bug in @code{vfork} on the Sun-4 which causes the registers
1834: of the child process to clobber those of the parent. Because of this,
1835: programs that call @code{vfork} are likely to lose when compiled
1836: optimized with GNU CC when the child code alters registers which contain
1837: C variables in the parent. This affects variables which are live in the
1838: parent across the call to @code{vfork}.
1839:
1840: If you encounter this, you can work around the problem by declaring
1841: variables @code{volatile} in the function that calls @code{vfork}, until
1842: the problem goes away, or by not declaring them @code{register} and not
1843: using @samp{-O} for those source files.
1844: @end ignore
1845:
1846: @item
1847: @code{-2147483648} is positive.
1848:
1849: This is because 2147483648 cannot fit in the type @code{int}, so
1850: (following the ANSI C rules) its data type is @code{unsigned long int}.
1851: Negating this value yields 2147483648 again.
1852:
1853: @cindex @code{genflags}, crash on Sun 4
1854: @item
1855: Sometimes on a Sun 4 you may observe a crash in the program
1856: @code{genflags} while building GCC. This is said to be due to a bug in
1857: @code{sh}. You can probably get around it by running @code{genflags}
1858: manually and then retrying the @code{make}.
1859:
1860: @item
1861: On some versions of Ultrix, the system supplied compiler cannot compile
1862: @file{cp-parse.c} because it cannot handle so many cases in a @code{switch}
1863: statement. You can work around this problem by compiling with GNU CC.
1864:
1865: @item
1866: On some BSD systems including some versions of Ultrix, use of profiling
1867: causes static variable destructors (currently used only in C++) not to
1868: be run.
1869:
1870: @item
1871: On the IBM RS/6000, compiling code of the form
1872:
1873: @example
1874: extern int foo;
1875:
1876: @dots{} foo @dots{}
1877:
1878: static int foo;
1879: @end example
1880:
1881: @noindent
1882: will cause the linker to report an undefined symbol @code{foo}.
1883: Although this behavior differs from most other systems, it is not a
1884: bug because redefining an @code{extern} variable as @code{static}
1885: is undefined in ANSI C.
1886: @end itemize
1887:
1888: For additional common problems, see @ref{Incompatibilities}.
1889:
1890: @node Service, Incompatibilities, Trouble, Top
1891: @chapter How To Get Help with GNU CC
1892:
1893: If you need help installing, using or changing GNU CC, there are two
1894: ways to find it:
1895:
1896: @itemize @bullet
1897: @item
1898: Send a message to a suitable network mailing list. First try
1899: @code{bug-gcc@@prep.ai.mit.edu}, and if that brings no response, try
1900: @code{help-gcc@@prep.ai.mit.edu}.
1901:
1902: @item
1903: Look in the service directory for someone who might help you for a fee.
1904: The service directory is found in the file named @file{SERVICE} in the
1905: GNU CC distribution.
1906: @end itemize
1907:
1908: @node Incompatibilities, Extensions, Service, Top
1909: @chapter Incompatibilities of GNU CC
1910: @cindex incompatibilities of GNU CC
1911:
1912: There are several noteworthy incompatibilities between GNU C and most
1913: existing (non-ANSI) versions of C. The @samp{-traditional} option
1914: eliminates most of these incompatibilities, @emph{but not all}, by
1915: telling GNU C to behave like the other C compilers.
1916:
1917: @itemize @bullet
1918: @cindex string constants
1919: @cindex read-only strings
1920: @cindex shared strings
1921: @item
1922: GNU CC normally makes string constants read-only. If several
1923: identical-looking string constants are used, GNU CC stores only one
1924: copy of the string.
1925:
1926: @cindex @code{mktemp}, and constant strings
1927: One consequence is that you cannot call @code{mktemp} with a string
1928: constant argument. The function @code{mktemp} always alters the
1929: string its argument points to.
1930:
1931: @cindex @code{sscanf}, and constant strings
1932: @cindex @code{fscanf}, and constant strings
1933: @cindex @code{scanf}, and constant strings
1934: Another consequence is that @code{sscanf} does not work on some systems
1935: when passed a string constant as its format control string or input.
1936: This is because @code{sscanf} incorrectly tries to write into the string
1937: constant. Likewise @code{fscanf} and @code{scanf}.
1938:
1939: The best solution to these problems is to change the program to use
1940: @code{char}-array variables with initialization strings for these
1941: purposes instead of string constants. But if this is not possible,
1942: you can use the @samp{-fwritable-strings} flag, which directs GNU CC
1943: to handle string constants the same way most C compilers do.
1944: @samp{-traditional} also has this effect, among others.
1945:
1946: @item
1947: GNU CC does not substitute macro arguments when they appear inside of
1948: string constants. For example, the following macro in GNU CC
1949:
1950: @example
1951: #define foo(a) "a"
1952: @end example
1953:
1954: @noindent
1955: will produce output @code{"a"} regardless of what the argument @var{a} is.
1956:
1957: The @samp{-traditional} option directs GNU CC to handle such cases
1958: (among others) in the old-fashioned (non-ANSI) fashion.
1959:
1960: @cindex @code{setjmp} incompatibilities
1961: @cindex @code{longjmp} incompatibilities
1962: @item
1963: When you use @code{setjmp} and @code{longjmp}, the only automatic
1964: variables guaranteed to remain valid are those declared
1965: @code{volatile}. This is a consequence of automatic register
1966: allocation. Consider this function:
1967:
1968: @example
1969: jmp_buf j;
1970:
1971: foo ()
1972: @{
1973: int a, b;
1974:
1975: a = fun1 ();
1976: if (setjmp (j))
1977: return a;
1978:
1979: a = fun2 ();
1980: /* @r{@code{longjmp (j)} may occur in @code{fun3}.} */
1981: return a + fun3 ();
1982: @}
1983: @end example
1984:
1985: Here @code{a} may or may not be restored to its first value when the
1986: @code{longjmp} occurs. If @code{a} is allocated in a register, then
1987: its first value is restored; otherwise, it keeps the last value stored
1988: in it.
1989:
1990: If you use the @samp{-W} option with the @samp{-O} option, you will
1991: get a warning when GNU CC thinks such a problem might be possible.
1992:
1993: The @samp{-traditional} option directs GNU C to put variables in
1994: the stack by default, rather than in registers, in functions that
1995: call @code{setjmp}. This results in the behavior found in
1996: traditional C compilers.
1997:
1998: @cindex external declaration scope
1999: @cindex scope of external declarations
2000: @cindex declaration scope
2001: @item
2002: Declarations of external variables and functions within a block apply
2003: only to the block containing the declaration. In other words, they
2004: have the same scope as any other declaration in the same place.
2005:
2006: In some other C compilers, a @code{extern} declaration affects all the
2007: rest of the file even if it happens within a block.
2008:
2009: The @samp{-traditional} option directs GNU C to treat all @code{extern}
2010: declarations as global, like traditional compilers.
2011:
2012: @item
2013: In traditional C, you can combine @code{long}, etc., with a typedef name,
2014: as shown here:
2015:
2016: @example
2017: typedef int foo;
2018: typedef long foo bar;
2019: @end example
2020:
2021: In ANSI C, this is not allowed: @code{long} and other type modifiers
2022: require an explicit @code{int}. Because this criterion is expressed
2023: by Bison grammar rules rather than C code, the @samp{-traditional}
2024: flag cannot alter it.
2025:
2026: @cindex typedef names as function parameters
2027: @item
2028: PCC allows typedef names to be used as function parameters. The
2029: difficulty described immediately above applies here too.
2030:
2031: @cindex whitespace
2032: @item
2033: PCC allows whitespace in the middle of compound assignment operators
2034: such as @samp{+=}. GNU CC, following the ANSI standard, does not
2035: allow this. The difficulty described immediately above applies here
2036: too.
2037:
2038: @cindex apostrophes
2039: @cindex '
2040: @item
2041: GNU CC will flag unterminated character constants inside of preprocessor
2042: conditionals that fail. Some programs have English comments enclosed in
2043: conditionals that are guaranteed to fail; if these comments contain
2044: apostrophes, GNU CC will probably report an error. For example,
2045: this code would produce an error:
2046:
2047: @example
2048: #if 0
2049: You can't expect this to work.
2050: #endif
2051: @end example
2052:
2053: The best solution to such a problem is to put the text into an actual
2054: C comment delimited by @samp{/*@dots{}*/}. However,
2055: @samp{-traditional} suppresses these error messages.
2056:
2057: @cindex @code{float} as function value type
2058: @item
2059: When compiling functions that return @code{float}, PCC converts it to
2060: a double. GNU CC actually returns a @code{float}. If you are concerned
2061: with PCC compatibility, you should declare your functions to return
2062: @code{double}; you might as well say what you mean.
2063:
2064: @cindex structures
2065: @cindex unions
2066: @item
2067: When compiling functions that return structures or unions, GNU CC
2068: output code normally uses a method different from that used on most
2069: versions of Unix. As a result, code compiled with GNU CC cannot call
2070: a structure-returning function compiled with PCC, and vice versa.
2071:
2072: The method used by GNU CC is as follows: a structure or union which is
2073: 1, 2, 4 or 8 bytes long is returned like a scalar. A structure or union
2074: with any other size is stored into an address supplied by the caller
2075: (usually in a special, fixed register, but on some machines it is passed
2076: on the stack). The machine-description macros @code{STRUCT_VALUE} and
2077: @code{STRUCT_INCOMING_VALUE} tell GNU CC where to pass this address.
2078:
2079: By contrast, PCC on most target machines returns structures and unions
2080: of any size by copying the data into an area of static storage, and then
2081: returning the address of that storage as if it were a pointer value.
2082: The caller must copy the data from that memory area to the place where
2083: the value is wanted. GNU CC does not use this method because it is
2084: slower and nonreentrant.
2085:
2086: On some newer machines, PCC uses a reentrant convention for all
2087: structure and union returning. GNU CC on most of these machines uses a
2088: compatible convention when returning structures and unions in memory,
2089: but still returns small structures and unions in registers.
2090:
2091: You can tell GNU CC to use a compatible convention for all structure and
2092: union returning with the option @samp{-fpcc-struct-return}.
2093: @end itemize
2094:
2095: There are also system-specific incompatibilities.
2096:
2097: @itemize @bullet
2098: @ignore
2099: @c wfs@@nicholas.ma.utexas.edu says that this problem is solved
2100: @c provided alloca always adds 0x60 extra bytes to form a new save area
2101: @c and avoids overlapping the old one. And it seems that GCC
2102: @c already does this. So he thinks this problem is gone.
2103:
2104: @item
2105: @cindex Sparc
2106: The Sparc version of @code{setjmp} interacts badly with unexpected stack
2107: adjustments. With rare exceptions, you cannot use @code{setjmp} in a
2108: function which moves the stack pointer.
2109:
2110: In the current version of GNU CC, there are two ways that the stack
2111: pointer can change value: (1) calls to @code{alloca}, and (2) use of
2112: variable-sized objects. You should avoid both in functions that call
2113: @code{setjmp}.
2114:
2115: The cause of the problem is the way that Sun implemented register
2116: windows. The 96 bytes at addresses @code{%sp} through @code{%sp+95}
2117: correspond to the register window save area. When a register window
2118: must be spilled, its stack pointer is located, and the registers are
2119: dumped starting at that address. Similarly, when a register window must
2120: be restored, its stack pointer is located, and the registers are
2121: restored from that address.
2122:
2123: When @code{setjmp} is called, the current register window's registers
2124: are saved into the register save area, and the address of this save area
2125: is stored into the @code{jmp_buf}. Other subsequent function calls
2126: store newer values of the registers into the same save area; that is ok.
2127: When @code{longjmp} is called, the registers are restored using that
2128: address. (Actually, @emph{all} register windows are restored from all
2129: valid register windows at the time @code{longjmp} is called.)
2130:
2131: This scheme assumes that the stack pointer does not change after the
2132: call to @code{setjmp}. If the pointer changes, @code{longjmp} will
2133: restore using the old stack value, which may obtain garbage.
2134: @end ignore
2135: @cindex Alliant
2136: @item
2137: On the Alliant, the system's own convention for returning structures
2138: and unions is unusual, and is not compatible with GNU CC no matter
2139: what options are used.
2140:
2141: @cindex RT PC
2142: @cindex IBM RT PC
2143: @item
2144: On the IBM RT PC, the MetaWare HighC compiler (hc) uses yet another
2145: convention for structure and union returning. Use
2146: @samp{-mhc-struct-return} to tell GNU CC to use a convention compatible
2147: with it.
2148:
2149: @cindex Vax calling convention
2150: @cindex Ultrix calling convention
2151: @item
2152: On Ultrix, the Fortran compiler expects registers 2 through 5 to be saved
2153: by function calls. However, the C compiler uses conventions compatible
2154: with BSD Unix: registers 2 through 5 may be clobbered by function calls.
2155:
2156: GNU CC uses the same convention as the Ultrix C compiler. You can use
2157: these options to produce code compatible with the Fortran compiler:
2158:
2159: @smallexample
2160: -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5
2161: @end smallexample
2162:
2163: @item
2164: @cindex DBX
2165: DBX rejects some files produced by GNU CC, though it accepts similar
2166: constructs in output from PCC. Until someone can supply a coherent
2167: description of what is valid DBX input and what is not, there is
2168: nothing I can do about these problems. You are on your own.
2169: @end itemize
2170:
2171: @include extend.texi
2172:
2173: @node Bugs, VMS, Extensions, Top
2174: @chapter Reporting Bugs
2175: @cindex bugs
2176: @cindex reporting bugs
2177:
2178: Your bug reports play an essential role in making GNU CC reliable.
2179:
2180: When you encounter a problem, the first thing to do is to see if it is
2181: already known. @xref{Trouble}. Also look in @ref{Incompatibilities}.
2182: If it isn't known, then you should report the problem.
2183:
2184: Reporting a bug may help you by bringing a solution to your problem, or
2185: it may not. (If it does not, look in the service directory; see
2186: @ref{Service}.) In any case, the principal function of a bug report is
2187: to help the entire community by making the next version of GNU CC work
2188: better. Bug reports are your contribution to the maintenance of GNU CC.
2189:
2190: In order for a bug report to serve its purpose, you must include the
2191: information that makes for fixing the bug.
2192:
2193: @menu
2194: * Criteria: Bug Criteria. Have you really found a bug?
2195: * Reporting: Bug Reporting. How to report a bug effectively.
2196: * Non-bugs:: Some things we think are not problems.
2197: * Known: Trouble. Known problems.
2198: * Help: Service. Where to ask for help.
2199: @end menu
2200:
2201: @node Bug Criteria, Bug Reporting, Bugs, Bugs
2202: @section Have You Found a Bug?
2203: @cindex bug criteria
2204:
2205: If you are not sure whether you have found a bug, here are some guidelines:
2206:
2207: @itemize @bullet
2208: @cindex fatal signal
2209: @cindex core dump
2210: @item
2211: If the compiler gets a fatal signal, for any input whatever, that is a
2212: compiler bug. Reliable compilers never crash.
2213:
2214: @cindex invalid assembly code
2215: @cindex assembly code, invalid
2216: @item
2217: If the compiler produces invalid assembly code, for any input whatever
2218: (except an @code{asm} statement), that is a compiler bug, unless the
2219: compiler reports errors (not just warnings) which would ordinarily
2220: prevent the assembler from being run.
2221:
2222: @cindex undefined behavior
2223: @cindex undefined function value
2224: @cindex increment operators
2225: @item
2226: If the compiler produces valid assembly code that does not correctly
2227: execute the input source code, that is a compiler bug.
2228:
2229: However, you must double-check to make sure, because you may have run
2230: into an incompatibility between GNU C and traditional C
2231: (@pxref{Incompatibilities}). These incompatibilities might be considered
2232: bugs, but they are inescapable consequences of valuable features.
2233:
2234: Or you may have a program whose behavior is undefined, which happened
2235: by chance to give the desired results with another C compiler.
2236:
2237: For example, in many nonoptimizing compilers, you can write @samp{x;}
2238: at the end of a function instead of @samp{return x;}, with the same
2239: results. But the value of the function is undefined if @code{return}
2240: is omitted; it is not a bug when GNU CC produces different results.
2241:
2242: Problems often result from expressions with two increment operators,
2243: as in @code{f (*p++, *p++)}. Your previous compiler might have
2244: interpreted that expression the way you intended; GNU CC might
2245: interpret it another way. Neither compiler is wrong. The bug is
2246: in your code.
2247:
2248: After you have localized the error to a single source line, it should
2249: be easy to check for these things. If your program is correct and
2250: well defined, you have found a compiler bug.
2251:
2252: @item
2253: If the compiler produces an error message for valid input, that is a
2254: compiler bug.
2255:
2256: Note that the following is not valid input, and the error message for
2257: it is not a bug:
2258:
2259: @example
2260: int foo (char);
2261:
2262: int
2263: foo (x)
2264: char x;
2265: @{ @dots{} @}
2266: @end example
2267:
2268: @noindent
2269: The prototype says to pass a @code{char}, while the definition says to
2270: pass an @code{int} and treat the value as a @code{char}. This is what
2271: the ANSI standard says, and it makes sense.
2272:
2273: @cindex invalid input
2274: @item
2275: If the compiler does not produce an error message for invalid input,
2276: that is a compiler bug. However, you should note that your idea of
2277: ``invalid input'' might be my idea of ``an extension'' or ``support
2278: for traditional practice''.
2279:
2280: @item
2281: If you are an experienced user of C compilers, your suggestions
2282: for improvement of GNU CC are welcome in any case.
2283: @end itemize
2284:
2285: @node Bug Reporting, Non-bugs, Bug Criteria, Bugs
2286: @section How to Report Bugs
2287: @cindex bug reports
2288: @cindex compiler bugs, reporting
2289:
2290: Send bug reports for GNU C to one of these addresses:
2291:
2292: @example
2293: bug-gcc@@prep.ai.mit.edu
2294: @{ucbvax|mit-eddie|uunet@}!prep.ai.mit.edu!bug-gcc
2295: @end example
2296:
2297: @strong{Do not send bug reports to @samp{help-gcc}, or to the newsgroup
2298: @samp{gnu.gcc.help}.} Most users of GNU CC do not want to receive bug
2299: reports. Those that do, have asked to be on @samp{bug-gcc}.
2300:
2301: The mailing list @samp{bug-gcc} has a newsgroup which serves as a
2302: repeater. The mailing list and the newsgroup carry exactly the same
2303: messages. Often people think of posting bug reports to the newsgroup
2304: instead of mailing them. This appears to work, but it has one problem
2305: which can be crucial: a newsgroup posting does not contain a mail path
2306: back to the sender. Thus, if I need to ask for more information, I
2307: may be unable to reach you. For this reason, it is better to send bug
2308: reports to the mailing list.
2309:
2310: As a last resort, send bug reports on paper to:
2311:
2312: @example
2313: GNU Compiler Bugs
2314: Free Software Foundation
2315: 675 Mass Ave
2316: Cambridge, MA 02139
2317: @end example
2318:
2319: The fundamental principle of reporting bugs usefully is this:
2320: @strong{report all the facts}. If you are not sure whether to state a
2321: fact or leave it out, state it!
2322:
2323: Often people omit facts because they think they know what causes the
2324: problem and they conclude that some details don't matter. Thus, you might
2325: assume that the name of the variable you use in an example does not matter.
2326: Well, probably it doesn't, but one cannot be sure. Perhaps the bug is a
2327: stray memory reference which happens to fetch from the location where that
2328: name is stored in memory; perhaps, if the name were different, the contents
2329: of that location would fool the compiler into doing the right thing despite
2330: the bug. Play it safe and give a specific, complete example. That is the
2331: easiest thing for you to do, and the most helpful.
2332:
2333: Keep in mind that the purpose of a bug report is to enable me to fix
2334: the bug if it is not known. It isn't very important what happens if
2335: the bug is already known. Therefore, always write your bug reports on
2336: the assumption that the bug is not known.
2337:
2338: Sometimes people give a few sketchy facts and ask, ``Does this ring a
2339: bell?'' Those bug reports are useless, and I urge everyone to
2340: @emph{refuse to respond to them} except to chide the sender to report
2341: bugs properly.
2342:
2343: To enable me to fix the bug, you should include all these things:
2344:
2345: @itemize @bullet
2346: @item
2347: The version of GNU CC. You can get this by running it with the
2348: @samp{-v} option.
2349:
2350: Without this, I won't know whether there is any point in looking for
2351: the bug in the current version of GNU CC.
2352:
2353: @item
2354: A complete input file that will reproduce the bug. If the bug is in
2355: the C preprocessor, send me a source file and any header files that it
2356: requires. If the bug is in the compiler proper (@file{cc1}), run your
2357: source file through the C preprocessor by doing @samp{gcc -E
2358: @var{sourcefile} > @var{outfile}}, then include the contents of
2359: @var{outfile} in the bug report. (Any @samp{-I}, @samp{-D} or
2360: @samp{-U} options that you used in actual compilation should also be
2361: used when doing this.)
2362:
2363: A single statement is not enough of an example. In order to compile
2364: it, it must be embedded in a function definition; and the bug might
2365: depend on the details of how this is done.
2366:
2367: Without a real example I can compile, all I can do about your bug
2368: report is wish you luck. It would be futile to try to guess how to
2369: provoke the bug. For example, bugs in register allocation and
2370: reloading frequently depend on every little detail of the function
2371: they happen in.
2372:
2373: @item
2374: The command arguments you gave GNU CC to compile that example and
2375: observe the bug. For example, did you use @samp{-O}? To guarantee
2376: you won't omit something important, list them all.
2377:
2378: If I were to try to guess the arguments, I would probably guess wrong
2379: and then I would not encounter the bug.
2380:
2381: @item
2382: The type of machine you are using, and the operating system name and
2383: version number.
2384:
2385: @item
2386: The operands you gave to the @code{configure} command when you installed
2387: the compiler.
2388:
2389: @item
2390: A description of what behavior you observe that you believe is
2391: incorrect. For example, ``It gets a fatal signal,'' or, ``There is an
2392: incorrect assembler instruction in the output.''
2393:
2394: Of course, if the bug is that the compiler gets a fatal signal, then I
2395: will certainly notice it. But if the bug is incorrect output, I might
2396: not notice unless it is glaringly wrong. I won't study all the
2397: assembler code from a 50-line C program just on the off chance that it
2398: might be wrong.
2399:
2400: Even if the problem you experience is a fatal signal, you should still
2401: say so explicitly. Suppose something strange is going on, such as,
2402: your copy of the compiler is out of synch, or you have encountered a
2403: bug in the C library on your system. (This has happened!) Your copy
2404: might crash and mine would not. If you @i{told} me to expect a crash,
2405: then when mine fails to crash, I would know that the bug was not
2406: happening for me. If you had not told me to expect a crash, then I
2407: would not be able to draw any conclusion from my observations.
2408:
2409: Often the observed symptom is incorrect output when your program is run.
2410: Sad to say, this is not enough information for me unless the program is
2411: short and simple. If you send me a large program, I don't have time to
2412: figure out how it would work if compiled correctly, much less which line
2413: of it was compiled wrong. So you will have to do that. Tell me which
2414: source line it is, and what incorrect result happens when that line is
2415: executed. A person who understands the program can find this as
2416: easily as a bug in the program itself.
2417:
2418: @item
2419: If you send me examples of output from GNU CC, please use @samp{-g}
2420: when you make them. The debugging information includes source line
2421: numbers which are essential for correlating the output with the input.
2422:
2423: @item
2424: If you wish to suggest changes to the GNU CC source, send me context
2425: diffs. If you even discuss something in the GNU CC source, refer to
2426: it by context, not by line number.
2427:
2428: The line numbers in my development sources don't match those in your
2429: sources. Your line numbers would convey no useful information to me.
2430:
2431: @item
2432: Additional information from a debugger might enable me to find
2433: a problem on a machine which I do not have available myself.
2434: However, you need to think when you collect this information if
2435: you want it to have any chance of being useful.
2436:
2437: @cindex backtrace for bug reports
2438: For example, many people send just a backtrace, but that is never
2439: useful by itself. A simple backtrace with arguments conveys little
2440: about GNU CC because the compiler is largely data-driven; the same
2441: functions are called over and over for different RTL insns, doing
2442: different things depending on the details of the insn.
2443:
2444: Most of the arguments listed in the backtrace are useless because they
2445: are pointers to RTL list structure. The numeric values of the
2446: pointers, which the debugger prints in the backtrace, have no
2447: significance whatever; all that matters is the contents of the objects
2448: they point to (and most of the contents are other such pointers).
2449:
2450: In addition, most compiler passes consist of one or more loops that
2451: scan the RTL insn sequence. The most vital piece of information about
2452: such a loop---which insn it has reached---is usually in a local variable,
2453: not in an argument.
2454:
2455: @findex debug_rtx
2456: What you need to provide in addition to a backtrace are the values of
2457: the local variables for several stack frames up. When a local
2458: variable or an argument is an RTX, first print its value and then use
2459: the GDB command @code{pr} to print the RTL expression that it points
2460: to. (If GDB doesn't run on your machine, use your debugger to call
2461: the function @code{debug_rtx} with the RTX as an argument.) In
2462: general, whenever a variable is a pointer, its value is no use
2463: without the data it points to.
2464:
2465: In addition, include a debugging dump from just before the pass
2466: in which the crash happens. Most bugs involve a series of insns,
2467: not just one.
2468: @end itemize
2469:
2470: Here are some things that are not necessary:
2471:
2472: @itemize @bullet
2473: @item
2474: A description of the envelope of the bug.
2475:
2476: Often people who encounter a bug spend a lot of time investigating
2477: which changes to the input file will make the bug go away and which
2478: changes will not affect it.
2479:
2480: This is often time consuming and not very useful, because the way I
2481: will find the bug is by running a single example under the debugger
2482: with breakpoints, not by pure deduction from a series of examples.
2483: I recommend that you save your time for something else.
2484:
2485: Of course, if you can find a simpler example to report @emph{instead}
2486: of the original one, that is a convenience for me. Errors in the
2487: output will be easier to spot, running under the debugger will take
2488: less time, etc. Most GNU CC bugs involve just one function, so the
2489: most straightforward way to simplify an example is to delete all the
2490: function definitions except the one where the bug occurs. Those
2491: earlier in the file may be replaced by external declarations if the
2492: crucial function depends on them. (Exception: inline functions may
2493: affect compilation of functions defined later in the file.)
2494:
2495: However, simplification is not vital; if you don't want to do this,
2496: report the bug anyway and send me the entire test case you used.
2497:
2498: @item
2499: A patch for the bug.
2500:
2501: A patch for the bug does help me if it is a good one. But don't omit
2502: the necessary information, such as the test case, on the assumption that
2503: a patch is all I need. I might see problems with your patch and decide
2504: to fix the problem another way, or I might not understand it at all.
2505:
2506: Sometimes with a program as complicated as GNU CC it is very hard to
2507: construct an example that will make the program follow a certain path
2508: through the code. If you don't send me the example, I won't be able
2509: to construct one, so I won't be able to verify that the bug is fixed.
2510:
2511: And if I can't understand what bug you are trying to fix, or why your
2512: patch should be an improvement, I won't install it. A test case will
2513: help me to understand.
2514:
2515: @item
2516: A guess about what the bug is or what it depends on.
2517:
2518: Such guesses are usually wrong. Even I can't guess right about such
2519: things without first using the debugger to find the facts.
2520: @end itemize
2521:
2522: @node Non-bugs,, Bug Reporting, Bugs
2523: @section Certain Changes We Don't Want to Make
2524:
2525: This section lists changes that people frequently request, but which
2526: we do not make because we think GNU CC is better without them.
2527:
2528: @itemize @bullet
2529: @item
2530: Checking the number and type of arguments to a function which has an
2531: old-fashioned definition and no prototype.
2532:
2533: Such a feature would work only occasionally---only for calls that appear
2534: in the same file as the called function, following the definition. The
2535: only way to check all calls reliably is to add a prototype for the
2536: function. But adding a prototype will eliminate the need for this
2537: feature. So the feature is not worthwhile.
2538:
2539: @item
2540: Warning about using an expression whose type is signed as a shift count.
2541:
2542: Shift count operands are probably signed more often than unsigned.
2543: Warning about this would cause far more annoyance than good.
2544:
2545: @item
2546: Warning about assigning a signed value to an unsigned variable.
2547:
2548: Such assignments must be very common; warning about them would cause
2549: more annoyance than good.
2550:
2551: @item
2552: Making bitfields unsigned by default on particular machines where ``the
2553: ABI standard'' says to do so.
2554:
2555: The ANSI C standard leaves it up to the implementation whether a bitfield
2556: declared plain @code{int} is signed or not. This in effect creates two
2557: alternative dialects of C.
2558:
2559: The GNU C compiler supports both dialects; you can specify the dialect
2560: you want with the option @samp{-fsigned-bitfields} or
2561: @samp{-funsigned-bitfields}. However, this leaves open the question
2562: of which dialect to use by default.
2563:
2564: Currently, the preferred dialect makes plain bitfields signed, because
2565: this is simplest. Since @code{int} is the same as @code{signed int} in
2566: every other context, it is cleanest for them to be the same in bitfields
2567: as well.
2568:
2569: Some computer manufacturers have published Application Binary Interface
2570: standards which specify that plain bitfields should be unsigned. It is
2571: a mistake, however, to say anything about this issue in an ABI. This is
2572: because the handling of plain bitfields distinguishes two dialects of C.
2573: Both dialects are meaningful on every type of machine. Whether a
2574: particular object file was compiled using signed bitfields or unsigned
2575: is of no concern to functions in any other object file, even if they
2576: access the same bitfields in the same data structures.
2577:
2578: A given program is written in one or the other of these two dialects.
2579: The program stands a chance to work on most any machine if it is
2580: compiled with the proper dialect. It is unlikely to work at all if
2581: compiled with the wrong dialect.
2582:
2583: Many users appreciate the GNU C compiler because it provides an
2584: environment that is uniform across machines. These users would be
2585: inconvenienced if the compiler treated plain bitfields differently on
2586: certain machines.
2587:
2588: Occasionally users write programs intended only for a particular machine
2589: type. On these occasions, the users would benefit if the GNU C compiler
2590: were to support by default the same dialect as the other compilers on
2591: that machine. But such applications are rare. And users writing a
2592: program to run on more than one type of machine cannot possibly benefit
2593: from this kind of compatibility.
2594:
2595: This is why GNU CC does and will treat plain bitfields in the same
2596: fashion on all types of machines (by default).
2597:
2598: (Of course, users strongly concerned about portability should indicate
2599: explicitly in each bitfield whether it is signed or not.)
2600:
2601: @item
2602: Undefining @code{__STDC__} when @samp{-ansi} is not used.
2603:
2604: Currently, GNU CC defines @code{__STDC__} as long as you don't use
2605: @samp{-traditional}. This provides good results in practice.
2606:
2607: Programmers normally use conditionals on @code{__STDC__} to ask whether
2608: it is safe to use certain features of ANSI C, such as function
2609: prototypes or ANSI token concatenation. Since plain @samp{gcc} supports
2610: all the features of ANSI C, the correct answer to these questions is
2611: ``yes''.
2612:
2613: Some users try to use @code{__STDC__} to check for the availability of
2614: certain library facilities. This is actually incorrect usage in an ANSI
2615: C program, because the ANSI C standard says that a conforming
2616: freestanding implementation should define @code{__STDC__} even though it
2617: does not have the library facilities. @samp{gcc -ansi -pedantic} is a
2618: conforming freestanding implementation, and it is therefore required to
2619: define @code{__STDC__}, even though it does not come with an ANSI C
2620: library.
2621:
2622: Sometimes people say that defining @code{__STDC__} in a compiler that
2623: does not completely conform to the ANSI C standard somehow violates the
2624: standard. This is illogical. The standard is a standard for compilers
2625: that are supposed to conform. It says nothing about what any other
2626: compilers should do. Whatever the ANSI C standard says is relevant to
2627: the design of plain @samp{gcc} without @samp{-ansi} only for pragmatic
2628: reasons, not as a requirement.
2629:
2630: @item
2631: Undefining @code{__STDC__} in C++.
2632:
2633: Programs written to compile with C++-to-C translators get the
2634: value of @code{__STDC__} that goes with the C compiler that is
2635: subsequently used. These programs must test @code{__STDC__}
2636: to determine what kind of C preprocessor that compiler uses:
2637: whether they should concatenate tokens in the ANSI C fashion
2638: or in the traditional fashion.
2639:
2640: These programs work properly with GNU C++ if @code{__STDC__} is defined.
2641: They would not work otherwise.
2642:
2643: In addition, many header files are written to provide prototypes in ANSI
2644: C but not in traditional C. Many of these header files can work without
2645: change in C++ provided @code{__STDC__} is defined. If @code{__STDC__}
2646: is not defined, they will all fail, and will all need to be changed to
2647: test explicitly for C++ as well.
2648: @end itemize
2649:
2650: @ifset INTERNALS
2651: @node VMS, Portability, Bugs, Top
2652: @chapter Using GNU CC on VMS
2653: @end ifset
2654: @ifclear INTERNALS
2655: @node VMS, Index, Bugs, Top
2656: @chapter Using GNU CC on VMS
2657: @end ifclear
2658:
2659: @menu
2660: * Include Files and VMS:: Where the preprocessor looks for the include files.
2661: * Global Declarations:: How to do globaldef, globalref and globalvalue with
2662: GNU CC.
2663: * VMS Misc:: Misc information.
2664: @end menu
2665:
2666: @node Include Files and VMS, Global Declarations, VMS, VMS
2667: @section Include Files and VMS
2668:
2669: @cindex include files and VMS
2670: @cindex VMS and include files
2671: @cindex header files and VMS
2672: Due to the differences between the filesystems of Unix and VMS, GNU CC
2673: attempts to translate file names in @samp{#include} into names that VMS
2674: will understand. The basic strategy is to prepend a prefix to the
2675: specification of the include file, convert the whole filename to a VMS
2676: filename, and then try to open the file. GNU CC tries various prefixes
2677: one by one until one of them succeeds:
2678:
2679: @enumerate
2680: @item
2681: The first prefix is the @samp{GNU_CC_INCLUDE:} logical name: this is
2682: where GNU C header files are traditionally stored. If you wish to store
2683: header files in non-standard locations, then you can assign the logical
2684: @samp{GNU_CC_INCLUDE} to be a search list, where each element of the
2685: list is suitable for use with a rooted logical.
2686:
2687: @item
2688: The next prefix tried is @samp{SYS$SYSROOT:[SYSLIB.]}. This is where
2689: VAX-C header files are traditionally stored.
2690:
2691: @item
2692: If the include file specification by itself is a valid VMS filename, the
2693: preprocessor then uses this name with no prefix in an attempt to open
2694: the include file.
2695:
2696: @item
2697: If the file specification is not a valid VMS filename (i.e. does not
2698: contain a device or a directory specifier, and contains a @samp{/}
2699: character), the preprocessor tries to convert it from Unix syntax to
2700: VMS syntax.
2701:
2702: Conversion works like this: the first directory name becomes a device,
2703: and the rest of the directories are converted into VMS-format directory
2704: names. For example, @file{X11/foobar.h} is translated to
2705: @file{X11:[000000]foobar.h} or @file{X11:foobar.h}, whichever one can be
2706: opened. This strategy allows you to assign a logical name to point to
2707: the actual location of the header files.
2708:
2709: @item
2710: If none of these strategies succeeds, the @samp{#include} fails.
2711: @end enumerate
2712:
2713: Include directives of the form:
2714:
2715: @example
2716: #include foobar
2717: @end example
2718:
2719: @noindent
2720: are a common source of incompatibility between VAX-C and GNU CC. VAX-C
2721: treats this much like a standard @code{#include <foobar.h>} directive.
2722: That is incompatible with the ANSI C behavior implemented by GNU CC: to
2723: expand the name @code{foobar} as a macro. Macro expansion should
2724: eventually yield one of the two standard formats for @code{#include}:
2725:
2726: @example
2727: #include "@var{file}"
2728: #include <@var{file}>
2729: @end example
2730:
2731: If you have this problem, the best solution is to modify the source to
2732: convert the @code{#include} directives to one of the two standard forms.
2733: That will work with either compiler. If you want a quick and dirty fix,
2734: define the file names as macros with the proper expansion, like this:
2735:
2736: @example
2737: #define stdio <stdio.h>
2738: @end example
2739:
2740: @noindent
2741: This will work, as long as the name doesn't conflict with anything else
2742: in the program.
2743:
2744: Another source of incompatibility is that VAX-C assumes that:
2745:
2746: @example
2747: #include "foobar"
2748: @end example
2749:
2750: @noindent
2751: is actually asking for the file @file{foobar.h}. GNU CC does not
2752: make this assumption, and instead takes what you ask for literally;
2753: it tries to read the file @file{foobar}. The best way to avoid this
2754: problem is to always specify the desired file extension in your include
2755: directives.
2756:
2757: GNU CC for VMS is distributed with a set of include files that is
2758: sufficient to compile most general purpose programs. Even though the
2759: GNU CC distribution does not contain header files to define constants
2760: and structures for some VMS system-specific functions, there is no
2761: reason why you cannot use GNU CC with any of these functions. You first
2762: may have to generate or create header files, either by using the public
2763: domain utility @code{UNSDL} (which can be found on a DECUS tape), or by
2764: extracting the relevant modules from one of the system macro libraries,
2765: and using an editor to construct a C header file.
2766:
2767: @node Global Declarations, VMS Misc, Include Files and VMS, VMS
2768: @section Global Declarations and VMS
2769:
2770: @findex GLOBALREF
2771: @findex GLOBALDEF
2772: @findex GLOBALVALUEDEF
2773: @findex GLOBALVALUEREF
2774: GNU CC does not provide the @code{globalref}, @code{globaldef} and
2775: @code{globalvalue} keywords of VAX-C. You can get the same effect with
2776: an obscure feature of GAS, the GNU assembler. (This requires GAS
2777: version 1.39 or later.) The following macros allow you to use this
2778: feature in a fairly natural way:
2779:
2780: @smallexample
2781: #ifdef __GNUC__
2782: #define GLOBALREF(NAME) \
2783: NAME asm("_$$PsectAttributes_GLOBALSYMBOL$$" #NAME )
2784: #define GLOBALDEF(NAME,VALUE) \
2785: NAME asm("_$$PsectAttributes_GLOBALSYMBOL$$" #NAME ) = VALUE
2786: #define GLOBALVALUEREF(NAME) \
2787: const NAME [1] asm("_$$PsectAttributes_GLOBALVALUE$$" #NAME )
2788: #define GLOBALVALUEDEF(NAME,VALUE) \
2789: const NAME [1] asm("_$$PsectAttributes_GLOBALVALUE$$" #NAME ) = @{VALUE@}
2790: #else
2791: #define GLOBALREF(NAME) globalref NAME
2792: #define GLOBALDEF(NAME,VALUE) globaldef NAME = VALUE
2793: #define GLOBALVALUEDEF(NAME,VALUE) globalvalue NAME = VALUE
2794: #define GLOBALVALUEREF(NAME) globalvalue NAME
2795: #endif
2796: @end smallexample
2797:
2798: @noindent
2799: (The @code{_$$PsectAttributes_GLOBALSYMBOL} prefix at the start of the
2800: name is removed by the assembler, after it has modified the attributes
2801: of the symbol). These macros are provided in the VMS binaries
2802: distribution in a header file @file{GNU_HACKS.H}. An example of the
2803: usage is:
2804:
2805: @example
2806: int GLOBALREF (ijk);
2807: int GLOBALDEF (jkl, 0);
2808: @end example
2809:
2810: The macros @code{GLOBALREF} and @code{GLOBALDEF} cannot be used
2811: straightforwardly for arrays, since there is no way to insert the array
2812: dimension into the declaration at the right place. However, you can
2813: declare an array with these macros if you first define a typedef for the
2814: array type, like this:
2815:
2816: @example
2817: typedef int intvector[10];
2818: intvector GLOBALREF (foo);
2819: @end example
2820:
2821: Array and structure initializers will also break the macros; you can
2822: define the initializer to be a macro of its own, or you can expand the
2823: @code{GLOBALDEF} macro by hand. You may find a case where you wish to
2824: use the @code{GLOBALDEF} macro with a large array, but you are not
2825: interested in explicitly initializing each element of the array. In
2826: such cases you can use an initializer like: @code{@{0,@}}, which will
2827: initialize the entire array to @code{0}.
2828:
2829: A shortcoming of this implementation is that a variable declared with
2830: @code{GLOBALVALUEREF} or @code{GLOBALVALUEDEF} is always an array. For
2831: example, the declaration:
2832:
2833: @example
2834: int GLOBALVALUEREF(ijk);
2835: @end example
2836:
2837: @noindent
2838: declares the variable @code{ijk} as an array of type @code{int [1]}.
2839: This is done because a globalvalue is actually a constant; its ``value''
2840: is what the linker would normally consider an address. That is not how
2841: an integer value works in C, but it is how an array works. So treating
2842: the symbol as an array name gives consistent results---with the
2843: exception that the value seems to have the wrong type. @strong{Don't
2844: try to access an element of the array.} It doesn't have any elements.
2845: The array ``address'' may not be the address of actual storage.
2846:
2847: The fact that the symbol is an array may lead to warnings where the
2848: variable is used. Insert type casts to avoid the warnings. Here is an
2849: example; it takes advantage of the ANSI C feature allowing macros that
2850: expand to use the same name as the macro itself.
2851:
2852: @example
2853: int GLOBALVALUEREF (ss$_normal);
2854: int GLOBALVALUEDEF (xyzzy,123);
2855: #ifdef __GNUC__
2856: #define ss$_normal ((int) ss$_normal)
2857: #define xyzzy ((int) xyzzy)
2858: #endif
2859: @end example
2860:
2861: Don't use @code{globaldef} or @code{globalref} with a variable whose
2862: type is an enumeration type; this is not implemented. Instead, make the
2863: variable an integer, and use a @code{globalvaluedef} for each of the
2864: enumeration values. An example of this would be:
2865:
2866: @example
2867: #ifdef __GNUC__
2868: int GLOBALDEF (color, 0);
2869: int GLOBALVALUEDEF (RED, 0);
2870: int GLOBALVALUEDEF (BLUE, 1);
2871: int GLOBALVALUEDEF (GREEN, 3);
2872: #else
2873: enum globaldef color @{RED, BLUE, GREEN = 3@};
2874: #endif
2875: @end example
2876:
2877: @node VMS Misc, , Global Declarations, VMS
2878: @section Other VMS Issues
2879:
2880: @cindex exit status and VMS
2881: @cindex return value of @code{main}
2882: @cindex @code{main} and the exit status
2883: GNU CC automatically arranges for @code{main} to return 1 by default if
2884: you fail to specify an explicit return value. This will be interpreted
2885: by VMS as a status code indicating a normal successful completion.
2886: Version 1 of GNU CC did not provide this default.
2887:
2888: GNU CC on VMS works only with the GNU assembler, GAS. You need version
2889: 1.37 or later of GAS in order to produce value debugging information for
2890: the VMS debugger. Use the ordinary VMS linker with the object files
2891: produced by GAS.
2892:
2893: @cindex shared VMS run time system
2894: @cindex @file{VAXCRTL}
2895: Under previous versions of GNU CC, the generated code would occasionally
2896: give strange results when linked to the sharable @file{VAXCRTL} library.
2897: Now this should work.
2898:
2899: A caveat for use of @code{const} global variables: the @code{const}
2900: modifier must be specified in every external declaration of the variable
2901: in all of the source files that use that variable. Otherwise the linker
2902: will issue warnings about conflicting attributes for the variable. Your
2903: program will still work despite the warnings, but the variable will be
2904: placed in writable storage.
2905:
2906: @cindex name augmentation
2907: @cindex case sensitivity and VMS
2908: @cindex VMS and case sensitivity
2909: The VMS linker does not distinguish between upper and lower case letters
2910: in function and variable names. However, usual practice in C is to
2911: distinguish case. Normally GNU CC (by means of the assembler GAS)
2912: implements usual C behavior by augmenting each name that is not all
2913: lower-case. A name is augmented by truncating it to at most 23
2914: characters and then adding more characters at the end which encode the
2915: case pattern the rest.
2916:
2917: Name augmentation yields bad results for programs that use precompiled
2918: libraries (such as Xlib) which were generated by another compiler. You
2919: can use the compiler option @samp{/NOCASE_HACK} to inhibit augmentation;
2920: it makes external C functions and variables case-independent as is usual
2921: on VMS. Alternatively, you could write all references to the functions
2922: and variables in such libraries using lower case; this will work on VMS,
2923: but is not portable to other systems.
2924:
2925: Function and variable names are handled somewhat differently with GNU
2926: C++. The GNU C++ compiler performs @dfn{name mangling} on function
2927: names, which means that it adds information to the function name to
2928: describe the data types of the arguments that the function takes. One
2929: result of this is that the name of a function can become very long.
2930: Since the VMS linker only recognizes the first 31 characters in a name,
2931: special action is taken to ensure that each function and variable has a
2932: unique name that can be represented in 31 characters.
2933:
2934: If the name (plus a name augmentation, if required) is less than 32
2935: characters in length, then no special action is performed. If the name
2936: is longer than 31 characters, the assembler (GAS) will generate a
2937: hash string based upon the function name, truncate the function name to
2938: 23 characters, and append the hash string to the truncated name. If the
2939: @samp{/VERBOSE} compiler option is used, the assembler will print both
2940: the full and truncated names of each symbol that is truncated.
2941:
2942: The @samp{/NOCASE_HACK} compiler option should not be used when you are
2943: compiling programs that use libg++. libg++ has several instances of
2944: objects (i.e. @code{Filebuf} and @code{filebuf}) which become
2945: indistinguishable in a case-insensitive environment. This leads to
2946: cases where you need to inhibit augmentation selectively (if you were
2947: using libg++ and Xlib in the same program, for example). There is no
2948: special feature for doing this, but you can get the result by defining a
2949: macro for each mixed case symbol for which you wish to inhibit
2950: augmentation. The macro should expand into the lower case equivalent of
2951: itself. For example:
2952:
2953: @example
2954: #define StuDlyCapS studlycaps
2955: @end example
2956:
2957: These macro definitions can be placed in a header file to minimize the
2958: number of changes to your source code.
2959:
2960: @ifset INTERNALS
2961: @node Portability, Interface, VMS, Top
2962: @chapter GNU CC and Portability
2963: @cindex portability
2964: @cindex GNU CC and portability
2965:
2966: The main goal of GNU CC was to make a good, fast compiler for machines in
2967: the class that the GNU system aims to run on: 32-bit machines that address
2968: 8-bit bytes and have several general registers. Elegance, theoretical
2969: power and simplicity are only secondary.
2970:
2971: GNU CC gets most of the information about the target machine from a machine
2972: description which gives an algebraic formula for each of the machine's
2973: instructions. This is a very clean way to describe the target. But when
2974: the compiler needs information that is difficult to express in this
2975: fashion, I have not hesitated to define an ad-hoc parameter to the machine
2976: description. The purpose of portability is to reduce the total work needed
2977: on the compiler; it was not of interest for its own sake.
2978:
2979: @cindex endianness
2980: @cindex autoincrement addressing, availability
2981: @findex abort
2982: GNU CC does not contain machine dependent code, but it does contain code
2983: that depends on machine parameters such as endianness (whether the most
2984: significant byte has the highest or lowest address of the bytes in a word)
2985: and the availability of autoincrement addressing. In the RTL-generation
2986: pass, it is often necessary to have multiple strategies for generating code
2987: for a particular kind of syntax tree, strategies that are usable for different
2988: combinations of parameters. Often I have not tried to address all possible
2989: cases, but only the common ones or only the ones that I have encountered.
2990: As a result, a new target may require additional strategies. You will know
2991: if this happens because the compiler will call @code{abort}. Fortunately,
2992: the new strategies can be added in a machine-independent fashion, and will
2993: affect only the target machines that need them.
2994: @end ifset
2995:
2996: @ifset INTERNALS
2997: @node Interface, Passes, Portability, Top
2998: @chapter Interfacing to GNU CC Output
2999: @cindex interfacing to GNU CC output
3000: @cindex run-time conventions
3001: @cindex function call conventions
3002: @cindex conventions, run-time
3003:
3004: GNU CC is normally configured to use the same function calling convention
3005: normally in use on the target system. This is done with the
3006: machine-description macros described (@pxref{Machine Macros}).
3007:
3008: @cindex unions, returning
3009: @cindex structures, returning
3010: @cindex returning structures and unions
3011: However, returning of structure and union values is done differently on
3012: some target machines. As a result, functions compiled with PCC
3013: returning such types cannot be called from code compiled with GNU CC,
3014: and vice versa. This does not cause trouble often because few Unix
3015: library routines return structures or unions.
3016:
3017: GNU CC code returns structures and unions that are 1, 2, 4 or 8 bytes
3018: long in the same registers used for @code{int} or @code{double} return
3019: values. (GNU CC typically allocates variables of such types in
3020: registers also.) Structures and unions of other sizes are returned by
3021: storing them into an address passed by the caller (usually in a
3022: register). The machine-description macros @code{STRUCT_VALUE} and
3023: @code{STRUCT_INCOMING_VALUE} tell GNU CC where to pass this address.
3024:
3025: By contrast, PCC on most target machines returns structures and unions
3026: of any size by copying the data into an area of static storage, and then
3027: returning the address of that storage as if it were a pointer value.
3028: The caller must copy the data from that memory area to the place where
3029: the value is wanted. This is slower than the method used by GNU CC, and
3030: fails to be reentrant.
3031:
3032: On some target machines, such as RISC machines and the 80386, the
3033: standard system convention is to pass to the subroutine the address of
3034: where to return the value. On these machines, GNU CC has been
3035: configured to be compatible with the standard compiler, when this method
3036: is used. It may not be compatible for structures of 1, 2, 4 or 8 bytes.
3037:
3038: @cindex argument passing
3039: @cindex passing arguments
3040: GNU CC uses the system's standard convention for passing arguments. On
3041: some machines, the first few arguments are passed in registers; in
3042: others, all are passed on the stack. It would be possible to use
3043: registers for argument passing on any machine, and this would probably
3044: result in a significant speedup. But the result would be complete
3045: incompatibility with code that follows the standard convention. So this
3046: change is practical only if you are switching to GNU CC as the sole C
3047: compiler for the system. We may implement register argument passing on
3048: certain machines once we have a complete GNU system so that we can
3049: compile the libraries with GNU CC.
3050:
3051: On some machines (particularly the Sparc), certain types of arguments
3052: are passed ``by invisible reference''. This means that the value is
3053: stored in memory, and the address of the memory location is passed to
3054: the subroutine.
3055:
3056: @cindex @code{longjmp} and automatic variables
3057: If you use @code{longjmp}, beware of automatic variables. ANSI C says that
3058: automatic variables that are not declared @code{volatile} have undefined
3059: values after a @code{longjmp}. And this is all GNU CC promises to do,
3060: because it is very difficult to restore register variables correctly, and
3061: one of GNU CC's features is that it can put variables in registers without
3062: your asking it to.
3063:
3064: If you want a variable to be unaltered by @code{longjmp}, and you don't
3065: want to write @code{volatile} because old C compilers don't accept it,
3066: just take the address of the variable. If a variable's address is ever
3067: taken, even if just to compute it and ignore it, then the variable cannot
3068: go in a register:
3069:
3070: @example
3071: @{
3072: int careful;
3073: &careful;
3074: @dots{}
3075: @}
3076: @end example
3077:
3078: @cindex arithmetic libraries
3079: @cindex math libraries
3080: Code compiled with GNU CC may call certain library routines. Most of
3081: them handle arithmetic for which there are no instructions. This
3082: includes multiply and divide on some machines, and floating point
3083: operations on any machine for which floating point support is disabled
3084: with @samp{-msoft-float}. Some standard parts of the C library, such as
3085: @code{bcopy} or @code{memcpy}, are also called automatically. The usual
3086: function call interface is used for calling the library routines.
3087:
3088: These library routines should be defined in the library @file{libgcc.a},
3089: which GNU CC automatically searches whenever it links a program. On
3090: machines that have multiply and divide instructions, if hardware
3091: floating point is in use, normally @file{libgcc.a} is not needed, but it
3092: is searched just in case.
3093:
3094: Each arithmetic function is defined in @file{libgcc1.c} to use the
3095: corresponding C arithmetic operator. As long as the file is compiled
3096: with another C compiler, which supports all the C arithmetic operators,
3097: this file will work portably. However, @file{libgcc1.c} does not work if
3098: compiled with GNU CC, because each arithmetic function would compile
3099: into a call to itself!
3100: @end ifset
3101:
3102: @ifset INTERNALS
3103: @node Passes, RTL, Interface, Top
3104: @chapter Passes and Files of the Compiler
3105: @cindex passes and files of the compiler
3106: @cindex files and passes of the compiler
3107: @cindex compiler passes and files
3108:
3109: @cindex top level of compiler
3110: The overall control structure of the compiler is in @file{toplev.c}. This
3111: file is responsible for initialization, decoding arguments, opening and
3112: closing files, and sequencing the passes.
3113:
3114: @cindex parsing pass
3115: The parsing pass is invoked only once, to parse the entire input. The RTL
3116: intermediate code for a function is generated as the function is parsed, a
3117: statement at a time. Each statement is read in as a syntax tree and then
3118: converted to RTL; then the storage for the tree for the statement is
3119: reclaimed. Storage for types (and the expressions for their sizes),
3120: declarations, and a representation of the binding contours and how they nest,
3121: remain until the function is finished being compiled; these are all needed
3122: to output the debugging information.
3123:
3124: @findex rest_of_compilation
3125: @findex rest_of_decl_compilation
3126: Each time the parsing pass reads a complete function definition or
3127: top-level declaration, it calls the function
3128: @code{rest_of_compilation} or @code{rest_of_decl_compilation} in
3129: @file{toplev.c}, which are responsible for all further processing
3130: necessary, ending with output of the assembler language. All other
3131: compiler passes run, in sequence, within @code{rest_of_compilation}.
3132: When that function returns from compiling a function definition, the
3133: storage used for that function definition's compilation is entirely
3134: freed, unless it is an inline function (@pxref{Inline}).
3135:
3136: Here is a list of all the passes of the compiler and their source files.
3137: Also included is a description of where debugging dumps can be requested
3138: with @samp{-d} options.
3139:
3140: @itemize @bullet
3141: @item
3142: Parsing. This pass reads the entire text of a function definition,
3143: constructing partial syntax trees. This and RTL generation are no longer
3144: truly separate passes (formerly they were), but it is easier to think
3145: of them as separate.
3146:
3147: The tree representation does not entirely follow C syntax, because it is
3148: intended to support other languages as well.
3149:
3150: Language-specific data type analysis is also done in this pass, and every
3151: tree node that represents an expression has a data type attached.
3152: Variables are represented as declaration nodes.
3153:
3154: @cindex constant folding
3155: @cindex arithmetic simplifications
3156: @cindex simplifications, arithmetic
3157: Constant folding and some arithmetic simplifications are also done
3158: during this pass.
3159:
3160: The language-independent source files for parsing are
3161: @file{stor-layout.c}, @file{fold-const.c}, and @file{tree.c}.
3162: There are also header files @file{tree.h} and @file{tree.def}
3163: which define the format of the tree representation.@refill
3164:
3165: The source files for parsing C are @file{c-parse.y}, @file{c-decl.c},
3166: @file{c-typeck.c}, @file{c-convert.c}, @file{c-lang.c}, and
3167: @file{c-aux-info.c} along with header files @file{c-lex.h}, and
3168: @file{c-tree.h}.
3169:
3170: The source files for parsing C++ are @file{cp-parse.y},
3171: @file{cp-class.c}, @file{cp-cvt.c},@*
3172: @file{cp-decl.c}, @file{cp-decl.c}, @file{cp-decl2.c},
3173: @file{cp-dem.c}, @file{cp-except.c},@*
3174: @file{cp-expr.c}, @file{cp-init.c}, @file{cp-lex.c},
3175: @file{cp-method.c}, @file{cp-ptree.c},@*
3176: @file{cp-search.c}, @file{cp-tree.c}, @file{cp-type2.c}, and
3177: @file{cp-typeck.c}, along with header files @file{cp-tree.def},
3178: @file{cp-tree.h}, and @file{cp-decl.h}.
3179:
3180: The special source files for parsing Objective C are
3181: @file{objc-parse.y}, @file{objc-actions.c}, @file{objc-tree.def}, and
3182: @file{objc-actions.h}. Certain C-specific files are used for this as
3183: well.
3184:
3185: The file @file{c-common.c} is also used for all of the above languages.
3186:
3187: @cindex RTL generation
3188: @item
3189: RTL generation. This is the conversion of syntax tree into RTL code.
3190: It is actually done statement-by-statement during parsing, but for
3191: most purposes it can be thought of as a separate pass.
3192:
3193: @cindex target-parameter-dependent code
3194: This is where the bulk of target-parameter-dependent code is found,
3195: since often it is necessary for strategies to apply only when certain
3196: standard kinds of instructions are available. The purpose of named
3197: instruction patterns is to provide this information to the RTL
3198: generation pass.
3199:
3200: @cindex tail recursion optimization
3201: Optimization is done in this pass for @code{if}-conditions that are
3202: comparisons, boolean operations or conditional expressions. Tail
3203: recursion is detected at this time also. Decisions are made about how
3204: best to arrange loops and how to output @code{switch} statements.
3205:
3206: The source files for RTL generation include @file{stmt.c},
3207: @file{function.c}, @file{expr.c}, @file{calls.c}, @file{explow.c},
3208: @file{expmed.c}, @file{optabs.c} and @file{emit-rtl.c}. Also, the file
3209: @file{insn-emit.c}, generated from the machine description by the
3210: program @code{genemit}, is used in this pass. The header file
3211: @file{expr.h} is used for communication within this pass.@refill
3212:
3213: @findex genflags
3214: @findex gencodes
3215: The header files @file{insn-flags.h} and @file{insn-codes.h},
3216: generated from the machine description by the programs @code{genflags}
3217: and @code{gencodes}, tell this pass which standard names are available
3218: for use and which patterns correspond to them.@refill
3219:
3220: Aside from debugging information output, none of the following passes
3221: refers to the tree structure representation of the function (only
3222: part of which is saved).
3223:
3224: @cindex inline, automatic
3225: The decision of whether the function can and should be expanded inline
3226: in its subsequent callers is made at the end of rtl generation. The
3227: function must meet certain criteria, currently related to the size of
3228: the function and the types and number of parameters it has. Note that
3229: this function may contain loops, recursive calls to itself
3230: (tail-recursive functions can be inlined!), gotos, in short, all
3231: constructs supported by GNU CC. The file @file{integrate.c} contains
3232: the code to save a function's rtl for later inlining and to inline that
3233: rtl when the function is called. The header file @file{integrate.h}
3234: is also used for this purpose.
3235:
3236: The option @samp{-dr} causes a debugging dump of the RTL code after
3237: this pass. This dump file's name is made by appending @samp{.rtl} to
3238: the input file name.
3239:
3240: @cindex jump optimization
3241: @cindex unreachable code
3242: @cindex dead code
3243: @item
3244: Jump optimization. This pass simplifies jumps to the following
3245: instruction, jumps across jumps, and jumps to jumps. It deletes
3246: unreferenced labels and unreachable code, except that unreachable code
3247: that contains a loop is not recognized as unreachable in this pass.
3248: (Such loops are deleted later in the basic block analysis.) It also
3249: converts some code originally written with jumps into sequences of
3250: instructions that directly set values from the results of comparisons,
3251: if the machine has such instructions.
3252:
3253: Jump optimization is performed two or three times. The first time is
3254: immediately following RTL generation. The second time is after CSE,
3255: but only if CSE says repeated jump optimization is needed. The
3256: last time is right before the final pass. That time, cross-jumping
3257: and deletion of no-op move instructions are done together with the
3258: optimizations described above.
3259:
3260: The source file of this pass is @file{jump.c}.
3261:
3262: The option @samp{-dj} causes a debugging dump of the RTL code after
3263: this pass is run for the first time. This dump file's name is made by
3264: appending @samp{.jump} to the input file name.
3265:
3266: @cindex register use analysis
3267: @item
3268: Register scan. This pass finds the first and last use of each
3269: register, as a guide for common subexpression elimination. Its source
3270: is in @file{regclass.c}.
3271:
3272: @cindex jump threading
3273: @item
3274: Jump threading. This pass detects a condition jump that branches to an
3275: identical or inverse test. Such jumps can be @samp{threaded} through
3276: the second conditional test. The source code for this pass is in
3277: @file{jump.c}. This optimization is only performed if
3278: @samp{-fthread-jumps} is enabled.
3279:
3280: @cindex common subexpression elimination
3281: @cindex constant propagation
3282: @item
3283: Common subexpression elimination. This pass also does constant
3284: propagation. Its source file is @file{cse.c}. If constant
3285: propagation causes conditional jumps to become unconditional or to
3286: become no-ops, jump optimization is run again when CSE is finished.
3287:
3288: The option @samp{-ds} causes a debugging dump of the RTL code after
3289: this pass. This dump file's name is made by appending @samp{.cse} to
3290: the input file name.
3291:
3292: @cindex loop optimization
3293: @cindex code motion
3294: @cindex strength-reduction
3295: @item
3296: Loop optimization. This pass moves constant expressions out of loops,
3297: and optionally does strength-reduction and loop unrolling as well.
3298: Its source files are @file{loop.c} and @file{unroll.c}, plus the header
3299: @file{loop.h} used for communication between them. Loop unrolling uses
3300: some functions in @file{integrate.c} and the header @file{integrate.h}.
3301:
3302: The option @samp{-dL} causes a debugging dump of the RTL code after
3303: this pass. This dump file's name is made by appending @samp{.loop} to
3304: the input file name.
3305:
3306: @item
3307: If @samp{-frerun-cse-after-loop} was enabled, a second common
3308: subexpression elimination pass is performed after the loop optimization
3309: pass. Jump threading is also done again at this time if it was specified.
3310:
3311: The option @samp{-dt} causes a debugging dump of the RTL code after
3312: this pass. This dump file's name is made by appending @samp{.cse2} to
3313: the input file name.
3314:
3315: @cindex register allocation, stupid
3316: @cindex stupid register allocation
3317: @item
3318: Stupid register allocation is performed at this point in a
3319: nonoptimizing compilation. It does a little data flow analysis as
3320: well. When stupid register allocation is in use, the next pass
3321: executed is the reloading pass; the others in between are skipped.
3322: The source file is @file{stupid.c}.
3323:
3324: @cindex data flow analysis
3325: @cindex analysis, data flow
3326: @cindex basic blocks
3327: @item
3328: Data flow analysis (@file{flow.c}). This pass divides the program
3329: into basic blocks (and in the process deletes unreachable loops); then
3330: it computes which pseudo-registers are live at each point in the
3331: program, and makes the first instruction that uses a value point at
3332: the instruction that computed the value.
3333:
3334: @cindex autoincrement/decrement analysis
3335: This pass also deletes computations whose results are never used, and
3336: combines memory references with add or subtract instructions to make
3337: autoincrement or autodecrement addressing.
3338:
3339: The option @samp{-df} causes a debugging dump of the RTL code after
3340: this pass. This dump file's name is made by appending @samp{.flow} to
3341: the input file name. If stupid register allocation is in use, this
3342: dump file reflects the full results of such allocation.
3343:
3344: @cindex instruction combination
3345: @item
3346: Instruction combination (@file{combine.c}). This pass attempts to
3347: combine groups of two or three instructions that are related by data
3348: flow into single instructions. It combines the RTL expressions for
3349: the instructions by substitution, simplifies the result using algebra,
3350: and then attempts to match the result against the machine description.
3351:
3352: The option @samp{-dc} causes a debugging dump of the RTL code after
3353: this pass. This dump file's name is made by appending @samp{.combine}
3354: to the input file name.
3355:
3356: @cindex instruction scheduling
3357: @cindex scheduling, instruction
3358: @item
3359: Instruction scheduling (@file{sched.c}). This pass looks for
3360: instructions whose output will not be available by the time that it is
3361: used in subsequent instructions. (Memory loads and floating point
3362: instructions often have this behavior on RISC machines). It re-orders
3363: instructions within a basic block to try to separate the definition and
3364: use of items that otherwise would cause pipeline stalls.
3365:
3366: Instruction scheduling is performed twice. The first time is immediately
3367: after instruction combination and the second is immediately after reload.
3368:
3369: The option @samp{-dS} causes a debugging dump of the RTL code after this
3370: pass is run for the first time. The dump file's name is made by
3371: appending @samp{.sched} to the input file name.
3372:
3373: @cindex register class preference pass
3374: @item
3375: Register class preferencing. The RTL code is scanned to find out
3376: which register class is best for each pseudo register. The source
3377: file is @file{regclass.c}.
3378:
3379: @cindex register allocation
3380: @cindex local register allocation
3381: @item
3382: Local register allocation (@file{local-alloc.c}). This pass allocates
3383: hard registers to pseudo registers that are used only within one basic
3384: block. Because the basic block is linear, it can use fast and
3385: powerful techniques to do a very good job.
3386:
3387: The option @samp{-dl} causes a debugging dump of the RTL code after
3388: this pass. This dump file's name is made by appending @samp{.lreg} to
3389: the input file name.
3390:
3391: @cindex global register allocation
3392: @item
3393: Global register allocation (@file{global-alloc.c}). This pass
3394: allocates hard registers for the remaining pseudo registers (those
3395: whose life spans are not contained in one basic block).
3396:
3397: @cindex reloading
3398: @item
3399: Reloading. This pass renumbers pseudo registers with the hardware
3400: registers numbers they were allocated. Pseudo registers that did not
3401: get hard registers are replaced with stack slots. Then it finds
3402: instructions that are invalid because a value has failed to end up in
3403: a register, or has ended up in a register of the wrong kind. It fixes
3404: up these instructions by reloading the problematical values
3405: temporarily into registers. Additional instructions are generated to
3406: do the copying.
3407:
3408: The reload pass also optionally eliminates the frame pointer and inserts
3409: instructions to save and restore call-clobbered registers around calls.
3410:
3411: Source files are @file{reload.c} and @file{reload1.c}, plus the header
3412: @file{reload.h} used for communication between them.
3413:
3414: The option @samp{-dg} causes a debugging dump of the RTL code after
3415: this pass. This dump file's name is made by appending @samp{.greg} to
3416: the input file name.
3417:
3418: @cindex instruction scheduling
3419: @cindex scheduling, instruction
3420: @item
3421: Instruction scheduling is repeated here to try to avoid pipeline stalls
3422: due to memory loads generated for spilled pseudo registers.
3423:
3424: The option @samp{-dR} causes a debugging dump of the RTL code after
3425: this pass. This dump file's name is made by appending @samp{.sched2}
3426: to the input file name.
3427:
3428: @cindex cross-jumping
3429: @cindex no-op move instructions
3430: @item
3431: Jump optimization is repeated, this time including cross-jumping
3432: and deletion of no-op move instructions.
3433:
3434: The option @samp{-dJ} causes a debugging dump of the RTL code after
3435: this pass. This dump file's name is made by appending @samp{.jump2}
3436: to the input file name.
3437:
3438: @cindex delayed branch scheduling
3439: @cindex scheduling, delayed branch
3440: @item
3441: Delayed branch scheduling. This optional pass attempts to find
3442: instructions that can go into the delay slots of other instructions,
3443: usually jumps and calls. The source file name is @file{reorg.c}.
3444:
3445: The option @samp{-dd} causes a debugging dump of the RTL code after
3446: this pass. This dump file's name is made by appending @samp{.dbr}
3447: to the input file name.
3448:
3449: @cindex register-to-stack conversion
3450: @item
3451: Conversion from usage of some hard registers to usage of a register
3452: stack may be done at this point. Currently, this is supported only
3453: for the floating-point registers of the Intel 80387 coprocessor. The
3454: source file name is @file{reg-stack.c}.
3455:
3456: The options @samp{-dk} causes a debugging dump of the RTL code after
3457: this pass. This dump file's name is made by appending @samp{.stack}
3458: to the input file name.
3459:
3460: @cindex final pass
3461: @cindex peephole optimization
3462: @item
3463: Final. This pass outputs the assembler code for the function. It is
3464: also responsible for identifying spurious test and compare
3465: instructions. Machine-specific peephole optimizations are performed
3466: at the same time. The function entry and exit sequences are generated
3467: directly as assembler code in this pass; they never exist as RTL.
3468:
3469: The source files are @file{final.c} plus @file{insn-output.c}; the
3470: latter is generated automatically from the machine description by the
3471: tool @file{genoutput}. The header file @file{conditions.h} is used
3472: for communication between these files.
3473:
3474: @cindex debugging information generation
3475: @item
3476: Debugging information output. This is run after final because it must
3477: output the stack slot offsets for pseudo registers that did not get
3478: hard registers. Source files are @file{dbxout.c} for DBX symbol table
3479: format, @file{sdbout.c} for SDB symbol table format, and
3480: @file{dwarfout.c} for DWARF symbol table format.
3481: @end itemize
3482:
3483: Some additional files are used by all or many passes:
3484:
3485: @itemize @bullet
3486: @item
3487: Every pass uses @file{machmode.def} and @file{machmode.h} which define
3488: the machine modes.
3489:
3490: @item
3491: Several passes use @file{real.h}, which defines the default
3492: representation of floating point constants and how to operate on them.
3493:
3494: @item
3495: All the passes that work with RTL use the header files @file{rtl.h}
3496: and @file{rtl.def}, and subroutines in file @file{rtl.c}. The tools
3497: @code{gen*} also use these files to read and work with the machine
3498: description RTL.
3499:
3500: @findex genconfig
3501: @item
3502: Several passes refer to the header file @file{insn-config.h} which
3503: contains a few parameters (C macro definitions) generated
3504: automatically from the machine description RTL by the tool
3505: @code{genconfig}.
3506:
3507: @cindex instruction recognizer
3508: @item
3509: Several passes use the instruction recognizer, which consists of
3510: @file{recog.c} and @file{recog.h}, plus the files @file{insn-recog.c}
3511: and @file{insn-extract.c} that are generated automatically from the
3512: machine description by the tools @file{genrecog} and
3513: @file{genextract}.@refill
3514:
3515: @item
3516: Several passes use the header files @file{regs.h} which defines the
3517: information recorded about pseudo register usage, and @file{basic-block.h}
3518: which defines the information recorded about basic blocks.
3519:
3520: @item
3521: @file{hard-reg-set.h} defines the type @code{HARD_REG_SET}, a bit-vector
3522: with a bit for each hard register, and some macros to manipulate it.
3523: This type is just @code{int} if the machine has few enough hard registers;
3524: otherwise it is an array of @code{int} and some of the macros expand
3525: into loops.
3526:
3527: @item
3528: Several passes use instruction attributes. A definition of the
3529: attributes defined for a particular machine is in file
3530: @file{insn-attr.h}, which is generated from the machine description by
3531: the program @file{genattr}. The file @file{insn-attrtab.c} contains
3532: subroutines to obtain the attribute values for insns. It is generated
3533: from the machine description by the program @file{genattrtab}.@refill
3534: @end itemize
3535: @end ifset
3536:
3537: @include rtl.texi
3538: @include md.texi
3539: @include tm.texi
3540:
3541: @ifset INTERNALS
3542: @node Config, Index, Machine Macros, Top
3543: @chapter The Configuration File
3544: @cindex configuration file
3545: @cindex @file{xm-@var{machine}.h}
3546:
3547: The configuration file @file{xm-@var{machine}.h} contains macro
3548: definitions that describe the machine and system on which the compiler
3549: is running, unlike the definitions in @file{@var{machine}.h}, which
3550: describe the machine for which the compiler is producing output. Most
3551: of the values in @file{xm-@var{machine}.h} are actually the same on all
3552: machines that GNU CC runs on, so large parts of all configuration files
3553: are identical. But there are some macros that vary:
3554:
3555: @table @code
3556: @findex USG
3557: @item USG
3558: Define this macro if the host system is System V.
3559:
3560: @findex VMS
3561: @item VMS
3562: Define this macro if the host system is VMS.
3563:
3564: @findex FAILURE_EXIT_CODE
3565: @item FAILURE_EXIT_CODE
3566: A C expression for the status code to be returned when the compiler
3567: exits after serious errors.
3568:
3569: @findex SUCCESS_EXIT_CODE
3570: @item SUCCESS_EXIT_CODE
3571: A C expression for the status code to be returned when the compiler
3572: exits without serious errors.
3573:
3574: @findex HOST_WORDS_BIG_ENDIAN
3575: @item HOST_WORDS_BIG_ENDIAN
3576: Defined if the host machine stores words of multi-word values in
3577: big-endian order. (GNU CC does not depend on the host byte ordering
3578: within a word.)
3579:
3580: @findex HOST_FLOAT_FORMAT
3581: @item HOST_FLOAT_FORMAT
3582: A numeric code distinguishing the floating point format for the host
3583: machine. See @code{TARGET_FLOAT_FORMAT} in @ref{Storage Layout} for the
3584: alternatives and default.
3585:
3586: @findex HOST_BITS_PER_CHAR
3587: @item HOST_BITS_PER_CHAR
3588: A C expression for the number of bits in @code{char} on the host
3589: machine.
3590:
3591: @findex HOST_BITS_PER_SHORT
3592: @item HOST_BITS_PER_SHORT
3593: A C expression for the number of bits in @code{short} on the host
3594: machine.
3595:
3596: @findex HOST_BITS_PER_INT
3597: @item HOST_BITS_PER_INT
3598: A C expression for the number of bits in @code{int} on the host
3599: machine.
3600:
3601: @findex HOST_BITS_PER_LONG
3602: @item HOST_BITS_PER_LONG
3603: A C expression for the number of bits in @code{long} on the host
3604: machine.
3605:
3606: @findex ONLY_INT_FIELDS
3607: @item ONLY_INT_FIELDS
3608: Define this macro to indicate that the host compiler only supports
3609: @code{int} bit fields, rather than other integral types, including
3610: @code{enum}, as do most C compilers.
3611:
3612: @findex EXECUTABLE_SUFFIX
3613: @item EXECUTABLE_SUFFIX
3614: Define this macro if the host system uses a naming convention for
3615: executable files that involves a common suffix (such as, in some
3616: systems, @samp{.exe}) that must be mentioned explicitly when you run
3617: the program.
3618:
3619: @findex OBSTACK_CHUNK_SIZE
3620: @item OBSTACK_CHUNK_SIZE
3621: A C expression for the size of ordinary obstack chunks.
3622: If you don't define this, a usually-reasonable default is used.
3623:
3624: @findex OBSTACK_CHUNK_ALLOC
3625: @item OBSTACK_CHUNK_ALLOC
3626: The function used to allocate obstack chunks.
3627: If you don't define this, @code{xmalloc} is used.
3628:
3629: @findex OBSTACK_CHUNK_FREE
3630: @item OBSTACK_CHUNK_FREE
3631: The function used to free obstack chunks.
3632: If you don't define this, @code{free} is used.
3633:
3634: @findex USE_C_ALLOCA
3635: @item USE_C_ALLOCA
3636: Define this macro to indicate that the compiler is running with the
3637: @code{alloca} implemented in C. This version of @code{alloca} can be
3638: found in the file @file{alloca.c}; to use it, you must also alter the
3639: @file{Makefile} variable @code{ALLOCA}. (This is done automatically
3640: for the systems on which we know it is needed.)
3641:
3642: If you do define this macro, you should probably do it as follows:
3643:
3644: @example
3645: #ifndef __GNUC__
3646: #define USE_C_ALLOCA
3647: #else
3648: #define alloca __builtin_alloca
3649: #endif
3650: @end example
3651:
3652: @noindent
3653: so that when the compiler is compiled with GNU CC it uses the more
3654: efficient built-in @code{alloca} function.
3655:
3656: @item FUNCTION_CONVERSION_BUG
3657: @findex FUNCTION_CONVERSION_BUG
3658: Define this macro to indicate that the host compiler does not properly
3659: handle converting a function value to a pointer-to-function when it is
3660: used in an expression.
3661: @end table
3662:
3663: @findex bzero
3664: @findex bcmp
3665: In addition, configuration files for system V define @code{bcopy},
3666: @code{bzero} and @code{bcmp} as aliases. Some files define @code{alloca}
3667: as a macro when compiled with GNU CC, in order to take advantage of the
3668: benefit of GNU CC's built-in @code{alloca}.
3669:
3670:
3671: @node Index,, Config, Top
3672: @unnumbered Index
3673: @end ifset
3674:
3675: @ifclear INTERNALS
3676: @node Index,, VMS, Top
3677: @unnumbered Index
3678: @end ifclear
3679:
3680: @printindex cp
3681: @contents
3682: @bye
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.