|
|
1.1 ! root 1: This is Info file gcc.info, produced by Makeinfo-1.43 from the input ! 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: ! 8: Permission is granted to make and distribute verbatim copies of ! 9: this manual provided the copyright notice and this permission notice ! 10: are preserved on all copies. ! 11: ! 12: Permission is granted to copy and distribute modified versions of ! 13: this manual under the conditions for verbatim copying, provided also ! 14: that the section entitled "GNU General Public License" is included ! 15: exactly as in the original, and provided that the entire resulting ! 16: derived work is distributed under the terms of a permission notice ! 17: identical to this one. ! 18: ! 19: Permission is granted to copy and distribute translations of this ! 20: manual into another language, under the above conditions for modified ! 21: versions, except that the section entitled "GNU General Public ! 22: License" and this permission notice may be included in translations ! 23: approved by the Free Software Foundation instead of in the original ! 24: English. ! 25: ! 26: ! 27: File: gcc.info, Node: Function Attributes, Next: Dollar Signs, Prev: Case Ranges, Up: Extensions ! 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: ! 35: A few standard library functions, such as `abort' and `exit', ! 36: cannot return. GNU CC knows this automatically. Some programs define ! 37: their own functions that never return. You can declare them ! 38: `volatile' to tell the compiler this fact. For example, ! 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 ! 57: have no effects except the return value. Such a function can be ! 58: subject to common subexpression elimination and loop optimization just ! 59: as an arithmetic operator would be. These functions should be declared ! 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: ! 67: Note that a function that has pointer arguments and examines the ! 68: data pointed to must *not* be declared `const'. Likewise, a function ! 69: that calls a non-`const' function usually must not be `const'. It ! 70: does not make sense for a `const' function to return `void'. ! 71: ! 72: We recommend placing the keyword `const' after the function's ! 73: return type. It makes no difference in the example above, but when the ! 74: return type is a pointer, it is the only way to make the function ! 75: itself const. For example, ! 76: ! 77: const char *mincp (int); ! 78: ! 79: says that `mincp' returns `const char *'--a pointer to a const object. ! 80: To declare `mincp' const, you must write this: ! 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: ! 98: File: gcc.info, Node: Dollar Signs, Next: Character Escapes, Prev: Function Attributes, Up: Extensions ! 99: ! 100: Dollar Signs in Identifier Names ! 101: ================================ ! 102: ! 103: In GNU C, you may use dollar signs in identifier names. This is ! 104: because many traditional C implementations allow such identifiers. ! 105: ! 106: Dollar signs are allowed on certain machines if you specify ! 107: `-traditional'. On a few systems they are allowed by default, even if ! 108: `-traditional' is not used. But they are never allowed if you specify ! 109: `-ansi'. ! 110: ! 111: There are certain ANSI C programs (obscure, to be sure) that would ! 112: compile incorrectly if dollar signs were permitted in identifiers. For ! 113: example: ! 114: ! 115: #define foo(a) #a ! 116: #define lose(b) foo (b) ! 117: #define test$ ! 118: lose (test) ! 119: ! 120: ! 121: File: gcc.info, Node: Character Escapes, Next: Variable Attributes, Prev: Dollar Signs, Up: Extensions ! 122: ! 123: The Character ESC in Constants ! 124: ============================== ! 125: ! 126: You can use the sequence `\e' in a string or character constant to ! 127: stand for the ASCII character ESC. ! 128: ! 129: ! 130: File: gcc.info, Node: Alignment, Next: Inline, Prev: Variable Attributes, Up: Extensions ! 131: ! 132: Inquiring on Alignment of Types or Variables ! 133: ============================================ ! 134: ! 135: The keyword `__alignof__' allows you to inquire about how an object ! 136: is aligned, or the minimum alignment usually required by a type. Its ! 137: syntax is just like `sizeof'. ! 138: ! 139: For example, if the target machine requires a `double' value to be ! 140: aligned on an 8-byte boundary, then `__alignof__ (double)' is 8. This ! 141: is true on many RISC machines. On more traditional machine designs, ! 142: `__alignof__ (double)' is 4 or even 2. ! 143: ! 144: Some machines never actually require alignment; they allow ! 145: reference to any data type even at an odd addresses. For these ! 146: machines, `__alignof__' reports the *recommended* alignment of a type. ! 147: ! 148: When the operand of `__alignof__' is an lvalue rather than a type, ! 149: the value is the largest alignment that the lvalue is known to have. ! 150: It may have this alignment as a result of its data type, or because it ! 151: is part of a structure and inherits alignment from that structure. For ! 152: example, after this declaration: ! 153: ! 154: struct foo { int x; char y; } foo1; ! 155: ! 156: the value of `__alignof__ (foo1.y)' is probably 2 or 4, the same as ! 157: `__alignof__ (int)', even though the data type of `foo1.y' does not ! 158: itself demand any alignment. ! 159: ! 160: ! 161: File: gcc.info, Node: Variable Attributes, Next: Alignment, Prev: Character Escapes, Up: Extensions ! 162: ! 163: Specifying Attributes of Variables ! 164: ================================== ! 165: ! 166: The keyword `__attribute__' allows you to specify special ! 167: attributes of variables or structure fields. The only attributes ! 168: currently defined are the `aligned' and `format' attributes. ! 169: ! 170: The `aligned' attribute specifies the alignment of the variable or ! 171: structure field. For example, the declaration: ! 172: ! 173: int x __attribute__ ((aligned (16))) = 0; ! 174: ! 175: causes the compiler to allocate the global variable `x' on a 16-byte ! 176: boundary. On a 68000, this could be used in conjunction with an `asm' ! 177: expression to access the `move16' instruction which requires 16-byte ! 178: aligned operands. ! 179: ! 180: You can also specify the alignment of structure fields. For ! 181: example, to create a double-word aligned `int' pair, you could write: ! 182: ! 183: struct foo { int x[2] __attribute__ ((aligned (8))); }; ! 184: ! 185: This is an alternative to creating a union with a `double' member that ! 186: forces the union to be double-word aligned. ! 187: ! 188: It is not possible to specify the alignment of functions; the ! 189: alignment of functions is determined by the machine's requirements and ! 190: cannot be changed. ! 191: ! 192: The `format' attribute specifies that a function takes `printf' or ! 193: `scanf' style arguments which should be type-checked against a format ! 194: string. For example, the declaration: ! 195: ! 196: extern int ! 197: my_printf (void *my_object, const char *my_format, ...) ! 198: __attribute__ ((format (printf, 2, 3))); ! 199: ! 200: causes the compiler to check the arguments in calls to `my_printf' for ! 201: consistency with the `printf' style format string argument `my_format'. ! 202: ! 203: The first parameter of the `format' attribute determines how the ! 204: format string is interpreted, and should be either `printf' or ! 205: `scanf'. The second parameter specifies the number of the format ! 206: string argument (starting from 1). The third parameter specifies the ! 207: number of the first argument which should be checked against the ! 208: format string. For functions where the arguments are not available to ! 209: be checked (such as `vprintf'), specify the third parameter as zero. ! 210: In this case the compiler only checks the format string for ! 211: consistency. ! 212: ! 213: In the example above, the format string (`my_format') is the second ! 214: argument to `my_print' and the arguments to check start with the third ! 215: argument, so the correct parameters for the format attribute are 2 and ! 216: 3. ! 217: ! 218: The `format' attribute allows you to identify your own functions ! 219: which take format strings as arguments, so that GNU CC can check the ! 220: calls to these functions for errors. The compiler always checks ! 221: formats for the ANSI library functions `printf', `fprintf', `sprintf', ! 222: `scanf', `fscanf', `sscanf', `vprintf', `vfprintf' and `vsprintf' ! 223: whenever such warnings are requested (using `-Wformat'), so there is no ! 224: need to modify the header file `stdio.h'. ! 225: ! 226: ! 227: File: gcc.info, Node: Inline, Next: Extended Asm, Prev: Alignment, Up: Extensions ! 228: ! 229: An Inline Function is As Fast As a Macro ! 230: ======================================== ! 231: ! 232: By declaring a function `inline', you can direct GNU CC to integrate ! 233: that function's code into the code for its callers. This makes ! 234: execution faster by eliminating the function-call overhead; in ! 235: addition, if any of the actual argument values are constant, their ! 236: known values may permit simplifications at compile time so that not ! 237: all of the inline function's code needs to be included. ! 238: ! 239: To declare a function inline, use the `inline' keyword in its ! 240: declaration, like this: ! 241: ! 242: inline int ! 243: inc (int *a) ! 244: { ! 245: (*a)++; ! 246: } ! 247: ! 248: (If you are writing a header file to be included in ANSI C ! 249: programs, write `__inline__' instead of `inline'. *Note Alternate ! 250: Keywords::.) ! 251: ! 252: You can also make all "simple enough" functions inline with the ! 253: option `-finline-functions'. Note that certain usages in a function ! 254: definition can make it unsuitable for inline substitution. ! 255: ! 256: When a function is both inline and `static', if all calls to the ! 257: function are integrated into the caller, and the function's address is ! 258: never used, then the function's own assembler code is never referenced. ! 259: In this case, GNU CC does not actually output assembler code for the ! 260: function, unless you specify the option `-fkeep-inline-functions'. ! 261: Some calls cannot be integrated for various reasons (in particular, ! 262: calls that precede the function's definition cannot be integrated, and ! 263: neither can recursive calls within the definition). If there is a ! 264: nonintegrated call, then the function is compiled to assembler code as ! 265: usual. The function must also be compiled as usual if the program ! 266: refers to its address, because that can't be inlined. ! 267: ! 268: When an inline function is not `static', then the compiler must ! 269: assume that there may be calls from other source files; since a global ! 270: symbol can be defined only once in any program, the function must not ! 271: be defined in the other source files, so the calls therein cannot be ! 272: integrated. Therefore, a non-`static' inline function is always ! 273: compiled on its own in the usual fashion. ! 274: ! 275: If you specify both `inline' and `extern' in the function ! 276: definition, then the definition is used only for inlining. In no case ! 277: is the function compiled on its own, not even if you refer to its ! 278: address explicitly. Such an address becomes an external reference, as ! 279: if you had only declared the function, and had not defined it. ! 280: ! 281: This combination of `inline' and `extern' has almost the effect of ! 282: a macro. The way to use it is to put a function definition in a ! 283: header file with these keywords, and put another copy of the ! 284: definition (lacking `inline' and `extern') in a library file. The ! 285: definition in the header file will cause most calls to the function to ! 286: be inlined. If any uses of the function remain, they will refer to ! 287: the single copy in the library. ! 288: ! 289: ! 290: File: gcc.info, Node: Extended Asm, Next: Asm Labels, Prev: Inline, Up: Extensions ! 291: ! 292: Assembler Instructions with C Expression Operands ! 293: ================================================= ! 294: ! 295: In an assembler instruction using `asm', you can now specify the ! 296: operands of the instruction using C expressions. This means no more ! 297: guessing which registers or memory locations will contain the data you ! 298: want to use. ! 299: ! 300: You must specify an assembler instruction template much like what ! 301: appears in a machine description, plus an operand constraint string ! 302: for each operand. ! 303: ! 304: For example, here is how to use the 68881's `fsinx' instruction: ! 305: ! 306: asm ("fsinx %1,%0" : "=f" (result) : "f" (angle)); ! 307: ! 308: Here `angle' is the C expression for the input operand while `result' ! 309: is that of the output operand. Each has `"f"' as its operand ! 310: constraint, saying that a floating point register is required. The ! 311: `=' in `=f' indicates that the operand is an output; all output ! 312: operands' constraints must use `='. The constraints use the same ! 313: language used in the machine description (*note Constraints::.). ! 314: ! 315: Each operand is described by an operand-constraint string followed by ! 316: the C expression in parentheses. A colon separates the assembler ! 317: template from the first output operand, and another separates the last ! 318: output operand from the first input, if any. Commas separate output ! 319: operands and separate inputs. The total number of operands is limited ! 320: to ten or to the maximum number of operands in any instruction pattern ! 321: in the machine description, whichever is greater. ! 322: ! 323: If there are no output operands, and there are input operands, then ! 324: there must be two consecutive colons surrounding the place where the ! 325: output operands would go. ! 326: ! 327: Output operand expressions must be lvalues; the compiler can check ! 328: this. The input operands need not be lvalues. The compiler cannot ! 329: check whether the operands have data types that are reasonable for the ! 330: instruction being executed. It does not parse the assembler ! 331: instruction template and does not know what it means, or whether it is ! 332: valid assembler input. The extended `asm' feature is most often used ! 333: for machine instructions that the compiler itself does not know exist. ! 334: ! 335: The output operands must be write-only; GNU CC will assume that the ! 336: values in these operands before the instruction are dead and need not ! 337: be generated. Extended asm does not support input-output or read-write ! 338: operands. For this reason, the constraint character `+', which ! 339: indicates such an operand, may not be used. ! 340: ! 341: When the assembler instruction has a read-write operand, or an ! 342: operand in which only some of the bits are to be changed, you must ! 343: logically split its function into two separate operands, one input ! 344: operand and one write-only output operand. The connection between ! 345: them is expressed by constraints which say they need to be in the same ! 346: location when the instruction executes. You can use the same C ! 347: expression for both operands, or different expressions. For example, ! 348: here we write the (fictitious) `combine' instruction with `bar' as its ! 349: read-only source operand and `foo' as its read-write destination: ! 350: ! 351: asm ("combine %2,%0" : "=r" (foo) : "0" (foo), "g" (bar)); ! 352: ! 353: The constraint `"0"' for operand 1 says that it must occupy the same ! 354: location as operand 0. A digit in constraint is allowed only in an ! 355: input operand, and it must refer to an output operand. ! 356: ! 357: Only a digit in the constraint can guarantee that one operand will ! 358: be in the same place as another. The mere fact that `foo' is the ! 359: value of both operands is not enough to guarantee that they will be in ! 360: the same place in the generated assembler code. The following would ! 361: not work: ! 362: ! 363: asm ("combine %2,%0" : "=r" (foo) : "r" (foo), "g" (bar)); ! 364: ! 365: Various optimizations or reloading could cause operands 0 and 1 to ! 366: be in different registers; GNU CC knows no reason not to do so. For ! 367: example, the compiler might find a copy of the value of `foo' in one ! 368: register and use it for operand 1, but generate the output operand 0 ! 369: in a different register (copying it afterward to `foo''s own address). ! 370: Of course, since the register for operand 1 is not even mentioned in ! 371: the assembler code, the result will not work, but GNU CC can't tell ! 372: that. ! 373: ! 374: Some instructions clobber specific hard registers. To describe ! 375: this, write a third colon after the input operands, followed by the ! 376: names of the clobbered hard registers (given as strings). Here is a ! 377: realistic example for the Vax: ! 378: ! 379: asm volatile ("movc3 %0,%1,%2" ! 380: : /* no outputs */ ! 381: : "g" (from), "g" (to), "g" (count) ! 382: : "r0", "r1", "r2", "r3", "r4", "r5"); ! 383: ! 384: If you refer to a particular hardware register from the assembler ! 385: code, then you will probably have to list the register after the third ! 386: colon to tell the compiler that the register's value is modified. In ! 387: many assemblers, the register names begin with `%'; to produce one `%' ! 388: in the assembler code, you must write `%%' in the input. ! 389: ! 390: You can put multiple assembler instructions together in a single ! 391: `asm' template, separated either with newlines (written as `\n') or ! 392: with semicolons if the assembler allows such semicolons. The GNU ! 393: assembler allows semicolons and all Unix assemblers seem to do so. ! 394: The input operands are guaranteed not to use any of the clobbered ! 395: registers, and neither will the output operands' addresses, so you can ! 396: read and write the clobbered registers as many times as you like. ! 397: Here is an example of multiple instructions in a template; it assumes ! 398: that the subroutine `_foo' accepts arguments in registers 9 and 10: ! 399: ! 400: asm ("movl %0,r9;movl %1,r10;call _foo" ! 401: : /* no outputs */ ! 402: : "g" (from), "g" (to) ! 403: : "r9", "r10"); ! 404: ! 405: Unless an output operand has the `&' constraint modifier, GNU CC may ! 406: allocate it in the same register as an unrelated input operand, on the ! 407: assumption that the inputs are consumed before the outputs are ! 408: produced. This assumption may be false if the assembler code actually ! 409: consists of more than one instruction. In such a case, use `&' for ! 410: each output operand that may not overlap an input. *Note Modifiers::. ! 411: ! 412: If you want to test the condition code produced by an assembler ! 413: instruction, you must include a branch and a label in the `asm' ! 414: construct, as follows: ! 415: ! 416: asm ("clr %0;frob %1;beq 0f;mov #1,%0;0:" ! 417: : "g" (result) ! 418: : "g" (input)); ! 419: ! 420: This assumes your assembler supports local labels, as the GNU assembler ! 421: and most Unix assemblers do. ! 422: ! 423: Usually the most convenient way to use these `asm' instructions is ! 424: to encapsulate them in macros that look like functions. For example, ! 425: ! 426: #define sin(x) \ ! 427: ({ double __value, __arg = (x); \ ! 428: asm ("fsinx %1,%0": "=f" (__value): "f" (__arg)); \ ! 429: __value; }) ! 430: ! 431: Here the variable `__arg' is used to make sure that the instruction ! 432: operates on a proper `double' value, and to accept only those ! 433: arguments `x' which can convert automatically to a `double'. ! 434: ! 435: Another way to make sure the instruction operates on the correct ! 436: data type is to use a cast in the `asm'. This is different from using ! 437: a variable `__arg' in that it converts more different types. For ! 438: example, if the desired type were `int', casting the argument to `int' ! 439: would accept a pointer with no complaint, while assigning the argument ! 440: to an `int' variable named `__arg' would warn about using a pointer ! 441: unless the caller explicitly casts it. ! 442: ! 443: If an `asm' has output operands, GNU CC assumes for optimization ! 444: purposes that the instruction has no side effects except to change the ! 445: output operands. This does not mean that instructions with a side ! 446: effect cannot be used, but you must be careful, because the compiler ! 447: may eliminate them if the output operands aren't used, or move them ! 448: out of loops, or replace two with one if they constitute a common ! 449: subexpression. Also, if your instruction does have a side effect on a ! 450: variable that otherwise appears not to change, the old value of the ! 451: variable may be reused later if it happens to be found in a register. ! 452: ! 453: You can prevent an `asm' instruction from being deleted, moved ! 454: significantly, or combined, by writing the keyword `volatile' after ! 455: the `asm'. For example: ! 456: ! 457: #define set_priority(x) \ ! 458: asm volatile ("set_priority %0": /* no outputs */ : "g" (x)) ! 459: ! 460: An instruction without output operands will not be deleted or moved ! 461: significantly, regardless, unless it is unreachable. ! 462: ! 463: Note that even a volatile `asm' instruction can be moved in ways ! 464: that appear insignificant to the compiler, such as across jump ! 465: instructions. You can't expect a sequence of volatile `asm' ! 466: instructions to remain perfectly consecutive. If you want consecutive ! 467: output, use a single `asm'. ! 468: ! 469: It is a natural idea to look for a way to give access to the ! 470: condition code left by the assembler instruction. However, when we ! 471: attempted to implement this, we found no way to make it work reliably. ! 472: The problem is that output operands might need reloading, which would ! 473: result in additional following "store" instructions. On most ! 474: machines, these instructions would alter the condition code before ! 475: there was time to test it. This problem doesn't arise for ordinary ! 476: "test" and "compare" instructions because they don't have any output ! 477: operands. ! 478: ! 479: If you are writing a header file that should be includable in ANSI C ! 480: programs, write `__asm__' instead of `asm'. *Note Alternate ! 481: Keywords::. ! 482: ! 483: ! 484: File: gcc.info, Node: Asm Labels, Next: Explicit Reg Vars, Prev: Extended Asm, Up: Extensions ! 485: ! 486: Controlling Names Used in Assembler Code ! 487: ======================================== ! 488: ! 489: You can specify the name to be used in the assembler code for a C ! 490: function or variable by writing the `asm' (or `__asm__') keyword after ! 491: the declarator as follows: ! 492: ! 493: int foo asm ("myfoo") = 2; ! 494: ! 495: This specifies that the name to be used for the variable `foo' in the ! 496: assembler code should be `myfoo' rather than the usual `_foo'. ! 497: ! 498: On systems where an underscore is normally prepended to the name of ! 499: a C function or variable, this feature allows you to define names for ! 500: the linker that do not start with an underscore. ! 501: ! 502: You cannot use `asm' in this way in a function *definition*; but ! 503: you can get the same effect by writing a declaration for the function ! 504: before its definition and putting `asm' there, like this: ! 505: ! 506: extern func () asm ("FUNC"); ! 507: ! 508: func (x, y) ! 509: int x, y; ! 510: ... ! 511: ! 512: It is up to you to make sure that the assembler names you choose do ! 513: not conflict with any other assembler symbols. Also, you must not use ! 514: a register name; that would produce completely invalid assembler code. ! 515: GNU CC does not as yet have the ability to store static variables in ! 516: registers. Perhaps that will be added. ! 517: ! 518: ! 519: File: gcc.info, Node: Explicit Reg Vars, Next: Alternate Keywords, Prev: Asm Labels, Up: Extensions ! 520: ! 521: Variables in Specified Registers ! 522: ================================ ! 523: ! 524: GNU C allows you to put a few global variables into specified ! 525: hardware registers. You can also specify the register in which an ! 526: ordinary register variable should be allocated. ! 527: ! 528: * Global register variables reserve registers throughout the ! 529: program. This may be useful in programs such as programming ! 530: language interpreters which have a couple of global variables ! 531: that are accessed very often. ! 532: ! 533: * Local register variables in specific registers do not reserve the ! 534: registers. The compiler's data flow analysis is capable of ! 535: determining where the specified registers contain live values, ! 536: and where they are available for other uses. ! 537: ! 538: These local variables are sometimes convenient for use with the ! 539: extended `asm' feature (*note Extended Asm::.), if you want to ! 540: write one output of the assembler instruction directly into a ! 541: particular register. (This will work provided the register you ! 542: specify fits the constraints specified for that operand in the ! 543: `asm'.) ! 544: ! 545: * Menu: ! 546: ! 547: * Global Reg Vars:: ! 548: * Local Reg Vars:: ! 549: ! 550: ! 551: File: gcc.info, Node: Global Reg Vars, Next: Local Reg Vars, Up: Explicit Reg Vars ! 552: ! 553: Defining Global Register Variables ! 554: ---------------------------------- ! 555: ! 556: You can define a global register variable in GNU C like this: ! 557: ! 558: register int *foo asm ("a5"); ! 559: ! 560: Here `a5' is the name of the register which should be used. Choose a ! 561: register which is normally saved and restored by function calls on your ! 562: machine, so that library routines will not clobber it. ! 563: ! 564: Naturally the register name is cpu-dependent, so you would need to ! 565: conditionalize your program according to cpu type. The register `a5' ! 566: would be a good choice on a 68000 for a variable of pointer type. On ! 567: machines with register windows, be sure to choose a "global" register ! 568: that is not affected magically by the function call mechanism. ! 569: ! 570: In addition, operating systems on one type of cpu may differ in how ! 571: they name the registers; then you would need additional conditionals. ! 572: For example, some 68000 operating systems call this register `%a5'. ! 573: ! 574: Eventually there may be a way of asking the compiler to choose a ! 575: register automatically, but first we need to figure out how it should ! 576: choose and how to enable you to guide the choice. No solution is ! 577: evident. ! 578: ! 579: Defining a global register variable in a certain register reserves ! 580: that register entirely for this use, at least within the current ! 581: compilation. The register will not be allocated for any other purpose ! 582: in the functions in the current compilation. The register will not be ! 583: saved and restored by these functions. Stores into this register are ! 584: never deleted even if they would appear to be dead, but references may ! 585: be deleted or moved or simplified. ! 586: ! 587: It is not safe to access the global register variables from signal ! 588: handlers, or from more than one thread of control, because the system ! 589: library routines may temporarily use the register for other things ! 590: (unless you recompile them specially for the task at hand). ! 591: ! 592: It is not safe for one function that uses a global register ! 593: variable to call another such function `foo' by way of a third function ! 594: `lose' that was compiled without knowledge of this variable (i.e. in a ! 595: different source file in which the variable wasn't declared). This is ! 596: because `lose' might save the register and put some other value there. ! 597: For example, you can't expect a global register variable to be ! 598: available in the comparison-function that you pass to `qsort', since ! 599: `qsort' might have put something else in that register. (If you are ! 600: prepared to recompile `qsort' with the same global register variable, ! 601: you can solve this problem.) ! 602: ! 603: If you want to recompile `qsort' or other source files which do not ! 604: actually use your global register variable, so that they will not use ! 605: that register for any other purpose, then it suffices to specify the ! 606: compiler option `-ffixed-REG'. You need not actually add a global ! 607: register declaration to their source code. ! 608: ! 609: A function which can alter the value of a global register variable ! 610: cannot safely be called from a function compiled without this ! 611: variable, because it could clobber the value the caller expects to ! 612: find there on return. Therefore, the function which is the entry ! 613: point into the part of the program that uses the global register ! 614: variable must explicitly save and restore the value which belongs to ! 615: its caller. ! 616: ! 617: On most machines, `longjmp' will restore to each global register ! 618: variable the value it had at the time of the `setjmp'. On some ! 619: machines, however, `longjmp' will not change the value of global ! 620: register variables. To be portable, the function that called `setjmp' ! 621: should make other arrangements to save the values of the global ! 622: register variables, and to restore them in a `longjmp'. This way, the ! 623: same thing will happen regardless of what `longjmp' does. ! 624: ! 625: All global register variable declarations must precede all function ! 626: definitions. If such a declaration could appear after function ! 627: definitions, the declaration would be too late to prevent the register ! 628: from being used for other purposes in the preceding functions. ! 629: ! 630: Global register variables may not have initial values, because an ! 631: executable file has no means to supply initial contents for a register. ! 632: ! 633: On the Sparc, there are reports that g3 ... g7 are suitable ! 634: registers, but certain library functions, such as `getwd', as well as ! 635: the subroutines for division and remainder, modify g3 and g4. g1 and ! 636: g2 are local temporaries. ! 637: ! 638: On the 68000, a2 ... a5 should be suitable, as should d2 ... d7. ! 639: Of course, it will not do to use more than a few of those. ! 640: ! 641: ! 642: File: gcc.info, Node: Local Reg Vars, Prev: Global Reg Vars, Up: Explicit Reg Vars ! 643: ! 644: Specifying Registers for Local Variables ! 645: ---------------------------------------- ! 646: ! 647: You can define a local register variable with a specified register ! 648: like this: ! 649: ! 650: register int *foo asm ("a5"); ! 651: ! 652: Here `a5' is the name of the register which should be used. Note that ! 653: this is the same syntax used for defining global register variables, ! 654: but for a local variable it would appear within a function. ! 655: ! 656: Naturally the register name is cpu-dependent, but this is not a ! 657: problem, since specific registers are most often useful with explicit ! 658: assembler instructions (*note Extended Asm::.). Both of these things ! 659: generally require that you conditionalize your program according to ! 660: cpu type. ! 661: ! 662: In addition, operating systems on one type of cpu may differ in how ! 663: they name the registers; then you would need additional conditionals. ! 664: For example, some 68000 operating systems call this register `%a5'. ! 665: ! 666: Eventually there may be a way of asking the compiler to choose a ! 667: register automatically, but first we need to figure out how it should ! 668: choose and how to enable you to guide the choice. No solution is ! 669: evident. ! 670: ! 671: Defining such a register variable does not reserve the register; it ! 672: remains available for other uses in places where flow control ! 673: determines the variable's value is not live. However, these registers ! 674: are made unavailable for use in the reload pass. I would not be ! 675: surprised if excessive use of this feature leaves the compiler too few ! 676: available registers to compile certain functions. ! 677: ! 678: ! 679: File: gcc.info, Node: Alternate Keywords, Next: Incomplete Enums, Prev: Explicit Reg Vars, Up: Extensions ! 680: ! 681: Alternate Keywords ! 682: ================== ! 683: ! 684: The option `-traditional' disables certain keywords; `-ansi' ! 685: disables certain others. This causes trouble when you want to use GNU ! 686: C extensions, or ANSI C features, in a general-purpose header file that ! 687: should be usable by all programs, including ANSI C programs and ! 688: traditional ones. The keywords `asm', `typeof' and `inline' cannot be ! 689: used since they won't work in a program compiled with `-ansi', while ! 690: the keywords `const', `volatile', `signed', `typeof' and `inline' ! 691: won't work in a program compiled with `-traditional'. ! 692: ! 693: The way to solve these problems is to put `__' at the beginning and ! 694: end of each problematical keyword. For example, use `__asm__' instead ! 695: of `asm', `__const__' instead of `const', and `__inline__' instead of ! 696: `inline'. ! 697: ! 698: Other C compilers won't accept these alternative keywords; if you ! 699: want to compile with another compiler, you can define the alternate ! 700: keywords as macros to replace them with the customary keywords. It ! 701: looks like this: ! 702: ! 703: #ifndef __GNUC__ ! 704: #define __asm__ asm ! 705: #endif ! 706: ! 707: `-pedantic' causes warnings for many GNU C extensions. You can ! 708: prevent such warnings within one expression by writing `__extension__' ! 709: before the expression. `__extension__' has no effect aside from this. ! 710: ! 711: ! 712: File: gcc.info, Node: Incomplete Enums, Prev: Alternate Keywords, Up: Extensions ! 713: ! 714: Incomplete `enum' Types ! 715: ======================= ! 716: ! 717: You can define an `enum' tag without specifying its possible values. ! 718: This results in an incomplete type, much like what you get if you write ! 719: `struct foo' without describing the elements. A later declaration ! 720: which does specify the possible values completes the type. ! 721: ! 722: You can't allocate variables or storage using the type while it is ! 723: incomplete. However, you can work with pointers to that type. ! 724: ! 725: This extension may not be very useful, but it makes the handling of ! 726: `enum' more consistent with the way `struct' and `union' are handled. ! 727: ! 728: ! 729: File: gcc.info, Node: Bugs, Next: VMS, Prev: Extensions, Up: Top ! 730: ! 731: Reporting Bugs ! 732: ************** ! 733: ! 734: Your bug reports play an essential role in making GNU CC reliable. ! 735: ! 736: When you encounter a problem, the first thing to do is to see if it ! 737: is already known. *Note Trouble::. Also look in *Note ! 738: Incompatibilities::. If it isn't known, then you should report the ! 739: problem. ! 740: ! 741: Reporting a bug may help you by bringing a solution to your ! 742: problem, or it may not. (If it does not, look in the service ! 743: directory; see *Note Service::.) In any case, the principal function ! 744: of a bug report is to help the entire community by making the next ! 745: version of GNU CC work better. Bug reports are your contribution to ! 746: the maintenance of GNU CC. ! 747: ! 748: In order for a bug report to serve its purpose, you must include the ! 749: information that makes for fixing the bug. ! 750: ! 751: * Menu: ! 752: ! 753: * Criteria: Bug Criteria. Have you really found a bug? ! 754: * Reporting: Bug Reporting. How to report a bug effectively. ! 755: * Non-bugs:: Some things we think are not problems. ! 756: * Known: Trouble. Known problems. ! 757: * Help: Service. Where to ask for help. ! 758: ! 759: ! 760: File: gcc.info, Node: Bug Criteria, Next: Bug Reporting, Prev: Bugs, Up: Bugs ! 761: ! 762: Have You Found a Bug? ! 763: ===================== ! 764: ! 765: If you are not sure whether you have found a bug, here are some ! 766: guidelines: ! 767: ! 768: * If the compiler gets a fatal signal, for any input whatever, that ! 769: is a compiler bug. Reliable compilers never crash. ! 770: ! 771: * If the compiler produces invalid assembly code, for any input ! 772: whatever (except an `asm' statement), that is a compiler bug, ! 773: unless the compiler reports errors (not just warnings) which ! 774: would ordinarily prevent the assembler from being run. ! 775: ! 776: * If the compiler produces valid assembly code that does not ! 777: correctly execute the input source code, that is a compiler bug. ! 778: ! 779: However, you must double-check to make sure, because you may have ! 780: run into an incompatibility between GNU C and traditional C ! 781: (*note Incompatibilities::.). These incompatibilities might be ! 782: considered bugs, but they are inescapable consequences of ! 783: valuable features. ! 784: ! 785: Or you may have a program whose behavior is undefined, which ! 786: happened by chance to give the desired results with another C ! 787: compiler. ! 788: ! 789: For example, in many nonoptimizing compilers, you can write `x;' ! 790: at the end of a function instead of `return x;', with the same ! 791: results. But the value of the function is undefined if `return' ! 792: is omitted; it is not a bug when GNU CC produces different ! 793: results. ! 794: ! 795: Problems often result from expressions with two increment ! 796: operators, as in `f (*p++, *p++)'. Your previous compiler might ! 797: have interpreted that expression the way you intended; GNU CC ! 798: might interpret it another way. Neither compiler is wrong. The ! 799: bug is in your code. ! 800: ! 801: After you have localized the error to a single source line, it ! 802: should be easy to check for these things. If your program is ! 803: correct and well defined, you have found a compiler bug. ! 804: ! 805: * If the compiler produces an error message for valid input, that ! 806: is a compiler bug. ! 807: ! 808: Note that the following is not valid input, and the error message ! 809: for it is not a bug: ! 810: ! 811: int foo (char); ! 812: ! 813: int ! 814: foo (x) ! 815: char x; ! 816: { ... } ! 817: ! 818: The prototype says to pass a `char', while the definition says to ! 819: pass an `int' and treat the value as a `char'. This is what the ! 820: ANSI standard says, and it makes sense. ! 821: ! 822: * If the compiler does not produce an error message for invalid ! 823: input, that is a compiler bug. However, you should note that ! 824: your idea of "invalid input" might be my idea of "an extension" ! 825: or "support for traditional practice". ! 826: ! 827: * If you are an experienced user of C compilers, your suggestions ! 828: for improvement of GNU CC are welcome in any case. ! 829: ! 830: ! 831: File: gcc.info, Node: Bug Reporting, Next: Non-bugs, Prev: Bug Criteria, Up: Bugs ! 832: ! 833: How to Report Bugs ! 834: ================== ! 835: ! 836: Send bug reports for GNU C to one of these addresses: ! 837: ! 838: [email protected] ! 839: {ucbvax|mit-eddie|uunet}!prep.ai.mit.edu!bug-gcc ! 840: ! 841: *Do not send bug reports to `help-gcc', or to the newsgroup ! 842: `gnu.gcc.help'.* Most users of GNU CC do not want to receive bug ! 843: reports. Those that do, have asked to be on `bug-gcc'. ! 844: ! 845: The mailing list `bug-gcc' has a newsgroup which serves as a ! 846: repeater. The mailing list and the newsgroup carry exactly the same ! 847: messages. Often people think of posting bug reports to the newsgroup ! 848: instead of mailing them. This appears to work, but it has one problem ! 849: which can be crucial: a newsgroup posting does not contain a mail path ! 850: back to the sender. Thus, if I need to ask for more information, I ! 851: may be unable to reach you. For this reason, it is better to send bug ! 852: reports to the mailing list. ! 853: ! 854: As a last resort, send bug reports on paper to: ! 855: ! 856: GNU Compiler Bugs ! 857: Free Software Foundation ! 858: 675 Mass Ave ! 859: Cambridge, MA 02139 ! 860: ! 861: The fundamental principle of reporting bugs usefully is this: ! 862: *report all the facts*. If you are not sure whether to state a fact ! 863: or leave it out, state it! ! 864: ! 865: Often people omit facts because they think they know what causes the ! 866: problem and they conclude that some details don't matter. Thus, you ! 867: might assume that the name of the variable you use in an example does ! 868: not matter. Well, probably it doesn't, but one cannot be sure. ! 869: Perhaps the bug is a stray memory reference which happens to fetch ! 870: from the location where that name is stored in memory; perhaps, if the ! 871: name were different, the contents of that location would fool the ! 872: compiler into doing the right thing despite the bug. Play it safe and ! 873: give a specific, complete example. That is the easiest thing for you ! 874: to do, and the most helpful. ! 875: ! 876: Keep in mind that the purpose of a bug report is to enable me to fix ! 877: the bug if it is not known. It isn't very important what happens if ! 878: the bug is already known. Therefore, always write your bug reports on ! 879: the assumption that the bug is not known. ! 880: ! 881: Sometimes people give a few sketchy facts and ask, "Does this ring a ! 882: bell?" Those bug reports are useless, and I urge everyone to *refuse ! 883: to respond to them* except to chide the sender to report bugs properly. ! 884: ! 885: To enable me to fix the bug, you should include all these things: ! 886: ! 887: * The version of GNU CC. You can get this by running it with the ! 888: `-v' option. ! 889: ! 890: Without this, I won't know whether there is any point in looking ! 891: for the bug in the current version of GNU CC. ! 892: ! 893: * A complete input file that will reproduce the bug. If the bug is ! 894: in the C preprocessor, send me a source file and any header files ! 895: that it requires. If the bug is in the compiler proper (`cc1'), ! 896: run your source file through the C preprocessor by doing `gcc -E ! 897: SOURCEFILE > OUTFILE', then include the contents of OUTFILE in ! 898: the bug report. (Any `-I', `-D' or `-U' options that you used in ! 899: actual compilation should also be used when doing this.) ! 900: ! 901: A single statement is not enough of an example. In order to ! 902: compile it, it must be embedded in a function definition; and the ! 903: bug might depend on the details of how this is done. ! 904: ! 905: Without a real example I can compile, all I can do about your bug ! 906: report is wish you luck. It would be futile to try to guess how ! 907: to provoke the bug. For example, bugs in register allocation and ! 908: reloading frequently depend on every little detail of the function ! 909: they happen in. ! 910: ! 911: * The command arguments you gave GNU CC to compile that example and ! 912: observe the bug. For example, did you use `-O'? To guarantee ! 913: you won't omit something important, list them all. ! 914: ! 915: If I were to try to guess the arguments, I would probably guess ! 916: wrong and then I would not encounter the bug. ! 917: ! 918: * The type of machine you are using, and the operating system name ! 919: and version number. ! 920: ! 921: * The operands you gave to the `configure' command when you ! 922: installed the compiler. ! 923: ! 924: * A description of what behavior you observe that you believe is ! 925: incorrect. For example, "It gets a fatal signal," or, "There is ! 926: an incorrect assembler instruction in the output." ! 927: ! 928: Of course, if the bug is that the compiler gets a fatal signal, ! 929: then I will certainly notice it. But if the bug is incorrect ! 930: output, I might not notice unless it is glaringly wrong. I won't ! 931: study all the assembler code from a 50-line C program just on the ! 932: off chance that it might be wrong. ! 933: ! 934: Even if the problem you experience is a fatal signal, you should ! 935: still say so explicitly. Suppose something strange is going on, ! 936: such as, your copy of the compiler is out of synch, or you have ! 937: encountered a bug in the C library on your system. (This has ! 938: happened!) Your copy might crash and mine would not. If you ! 939: told me to expect a crash, then when mine fails to crash, I would ! 940: know that the bug was not happening for me. If you had not told ! 941: me to expect a crash, then I would not be able to draw any ! 942: conclusion from my observations. ! 943: ! 944: Often the observed symptom is incorrect output when your program ! 945: is run. Sad to say, this is not enough information for me unless ! 946: the program is short and simple. If you send me a large program, ! 947: I don't have time to figure out how it would work if compiled ! 948: correctly, much less which line of it was compiled wrong. So you ! 949: will have to do that. Tell me which source line it is, and what ! 950: incorrect result happens when that line is executed. A person ! 951: who understands the program can find this as easily as a bug in ! 952: the program itself. ! 953: ! 954: * If you send me examples of output from GNU CC, please use `-g' ! 955: when you make them. The debugging information includes source ! 956: line numbers which are essential for correlating the output with ! 957: the input. ! 958: ! 959: * If you wish to suggest changes to the GNU CC source, send me ! 960: context diffs. If you even discuss something in the GNU CC ! 961: source, refer to it by context, not by line number. ! 962: ! 963: The line numbers in my development sources don't match those in ! 964: your sources. Your line numbers would convey no useful ! 965: information to me. ! 966: ! 967: * Additional information from a debugger might enable me to find a ! 968: problem on a machine which I do not have available myself. ! 969: However, you need to think when you collect this information if ! 970: you want it to have any chance of being useful. ! 971: ! 972: For example, many people send just a backtrace, but that is never ! 973: useful by itself. A simple backtrace with arguments conveys ! 974: little about GNU CC because the compiler is largely data-driven; ! 975: the same functions are called over and over for different RTL ! 976: insns, doing different things depending on the details of the ! 977: insn. ! 978: ! 979: Most of the arguments listed in the backtrace are useless because ! 980: they are pointers to RTL list structure. The numeric values of ! 981: the pointers, which the debugger prints in the backtrace, have no ! 982: significance whatever; all that matters is the contents of the ! 983: objects they point to (and most of the contents are other such ! 984: pointers). ! 985: ! 986: In addition, most compiler passes consist of one or more loops ! 987: that scan the RTL insn sequence. The most vital piece of ! 988: information about such a loop--which insn it has reached--is ! 989: usually in a local variable, not in an argument. ! 990: ! 991: What you need to provide in addition to a backtrace are the ! 992: values of the local variables for several stack frames up. When ! 993: a local variable or an argument is an RTX, first print its value ! 994: and then use the GDB command `pr' to print the RTL expression ! 995: that it points to. (If GDB doesn't run on your machine, use your ! 996: debugger to call the function `debug_rtx' with the RTX as an ! 997: argument.) In general, whenever a variable is a pointer, its ! 998: value is no use without the data it points to. ! 999: ! 1000: In addition, include a debugging dump from just before the pass ! 1001: in which the crash happens. Most bugs involve a series of insns, ! 1002: not just one. ! 1003: ! 1004: Here are some things that are not necessary: ! 1005: ! 1006: * A description of the envelope of the bug. ! 1007: ! 1008: Often people who encounter a bug spend a lot of time investigating ! 1009: which changes to the input file will make the bug go away and ! 1010: which changes will not affect it. ! 1011: ! 1012: This is often time consuming and not very useful, because the way ! 1013: I will find the bug is by running a single example under the ! 1014: debugger with breakpoints, not by pure deduction from a series of ! 1015: examples. I recommend that you save your time for something else. ! 1016: ! 1017: Of course, if you can find a simpler example to report *instead* ! 1018: of the original one, that is a convenience for me. Errors in the ! 1019: output will be easier to spot, running under the debugger will ! 1020: take less time, etc. Most GNU CC bugs involve just one function, ! 1021: so the most straightforward way to simplify an example is to ! 1022: delete all the function definitions except the one where the bug ! 1023: occurs. Those earlier in the file may be replaced by external ! 1024: declarations if the crucial function depends on them. ! 1025: (Exception: inline functions may affect compilation of functions ! 1026: defined later in the file.) ! 1027: ! 1028: However, simplification is not vital; if you don't want to do ! 1029: this, report the bug anyway and send me the entire test case you ! 1030: used. ! 1031: ! 1032: * A patch for the bug. ! 1033: ! 1034: A patch for the bug does help me if it is a good one. But don't ! 1035: omit the necessary information, such as the test case, on the ! 1036: assumption that a patch is all I need. I might see problems with ! 1037: your patch and decide to fix the problem another way, or I might ! 1038: not understand it at all. ! 1039: ! 1040: Sometimes with a program as complicated as GNU CC it is very hard ! 1041: to construct an example that will make the program follow a ! 1042: certain path through the code. If you don't send me the example, ! 1043: I won't be able to construct one, so I won't be able to verify ! 1044: that the bug is fixed. ! 1045: ! 1046: And if I can't understand what bug you are trying to fix, or why ! 1047: your patch should be an improvement, I won't install it. A test ! 1048: case will help me to understand. ! 1049: ! 1050: * A guess about what the bug is or what it depends on. ! 1051: ! 1052: Such guesses are usually wrong. Even I can't guess right about ! 1053: such things without first using the debugger to find the facts. ! 1054: ! 1055:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.