Annotation of gcc/gcc.info-5, revision 1.1.1.3

1.1.1.3 ! root        1: This is Info file gcc.info, produced by Makeinfo-1.47 from the input
1.1       root        2: file gcc.texi.
                      3: 
                      4:    This file documents the use and the internals of the GNU compiler.
                      5: 
                      6:    Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
                      7: 
1.1.1.3 ! root        8:    Permission is granted to make and distribute verbatim copies of this
        !             9: manual provided the copyright notice and this permission notice are
        !            10: preserved on all copies.
1.1       root       11: 
                     12:    Permission is granted to copy and distribute modified versions of
                     13: this manual under the conditions for verbatim copying, provided also
1.1.1.3 ! root       14: that the sections entitled "GNU General Public License" and "Boycott"
        !            15: are included exactly as in the original, and provided that the entire
        !            16: resulting derived work is distributed under the terms of a permission
        !            17: notice identical to this one.
1.1       root       18: 
                     19:    Permission is granted to copy and distribute translations of this
                     20: manual into another language, under the above conditions for modified
1.1.1.3 ! root       21: versions, except that the sections entitled "GNU General Public
        !            22: License" and "Boycott", and this permission notice, may be included in
        !            23: translations approved by the Free Software Foundation instead of in the
        !            24: original English.
1.1       root       25: 
                     26: 
1.1.1.3 ! root       27: File: gcc.info,  Node: Function Attributes,  Next: Function Prototypes,  Prev: Case Ranges,  Up: Extensions
1.1       root       28: 
                     29: Declaring Attributes of Functions
                     30: =================================
                     31: 
                     32:    In GNU C, you declare certain things about functions called in your
                     33: program which help the compiler optimize function calls.
                     34: 
1.1.1.3 ! root       35:    A few standard library functions, such as `abort' and `exit', cannot
        !            36: return.  GNU CC knows this automatically.  Some programs define their
        !            37: own functions that never return.  You can declare them `volatile' to
        !            38: tell the compiler this fact.  For example,
1.1       root       39: 
                     40:      extern void volatile fatal ();
                     41:      
                     42:      void
                     43:      fatal (...)
                     44:      {
                     45:        ... /* Print error message. */ ...
                     46:        exit (1);
                     47:      }
                     48: 
                     49:    The `volatile' keyword tells the compiler to assume that `fatal'
                     50: cannot return.  This makes slightly better code, but more importantly
                     51: it helps avoid spurious warnings of uninitialized variables.
                     52: 
                     53:    It does not make sense for a `volatile' function to have a return
                     54: type other than `void'.
                     55: 
                     56:    Many functions do not examine any values except their arguments, and
1.1.1.3 ! root       57: have no effects except the return value.  Such a function can be subject
        !            58: to common subexpression elimination and loop optimization just as an
        !            59: arithmetic operator would be.  These functions should be declared
1.1       root       60: `const'.  For example,
                     61: 
                     62:      extern int const square ();
                     63: 
                     64: says that the hypothetical function `square' is safe to call fewer
                     65: times than the program says.
                     66: 
1.1.1.3 ! root       67:    Note that a function that has pointer arguments and examines the data
        !            68: pointed to must *not* be declared `const'.  Likewise, a function that
        !            69: calls a non-`const' function usually must not be `const'.  It does not
        !            70: make sense for a `const' function to return `void'.
        !            71: 
        !            72:    We recommend placing the keyword `const' after the function's return
        !            73: type.  It makes no difference in the example above, but when the return
        !            74: type is a pointer, it is the only way to make the function itself
        !            75: const.  For example,
1.1       root       76: 
                     77:      const char *mincp (int);
                     78: 
1.1.1.3 ! root       79: says that `mincp' returns `const char *'--a pointer to a const object. 
        !            80: To declare `mincp' const, you must write this:
1.1       root       81: 
                     82:      char * const mincp (int);
                     83: 
                     84:    Some people object to this feature, suggesting that ANSI C's
                     85: `#pragma' should be used instead.  There are two reasons for not doing
                     86: this.
                     87: 
                     88:   1. It is impossible to generate `#pragma' commands from a macro.
                     89: 
                     90:   2. The `#pragma' command is just as likely as these keywords to mean
                     91:      something else in another compiler.
                     92: 
                     93:    These two reasons apply to almost any application that might be
                     94: proposed for `#pragma'.  It is basically a mistake to use `#pragma' for
                     95: *anything*.
                     96: 
                     97: 
1.1.1.3 ! root       98: File: gcc.info,  Node: Function Prototypes,  Next: Dollar Signs,  Prev: Function Attributes,  Up: Extensions
        !            99: 
        !           100: Prototypes and Old-Style Function Definitions
        !           101: =============================================
        !           102: 
        !           103:    GNU C extends ANSI C to allow a function prototype to override a
        !           104: later old-style non-prototype definition.  Consider the following
        !           105: example:
        !           106: 
        !           107:      /* Use prototypes unless the compiler is old-fashioned.  */
        !           108:      #if __STDC__
        !           109:      #define P((x)) (x)
        !           110:      #else
        !           111:      #define P((x)) ()
        !           112:      #endif
        !           113:      
        !           114:      /* Prototype function declaration.  */
        !           115:      int isroot P((uid_t));
        !           116:      
        !           117:      /* Old-style function definition.  */
        !           118:      int
        !           119:      isroot (x)   /* ??? lossage here ??? */
        !           120:           uid_t x;
        !           121:      {
        !           122:        return x == 0;
        !           123:      }
        !           124: 
        !           125:    Suppose the type `uid_t' happens to be `short'.  ANSI C does not
        !           126: allow this example, because subword arguments in old-style
        !           127: non-prototype definitions are promoted.  Therefore in this example the
        !           128: function definition's argument is really an `int', which does not match
        !           129: the prototype argument type of `short'.
        !           130: 
        !           131:    This restriction of ANSI C makes it hard to write code that is
        !           132: portable to traditional C compilers, because the programmer does not
        !           133: know whether the `uid_t' type is `short', `int', or `long'.  Therefore,
        !           134: in cases like these GNU C allows a prototype to override a later
        !           135: old-style definition.  More precisely, in GNU C, a function prototype
        !           136: argument type overrides the argument type specified by a later
        !           137: old-style definition if the former type is the same as the latter type
        !           138: before promotion.  Thus in GNU C the above example is equivalent to the
        !           139: following:
        !           140: 
        !           141:      int isroot (uid_t);
        !           142:      
        !           143:      int
        !           144:      isroot (uid_t x)
        !           145:      {
        !           146:        return x == 0;
        !           147:      }
        !           148: 
        !           149: 
        !           150: File: gcc.info,  Node: Dollar Signs,  Next: Character Escapes,  Prev: Function Prototypes,  Up: Extensions
1.1       root      151: 
                    152: Dollar Signs in Identifier Names
                    153: ================================
                    154: 
                    155:    In GNU C, you may use dollar signs in identifier names.  This is
                    156: because many traditional C implementations allow such identifiers.
                    157: 
                    158:    Dollar signs are allowed on certain machines if you specify
                    159: `-traditional'.  On a few systems they are allowed by default, even if
                    160: `-traditional' is not used.  But they are never allowed if you specify
                    161: `-ansi'.
                    162: 
                    163:    There are certain ANSI C programs (obscure, to be sure) that would
                    164: compile incorrectly if dollar signs were permitted in identifiers.  For
                    165: example:
                    166: 
                    167:      #define foo(a) #a
                    168:      #define lose(b) foo (b)
                    169:      #define test$
                    170:      lose (test)
                    171: 
                    172: 
                    173: File: gcc.info,  Node: Character Escapes,  Next: Variable Attributes,  Prev: Dollar Signs,  Up: Extensions
                    174: 
                    175: The Character ESC in Constants
                    176: ==============================
                    177: 
                    178:    You can use the sequence `\e' in a string or character constant to
                    179: stand for the ASCII character ESC.
                    180: 
                    181: 
                    182: File: gcc.info,  Node: Alignment,  Next: Inline,  Prev: Variable Attributes,  Up: Extensions
                    183: 
                    184: Inquiring on Alignment of Types or Variables
                    185: ============================================
                    186: 
                    187:    The keyword `__alignof__' allows you to inquire about how an object
                    188: is aligned, or the minimum alignment usually required by a type.  Its
                    189: syntax is just like `sizeof'.
                    190: 
                    191:    For example, if the target machine requires a `double' value to be
1.1.1.3 ! root      192: aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This
1.1       root      193: is true on many RISC machines.  On more traditional machine designs,
                    194: `__alignof__ (double)' is 4 or even 2.
                    195: 
1.1.1.3 ! root      196:    Some machines never actually require alignment; they allow reference
        !           197: to any data type even at an odd addresses.  For these machines,
        !           198: `__alignof__' reports the *recommended* alignment of a type.
1.1       root      199: 
                    200:    When the operand of `__alignof__' is an lvalue rather than a type,
                    201: the value is the largest alignment that the lvalue is known to have. 
                    202: It may have this alignment as a result of its data type, or because it
                    203: is part of a structure and inherits alignment from that structure. For
                    204: example, after this declaration:
                    205: 
                    206:      struct foo { int x; char y; } foo1;
                    207: 
                    208: the value of `__alignof__ (foo1.y)' is probably 2 or 4, the same as
                    209: `__alignof__ (int)', even though the data type of `foo1.y' does not
                    210: itself demand any alignment.
                    211: 
                    212: 
                    213: File: gcc.info,  Node: Variable Attributes,  Next: Alignment,  Prev: Character Escapes,  Up: Extensions
                    214: 
                    215: Specifying Attributes of Variables
                    216: ==================================
                    217: 
1.1.1.3 ! root      218:    The keyword `__attribute__' allows you to specify special attributes
        !           219: of variables or structure fields.  The only attributes currently
        !           220: defined are the `aligned' and `format' attributes.
1.1       root      221: 
                    222:    The `aligned' attribute specifies the alignment of the variable or
                    223: structure field.  For example, the declaration:
                    224: 
                    225:      int x __attribute__ ((aligned (16))) = 0;
                    226: 
                    227: causes the compiler to allocate the global variable `x' on a 16-byte
                    228: boundary.  On a 68000, this could be used in conjunction with an `asm'
                    229: expression to access the `move16' instruction which requires 16-byte
                    230: aligned operands.
                    231: 
                    232:    You can also specify the alignment of structure fields.  For
                    233: example, to create a double-word aligned `int' pair, you could write:
                    234: 
                    235:      struct foo { int x[2] __attribute__ ((aligned (8))); };
                    236: 
                    237: This is an alternative to creating a union with a `double' member that
                    238: forces the union to be double-word aligned.
                    239: 
                    240:    It is not possible to specify the alignment of functions; the
                    241: alignment of functions is determined by the machine's requirements and
1.1.1.3 ! root      242: cannot be changed.  You cannot specify alignment for a typedef name
        !           243: because such a name is just an alias, not a distinct type.
1.1       root      244: 
                    245:    The `format' attribute specifies that a function takes `printf' or
                    246: `scanf' style arguments which should be type-checked against a format
                    247: string.  For example, the declaration:
                    248: 
                    249:      extern int
                    250:      my_printf (void *my_object, const char *my_format, ...)
                    251:            __attribute__ ((format (printf, 2, 3)));
                    252: 
                    253: causes the compiler to check the arguments in calls to `my_printf' for
                    254: consistency with the `printf' style format string argument `my_format'.
                    255: 
                    256:    The first parameter of the `format' attribute determines how the
1.1.1.3 ! root      257: format string is interpreted, and should be either `printf' or `scanf'.
        !           258:  The second parameter specifies the number of the format string
        !           259: argument (starting from 1).  The third parameter specifies the number
        !           260: of the first argument which should be checked against the format
        !           261: string.  For functions where the arguments are not available to be
        !           262: checked (such as `vprintf'), specify the third parameter as zero.  In
        !           263: this case the compiler only checks the format string for consistency.
1.1       root      264: 
                    265:    In the example above, the format string (`my_format') is the second
                    266: argument to `my_print' and the arguments to check start with the third
                    267: argument, so the correct parameters for the format attribute are 2 and
                    268: 3.
                    269: 
                    270:    The `format' attribute allows you to identify your own functions
                    271: which take format strings as arguments, so that GNU CC can check the
                    272: calls to these functions for errors.  The compiler always checks
                    273: formats for the ANSI library functions `printf', `fprintf', `sprintf',
                    274: `scanf', `fscanf', `sscanf', `vprintf', `vfprintf' and `vsprintf'
                    275: whenever such warnings are requested (using `-Wformat'), so there is no
                    276: need to modify the header file `stdio.h'.
                    277: 
                    278: 
                    279: File: gcc.info,  Node: Inline,  Next: Extended Asm,  Prev: Alignment,  Up: Extensions
                    280: 
                    281: An Inline Function is As Fast As a Macro
                    282: ========================================
                    283: 
                    284:    By declaring a function `inline', you can direct GNU CC to integrate
                    285: that function's code into the code for its callers.  This makes
                    286: execution faster by eliminating the function-call overhead; in
                    287: addition, if any of the actual argument values are constant, their
1.1.1.3 ! root      288: known values may permit simplifications at compile time so that not all
        !           289: of the inline function's code needs to be included.
1.1       root      290: 
                    291:    To declare a function inline, use the `inline' keyword in its
                    292: declaration, like this:
                    293: 
                    294:      inline int
                    295:      inc (int *a)
                    296:      {
                    297:        (*a)++;
                    298:      }
                    299: 
1.1.1.3 ! root      300:    (If you are writing a header file to be included in ANSI C programs,
        !           301: write `__inline__' instead of `inline'.  *Note Alternate Keywords::.)
1.1       root      302: 
                    303:    You can also make all "simple enough" functions inline with the
                    304: option `-finline-functions'.  Note that certain usages in a function
                    305: definition can make it unsuitable for inline substitution.
                    306: 
                    307:    When a function is both inline and `static', if all calls to the
                    308: function are integrated into the caller, and the function's address is
1.1.1.3 ! root      309: never used, then the function's own assembler code is never referenced.
1.1       root      310: In this case, GNU CC does not actually output assembler code for the
1.1.1.3 ! root      311: function, unless you specify the option `-fkeep-inline-functions'. Some
        !           312: calls cannot be integrated for various reasons (in particular, calls
        !           313: that precede the function's definition cannot be integrated, and
1.1       root      314: neither can recursive calls within the definition).  If there is a
                    315: nonintegrated call, then the function is compiled to assembler code as
                    316: usual.  The function must also be compiled as usual if the program
                    317: refers to its address, because that can't be inlined.
                    318: 
                    319:    When an inline function is not `static', then the compiler must
                    320: assume that there may be calls from other source files; since a global
                    321: symbol can be defined only once in any program, the function must not
                    322: be defined in the other source files, so the calls therein cannot be
1.1.1.3 ! root      323: integrated. Therefore, a non-`static' inline function is always
1.1       root      324: compiled on its own in the usual fashion.
                    325: 
                    326:    If you specify both `inline' and `extern' in the function
                    327: definition, then the definition is used only for inlining.  In no case
                    328: is the function compiled on its own, not even if you refer to its
                    329: address explicitly.  Such an address becomes an external reference, as
                    330: if you had only declared the function, and had not defined it.
                    331: 
1.1.1.3 ! root      332:    This combination of `inline' and `extern' has almost the effect of a
        !           333: macro.  The way to use it is to put a function definition in a header
        !           334: file with these keywords, and put another copy of the definition
        !           335: (lacking `inline' and `extern') in a library file. The definition in
        !           336: the header file will cause most calls to the function to be inlined. 
        !           337: If any uses of the function remain, they will refer to the single copy
        !           338: in the library.
1.1       root      339: 
                    340: 
                    341: File: gcc.info,  Node: Extended Asm,  Next: Asm Labels,  Prev: Inline,  Up: Extensions
                    342: 
                    343: Assembler Instructions with C Expression Operands
                    344: =================================================
                    345: 
                    346:    In an assembler instruction using `asm', you can now specify the
                    347: operands of the instruction using C expressions.  This means no more
                    348: guessing which registers or memory locations will contain the data you
                    349: want to use.
                    350: 
                    351:    You must specify an assembler instruction template much like what
1.1.1.3 ! root      352: appears in a machine description, plus an operand constraint string for
        !           353: each operand.
1.1       root      354: 
                    355:    For example, here is how to use the 68881's `fsinx' instruction:
                    356: 
                    357:      asm ("fsinx %1,%0" : "=f" (result) : "f" (angle));
                    358: 
                    359: Here `angle' is the C expression for the input operand while `result'
                    360: is that of the output operand.  Each has `"f"' as its operand
1.1.1.3 ! root      361: constraint, saying that a floating point register is required.  The `='
        !           362: in `=f' indicates that the operand is an output; all output operands'
        !           363: constraints must use `='.  The constraints use the same language used
        !           364: in the machine description (*note Constraints::.).
1.1       root      365: 
                    366: Each operand is described by an operand-constraint string followed by
                    367: the C expression in parentheses.  A colon separates the assembler
                    368: template from the first output operand, and another separates the last
                    369: output operand from the first input, if any.  Commas separate output
                    370: operands and separate inputs.  The total number of operands is limited
                    371: to ten or to the maximum number of operands in any instruction pattern
                    372: in the machine description, whichever is greater.
                    373: 
                    374:    If there are no output operands, and there are input operands, then
                    375: there must be two consecutive colons surrounding the place where the
                    376: output operands would go.
                    377: 
                    378:    Output operand expressions must be lvalues; the compiler can check
1.1.1.3 ! root      379: this. The input operands need not be lvalues.  The compiler cannot
1.1       root      380: check whether the operands have data types that are reasonable for the
                    381: instruction being executed.  It does not parse the assembler
                    382: instruction template and does not know what it means, or whether it is
                    383: valid assembler input.  The extended `asm' feature is most often used
                    384: for machine instructions that the compiler itself does not know exist.
                    385: 
                    386:    The output operands must be write-only; GNU CC will assume that the
1.1.1.3 ! root      387: values in these operands before the instruction are dead and need not be
        !           388: generated.  Extended asm does not support input-output or read-write
1.1       root      389: operands.  For this reason, the constraint character `+', which
                    390: indicates such an operand, may not be used.
                    391: 
                    392:    When the assembler instruction has a read-write operand, or an
                    393: operand in which only some of the bits are to be changed, you must
                    394: logically split its function into two separate operands, one input
1.1.1.3 ! root      395: operand and one write-only output operand.  The connection between them
        !           396: is expressed by constraints which say they need to be in the same
1.1       root      397: location when the instruction executes.  You can use the same C
                    398: expression for both operands, or different expressions.  For example,
                    399: here we write the (fictitious) `combine' instruction with `bar' as its
                    400: read-only source operand and `foo' as its read-write destination:
                    401: 
                    402:      asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar));
                    403: 
                    404: The constraint `"0"' for operand 1 says that it must occupy the same
                    405: location as operand 0.  A digit in constraint is allowed only in an
                    406: input operand, and it must refer to an output operand.
                    407: 
                    408:    Only a digit in the constraint can guarantee that one operand will
1.1.1.3 ! root      409: be in the same place as another.  The mere fact that `foo' is the value
        !           410: of both operands is not enough to guarantee that they will be in the
        !           411: same place in the generated assembler code.  The following would not
        !           412: work:
1.1       root      413: 
                    414:      asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar));
                    415: 
                    416:    Various optimizations or reloading could cause operands 0 and 1 to
                    417: be in different registers; GNU CC knows no reason not to do so.  For
                    418: example, the compiler might find a copy of the value of `foo' in one
1.1.1.3 ! root      419: register and use it for operand 1, but generate the output operand 0 in
        !           420: a different register (copying it afterward to `foo''s own address).  Of
        !           421: course, since the register for operand 1 is not even mentioned in the
        !           422: assembler code, the result will not work, but GNU CC can't tell that.
1.1       root      423: 
                    424:    Some instructions clobber specific hard registers.  To describe
                    425: this, write a third colon after the input operands, followed by the
                    426: names of the clobbered hard registers (given as strings).  Here is a
                    427: realistic example for the Vax:
                    428: 
                    429:      asm volatile ("movc3 %0,%1,%2"
                    430:                    : /* no outputs */
                    431:                    : "g" (from), "g" (to), "g" (count)
                    432:                    : "r0", "r1", "r2", "r3", "r4", "r5");
                    433: 
                    434:    If you refer to a particular hardware register from the assembler
                    435: code, then you will probably have to list the register after the third
                    436: colon to tell the compiler that the register's value is modified.  In
                    437: many assemblers, the register names begin with `%'; to produce one `%'
                    438: in the assembler code, you must write `%%' in the input.
                    439: 
1.1.1.3 ! root      440:    If your assembler instruction can alter the condition code register,
        !           441: add `cc' to the list of clobbered registers.  GNU CC on some machines
        !           442: represents the condition codes as a specific hardware register; `cc'
        !           443: serves to name this register.  On other machines, the condition code is
        !           444: handled differently, and specifying `cc' has no effect.  But it is
        !           445: valid no matter what the machine.
        !           446: 
1.1       root      447:    You can put multiple assembler instructions together in a single
1.1.1.3 ! root      448: `asm' template, separated either with newlines (written as `\n') or with
        !           449: semicolons if the assembler allows such semicolons.  The GNU assembler
        !           450: allows semicolons and all Unix assemblers seem to do so.  The input
        !           451: operands are guaranteed not to use any of the clobbered registers, and
        !           452: neither will the output operands' addresses, so you can read and write
        !           453: the clobbered registers as many times as you like.  Here is an example
        !           454: of multiple instructions in a template; it assumes that the subroutine
        !           455: `_foo' accepts arguments in registers 9 and 10:
1.1       root      456: 
                    457:      asm ("movl %0,r9;movl %1,r10;call _foo"
                    458:           : /* no outputs */
                    459:           : "g" (from), "g" (to)
                    460:           : "r9", "r10");
                    461: 
                    462:    Unless an output operand has the `&' constraint modifier, GNU CC may
                    463: allocate it in the same register as an unrelated input operand, on the
1.1.1.3 ! root      464: assumption that the inputs are consumed before the outputs are produced.
        !           465: This assumption may be false if the assembler code actually consists of
        !           466: more than one instruction.  In such a case, use `&' for each output
        !           467: operand that may not overlap an input. *Note Modifiers::.
1.1       root      468: 
                    469:    If you want to test the condition code produced by an assembler
                    470: instruction, you must include a branch and a label in the `asm'
                    471: construct, as follows:
                    472: 
                    473:      asm ("clr %0;frob %1;beq 0f;mov #1,%0;0:"
                    474:           : "g" (result)
                    475:           : "g" (input));
                    476: 
                    477: This assumes your assembler supports local labels, as the GNU assembler
                    478: and most Unix assemblers do.
                    479: 
1.1.1.3 ! root      480:    Usually the most convenient way to use these `asm' instructions is to
        !           481: encapsulate them in macros that look like functions.  For example,
1.1       root      482: 
                    483:      #define sin(x)       \
                    484:      ({ double __value, __arg = (x);   \
                    485:         asm ("fsinx %1,%0": "=f" (__value): "f" (__arg));  \
                    486:         __value; })
                    487: 
                    488: Here the variable `__arg' is used to make sure that the instruction
1.1.1.3 ! root      489: operates on a proper `double' value, and to accept only those arguments
        !           490: `x' which can convert automatically to a `double'.
1.1       root      491: 
                    492:    Another way to make sure the instruction operates on the correct
1.1.1.3 ! root      493: data type is to use a cast in the `asm'.  This is different from using a
        !           494: variable `__arg' in that it converts more different types.  For
1.1       root      495: example, if the desired type were `int', casting the argument to `int'
                    496: would accept a pointer with no complaint, while assigning the argument
                    497: to an `int' variable named `__arg' would warn about using a pointer
                    498: unless the caller explicitly casts it.
                    499: 
                    500:    If an `asm' has output operands, GNU CC assumes for optimization
                    501: purposes that the instruction has no side effects except to change the
                    502: output operands.  This does not mean that instructions with a side
                    503: effect cannot be used, but you must be careful, because the compiler
1.1.1.3 ! root      504: may eliminate them if the output operands aren't used, or move them out
        !           505: of loops, or replace two with one if they constitute a common
1.1       root      506: subexpression.  Also, if your instruction does have a side effect on a
                    507: variable that otherwise appears not to change, the old value of the
                    508: variable may be reused later if it happens to be found in a register.
                    509: 
                    510:    You can prevent an `asm' instruction from being deleted, moved
1.1.1.3 ! root      511: significantly, or combined, by writing the keyword `volatile' after the
        !           512: `asm'.  For example:
1.1       root      513: 
                    514:      #define set_priority(x)  \
                    515:      asm volatile ("set_priority %0": /* no outputs */ : "g" (x))
                    516: 
                    517: An instruction without output operands will not be deleted or moved
                    518: significantly, regardless, unless it is unreachable.
                    519: 
                    520:    Note that even a volatile `asm' instruction can be moved in ways
                    521: that appear insignificant to the compiler, such as across jump
                    522: instructions.  You can't expect a sequence of volatile `asm'
                    523: instructions to remain perfectly consecutive.  If you want consecutive
                    524: output, use a single `asm'.
                    525: 
                    526:    It is a natural idea to look for a way to give access to the
                    527: condition code left by the assembler instruction.  However, when we
1.1.1.3 ! root      528: attempted to implement this, we found no way to make it work reliably. 
        !           529: The problem is that output operands might need reloading, which would
        !           530: result in additional following "store" instructions.  On most machines,
        !           531: these instructions would alter the condition code before there was time
        !           532: to test it.  This problem doesn't arise for ordinary "test" and
        !           533: "compare" instructions because they don't have any output operands.
1.1       root      534: 
                    535:    If you are writing a header file that should be includable in ANSI C
1.1.1.3 ! root      536: programs, write `__asm__' instead of `asm'.  *Note Alternate Keywords::.
1.1       root      537: 
                    538: 
                    539: File: gcc.info,  Node: Asm Labels,  Next: Explicit Reg Vars,  Prev: Extended Asm,  Up: Extensions
                    540: 
                    541: Controlling Names Used in Assembler Code
                    542: ========================================
                    543: 
                    544:    You can specify the name to be used in the assembler code for a C
                    545: function or variable by writing the `asm' (or `__asm__') keyword after
                    546: the declarator as follows:
                    547: 
                    548:      int foo asm ("myfoo") = 2;
                    549: 
                    550: This specifies that the name to be used for the variable `foo' in the
                    551: assembler code should be `myfoo' rather than the usual `_foo'.
                    552: 
                    553:    On systems where an underscore is normally prepended to the name of
                    554: a C function or variable, this feature allows you to define names for
                    555: the linker that do not start with an underscore.
                    556: 
1.1.1.3 ! root      557:    You cannot use `asm' in this way in a function *definition*; but you
        !           558: can get the same effect by writing a declaration for the function
1.1       root      559: before its definition and putting `asm' there, like this:
                    560: 
                    561:      extern func () asm ("FUNC");
                    562:      
                    563:      func (x, y)
                    564:           int x, y;
                    565:      ...
                    566: 
                    567:    It is up to you to make sure that the assembler names you choose do
1.1.1.3 ! root      568: not conflict with any other assembler symbols.  Also, you must not use a
        !           569: register name; that would produce completely invalid assembler code. 
        !           570: GNU CC does not as yet have the ability to store static variables in
        !           571: registers. Perhaps that will be added.
1.1       root      572: 
                    573: 
                    574: File: gcc.info,  Node: Explicit Reg Vars,  Next: Alternate Keywords,  Prev: Asm Labels,  Up: Extensions
                    575: 
                    576: Variables in Specified Registers
                    577: ================================
                    578: 
                    579:    GNU C allows you to put a few global variables into specified
                    580: hardware registers.  You can also specify the register in which an
                    581: ordinary register variable should be allocated.
                    582: 
1.1.1.3 ! root      583:    * Global register variables reserve registers throughout the program.
        !           584:      This may be useful in programs such as programming language
        !           585:      interpreters which have a couple of global variables that are
        !           586:      accessed very often.
1.1       root      587: 
                    588:    * Local register variables in specific registers do not reserve the
                    589:      registers.  The compiler's data flow analysis is capable of
1.1.1.3 ! root      590:      determining where the specified registers contain live values, and
        !           591:      where they are available for other uses.
1.1       root      592: 
                    593:      These local variables are sometimes convenient for use with the
                    594:      extended `asm' feature (*note Extended Asm::.), if you want to
                    595:      write one output of the assembler instruction directly into a
1.1.1.3 ! root      596:      particular register. (This will work provided the register you
1.1       root      597:      specify fits the constraints specified for that operand in the
                    598:      `asm'.)
                    599: 
                    600: * Menu:
                    601: 
                    602: * Global Reg Vars::
                    603: * Local Reg Vars::
                    604: 
                    605: 
                    606: File: gcc.info,  Node: Global Reg Vars,  Next: Local Reg Vars,  Up: Explicit Reg Vars
                    607: 
                    608: Defining Global Register Variables
                    609: ----------------------------------
                    610: 
                    611:    You can define a global register variable in GNU C like this:
                    612: 
                    613:      register int *foo asm ("a5");
                    614: 
                    615: Here `a5' is the name of the register which should be used.  Choose a
                    616: register which is normally saved and restored by function calls on your
                    617: machine, so that library routines will not clobber it.
                    618: 
                    619:    Naturally the register name is cpu-dependent, so you would need to
                    620: conditionalize your program according to cpu type.  The register `a5'
                    621: would be a good choice on a 68000 for a variable of pointer type.  On
                    622: machines with register windows, be sure to choose a "global" register
                    623: that is not affected magically by the function call mechanism.
                    624: 
                    625:    In addition, operating systems on one type of cpu may differ in how
                    626: they name the registers; then you would need additional conditionals. 
                    627: For example, some 68000 operating systems call this register `%a5'.
                    628: 
                    629:    Eventually there may be a way of asking the compiler to choose a
                    630: register automatically, but first we need to figure out how it should
                    631: choose and how to enable you to guide the choice.  No solution is
                    632: evident.
                    633: 
                    634:    Defining a global register variable in a certain register reserves
                    635: that register entirely for this use, at least within the current
1.1.1.3 ! root      636: compilation. The register will not be allocated for any other purpose
1.1       root      637: in the functions in the current compilation.  The register will not be
                    638: saved and restored by these functions.  Stores into this register are
                    639: never deleted even if they would appear to be dead, but references may
                    640: be deleted or moved or simplified.
                    641: 
                    642:    It is not safe to access the global register variables from signal
                    643: handlers, or from more than one thread of control, because the system
                    644: library routines may temporarily use the register for other things
                    645: (unless you recompile them specially for the task at hand).
                    646: 
1.1.1.3 ! root      647:    It is not safe for one function that uses a global register variable
        !           648: to call another such function `foo' by way of a third function `lose'
        !           649: that was compiled without knowledge of this variable (i.e. in a
1.1       root      650: different source file in which the variable wasn't declared).  This is
1.1.1.3 ! root      651: because `lose' might save the register and put some other value there.
1.1       root      652: For example, you can't expect a global register variable to be
                    653: available in the comparison-function that you pass to `qsort', since
                    654: `qsort' might have put something else in that register.  (If you are
                    655: prepared to recompile `qsort' with the same global register variable,
                    656: you can solve this problem.)
                    657: 
                    658:    If you want to recompile `qsort' or other source files which do not
                    659: actually use your global register variable, so that they will not use
                    660: that register for any other purpose, then it suffices to specify the
                    661: compiler option `-ffixed-REG'.  You need not actually add a global
                    662: register declaration to their source code.
                    663: 
                    664:    A function which can alter the value of a global register variable
1.1.1.3 ! root      665: cannot safely be called from a function compiled without this variable,
        !           666: because it could clobber the value the caller expects to find there on
        !           667: return. Therefore, the function which is the entry point into the part
        !           668: of the program that uses the global register variable must explicitly
        !           669: save and restore the value which belongs to its caller.
1.1       root      670: 
                    671:    On most machines, `longjmp' will restore to each global register
                    672: variable the value it had at the time of the `setjmp'.  On some
                    673: machines, however, `longjmp' will not change the value of global
                    674: register variables.  To be portable, the function that called `setjmp'
1.1.1.3 ! root      675: should make other arrangements to save the values of the global register
        !           676: variables, and to restore them in a `longjmp'.  This way, the same
        !           677: thing will happen regardless of what `longjmp' does.
1.1       root      678: 
                    679:    All global register variable declarations must precede all function
                    680: definitions.  If such a declaration could appear after function
                    681: definitions, the declaration would be too late to prevent the register
                    682: from being used for other purposes in the preceding functions.
                    683: 
                    684:    Global register variables may not have initial values, because an
                    685: executable file has no means to supply initial contents for a register.
                    686: 
                    687:    On the Sparc, there are reports that g3 ... g7 are suitable
                    688: registers, but certain library functions, such as `getwd', as well as
                    689: the subroutines for division and remainder, modify g3 and g4.  g1 and
                    690: g2 are local temporaries.
                    691: 
1.1.1.3 ! root      692:    On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. Of
        !           693: course, it will not do to use more than a few of those.
1.1       root      694: 
                    695: 
                    696: File: gcc.info,  Node: Local Reg Vars,  Prev: Global Reg Vars,  Up: Explicit Reg Vars
                    697: 
                    698: Specifying Registers for Local Variables
                    699: ----------------------------------------
                    700: 
                    701:    You can define a local register variable with a specified register
                    702: like this:
                    703: 
                    704:      register int *foo asm ("a5");
                    705: 
                    706: Here `a5' is the name of the register which should be used.  Note that
                    707: this is the same syntax used for defining global register variables,
                    708: but for a local variable it would appear within a function.
                    709: 
                    710:    Naturally the register name is cpu-dependent, but this is not a
                    711: problem, since specific registers are most often useful with explicit
                    712: assembler instructions (*note Extended Asm::.).  Both of these things
1.1.1.3 ! root      713: generally require that you conditionalize your program according to cpu
        !           714: type.
1.1       root      715: 
                    716:    In addition, operating systems on one type of cpu may differ in how
                    717: they name the registers; then you would need additional conditionals. 
                    718: For example, some 68000 operating systems call this register `%a5'.
                    719: 
                    720:    Eventually there may be a way of asking the compiler to choose a
                    721: register automatically, but first we need to figure out how it should
                    722: choose and how to enable you to guide the choice.  No solution is
                    723: evident.
                    724: 
                    725:    Defining such a register variable does not reserve the register; it
1.1.1.3 ! root      726: remains available for other uses in places where flow control determines
        !           727: the variable's value is not live.  However, these registers are made
        !           728: unavailable for use in the reload pass.  I would not be surprised if
        !           729: excessive use of this feature leaves the compiler too few available
        !           730: registers to compile certain functions.
1.1       root      731: 
                    732: 
                    733: File: gcc.info,  Node: Alternate Keywords,  Next: Incomplete Enums,  Prev: Explicit Reg Vars,  Up: Extensions
                    734: 
                    735: Alternate Keywords
                    736: ==================
                    737: 
                    738:    The option `-traditional' disables certain keywords; `-ansi'
1.1.1.3 ! root      739: disables certain others.  This causes trouble when you want to use GNU C
        !           740: extensions, or ANSI C features, in a general-purpose header file that
1.1       root      741: should be usable by all programs, including ANSI C programs and
                    742: traditional ones.  The keywords `asm', `typeof' and `inline' cannot be
                    743: used since they won't work in a program compiled with `-ansi', while
1.1.1.3 ! root      744: the keywords `const', `volatile', `signed', `typeof' and `inline' won't
        !           745: work in a program compiled with `-traditional'.
1.1       root      746: 
                    747:    The way to solve these problems is to put `__' at the beginning and
                    748: end of each problematical keyword.  For example, use `__asm__' instead
                    749: of `asm', `__const__' instead of `const', and `__inline__' instead of
                    750: `inline'.
                    751: 
                    752:    Other C compilers won't accept these alternative keywords; if you
                    753: want to compile with another compiler, you can define the alternate
                    754: keywords as macros to replace them with the customary keywords.  It
                    755: looks like this:
                    756: 
                    757:      #ifndef __GNUC__
                    758:      #define __asm__ asm
                    759:      #endif
                    760: 
                    761:    `-pedantic' causes warnings for many GNU C extensions.  You can
                    762: prevent such warnings within one expression by writing `__extension__'
                    763: before the expression.  `__extension__' has no effect aside from this.
                    764: 
                    765: 
                    766: File: gcc.info,  Node: Incomplete Enums,  Prev: Alternate Keywords,  Up: Extensions
                    767: 
                    768: Incomplete `enum' Types
                    769: =======================
                    770: 
1.1.1.3 ! root      771:    You can define an `enum' tag without specifying its possible values.
1.1       root      772: This results in an incomplete type, much like what you get if you write
                    773: `struct foo' without describing the elements.  A later declaration
                    774: which does specify the possible values completes the type.
                    775: 
                    776:    You can't allocate variables or storage using the type while it is
                    777: incomplete.  However, you can work with pointers to that type.
                    778: 
                    779:    This extension may not be very useful, but it makes the handling of
                    780: `enum' more consistent with the way `struct' and `union' are handled.
                    781: 
                    782: 
1.1.1.3 ! root      783: File: gcc.info,  Node: Trouble,  Next: Bugs,  Prev: Extensions,  Up: Top
1.1       root      784: 
1.1.1.3 ! root      785: Known Causes of Trouble with GNU CC
        !           786: ***********************************
1.1       root      787: 
1.1.1.3 ! root      788:    This section describes known problems that affect users of GNU CC. 
        !           789: Most of these are not GNU CC bugs per se--if they were, we would fix
        !           790: them. But the result for a user may be like the result of a bug.
        !           791: 
        !           792:    Some of these problems are due to bugs in other software, some are
        !           793: missing features that are too much work to add, and some are places
        !           794: where people's opinions differ as to what is best.
1.1       root      795: 
1.1.1.3 ! root      796: * Menu:
1.1       root      797: 
1.1.1.3 ! root      798: * Actual Bugs::                      Bugs we will fix later.
        !           799: * Installation Problems::     Problems that manifest when you install GNU CC.
        !           800: * Cross-Compiler Problems::   Common problems of cross compiling with GNU CC.
        !           801: * Interoperation::      Problems using GNU CC with other compilers,
        !           802:                           and with certain linkers, assemblers and debuggers.
        !           803: * Incompatibilities::   GNU CC is incompatible with traditional C.
        !           804: * Disappointments::     Regrettable things we can't change, but not quite bugs.
        !           805: * Non-bugs::           Things we think are right, but some others disagree.
1.1       root      806: 
1.1.1.3 ! root      807: 
        !           808: File: gcc.info,  Node: Actual Bugs,  Next: Installation Problems,  Up: Trouble
        !           809: 
        !           810: Actual Bugs We Haven't Fixed Yet
        !           811: ================================
1.1       root      812: 
1.1.1.3 ! root      813:    * Loop unrolling doesn't work properly for certain programs.  This is
        !           814:      because of difficulty in updating the debugging information within
        !           815:      the loop being unrolled.  We plan to revamp the representation of
        !           816:      debugging information so that this will work properly, but we have
        !           817:      not done this in version 2.2 because we don't want to delay it any
        !           818:      further.
        !           819: 
        !           820:    * There is a bug in producing DBX output which outputs a structure
        !           821:      tag even when a structure doesn't have a tag.  The reason we
        !           822:      aren't fixing this now is that a clean fix requires
        !           823:      reorganizations that seem risky. We will do them after 2.2 is
        !           824:      released.
1.1       root      825: 
                    826: 
1.1.1.3 ! root      827: File: gcc.info,  Node: Installation Problems,  Next: Cross-Compiler Problems,  Prev: Actual Bugs,  Up: Trouble
1.1       root      828: 
1.1.1.3 ! root      829: Installation Problems
1.1       root      830: =====================
                    831: 
1.1.1.3 ! root      832:    This is a list of problems (and some apparent problems which don't
        !           833: really mean anything is wrong) that show up during installation of GNU
        !           834: CC.
        !           835: 
        !           836:    * On certain systems, defining certain environment variables such as
        !           837:      `CC' can interfere with the functioning of `make'.
        !           838: 
        !           839:    * If you encounter seemingly strange errors when trying to build the
        !           840:      compiler in a directory other than the source directory, it could
        !           841:      be because you have previously configured the compiler in the
        !           842:      source directory.  Make sure you have done all the necessary
        !           843:      preparations. *Note Other Dir::.
        !           844: 
        !           845:    * In previous versions of GNU CC, the `gcc' driver program looked for
        !           846:      `as' and `ld' in various places such as files beginning with
        !           847:      `/usr/local/lib/gcc-'.  GNU CC version 2 looks for them in the
        !           848:      directory `/usr/local/lib/gcc-lib/TARGET/VERSION'.
        !           849: 
        !           850:      Thus, to use a version of `as' or `ld' that is not the system
        !           851:      default, for example `gas' or GNU `ld', you must put them in that
        !           852:      directory (or make links to them from that directory).
        !           853: 
        !           854:    * Some commands executed when making the compiler may fail (return a
        !           855:      non-zero status) and be ignored by `make'.  These failures, which
        !           856:      are often due to files that were not found, are expected, and can
        !           857:      safely be ignored.
        !           858: 
        !           859:    * It is normal to have warnings in compiling certain files about
        !           860:      unreachable code and about enumeration type clashes.  These files'
        !           861:      names begin with `insn-'.
        !           862: 
        !           863:    * Sometimes `make' recompiles parts of the compiler when installing
        !           864:      the compiler.  In one case, this was traced down to a bug in
        !           865:      `make'.  Either ignore the problem or switch to GNU Make.
        !           866: 
        !           867:    * Sometimes on a Sun 4 you may observe a crash in the program
        !           868:      `genflags' or `genoutput' while building GCC.  This is said to be
        !           869:      due to a bug in `sh'.  You can probably get around it by running
        !           870:      `genflags' or `genoutput' manually and then retrying the `make'.
        !           871: 
        !           872:    * On some versions of Ultrix, the system supplied compiler cannot
        !           873:      compile `cp-parse.c' because it cannot handle so many cases in a
        !           874:      `switch' statement.  You can avoid this problem by specifying
        !           875:      `LANGUAGES=c' when you compile GNU CC with the Ultrix compiler.
        !           876:      Then you can compile the entire GNU compiler with GNU CC.
        !           877: 
        !           878:    * If you use the 1.31 version of the MIPS assembler (such as was
        !           879:      shipped with Ultrix 3.1), you will need to use the
        !           880:      -fno-delayed-branch switch when optimizing floating point code. 
        !           881:      Otherwise, the assembler will complain when the GCC compiler fills
        !           882:      a branch delay slot with a floating point instruction, such as
        !           883:      add.d.
        !           884: 
        !           885:    * Users have reported some problems with version 2.0 of the MIPS
        !           886:      compiler tools that were shipped with Ultrix 4.1.  Version 2.10
        !           887:      which came with Ultrix 4.2 seems to work fine.
        !           888: 
        !           889:    * On HP 9000 series 300 or 400 running HP-UX release 8.0, there is a
        !           890:      bug in the assembler that must be fixed before GNU CC can be
        !           891:      built.  This bug manifests itself during the first stage of
        !           892:      compilation, while building `libgcc2.a':
        !           893: 
        !           894:           _floatdisf
        !           895:           cc1: warning: `-g' option not supported on this version of GCC
        !           896:           cc1: warning: `-g1' option not supported on this version of GCC
        !           897:           ./gcc: Internal compiler error: program as got fatal signal 11
        !           898: 
        !           899:      A patched version of the assembler is available by anonymous ftp
        !           900:      from `altdorf.ai.mit.edu' as the file
        !           901:      `archive/cph/hpux-8.0-assembler'.  If you have HP software support,
        !           902:      the patch can also be obtained directly from HP, as described in
        !           903:      the following note:
        !           904: 
        !           905:           This is the patched assembler, to patch SR#1653-010439, where
        !           906:           the assembler aborts on floating point constants.
        !           907: 
        !           908:           The bug is not really in the assembler, but in the shared
        !           909:           library version of the function "cvtnum(3c)".  The bug on
        !           910:           "cvtnum(3c)" is SR#4701-078451.  Anyway, the attached
        !           911:           assembler uses the archive library version of "cvtnum(3c)"
        !           912:           and thus does not exhibit the bug.
        !           913: 
        !           914:      This patch is also known as PHCO_0800.
        !           915: 
        !           916:    * Another assembler problem on the HP PA results in an error message
        !           917:      like this while compiling part of `libgcc2.a':
        !           918: 
        !           919:           as: /usr/tmp/cca08196.s @line#30 [err#1060]
        !           920:             Argument 1 or 3 in FARG upper
        !           921:                    - lookahead = RTNVAL=GR
        !           922: 
        !           923:      This happens because HP changed the assembler syntax after system
        !           924:      release 8.02.  GNU CC assumes the newer syntax; if your assembler
        !           925:      wants the older syntax, comment out this line in the file
        !           926:      `pa1-hpux.h':
        !           927: 
        !           928:           #define HP_FP_ARG_DESCRIPTOR_REVERSED
        !           929: 
        !           930:    * Some versions of the Pyramid C compiler are reported to be unable
        !           931:      to compile GNU CC.  You must use an older version of GNU CC for
        !           932:      bootstrapping.  One indication of this problem is if you get a
        !           933:      crash when GNU CC compiles the function `muldi3' in file
        !           934:      `libgcc2.c'.
        !           935: 
        !           936:      You may be able to succeed by getting GNU CC version 1, installing
        !           937:      it, and using it to compile GNU CC version 2.  The bug in the
        !           938:      Pyramid C compiler does not seem to affect GNU CC version 1.
        !           939: 
        !           940:    * On the Tower models 4N0 and 6N0, by default a process is not
        !           941:      allowed to have more than one megabyte of memory.  GNU CC cannot
        !           942:      compile itself (or many other programs) with `-O' in that much
        !           943:      memory.
        !           944: 
        !           945:      To solve this problem, reconfigure the kernel adding the following
        !           946:      line to the configuration file:
        !           947: 
        !           948:           MAXUMEM = 4096
        !           949: 
        !           950:    * On the Altos 3068, programs compiled with GNU CC won't work unless
        !           951:      you fix a kernel bug.  This happens using system versions V.2.2
        !           952:      1.0gT1 and V.2.2 1.0e and perhaps later versions as well.  See the
        !           953:      file `README.ALTOS'.
        !           954: 
        !           955: 
        !           956: File: gcc.info,  Node: Cross-Compiler Problems,  Next: Interoperation,  Prev: Installation Problems,  Up: Trouble
        !           957: 
        !           958: Cross-Compiler Problems
        !           959: =======================
        !           960: 
        !           961:    * Cross compilation can run into trouble for certain machines because
        !           962:      some target machines' assemblers require floating point numbers to
        !           963:      be written as *integer* constants in certain contexts.
        !           964: 
        !           965:      The compiler writes these integer constants by examining the
        !           966:      floating point value as an integer and printing that integer,
        !           967:      because this is simple to write and independent of the details of
        !           968:      the floating point representation.  But this does not work if the
        !           969:      compiler is running on a different machine with an incompatible
        !           970:      floating point format, or even a different byte-ordering.
        !           971: 
        !           972:      In addition, correct constant folding of floating point values
        !           973:      requires representing them in the target machine's format. (The C
        !           974:      standard does not quite require this, but in practice it is the
        !           975:      only way to win.)
        !           976: 
        !           977:      It is now possible to overcome these problems by defining macros
        !           978:      such as `REAL_VALUE_TYPE'.  But doing so is a substantial amount of
        !           979:      work for each target machine.  *Note Cross-compilation::.
        !           980: 
        !           981:    * At present, the program `mips-tfile' which adds debug support to
        !           982:      object files on MIPS systems does not work in a cross compile
        !           983:      environment.
1.1       root      984: 
1.1.1.3 ! root      985: 
        !           986: File: gcc.info,  Node: Interoperation,  Next: Incompatibilities,  Prev: Cross-Compiler Problems,  Up: Trouble
1.1       root      987: 
1.1.1.3 ! root      988: Interoperation
        !           989: ==============
1.1       root      990: 
1.1.1.3 ! root      991:    This section lists various difficulties encountered in using GNU C or
        !           992: GNU C++ together with other compilers or with the assemblers, linkers
        !           993: and debuggers on certain systems.
        !           994: 
        !           995:    * GNU C normally compiles functions to return small structures and
        !           996:      unions in registers.  Most other compilers arrange to return them
        !           997:      just like larger structures and unions.  This can lead to trouble
        !           998:      when you link together code compiled by different compilers. To
        !           999:      avoid the problem, you can use the option `-fpcc-struct-value'
        !          1000:      when compiling with GNU CC.
        !          1001: 
        !          1002:    * GNU C++ does not do name mangling in the same way as other C++
        !          1003:      compilers.  This means that object files compiled with one compiler
        !          1004:      cannot be used with another.
        !          1005: 
        !          1006:      GNU C++ also uses different techniques for arranging virtual
        !          1007:      function tables and the layout of class instances.  In general,
        !          1008:      therefore, linking code compiled with different C++ compilers does
        !          1009:      not work.
        !          1010: 
        !          1011:    * Older GDB versions sometimes fail to read the output of GNU CC
        !          1012:      version 2.  If you have trouble, get GDB version 4.4 or later.
        !          1013: 
        !          1014:    * DBX rejects some files produced by GNU CC, though it accepts
        !          1015:      similar constructs in output from PCC.  Until someone can supply a
        !          1016:      coherent description of what is valid DBX input and what is not,
        !          1017:      there is nothing I can do about these problems.  You are on your
        !          1018:      own.
        !          1019: 
        !          1020:    * The GNU assembler (GAS) does not support PIC.  To generate PIC
        !          1021:      code, you must use some other assembler, such as `/bin/as'.
        !          1022: 
        !          1023:    * On some BSD systems including some versions of Ultrix, use of
        !          1024:      profiling causes static variable destructors (currently used only
        !          1025:      in C++) not to be run.
        !          1026: 
        !          1027:    * On a Sun, linking using GNU CC fails to find a shared library and
        !          1028:      reports that the library doesn't exist at all.
        !          1029: 
        !          1030:      This happens if you are using the GNU linker, because it does only
        !          1031:      static linking and looks only for unshared libraries.  If you have
        !          1032:      a shared library with no unshared counterpart, the GNU linker
        !          1033:      won't find anything.
        !          1034: 
        !          1035:      We hope to make a linker which supports Sun shared libraries, but
        !          1036:      please don't ask when it will be finished--we don't know.
        !          1037: 
        !          1038:    * Sun forgot to include a static version of `libdl.a' with some
        !          1039:      versions of SunOS (mainly 4.1).  This results in undefined symbols
        !          1040:      when linking static binaries (that is, if you use `-static').  If
        !          1041:      you see undefined symbols `_dlclose', `_dlsym' or `_dlopen' when
        !          1042:      linking, compile and link against the file `mit/util/misc/dlsym.c'
        !          1043:      from the MIT version of X windows.
        !          1044: 
        !          1045:    * On the HP PA machine, ADB sometimes fails to work on functions
        !          1046:      compiled with GNU CC.  Specifically, it fails to work on functions
        !          1047:      that use `alloca' or variable-size arrays.  This is because GNU CC
        !          1048:      doesn't generate HPUX unwind descriptors for such functions.  It
        !          1049:      may even be impossible to generate them.
        !          1050: 
        !          1051:    * Profiling is not supported on the HP PA machine.  Neither is
        !          1052:      debugging (`-g'), unless you use the preliminary GNU tools (*note
        !          1053:      Installation::.).
        !          1054: 
        !          1055:    * GNU CC on the HP PA handles variadic function arguments using a
        !          1056:      calling convention incompatible with the HP compiler.  This is
        !          1057:      only a problem for routines that take `va_list' as parameters,
        !          1058:      such as `vprintf'.  This may be fixed eventually.
        !          1059: 
        !          1060:    * The current version of the assembler (`/bin/as') for the RS/6000
        !          1061:      has certain problems that prevent the `-g' option in GCC from
        !          1062:      working.
        !          1063: 
        !          1064:      IBM has produced a fixed version of the assembler.  The replacement
        !          1065:      assembler is not a standard component of either AIX 3.1.5 or AIX
        !          1066:      3.2, but is expected to become standard in a future distribution. 
        !          1067:      This assembler is available from IBM as APAR IX22829.  Yet more
        !          1068:      bugs have been fixed in a newer assembler, which will shortly be
        !          1069:      available as APAR IX26107.  See the file `README.RS6000' for more
        !          1070:      details on these assemblers.
1.1       root     1071: 
1.1.1.3 ! root     1072:    * On the IBM RS/6000, compiling code of the form
1.1       root     1073: 
1.1.1.3 ! root     1074:           extern int foo;
        !          1075:           
        !          1076:           ... foo ...
1.1       root     1077:           
1.1.1.3 ! root     1078:           static int foo;
        !          1079: 
        !          1080:      will cause the linker to report an undefined symbol `foo'.
        !          1081:      Although this behavior differs from most other systems, it is not a
        !          1082:      bug because redefining an `extern' variable as `static' is
        !          1083:      undefined in ANSI C.
        !          1084: 
        !          1085:    * On VMS, GAS versions 1.38.1 and earlier may cause spurious warning
        !          1086:      messages from the linker.  These warning messages complain of
        !          1087:      mismatched psect attributes.  You can ignore them.  *Note VMS
        !          1088:      Install::.
        !          1089: 
        !          1090:    * On the Alliant, the system's own convention for returning
        !          1091:      structures and unions is unusual, and is not compatible with GNU
        !          1092:      CC no matter what options are used.
        !          1093: 
        !          1094:    * On the IBM RT PC, the MetaWare HighC compiler (hc) uses yet another
        !          1095:      convention for structure and union returning.  Use
        !          1096:      `-mhc-struct-return' to tell GNU CC to use a convention compatible
        !          1097:      with it.
        !          1098: 
        !          1099:    * On Ultrix, the Fortran compiler expects registers 2 through 5 to
        !          1100:      be saved by function calls.  However, the C compiler uses
        !          1101:      conventions compatible with BSD Unix: registers 2 through 5 may be
        !          1102:      clobbered by function calls.
        !          1103: 
        !          1104:      GNU CC uses the same convention as the Ultrix C compiler.  You can
        !          1105:      use these options to produce code compatible with the Fortran
        !          1106:      compiler:
1.1       root     1107: 
1.1.1.3 ! root     1108:           -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5
1.1       root     1109: 
                   1110: 

unix.superglobalmegacorp.com

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