Annotation of researchv10dc/cmd/gcc/internals-1, revision 1.1.1.1

1.1       root        1: 
                      2: 
                      3: File: internals,  Node: Top,  Next: Copying,  Up: (DIR)
                      4: 
                      5: Introduction
                      6: ************
                      7: 
                      8: This manual documents how to run, install and port the GNU C compiler, as
                      9: well as its new features and incompatibilities, and how to report bugs.
                     10: 
                     11: * Menu:
                     12: 
                     13: * Copying::         GNU CC General Public License says
                     14:                      how you can copy and share GNU CC.
                     15: * Contributors::    People who have contributed to GNU CC.
                     16: * Options::         Command options supported by `gcc'.
                     17: * Installation::    How to configure, compile and install GNU CC.
                     18: * Trouble::         If you have trouble installing GNU CC.
                     19: * Incompatibilities:: Incompatibilities of GNU CC.
                     20: * Extensions::      GNU extensions to the C language.
                     21: * Bugs::            How to report bugs (if you want to get them fixed).
                     22: * Portability::     Goals of GNU CC's portability features.
                     23: * Interface::       Function-call interface of GNU CC output.
                     24: * Passes::          Order of passes, what they do, and what each file is for.
                     25: * RTL::             The intermediate representation that most passes work on.
                     26: * Machine Desc::    How to write machine description instruction patterns.
                     27: * Machine Macros::  How to write the machine description C macros.
                     28: 
                     29: 
                     30: 
                     31: File: internals,  Node: Copying,  Next: Contributors,  Prev: Top,  Up: Top
                     32: 
                     33: GNU CC GENERAL PUBLIC LICENSE
                     34: *****************************
                     35: 
                     36:                            (Clarified 11 Feb 1988)
                     37: 
                     38:   The license agreements of most software companies keep you at the mercy
                     39: of those companies.  By contrast, our general public license is intended to
                     40: give everyone the right to share GNU CC.  To make sure that you get the
                     41: rights we want you to have, we need to make restrictions that forbid anyone
                     42: to deny you these rights or to ask you to surrender the rights.  Hence this
                     43: license agreement.
                     44: 
                     45:   Specifically, we want to make sure that you have the right to give away
                     46: copies of GNU CC, that you receive source code or else can get it if you
                     47: want it, that you can change GNU CC or use pieces of it in new free
                     48: programs, and that you know you can do these things.
                     49: 
                     50:   To make sure that everyone has such rights, we have to forbid you to
                     51: deprive anyone else of these rights.  For example, if you distribute copies
                     52: of GNU CC, you must give the recipients all the rights that you have.  You
                     53: must make sure that they, too, receive or can get the source code.  And you
                     54: must tell them their rights.
                     55: 
                     56:   Also, for our own protection, we must make certain that everyone finds
                     57: out that there is no warranty for GNU CC.  If GNU CC is modified by someone
                     58: else and passed on, we want its recipients to know that what they have is
                     59: not what we distributed, so that any problems introduced by others will not
                     60: reflect on our reputation.
                     61: 
                     62:   Therefore we (Richard Stallman and the Free Software Foundation, Inc.)
                     63: make the following terms which say what you must do to be allowed to
                     64: distribute or change GNU CC.
                     65: 
                     66: COPYING POLICIES
                     67: ================
                     68: 
                     69:   1. You may copy and distribute verbatim copies of GNU CC source code as you
                     70:      receive it, in any medium, provided that you conspicuously and
                     71:      appropriately publish on each copy a valid copyright notice
                     72:      ``Copyright (C) 1988 Free Software Foundation, Inc.'' (or with
                     73:      whatever year is appropriate); keep intact the notices on all files
                     74:      that refer to this License Agreement and to the absence of any
                     75:      warranty; and give any other recipients of the GNU CC program a copy
                     76:      of this License Agreement along with the program.  You may charge a
                     77:      distribution fee for the physical act of transferring a copy.
                     78: 
                     79:   2. You may modify your copy or copies of GNU CC or any portion of it, and
                     80:      copy and distribute such modifications under the terms of Paragraph 1
                     81:      above, provided that you also do the following:
                     82: 
                     83:         * cause the modified files to carry prominent notices stating that
                     84:           you changed the files and the date of any change; and
                     85: 
                     86:         * cause the whole of any work that you distribute or publish, that
                     87:           in whole or in part contains or is a derivative of GNU CC or any
                     88:           part thereof, to be licensed at no charge to all third parties on
                     89:           terms identical to those contained in this License Agreement
                     90:           (except that you may choose to grant more extensive warranty
                     91:           protection to some or all third parties, at your option).
                     92: 
                     93:         * You may charge a distribution fee for the physical act of
                     94:           transferring a copy, and you may at your option offer warranty
                     95:           protection in exchange for a fee.
                     96: 
                     97:      Mere aggregation of another unrelated program with this program (or
                     98:      its derivative) on a volume of a storage or distribution medium does
                     99:      not bring the other program under the scope of these terms.
                    100: 
                    101:   3. You may copy and distribute GNU CC (or a portion or derivative of it,
                    102:      under Paragraph 2) in object code or executable form under the terms
                    103:      of Paragraphs 1 and 2 above provided that you also do one of the
                    104:      following:
                    105: 
                    106:         * accompany it with the complete corresponding machine-readable
                    107:           source code, which must be distributed under the terms of
                    108:           Paragraphs 1 and 2 above; or,
                    109: 
                    110:         * accompany it with a written offer, valid for at least three
                    111:           years, to give any third party free (except for a nominal
                    112:           shipping charge) a complete machine-readable copy of the
                    113:           corresponding source code, to be distributed under the terms of
                    114:           Paragraphs 1 and 2 above; or,
                    115: 
                    116:         * accompany it with the information you received as to where the
                    117:           corresponding source code may be obtained.  (This alternative is
                    118:           allowed only for noncommercial distribution and only if you
                    119:           received the program in object code or executable form alone.)
                    120: 
                    121:      For an executable file, complete source code means all the source code
                    122:      for all modules it contains; but, as a special exception, it need not
                    123:      include source code for modules which are standard libraries that
                    124:      accompany the operating system on which the executable file runs.
                    125: 
                    126:   4. You may not copy, sublicense, distribute or transfer GNU CC except as
                    127:      expressly provided under this License Agreement.  Any attempt
                    128:      otherwise to copy, sublicense, distribute or transfer GNU CC is void
                    129:      and your rights to use the program under this License agreement shall
                    130:      be automatically terminated.  However, parties who have received
                    131:      computer software programs from you with this License Agreement will
                    132:      not have their licenses terminated so long as such parties remain in
                    133:      full compliance.
                    134: 
                    135:   5. If you wish to incorporate parts of GNU CC into other free programs
                    136:      whose distribution conditions are different, write to the Free
                    137:      Software Foundation at 675 Mass Ave, Cambridge, MA 02139.  We have not
                    138:      yet worked out a simple rule that can be stated here, but we will
                    139:      often permit this.  We will be guided by the two goals of preserving
                    140:      the free status of all derivatives of our free software and of
                    141:      promoting the sharing and reuse of software.
                    142: 
                    143: Your comments and suggestions about our licensing policies and our software
                    144: are welcome!  Please contact the Free Software Foundation, Inc., 675 Mass
                    145: Ave, Cambridge, MA 02139, or call (617) 876-3296.
                    146: 
                    147: NO WARRANTY
                    148: ===========
                    149: 
                    150:   BECAUSE GNU CC IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY NO
                    151: WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW.  EXCEPT WHEN
                    152: OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC, RICHARD M.
                    153: STALLMAN AND/OR OTHER PARTIES PROVIDE GNU CC "AS IS" WITHOUT WARRANTY OF
                    154: ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
                    155: IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                    156:  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF GNU CC IS WITH YOU. 
                    157: SHOULD GNU CC PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY
                    158: SERVICING, REPAIR OR CORRECTION.
                    159: 
                    160:  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.  STALLMAN,
                    161: THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY WHO MAY MODIFY
                    162: AND REDISTRIBUTE GNU CC AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
                    163: INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER SPECIAL, INCIDENTAL OR
                    164: CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE (INCLUDING
                    165: BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES
                    166: SUSTAINED BY THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY
                    167: OTHER PROGRAMS) GNU CC, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF
                    168: SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
                    169: 
                    170: 
                    171: File: internals,  Node: Contributors,  Next: Options,  Prev: Copying,  Up: Top
                    172: 
                    173: Contributors to GNU CC
                    174: **********************
                    175: 
                    176: In addition to Richard Stallman, several people have written parts of GNU CC.
                    177: 
                    178:    * The idea of using RTL and some of the optimization ideas came from the
                    179:      U. of Arizona Portable Optimizer, written by Jack Davidson and
                    180:      Christopher Fraser.  See ``Register Allocation and Exhaustive Peephole
                    181:      Optimization'', Software Practice and Experience 14 (9), Sept. 1984,
                    182:      857-866.
                    183: 
                    184:    * Paul Rubin wrote most of the preprocessor.
                    185: 
                    186:    * Leonard Tower wrote parts of the parser, RTL generator, RTL
                    187:      definitions, and of the Vax machine description.
                    188: 
                    189:    * Ted Lemon wrote parts of the RTL reader and printer.
                    190: 
                    191:    * Nobuyuki Hikichi of Software Research Associates, Tokyo, contributed
                    192:      the support for the SONY NEWS machine.
                    193: 
                    194:    * Charles LaBrec contributed the support for the Integrated Solutions
                    195:      68020 system.
                    196: 
                    197:    * Michael Tiemann of MCC wrote the description of the National
                    198:      Semiconductor 32000 series cpu, with some contributions from Jan Stein
                    199:      of the Chalmers Computer Club.  Tiemann also wrote the code for inline
                    200:      function integration.
                    201: 
                    202:    * Robert Brown implemented the support for Encore 32000 systems.
                    203: 
                    204:    * Michael Kashtan of SRI adapted GNU CC to the Vomit-Making System.
                    205: 
                    206:    * Alex Crain provided changes for the 3b1.
                    207: 
                    208:    * Chris Hanson and another person who should remind me of his name
                    209:      assisted in making GNU CC work on HP-UX for the 9000 series 300.
                    210: 
                    211: 
                    212: File: internals,  Node: Options,  Next: Installation,  Prev: Contributors,  Up: Top
                    213: 
                    214: GNU CC Command Options
                    215: **********************
                    216: 
                    217: The GNU C compiler uses a command syntax much like the Unix C compiler. 
                    218: The `gcc' program accepts options and file names as operands.  Multiple
                    219: single-letter options may *not* be grouped: `-dr' is very different from
                    220: `-d -r'.
                    221: 
                    222: When you invoke GNU CC, it normally does preprocessing, compilation,
                    223: assembly and linking.  File names which end in `.c' are taken as C source
                    224: to be preprocessed and compiled; compiler output files plus any input files
                    225: with names ending in `.s' are assembled; then the resulting object files,
                    226: plus any other input files, are linked together to produce an executable.
                    227: 
                    228: Command options allow you to stop this process at an intermediate stage. 
                    229: For example, the `-c' option says not to run the linker.  Then the output
                    230: consists of object files output by the assembler.
                    231: 
                    232: Other command options are passed on to one stage.  Some options control the
                    233: preprocessor and others the compiler itself.  Yet other options control the
                    234: assembler and linker; these are not documented here because the GNU
                    235: assembler and linker are not yet released.
                    236: 
                    237: Here are the options to control the overall compilation process, including
                    238: those that say whether to link, whether to assemble, and so on.
                    239: 
                    240: `-o FILE'
                    241:      Place output in file FILE.  This applies regardless to whatever sort
                    242:      of output is being produced, whether it be an executable file, an
                    243:      object file, an assembler file or preprocessed C code.
                    244: 
                    245:      If `-o' is not specified, the default is to put an executable file in
                    246:      `a.out', the object file `SOURCE.c' in `SOURCE.o', an assembler file
                    247:      in `SOURCE.s', and preprocessed C on standard output.
                    248: 
                    249: `-c'
                    250:      Compile or assemble the source files, but do not link.  Produce object
                    251:      files with names made by replacing `.c' or `.s' with `.o' at the end
                    252:      of the input file names.  Do nothing at all for object files specified
                    253:      as input.
                    254: 
                    255: `-S'
                    256:      Compile into assembler code but do not assemble.  The assembler output
                    257:      file name is made by replacing `.c' with `.s' at the end of the input
                    258:      file name.  Do nothing at all for assembler source files or object
                    259:      files specified as input.
                    260: 
                    261: `-E'
                    262:      Run only the C preprocessor.  Preprocess all the C source files
                    263:      specified and output the results to standard output.
                    264: 
                    265: `-v'
                    266:      Compiler driver program prints the commands it executes as it runs the
                    267:      preprocessor, compiler proper, assembler and linker.  Some of these
                    268:      are directed to print their own version numbers.
                    269: 
                    270: `-BPREFIX'
                    271:      Compiler driver program tries PREFIX as a prefix for each program it
                    272:      tries to run.  These programs are `cpp', `cc1', `as' and `ld'.
                    273: 
                    274:      For each subprogram to be run, the compiler driver first tries the
                    275:      `-B' prefix, if any.  If that name is not found, or if `-B' was not
                    276:      specified, the driver tries two standard prefixes, which are
                    277:      `/usr/lib/gcc-' and `/usr/local/lib/gcc-'.  If neither of those
                    278:      results in a file name that is found, the unmodified program name is
                    279:      searched for using the directories specified in your `PATH'
                    280:      environment variable.
                    281: 
                    282:      The run-time support file `gnulib' is also searched for using the `-B'
                    283:      prefix, if needed.  If it is not found there, the two standard
                    284:      prefixes above are tried, and that is all.  The file is left out of
                    285:      the link if it is not found by those means.  Most of the time, on most
                    286:      machines, you can do without it.
                    287: 
                    288: These options control the details of C compilation itself.
                    289: 
                    290: `-ansi'
                    291:      Support all ANSI standard C programs.
                    292: 
                    293:      This turns off certain features of GNU C that are incompatible with
                    294:      ANSI C, such as the `asm', `inline' and `typeof' keywords, and
                    295:      predefined macros such as `unix' and `vax' that identify the type of
                    296:      system you are using.  It also enables the undesirable and rarely used
                    297:      ANSI trigraph feature.
                    298: 
                    299:      The `-ansi' option does not cause non-ANSI programs to be rejected
                    300:      gratuitously.  For that, `-pedantic' is required in addition to `-ansi'.
                    301: 
                    302:      The macro `__STRICT_ANSI__' is predefined when the `-ansi' option is
                    303:      used.  Some header files may notice this macro and refrain from
                    304:      declaring certain functions or defining certain macros that the ANSI
                    305:      standard doesn't call for; this is to avoid interfering with any
                    306:      programs that might use these names for other things.
                    307: 
                    308: `-traditional'
                    309:      Attempt to support some aspects of traditional C compilers. 
                    310:      Specifically:
                    311: 
                    312:         * All `extern' declarations take effect globally even if they are
                    313:           written inside of a function definition.  This includes implicit
                    314:           declarations of functions.
                    315: 
                    316:         * The keywords `typeof', `inline', `signed', `const' and `volatile'
                    317:           are not recognized.
                    318: 
                    319:         * Comparisons between pointers and integers are always allowed.
                    320: 
                    321:         * Integer types `unsigned short' and `unsigned char' promote to
                    322:           `unsigned int'.
                    323: 
                    324:         * In the preprocessor, comments convert to nothing at all, rather
                    325:           than to a space.  This allows traditional token concatenation.
                    326: 
                    327:         * In the preprocessor, single and double quote characters are
                    328:           ignored when scanning macro definitions, so that macro arguments
                    329:           can be replaced even within a string or character constant. 
                    330:           Quote characters are also ignored when skipping text inside a
                    331:           failing conditional directive.
                    332: 
                    333: `-O'
                    334:      Optimize.  Optimizing compilation takes somewhat more time, and a lot
                    335:      more memory for a large function.
                    336: 
                    337:      Without `-O', the compiler's goal is to reduce the cost of compilation
                    338:      and to make debugging produce the expected results.  Statements are
                    339:      independent: if you stop the program with a breakpoint between
                    340:      statements, you can then assign a new value to any variable or change
                    341:      the program counter to any other statement in the function and get
                    342:      exactly the results you would expect from the source code.
                    343: 
                    344:      Without `-O', only variables declared `register' are allocated in
                    345:      registers.  The resulting compiled code is a little worse than
                    346:      produced by PCC without `-O'.
                    347: 
                    348:      With `-O', the compiler tries to reduce code size and execution time.
                    349: 
                    350:      Some of the `-f' options described below turn specific kinds of
                    351:      optimization on or off.
                    352: 
                    353: `-g'
                    354:      Produce debugging information in DBX format.
                    355: 
                    356:      Unlike most other C compilers, GNU CC allows you to use `-g' with
                    357:      `-O'.  The shortcuts taken by optimized code may occasionally produce
                    358:      surprising results: some variables you declared may not exist at all;
                    359:      flow of control may briefly move where you did not expect it; some
                    360:      statements may not be executed because they compute constant results
                    361:      or their values were already at hand; some statements may execute in
                    362:      different places because they were moved out of loops.  Nevertheless
                    363:      it proves possible to debug optimized output.  This makes it
                    364:      reasonable to use the optimizer for programs that might have bugs.
                    365: 
                    366: `-gg'
                    367:      Produce debugging information in GDB's own format.  This requires the
                    368:      GNU assembler and linker in order to work.
                    369: 
                    370: `-w'
                    371:      Inhibit all warning messages.
                    372: 
                    373: `-W'
                    374:      Print extra warning messages for these events:
                    375: 
                    376:         * An automatic variable is used without first being initialized.
                    377: 
                    378:           These warnings are possible only in optimizing compilation,
                    379:           because they require data flow information that is computed only
                    380:           when optimizing.  They occur only for variables that are
                    381:           candidates for register allocation.  Therefore, they do not occur
                    382:           for a variable that is declared `volatile', or whose address is
                    383:           taken, or whose size is other than 1, 2, 4 or 8 bytes.  Also,
                    384:           they do not occur for structures, unions or arrays, even when
                    385:           they are in registers.
                    386: 
                    387:           Note that there may be no warning about a variable that is used
                    388:           only to compute a value that itself is never used, because such
                    389:           computations may be deleted by the flow analysis pass before the
                    390:           warnings are printed.
                    391: 
                    392:           These warnings are made optional because GNU CC is not smart
                    393:           enough to see all the reasons why the code might be correct
                    394:           despite appearing to have an error.  Here is one example of how
                    395:           this can happen:
                    396: 
                    397:                {
                    398:                  int x;
                    399:                  switch (y)
                    400:                    {
                    401:                    case 1: x = 1;
                    402:                      break;
                    403:                    case 2: x = 4;
                    404:                      break;
                    405:                    case 3: x = 5;
                    406:                    }
                    407:                  foo (x);
                    408:                }
                    409: 
                    410:           If the value of `y' is always 1, 2 or 3, then `x' is always
                    411:           initialized, but GNU CC doesn't know this.  Here is another
                    412:           common case:
                    413: 
                    414:                {
                    415:                  int save_y;
                    416:                  if (change_y) save_y = y, y = new_y;
                    417:                  ...
                    418:                  if (change_y) y = save_y;
                    419:                }
                    420: 
                    421:           This has no bug because `x' is used only if it is set.
                    422: 
                    423:         * A nonvolatile automatic variable might be changed by a call to
                    424:           `longjmp'.  These warnings as well are possible only in
                    425:           optimizing compilation.
                    426: 
                    427:           The compiler sees only the calls to `setjmp'.  It cannot know
                    428:           where `longjmp' will be called; in fact, a signal handler could
                    429:           call it at any point in the code.  As a result, you may get a
                    430:           warning even when there is in fact no problem because `longjmp'
                    431:           cannot in fact be called at the place which would cause a problem.
                    432: 
                    433:         * A function can return either with or without a value.  (Falling
                    434:           off the end of the function body is considered returning without
                    435:           a value.)  For example, this function would inspire such a warning:
                    436: 
                    437:                foo (a)
                    438:                {
                    439:                  if (a > 0)
                    440:                    return a;
                    441:                }
                    442: 
                    443:           Spurious warnings can occur because GNU CC does not realize that
                    444:           certain functions (including `abort' and `longjmp') will never
                    445:           return.
                    446: 
                    447:      In the future, other useful warnings may also be enabled by this option.
                    448: 
                    449: `-Wimplicit'
                    450:      Warn whenever a function is implicitly declared.
                    451: 
                    452: `-Wreturn-type'
                    453:      Warn whenever a function is defined with a return-type that defaults
                    454:      to `int'.  Also warn about any `return' statement with no return-value
                    455:      in a function whose return-type is not `void'.
                    456: 
                    457: `-Wcomment'
                    458:      Warn whenever a comment-start sequence `/*' appears in a comment.
                    459: 
                    460: `-Wall'
                    461:      All of the above `-W' options combined.
                    462: 
                    463: `-p'
                    464:      Generate extra code to write profile information suitable for the
                    465:      analysis program `prof'.
                    466: 
                    467: `-pg'
                    468:      Generate extra code to write profile information suitable for the
                    469:      analysis program `gprof'.
                    470: 
                    471: `-lLIBRARY'
                    472:      Search a standard list of directories for a library named LIBRARY,
                    473:      which is actually a file named `libLIBRARY.a'.  The linker uses this
                    474:      file as if it had been specified precisely by name.
                    475: 
                    476:      The directories searched include several standard system directories
                    477:      plus any that you specify with `-L'.
                    478: 
                    479:      Normally the files found this way are library files---archive files
                    480:      whose members are object files.  The linker handles an archive file by
                    481:      through it for members which define symbols that have so far been
                    482:      referenced but not defined.  But if the file that is found is an
                    483:      ordinary object file, it is linked in the usual fashion.  The only
                    484:      difference between an `-l' option and the full file name of the file
                    485:      that is found is syntactic and the fact that several directories are
                    486:      searched.
                    487: 
                    488: `-LDIR'
                    489:      Add directory DIR to the list of directories to be searched for `-l'.
                    490: 
                    491: `-nostdlib'
                    492:      Don't use the standard system libraries and startup files when
                    493:      linking.  Only the files you specify (plus `gnulib') will be passed to
                    494:      the linker.
                    495: 
                    496: `-mMACHINESPEC'
                    497:      Machine-dependent option specifying something about the type of target
                    498:      machine.  These options are defined by the macro `TARGET_SWITCHES' in
                    499:      the machine description.  The default for the options is also defined
                    500:      by that macro, which enables you to change the defaults.
                    501: 
                    502:      These are the `-m' options defined in the 68000 machine description:
                    503: 
                    504:      `-m68020'
                    505:           Generate output for a 68020 (rather than a 68000).  This is the
                    506:           default if you use the unmodified sources.
                    507: 
                    508:      `-m68000'
                    509:           Generate output for a 68000 (rather than a 68020).
                    510: 
                    511:      `-m68881'
                    512:           Generate output containing 68881 instructions for floating point.
                    513:            This is the default if you use the unmodified sources.
                    514: 
                    515:      `-msoft-float'
                    516:           Generate output containing library calls for floating point.
                    517: 
                    518:      `-mshort'
                    519:           Consider type `int' to be 16 bits wide, like `short int'.
                    520: 
                    521:      `-mnobitfield'
                    522:           Do not use the bit-field instructions.  `-m68000' implies
                    523:           `-mnobitfield'.
                    524: 
                    525:      `-mbitfield'
                    526:           Do use the bit-field instructions.  `-m68020' implies
                    527:           `-mbitfield'.  This is the default if you use the unmodified
                    528:           sources.
                    529: 
                    530:      `-mrtd'
                    531:           Use a different function-calling convention, in which functions
                    532:           that take a fixed number of arguments return with the `rtd'
                    533:           instruction, which pops their arguments while returning.  This
                    534:           saves one instruction in the caller since there is no need to pop
                    535:           the arguments there.
                    536: 
                    537:           This calling convention is incompatible with the one normally
                    538:           used on Unix, so you cannot use it if you need to call libraries
                    539:           compiled with the Unix compiler.
                    540: 
                    541:           Also, you must provide function prototypes for all functions that
                    542:           take variable numbers of arguments (including `printf');
                    543:           otherwise incorrect code will be generated for calls to those
                    544:           functions.
                    545: 
                    546:           In addition, seriously incorrect code will result if you call a
                    547:           function with too many arguments.  (Normally, extra arguments are
                    548:           harmlessly ignored.)
                    549: 
                    550:           The `rtd' instruction is supported by the 68010 and 68020
                    551:           processors, but not by the 68000.
                    552: 
                    553:      These `-m' options are defined in the Vax machine description:
                    554: 
                    555:      `-munix'
                    556:           Do not output certain jump instructions (`aobleq' and so on) that
                    557:           the Unix assembler for the Vax cannot handle across long ranges.
                    558: 
                    559:      `-mgnu'
                    560:           Do output those jump instructions, on the assumption that you
                    561:           will assemble with the GNU assembler.
                    562: 
                    563:      `-mg'
                    564:           Output code for g-format floating point numbers instead of
                    565:           d-format.
                    566: 
                    567: `-fFLAG'
                    568:      Specify machine-independent flags.  These are the flags:
                    569: 
                    570:      `-ffloat-store'
                    571:           Do not store floating-point variables in registers.  This
                    572:           prevents undesirable excess precision on machines such as the
                    573:           68000 where the floating registers (of the 68881) keep more
                    574:           precision than a `double' is supposed to have.
                    575: 
                    576:           For most programs, the excess precision does only good, but a few
                    577:           programs rely on the precise definition of IEEE floating point. 
                    578:           Use `-ffloat-store' for such programs.
                    579: 
                    580:      `-fno-asm'
                    581:           Do not recognize `asm', `inline' or `typeof' as a keyword.  These
                    582:           words may then be used as identifiers.
                    583: 
                    584:      `-fno-defer-pop'
                    585:           Always pop the arguments to each function call as soon as that
                    586:           function returns.  Normally the compiler (when optimizing) lets
                    587:           arguments accumulate on the stack for several function calls and
                    588:           pops them all at once.
                    589: 
                    590:      `-fcombine-regs'
                    591:           Allow the combine pass to combine an instruction that copies one
                    592:           register into another.  This might or might not produce better
                    593:           code when used in addition to `-O'.  I am interested in hearing
                    594:           about the difference this makes.
                    595: 
                    596:      `-fforce-mem'
                    597:           Force memory operands to be copied into registers before doing
                    598:           arithmetic on them.  This may produce better code by making all
                    599:           memory references potential common subexpressions.  When they are
                    600:           not common subexpressions, instruction combination should
                    601:           eliminate the separate register-load.  I am interested in hearing
                    602:           about the difference this makes.
                    603: 
                    604:      `-fforce-addr'
                    605:           Force memory address constants to be copied into registers before
                    606:           doing arithmetic on them.  This may produce better code just as
                    607:           `-fforce-mem' may.  I am interested in hearing about the
                    608:           difference this makes.
                    609: 
                    610:      `-fomit-frame-pointer'
                    611:           Don't keep the frame pointer in a register for functions that
                    612:           don't need one.  This avoids the instructions to save, set up and
                    613:           restore frame pointers; it also makes an extra register available
                    614:           in many functions.  *It also makes debugging impossible.*
                    615: 
                    616:           On some machines, such as the Vax, this flag has no effect,
                    617:           because the standard calling sequence automatically handles the
                    618:           frame pointer and nothing is saved by pretending it doesn't
                    619:           exist.  The machine-description macro `FRAME_POINTER_REQUIRED'
                    620:           controls whether a target machine supports this flag.  *note
                    621:           Registers::.
                    622: 
                    623:      `-finline-functions'
                    624:           Integrate all simple functions into their callers.  The compiler
                    625:           heuristically decides which functions are simple enough to be
                    626:           worth integrating in this way.
                    627: 
                    628:           If all calls to a given function are integrated, and the function
                    629:           is declared `static', then the function is normally not output as
                    630:           assembler code in its own right.
                    631: 
                    632:      `-fkeep-inline-functions'
                    633:           Even if all calls to a given function are integrated, and the
                    634:           function is declared `static', nevertheless output a separate
                    635:           run-time callable version of the function.
                    636: 
                    637:      `-fwritable-strings'
                    638:           Store string constants in the writable data segment and don't
                    639:           uniquize them.  This is for compatibility with old programs which
                    640:           assume they can write into string constants.  Writing into string
                    641:           constants is a very bad idea; ``constants'' should be constant.
                    642: 
                    643:      `-fno-function-cse'
                    644:           Do not put function addresses in registers; make each instruction
                    645:           that calls a constant function contain the function's address
                    646:           explicitly.
                    647: 
                    648:           This option results in less efficient code, but some strange
                    649:           hacks that alter the assembler output may be confused by the
                    650:           optimizations performed when this option is not used.
                    651: 
                    652:      `-fvolatile'
                    653:           Consider all memory references through pointers to be volatile.
                    654: 
                    655:      `-funsigned-char'
                    656:           Let the type `char' be the unsigned, like `unsigned char'.
                    657: 
                    658:           Each kind of machine has a default for what `char' should be.  It
                    659:           is either like `unsigned char' by default or like `signed char'
                    660:           by default.  (Actually, at present, the default is always signed.)
                    661: 
                    662:           The type `char' is always a distinct type from either `signed
                    663:           char' or `unsigned char', even though its behavior is always just
                    664:           like one of those two.
                    665: 
                    666:      `-fsigned-char'
                    667:           Let the type `char' be signed, like `signed char'.
                    668: 
                    669:      `-ffixed-REG'
                    670:           Treat the register named REG as a fixed register; generated code
                    671:           should never refer to it (except perhaps as a stack pointer,
                    672:           frame pointer or in some other fixed role).
                    673: 
                    674:           REG must be the name of a register.  The register names accepted
                    675:           are machine-specific and are defined in the `REGISTER_NAMES'
                    676:           macro in the machine description macro file.
                    677: 
                    678:      `-fcall-used-REG'
                    679:           Treat the register named REG as an allocatable register that is
                    680:           clobbered by function calls.  It may be allocated for temporaries
                    681:           or variables that do not live across a call.  Functions compiled
                    682:           this way will not save and restore the register REG.
                    683: 
                    684:           Use of this flag for a register that has a fixed pervasive role
                    685:           in the machine's execution model, such as the stack pointer or
                    686:           frame pointer, will produce disastrous results.
                    687: 
                    688:      `-fcall-saved-REG'
                    689:           Treat the register named REG as an allocatable register saved by
                    690:           functions.  It may be allocated even for temporaries or variables
                    691:           that live across a call.  Functions compiled this way will save
                    692:           and restore the register REG if they use it.
                    693: 
                    694:           Use of this flag for a register that has a fixed pervasive role
                    695:           in the machine's execution model, such as the stack pointer or
                    696:           frame pointer, will produce disastrous results.
                    697: 
                    698:           A different sort of disaster will result from the use of this
                    699:           flag for a register in which function values are may be returned.
                    700: 
                    701: `-dLETTERS'
                    702:      Says to make debugging dumps at times specified by LETTERS.  Here are
                    703:      the possible letters:
                    704: 
                    705:      `r'
                    706:           Dump after RTL generation.
                    707:      `j'
                    708:           Dump after first jump optimization.
                    709:      `J'
                    710:           Dump after last jump optimization.
                    711:      `s'
                    712:           Dump after CSE (including the jump optimization that sometimes
                    713:           follows CSE).
                    714:      `L'
                    715:           Dump after loop optimization.
                    716:      `f'
                    717:           Dump after flow analysis.
                    718:      `c'
                    719:           Dump after instruction combination.
                    720:      `l'
                    721:           Dump after local register allocation.
                    722:      `g'
                    723:           Dump after global register allocation.
                    724:      `m'
                    725:           Print statistics on memory usage, at the end of the run.
                    726: 
                    727: `-pedantic'
                    728:      Issue all the warnings demanded by strict ANSI standard C; reject all
                    729:      programs that use forbidden extensions.
                    730: 
                    731:      Valid ANSI standard C programs should compile properly with or without
                    732:      this option (though a rare few will require `-ansi').  However,
                    733:      without this option, certain GNU extensions and traditional C features
                    734:      are supported as well.  With this option, they are rejected.  There is
                    735:      no reason to use this option; it exists only to satisfy pedants.
                    736: 
                    737: These options control the C preprocessor, which is run on each C source
                    738: file before actual compilation.  If you use the `-E' option, nothing is
                    739: done except C preprocessing.  Some of these options make sense only
                    740: together with `-E' because they request preprocessor output that is not
                    741: suitable for actual compilation.
                    742: 
                    743: `-C'
                    744:      Tell the preprocessor not to discard comments.  Used with the `-E'
                    745:      option.
                    746: 
                    747: `-IDIR'
                    748:      Search directory DIR for include files.
                    749: 
                    750: `-I-'
                    751:      Any directories specified with `-I' options before the `-I-' option
                    752:      are searched only for the case of `#include "FILE"'; they are not
                    753:      searched for `#include <FILE>'.
                    754: 
                    755:      If additional directories are specified with `-I' options after the
                    756:      `-I-', these directories are searched for all `#include' directives. 
                    757:      (Ordinarily *all* `-I' directories are used this way.)
                    758: 
                    759:      In addition, the `-I-' option inhibits the use of the current
                    760:      directory as the first search directory for `#include "FILE"'. 
                    761:      Therefore, the current directory is searched only if it is requested
                    762:      explicitly with `-I.'.  Specifying both `-I-' and `-I.' allows you to
                    763:      control precisely which directories are searched before the current
                    764:      one and which are searched after.
                    765: 
                    766: `-nostdinc'
                    767:      Do not search the standard system directories for header files.  Only
                    768:      the directories you have specified with `-I' options (and the current
                    769:      directory, if appropriate) are searched.
                    770: 
                    771:      Between `-nostdinc' and `-I-', you can eliminate all directories from
                    772:      the search path except those you specify.
                    773: 
                    774: `-M'
                    775:      Tell the preprocessor to output a rule suitable for `make' describing
                    776:      the dependencies of each source file.  For each source file, the
                    777:      preprocessor outputs one `make'-rule whose target is the object file
                    778:      name for that source file and whose dependencies are all the files
                    779:      `#include'd in it.  This rule may be a single line or may be continued
                    780:      with `\'-newline if it is long.
                    781: 
                    782:      `-M' implies `-E'.
                    783: 
                    784: `-MM'
                    785:      Like `-M' but the output mentions only the user-header files included
                    786:      with `#include "FILE"'.  System header files included with `#include
                    787:      <FILE>' are omitted.
                    788: 
                    789:      `-MM' implies `-E'.
                    790: 
                    791: `-DMACRO'
                    792:      Define macro MACRO with the empty string as its definition.
                    793: 
                    794: `-DMACRO=DEFN'
                    795:      Define macro MACRO as DEFN.
                    796: 
                    797: `-UMACRO'
                    798:      Undefine macro MACRO.
                    799: 
                    800: `-T'
                    801:      Support ANSI C trigraphs.  You don't want to know about this
                    802:      brain-damage.  The `-ansi' option also has this effect.
                    803: 
                    804: 
                    805: File: internals,  Node: Installation,  Next: Trouble,  Prev: Options,  Up: Top
                    806: 
                    807: Installing GNU CC
                    808: *****************
                    809: 
                    810: Here is the procedure for installing GNU CC on a Unix system.
                    811: 
                    812: * Menu:
                    813: 
                    814: * VMS Install::   See below for installation on VMS.
                    815: 
                    816: 
                    817:   1. Edit `Makefile'.  If you are using HPUX, you must make a few changes
                    818:      described in comments at the beginning of the file.
                    819: 
                    820:   2. Choose configuration files.
                    821: 
                    822:         * Make a symbolic link named `config.h' to the top-level config
                    823:           file for the machine you are using (*Note Config::.).  This file
                    824:           is responsible for defining information about the host machine. 
                    825:           It includes `tm.h'.
                    826: 
                    827:           The file's name should be `config-MACHINE.h'.  On VMS, use
                    828:           `config-vms.h' rather than `config-vax.h'.  On the HP 9000 series
                    829:           300, use `config-hp9k3.h' rather than `config-m68k.h'.
                    830: 
                    831:           If your system does not support symbolic links, you might want to
                    832:           set up `config.h' to contain a `#include' command which refers to
                    833:           the appropriate file.
                    834: 
                    835:         * Make a symbolic link named `tm.h' to the machine-description
                    836:           macro file for your machine (its name should be `tm-MACHINE.h').
                    837: 
                    838:           For the 68000/68020, do not use `tm-m68k.h' directly; instead use
                    839:           one of the files `tm-sun3.h', `tm-sun2.h', `tm-isi68.h',
                    840:           `tm-news800.h' or `tm-3b1.h'.  Each of those files includes
                    841:           `tm-m68k.h' but sets up a few things differently as appropriate
                    842:           to the specific model of machine.
                    843: 
                    844:           There are two files you can use for a 680x0 running HPUX:
                    845:           `tm-hp9k320.h' and `tm-hp9k320g.h'.  Use the former if you are
                    846:           installing GNU CC alone.  The latter is for another option where
                    847:           GNU CC together with the GNU assembler, linker, debugger and
                    848:           other utilities are used to replace all of HPUX that deals with
                    849:           compilation.  Not all of the pieces of GNU software needed for
                    850:           this mode of operation are as yet in distribution; full
                    851:           instructions will appear here in the future.
                    852: 
                    853:           For the 32000, use `tm-sequent.h' if you are using a Sequent
                    854:           machine, or `tm-encore.h' for an Encore machine; otherwise,
                    855:           perhaps `tm-ns32k.h' will work for you.
                    856: 
                    857:           For the vax, use `tm-vax.h' on Unix, or `tm-vms.h' on VMS.
                    858: 
                    859:         * Make a symbolic link named `md' to the machine description
                    860:           pattern file (its name should be `MACHINE.md').
                    861: 
                    862:         * Make a symbolic link named `aux-output.c' to the output
                    863:           subroutine file for your machine (its name should be
                    864:           `OUTPUT-MACHINE.c').
                    865: 
                    866:   3. Make sure the Bison parser generator is installed.  (This is unnecessary
                    867:      if the Bison output file `parse.tab.c' is more recent than `parse.y'
                    868:      and you do not plan to change `parse.y'.)
                    869: 
                    870:      Note that if you have an old version of Bison you may get an error
                    871:      from the line with the `%expect' directive.  If so, simply remove that
                    872:      line from `parse.y' and proceed.
                    873: 
                    874:   4. If you are using a Sun, make sure the environment variable
                    875:      `FLOAT_OPTION' is not set.  If this option were set to `f68881' when
                    876:      `gnulib' is compiled, the resulting code would demand to be linked
                    877:      with a special startup file and will not link properly without special
                    878:      pains.
                    879: 
                    880:   5. Build the compiler.  Just type `make' in the compiler directory.
                    881: 
                    882:   6. Move the first-stage object files and executables into a subdirectory
                    883:      with this command:
                    884: 
                    885:           make stage1
                    886: 
                    887:      The files are moved into a subdirectory named `stage1'.  Once
                    888:      installation is complete, you may wish to delete these files with `rm
                    889:      -r stage1'.
                    890: 
                    891:   7. Recompile the compiler with itself, with this command:
                    892: 
                    893:           make CC=stage1/gcc CFLAGS="-g -O -Bstage1/"
                    894: 
                    895:      On a 68000 or 68020 system lacking floating point hardware, unless you
                    896:      have selected a `tm.h' file that expects by default that there is no
                    897:      such hardware, do this instead:
                    898: 
                    899:           make CC=stage1/gcc CFLAGS="-g -O -Bstage1/ -msoft-float"
                    900: 
                    901:   8. If you wish to test the compiler by compiling it with itself one more
                    902:      time, do this:
                    903: 
                    904:           make stage2
                    905:           make CC=stage2/gcc CFLAGS="-g -O -Bstage2/"
                    906:           foreach file (*.o)
                    907:           cmp $file stage2/$file
                    908:           end
                    909: 
                    910:      This will notify you if any of these stage 3 object files differs from
                    911:      those of stage 2.  Any difference, no matter how innocuous, indicates
                    912:      that the stage 2 compiler has compiled GNU CC incorrectly, and is
                    913:      therefore a potentially serious bug which you should investigate and
                    914:      report (*Note Bugs::.).
                    915: 
                    916:   9. Install the compiler driver, the compiler's passes and run-time support.
                    917:       You can use the following command:
                    918: 
                    919:           make install
                    920: 
                    921:      This copies the files `cc1', `cpp' and `gnulib' to files `gcc-cc1',
                    922:      `gcc-cpp' and `gcc-gnulib' in directory `/usr/local/lib', which is
                    923:      where the compiler driver program looks for them.  It also copies the
                    924:      driver program `gcc' into the directory `/usr/local', so that it
                    925:      appears in typical execution search paths.
                    926: 
                    927:      *Warning: the GNU CPP may not work for `ioctl.h', `ttychars.h' and
                    928:      other system header files unless the `-traditional' option is used.* 
                    929:      The bug is in the header files: at least on some machines, they rely
                    930:      on behavior that is incompatible with ANSI C.  This behavior consists
                    931:      of substituting for macro argument names when they appear inside of
                    932:      character constants.  The `-traditional' option tells GNU CC to behave
                    933:      the way these headers expect.
                    934: 
                    935:      Because of this problem, you might prefer to configure GNU CC to use
                    936:      the system's own C preprocessor.  To do so, make the file
                    937:      `/usr/local/lib/gcc-cpp' a link to `/lib/cpp'.
                    938: 
                    939:      Alternatively, on Sun systems and 4.3BSD at least, you can correct the
                    940:      include files by running the shell script `fixincludes'.  This
                    941:      installs modified, corrected copies of the files `ioctl.h' and
                    942:      `ttychars.h' in a special directory where only GNU CC will normally
                    943:      look for them.
                    944: 
                    945:      The file `/usr/include/vaxuba/qvioctl.h' used in the X window system
                    946:      needs a similar correction.
                    947: 
                    948: If you cannot install the compiler's passes and run-time support in
                    949: `/usr/local/lib', you can alternatively use the `-B' option to specify a
                    950: prefix by which they may be found.  The compiler concatenates the prefix
                    951: with the names  `cpp', `cc1' and `gnulib'.  Thus, you can put the files in
                    952: a directory `/usr/foo/gcc' and specify `-B/usr/foo/gcc/' when you run GNU CC.
                    953: 
                    954: 
                    955: File: internals,  Node: VMS Install,  Prev: Installation,  Up: Installation
                    956: 
                    957: Installing GNU CC on VMS
                    958: ========================
                    959: 
                    960: The VMS version of GNU CC is distributed in an unusual tape format which
                    961: consists of several tape files.  The first is a command file; the second is
                    962: an executable program which reads Unix tar format; the third is another
                    963: command file which uses this program to read the remainder of the tape.
                    964: 
                    965: To load the tape, it suffices to mount it `/foreign' and then do `@mta0:'
                    966: to execute the command file at the beginning of the tape.
                    967: 
                    968: The tape contains executables and object files as well as sources, so no
                    969: compilation is necessary unless you change the sources.  (This is a good
                    970: thing, since you probably don't have any other C compiler.)  If you must
                    971: recompile, here is how:
                    972: 
                    973:   1. Copy the file `tm-vms.h' to `tm.h', `config-vms.h' to `config.h',
                    974:      `vax.md' to `md.' and `output-vax.c' to `aux-output.c'.
                    975: 
                    976:   2. Type `@make' to do recompile everything.
                    977: 
                    978: To install the `GCC' command so you can use the compiler easily, in the
                    979: same manner as you use the VMS C compiler, you must install the VMS CLD
                    980: file for GNU CC as follows:
                    981: 
                    982:   1. Define the VMS logical names `GNU_CC' and `GNU_CC_INCLUDE' to point to
                    983:      the directories where the GNU CC executables (`gcc-cpp', `gcc-cc1',
                    984:      etc.) and the C include files are kept.  This should be done with the
                    985:      commands:
                    986: 
                    987:           $ assign /super /system disk:[gcc] gnu_cc
                    988:           $ assign /super /system disk:[gcc.include] gnu_cc_include
                    989: 
                    990:      with the appropriate disk and directory names.  These commands can be
                    991:      placed in your system startup file so they will be executed whenever
                    992:      the machine is rebooted.
                    993: 
                    994:   2. Install the `GCC' command with the command line:
                    995: 
                    996:           $ set command /table=sys$library:dcltables gnu_cc:gcc
                    997: 
                    998:      Now you can invoke the compiler with a command like `gcc /verbose
                    999:      file.c', which is equivalent to the command `gcc -v -c file.c' in Unix.
                   1000: 
                   1001: 
                   1002: File: internals,  Node: Trouble,  Next: Incompatibilities,  Prev: Installation,  Up: Top
                   1003: 
                   1004: Trouble in Installation
                   1005: ***********************
                   1006: 
                   1007: Here are some of the things that have caused trouble for people installing
                   1008: GNU CC.
                   1009: 
                   1010: 
                   1011: 
                   1012:      On certain systems, defining certain environment variables such as
                   1013:      `CC' can interfere with the functioning of `make'.
                   1014: 
                   1015: 
                   1016: File: internals,  Node: Incompatibilities,  Next: Extensions,  Prev: Trouble,  Up: Top
                   1017: 
                   1018: Incompatibilities of GNU CC
                   1019: ***************************
                   1020: 
                   1021: There are several noteworthy incompatibilities between GNU C and most
                   1022: existing (non-ANSI) versions of C.
                   1023: 
                   1024: Ultimately our intention is that the `-traditional' option will eliminate
                   1025: most of these incompatibilities by telling GNU C to behave like the other C
                   1026: compilers.
                   1027: 
                   1028:    * GNU CC normally makes string constants read-only.  If several
                   1029:      identical-looking string constants are used, GNU CC stores only one
                   1030:      copy of the string.
                   1031: 
                   1032:      One consequence is that you cannot call `mktemp' with a string
                   1033:      constant argument.  The function `mktemp' always alters the string its
                   1034:      argument points to.
                   1035: 
                   1036:      Another consequence is that `sscanf' does not work on some systems
                   1037:      when passed a string constant as its format control string.  This is
                   1038:      because `sscanf' incorrectly tries to write into the string constant.
                   1039: 
                   1040:      The best solution to these problems is to change the program to use
                   1041:      `char'-array variables with initialization strings for these purposes
                   1042:      instead of string constants.  But if this is not possible, you can use
                   1043:      the `-fwritable-strings' flag, which directs GNU CC to handle string
                   1044:      constants the same way most C compilers do.
                   1045: 
                   1046:    * GNU CC does not substitute macro arguments when they appear inside of
                   1047:      string constants.  For example, the following macro in GNU CC
                   1048: 
                   1049:           #define foo(a) "a"
                   1050: 
                   1051:      will produce output `"a"' regardless of what the argument A is.
                   1052: 
                   1053:      The `-traditional' option directs GNU CC to handle such cases (among
                   1054:      others) in the old-fashioned (non-ANSI) fashion.
                   1055: 
                   1056:    * When you use `setjmp' and `longjmp', the only automatic variables
                   1057:      guaranteed to remain valid are those declared `volatile'.  This is a
                   1058:      consequence of automatic register allocation.  Consider this function:
                   1059: 
                   1060:           jmp_buf j;
                   1061:           
                   1062:           foo ()
                   1063:           {
                   1064:             int a, b;
                   1065:           
                   1066:             a = fun1 ();
                   1067:             if (setjmp (j))
                   1068:               return a;
                   1069:           
                   1070:             a = fun2 ();
                   1071:             /* `longjmp (j)' may be occur in `fun3'. */
                   1072:             return a + fun3 ();
                   1073:           }
                   1074: 
                   1075:      Here `a' may or may not be restored to its first value when the
                   1076:      `longjmp' occurs.  If `a' is allocated in a register, then its first
                   1077:      value is restored; otherwise, it keeps the last value stored in it.
                   1078: 
                   1079:      If you use the `-W' option with the `-O' option, you will get a
                   1080:      warning when GNU CC thinks such a problem might be possible.
                   1081: 
                   1082:    * Declarations of external variables and functions within a block apply
                   1083:      only to the block containing the declaration.  In other words, they
                   1084:      have the same scope as any other declaration in the same place.
                   1085: 
                   1086:      In some other C compilers, a `extern' declaration affects all the rest
                   1087:      of the file even if it happens within a block.
                   1088: 
                   1089:      The `-traditional' option directs GNU C to treat all `extern'
                   1090:      declarations as global, like traditional compilers.
                   1091: 
                   1092:    * In traditional C, you can combine `long', etc., with a typedef name,
                   1093:      as shown here:
                   1094: 
                   1095:           typedef int foo;
                   1096:           typedef long foo bar;
                   1097: 
                   1098:      In ANSI C, this is not allowed: `long' and other type modifiers
                   1099:      require an explicit `int'.  Because this criterion is expressed by
                   1100:      Bison grammar rules rather than C code, the `-traditional' flag cannot
                   1101:      alter it.
                   1102: 
                   1103:    * When compiling functions that return structures or unions, GNU CC
                   1104:      output code uses a method different from that used on most versions of
                   1105:      Unix.  As a result, code compiled with GNU CC cannot call a
                   1106:      structure-returning function compiled with PCC, and vice versa.
                   1107: 
                   1108:      The method used by GCC is as follows: a structure or union which is 1,
                   1109:      2, 4 or 8 bytes long is returned like a scalar.  A structure or union
                   1110:      with any other size is stored into an address supplied by the caller
                   1111:      in a special, fixed register.
                   1112: 
                   1113:      PCC usually handles all sizes of structures and unions by returning
                   1114:      the address of a block of static storage containing the value.  This
                   1115:      method is not used in GCC because it is slower and nonreentrant.
                   1116: 
                   1117:      On systems where PCC works this way, you may be able to make
                   1118:      GCC-compiled code call such functions that were compiled with PCC by
                   1119:      declaring them to return a pointer to the structure or union instead
                   1120:      of the structure or union itself.  For example, instead of this:
                   1121: 
                   1122:           struct foo nextfoo ();
                   1123: 
                   1124:      write this:
                   1125: 
                   1126:           struct foo *nextfoo ();
                   1127:           #define nextfoo *nextfoo
                   1128: 
                   1129:      (Note that this assumes you are using the GNU preprocessor, so that
                   1130:      the ANSI antirecursion rules for macro expansions are effective.)
                   1131: 
                   1132: 

unix.superglobalmegacorp.com

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