|
|
1.1.1.4 ! root 1: This is Info file gcc.info, produced by Makeinfo-1.49 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.4 ! root 14: that the sections entitled "GNU General Public License" and "Protect ! 15: Your Freedom--Fight `Look And Feel'" are included exactly as in the ! 16: original, and provided that the entire resulting derived work is ! 17: distributed under the terms of a permission notice identical to this ! 18: one. 1.1 root 19: 20: Permission is granted to copy and distribute translations of this 21: manual into another language, under the above conditions for modified 1.1.1.3 root 22: versions, except that the sections entitled "GNU General Public 1.1.1.4 ! root 23: License" and "Protect Your Freedom--Fight `Look And Feel'", and this ! 24: permission notice, may be included in translations approved by the Free ! 25: Software Foundation instead of in the original English. 1.1.1.3 root 26: 27: 1.1.1.4 ! root 28: File: gcc.info, Node: Interoperation, Next: Incompatibilities, Prev: Cross-Compiler Problems, Up: Trouble 1.1.1.3 root 29: 1.1.1.4 ! root 30: Interoperation ! 31: ============== 1.1.1.3 root 32: 1.1.1.4 ! root 33: This section lists various difficulties encountered in using GNU C or ! 34: GNU C++ together with other compilers or with the assemblers, linkers, ! 35: libraries and debuggers on certain systems. ! 36: ! 37: * GNU C normally compiles functions to return small structures and ! 38: unions in registers. Most other compilers arrange to return them ! 39: just like larger structures and unions. This can lead to trouble ! 40: when you link together code compiled by different compilers. To ! 41: avoid the problem, you can use the option `-fpcc-struct-return' ! 42: when compiling with GNU CC. ! 43: ! 44: * GNU C++ does not do name mangling in the same way as other C++ ! 45: compilers. This means that object files compiled with one compiler ! 46: cannot be used with another. ! 47: ! 48: GNU C++ also uses different techniques for arranging virtual ! 49: function tables and the layout of class instances. In general, ! 50: therefore, linking code compiled with different C++ compilers does ! 51: not work. ! 52: ! 53: * Older GDB versions sometimes fail to read the output of GNU CC ! 54: version 2. If you have trouble, get GDB version 4.4 or later. ! 55: ! 56: * DBX rejects some files produced by GNU CC, though it accepts ! 57: similar constructs in output from PCC. Until someone can supply a ! 58: coherent description of what is valid DBX input and what is not, ! 59: there is nothing I can do about these problems. You are on your ! 60: own. ! 61: ! 62: * The GNU assembler (GAS) does not support PIC. To generate PIC ! 63: code, you must use some other assembler, such as `/bin/as'. ! 64: ! 65: * On some BSD systems including some versions of Ultrix, use of ! 66: profiling causes static variable destructors (currently used only ! 67: in C++) not to be run. ! 68: ! 69: * Use of `-I/usr/include' may cause trouble. ! 70: ! 71: Many systems come with header files that won't work with GNU CC ! 72: unless corrected by `fixincludes'. The corrected header files go ! 73: in a new directory; GNU CC searches this directory before ! 74: `/usr/include'. If you use `-I/usr/include', this tells GNU CC to ! 75: search `/usr/include' earlier on, before the corrected headers. ! 76: The result is that you get the uncorrected header files. ! 77: ! 78: Instead, you should use these options: ! 79: ! 80: -I/usr/local/lib/gcc-lib/TARGET/VERSION/include -I/usr/include ! 81: ! 82: * On a Sparc, GNU CC aligns all values of type `double' on an 8-byte ! 83: boundary, and it expects every `double' to be so aligned. The Sun ! 84: compiler usually gives `double' values 8-byte alignment, with one ! 85: exception: function arguments of type `double' may not be aligned. ! 86: ! 87: As a result, if a function compiled with Sun CC takes the address ! 88: of an argument of type `double' and passes this pointer of type ! 89: `double *' to a function compiled with GNU CC, dereferencing the ! 90: pointer may cause a fatal signal. ! 91: ! 92: One way to solve this problem is to compile your entire program ! 93: with GNU CC. Another solution is to modify the function that is ! 94: compiled with Sun CC to copy the argument into a local variable; ! 95: local variables are always properly aligned. A third solution is ! 96: to modify the function that uses the pointer to dereference it via ! 97: the following function `access_double' instead of directly with ! 98: `*': ! 99: ! 100: inline double ! 101: access_double (double *unaligned_ptr) ! 102: { ! 103: union d2i { double d; int i[2]; }; ! 104: ! 105: union d2i *p = (union d2i *) unaligned_ptr; ! 106: union d2i u; ! 107: ! 108: u.i[0] = p->i[0]; ! 109: u.i[1] = p->i[1]; ! 110: ! 111: return u.d; ! 112: } ! 113: ! 114: Storing into the pointer can be done likewise with the same union. ! 115: ! 116: * On a Sun, linking using GNU CC fails to find a shared library and ! 117: reports that the library doesn't exist at all. ! 118: ! 119: This happens if you are using the GNU linker, because it does only ! 120: static linking and looks only for unshared libraries. If you have ! 121: a shared library with no unshared counterpart, the GNU linker ! 122: won't find anything. ! 123: ! 124: We hope to make a linker which supports Sun shared libraries, but ! 125: please don't ask when it will be finished--we don't know. ! 126: ! 127: * Sun forgot to include a static version of `libdl.a' with some ! 128: versions of SunOS (mainly 4.1). This results in undefined symbols ! 129: when linking static binaries (that is, if you use `-static'). If ! 130: you see undefined symbols `_dlclose', `_dlsym' or `_dlopen' when ! 131: linking, compile and link against the file `mit/util/misc/dlsym.c' ! 132: from the MIT version of X windows. ! 133: ! 134: * On the HP PA machine, ADB sometimes fails to work on functions ! 135: compiled with GNU CC. Specifically, it fails to work on functions ! 136: that use `alloca' or variable-size arrays. This is because GNU CC ! 137: doesn't generate HP-UX unwind descriptors for such functions. It ! 138: may even be impossible to generate them. ! 139: ! 140: * Debugging (`-g') is not supported on the HP PA machine, unless you ! 141: use the preliminary GNU tools (*note Installation::.). ! 142: ! 143: * The HP-UX linker has a bug which can cause programs which make use ! 144: of `const' variables to fail in unusual ways. If your program ! 145: makes use of global `const' variables, we suggest you compile with ! 146: the following additional options: ! 147: ! 148: -Dconst="" -D__const="" -D__const__="" -fwritable-strings ! 149: ! 150: This will force the `const' variables into the DATA subspace which ! 151: will avoid the linker bug. ! 152: ! 153: Another option one might use to work around this problem is ! 154: `-mkernel'. `-mkernel' changes how the address of variables is ! 155: computed to a sequence less likely to tickle the HP-UX linker bug. ! 156: ! 157: We hope to work around this problem in GNU CC 2.4, if HP does not ! 158: fix it. ! 159: ! 160: * Taking the address of a label may generate errors from the HP-UX ! 161: PA assembler. GAS for the PA does not have this problem. ! 162: ! 163: * GNU CC produced code will not yet link against HP-UX 8.0 shared ! 164: libraries. We expect to fix this problem in GNU CC 2.4. ! 165: ! 166: * The current version of the assembler (`/bin/as') for the RS/6000 ! 167: has certain problems that prevent the `-g' option in GCC from ! 168: working. ! 169: ! 170: IBM has produced a fixed version of the assembler. The replacement ! 171: assembler is not a standard component of either AIX 3.1.5 or AIX ! 172: 3.2, but is expected to become standard in a future distribution. ! 173: This assembler is available from IBM as APAR IX22829. Yet more ! 174: bugs have been fixed in a newer assembler, which will shortly be ! 175: available as APAR IX26107. See the file `README.RS6000' for more ! 176: details on these assemblers. ! 177: ! 178: * On the IBM RS/6000, compiling code of the form ! 179: ! 180: extern int foo; ! 181: ! 182: ... foo ... ! 183: ! 184: static int foo; ! 185: ! 186: will cause the linker to report an undefined symbol `foo'. ! 187: Although this behavior differs from most other systems, it is not a ! 188: bug because redefining an `extern' variable as `static' is ! 189: undefined in ANSI C. ! 190: ! 191: * On VMS, GAS versions 1.38.1 and earlier may cause spurious warning ! 192: messages from the linker. These warning messages complain of ! 193: mismatched psect attributes. You can ignore them. *Note VMS ! 194: Install::. ! 195: ! 196: * On NewsOS version 3, if you include both `stddef.h' and ! 197: `sys/types.h', you get an error because there are two typedefs of ! 198: `size_t'. You should change `sys/types.h' by adding these lines ! 199: around the definition of `size_t': ! 200: ! 201: #ifndef _SIZE_T ! 202: #define _SIZE_T ! 203: ACTUAL TYPEDEF HERE ! 204: #endif ! 205: ! 206: * On the Alliant, the system's own convention for returning ! 207: structures and unions is unusual, and is not compatible with GNU ! 208: CC no matter what options are used. ! 209: ! 210: * On the IBM RT PC, the MetaWare HighC compiler (hc) uses yet another ! 211: convention for structure and union returning. Use ! 212: `-mhc-struct-return' to tell GNU CC to use a convention compatible ! 213: with it. ! 214: ! 215: * On Ultrix, the Fortran compiler expects registers 2 through 5 to ! 216: be saved by function calls. However, the C compiler uses ! 217: conventions compatible with BSD Unix: registers 2 through 5 may be ! 218: clobbered by function calls. ! 219: ! 220: GNU CC uses the same convention as the Ultrix C compiler. You can ! 221: use these options to produce code compatible with the Fortran ! 222: compiler: ! 223: ! 224: -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5 ! 225: ! 226: * On the WE32k, you may find that programs compiled with GNU CC do ! 227: not work with the standard shared C ilbrary. You may need to link ! 228: with the ordinary C compiler. If you do so, you must specify the ! 229: following options: ! 230: ! 231: -L/usr/local/lib/gcc-lib/we32k-att-sysv/2.3 -lgcc -lc_s ! 232: ! 233: The first specifies where to find the library `libgcc.a' specified ! 234: with the `-lgcc' option. ! 235: ! 236: GNU CC does linking by invoking `ld', just as `cc' does, and there ! 237: is no reason why it *should* matter which compilation program you ! 238: use to invoke `ld'. If someone tracks this problem down, it can ! 239: probably be fixed easily. 1.1.1.3 root 240: 1.1.1.4 ! root 241: ! 242: File: gcc.info, Node: Incompatibilities, Next: Disappointments, Prev: Interoperation, Up: Trouble ! 243: ! 244: Incompatibilities of GNU CC ! 245: =========================== 1.1.1.3 root 246: 1.1.1.4 ! root 247: There are several noteworthy incompatibilities between GNU C and most ! 248: existing (non-ANSI) versions of C. The `-traditional' option ! 249: eliminates many of these incompatibilities, *but not all*, by telling ! 250: GNU C to behave like the other C compilers. ! 251: ! 252: * GNU CC normally makes string constants read-only. If several ! 253: identical-looking string constants are used, GNU CC stores only one ! 254: copy of the string. ! 255: ! 256: One consequence is that you cannot call `mktemp' with a string ! 257: constant argument. The function `mktemp' always alters the string ! 258: its argument points to. ! 259: ! 260: Another consequence is that `sscanf' does not work on some systems ! 261: when passed a string constant as its format control string or ! 262: input. This is because `sscanf' incorrectly tries to write into ! 263: the string constant. Likewise `fscanf' and `scanf'. ! 264: ! 265: The best solution to these problems is to change the program to use ! 266: `char'-array variables with initialization strings for these ! 267: purposes instead of string constants. But if this is not possible, ! 268: you can use the `-fwritable-strings' flag, which directs GNU CC to ! 269: handle string constants the same way most C compilers do. ! 270: `-traditional' also has this effect, among others. ! 271: ! 272: * `-2147483648' is positive. ! 273: ! 274: This is because 2147483648 cannot fit in the type `int', so ! 275: (following the ANSI C rules) its data type is `unsigned long int'. ! 276: Negating this value yields 2147483648 again. ! 277: ! 278: * GNU CC does not substitute macro arguments when they appear inside ! 279: of string constants. For example, the following macro in GNU CC ! 280: ! 281: #define foo(a) "a" ! 282: ! 283: will produce output `"a"' regardless of what the argument A is. ! 284: ! 285: The `-traditional' option directs GNU CC to handle such cases ! 286: (among others) in the old-fashioned (non-ANSI) fashion. ! 287: ! 288: * When you use `setjmp' and `longjmp', the only automatic variables ! 289: guaranteed to remain valid are those declared `volatile'. This is ! 290: a consequence of automatic register allocation. Consider this ! 291: function: ! 292: ! 293: jmp_buf j; ! 294: ! 295: foo () ! 296: { ! 297: int a, b; ! 298: ! 299: a = fun1 (); ! 300: if (setjmp (j)) ! 301: return a; ! 302: ! 303: a = fun2 (); ! 304: /* `longjmp (j)' may occur in `fun3'. */ ! 305: return a + fun3 (); ! 306: } ! 307: ! 308: Here `a' may or may not be restored to its first value when the ! 309: `longjmp' occurs. If `a' is allocated in a register, then its ! 310: first value is restored; otherwise, it keeps the last value stored ! 311: in it. ! 312: ! 313: If you use the `-W' option with the `-O' option, you will get a ! 314: warning when GNU CC thinks such a problem might be possible. ! 315: ! 316: The `-traditional' option directs GNU C to put variables in the ! 317: stack by default, rather than in registers, in functions that call ! 318: `setjmp'. This results in the behavior found in traditional C ! 319: compilers. ! 320: ! 321: * Programs that use preprocessor directives in the middle of macro ! 322: arguments do not work with GNU CC. For example, a program like ! 323: this will not work: ! 324: ! 325: foobar ( ! 326: #define luser ! 327: hack) ! 328: ! 329: ANSI C does not permit such a construct. It would make sense to ! 330: support it when `-traditional' is used, but it is too much work to ! 331: implement. ! 332: ! 333: * Declarations of external variables and functions within a block ! 334: apply only to the block containing the declaration. In other ! 335: words, they have the same scope as any other declaration in the ! 336: same place. ! 337: ! 338: In some other C compilers, a `extern' declaration affects all the ! 339: rest of the file even if it happens within a block. ! 340: ! 341: The `-traditional' option directs GNU C to treat all `extern' ! 342: declarations as global, like traditional compilers. ! 343: ! 344: * In traditional C, you can combine `long', etc., with a typedef ! 345: name, as shown here: ! 346: ! 347: typedef int foo; ! 348: typedef long foo bar; ! 349: ! 350: In ANSI C, this is not allowed: `long' and other type modifiers ! 351: require an explicit `int'. Because this criterion is expressed by ! 352: Bison grammar rules rather than C code, the `-traditional' flag ! 353: cannot alter it. ! 354: ! 355: * PCC allows typedef names to be used as function parameters. The ! 356: difficulty described immediately above applies here too. ! 357: ! 358: * PCC allows whitespace in the middle of compound assignment ! 359: operators such as `+='. GNU CC, following the ANSI standard, does ! 360: not allow this. The difficulty described immediately above ! 361: applies here too. ! 362: ! 363: * GNU CC complains about unterminated character constants inside of ! 364: preprocessor conditionals that fail. Some programs have English ! 365: comments enclosed in conditionals that are guaranteed to fail; if ! 366: these comments contain apostrophes, GNU CC will probably report an ! 367: error. For example, this code would produce an error: ! 368: ! 369: #if 0 ! 370: You can't expect this to work. ! 371: #endif ! 372: ! 373: The best solution to such a problem is to put the text into an ! 374: actual C comment delimited by `/*...*/'. However, `-traditional' ! 375: suppresses these error messages. ! 376: ! 377: * Many user programs contain the declaration `long time ();'. In the ! 378: past, the system header files on many systems did not actually ! 379: declare `time', so it did not matter what type your program ! 380: declared it to return. But in systems with ANSI C headers, `time' ! 381: is declared to return `time_t', and if that is not the same as ! 382: `long', then `long time ();' is erroneous. ! 383: ! 384: The solution is to change your program to use `time_t' as the ! 385: return type of `time'. ! 386: ! 387: * When compiling functions that return `float', PCC converts it to a ! 388: double. GNU CC actually returns a `float'. If you are concerned ! 389: with PCC compatibility, you should declare your functions to return ! 390: `double'; you might as well say what you mean. ! 391: ! 392: * When compiling functions that return structures or unions, GNU CC ! 393: output code normally uses a method different from that used on most ! 394: versions of Unix. As a result, code compiled with GNU CC cannot ! 395: call a structure-returning function compiled with PCC, and vice ! 396: versa. ! 397: ! 398: The method used by GNU CC is as follows: a structure or union ! 399: which is 1, 2, 4 or 8 bytes long is returned like a scalar. A ! 400: structure or union with any other size is stored into an address ! 401: supplied by the caller (usually in a special, fixed register, but ! 402: on some machines it is passed on the stack). The ! 403: machine-description macros `STRUCT_VALUE' and ! 404: `STRUCT_INCOMING_VALUE' tell GNU CC where to pass this address. ! 405: ! 406: By contrast, PCC on most target machines returns structures and ! 407: unions of any size by copying the data into an area of static ! 408: storage, and then returning the address of that storage as if it ! 409: were a pointer value. The caller must copy the data from that ! 410: memory area to the place where the value is wanted. GNU CC does ! 411: not use this method because it is slower and nonreentrant. ! 412: ! 413: On some newer machines, PCC uses a reentrant convention for all ! 414: structure and union returning. GNU CC on most of these machines ! 415: uses a compatible convention when returning structures and unions ! 416: in memory, but still returns small structures and unions in ! 417: registers. ! 418: ! 419: You can tell GNU CC to use a compatible convention for all ! 420: structure and union returning with the option ! 421: `-fpcc-struct-return'. 1.1.1.3 root 422: 423: 1.1.1.4 ! root 424: File: gcc.info, Node: Disappointments, Next: Protoize Caveats, Prev: Incompatibilities, Up: Trouble ! 425: ! 426: Disappointments and Misunderstandings ! 427: ===================================== 1.1.1.3 root 428: 1.1.1.4 ! root 429: These problems are perhaps regrettable, but we don't know any ! 430: practical way around them. 1.1.1.3 root 431: 1.1.1.4 ! root 432: * Certain local variables aren't recognized by debuggers when you ! 433: compile with optimization. ! 434: ! 435: This occurs because sometimes GNU CC optimizes the variable out of ! 436: existence. There is no way to tell the debugger how to compute the ! 437: value such a variable "would have had", and it is not clear that ! 438: would be desirable anyway. So GNU CC simply does not mention the ! 439: eliminated variable when it writes debugging information. ! 440: ! 441: You have to expect a certain amount of disagreement between the ! 442: executable and your source code, when you use optimization. ! 443: ! 444: * Users often think it is a bug when GNU CC reports an error for code ! 445: like this: ! 446: ! 447: int foo (struct mumble *); ! 448: ! 449: struct mumble { ... }; ! 450: ! 451: int foo (struct mumble *x) ! 452: { ... } ! 453: ! 454: This code really is erroneous, because the scope of `struct ! 455: mumble' in the prototype is limited to the argument list ! 456: containing it. It does not refer to the `struct mumble' defined ! 457: with file scope immediately below--they are two unrelated types ! 458: with similar names in different scopes. ! 459: ! 460: But in the definition of `foo', the file-scope type is used ! 461: because that is available to be inherited. Thus, the definition ! 462: and the prototype do not match, and you get an error. ! 463: ! 464: This behavior may seem silly, but it's what the ANSI standard ! 465: specifies. It is easy enough for you to make your code work by ! 466: moving the definition of `struct mumble' above the prototype. ! 467: It's not worth being incompatible with ANSI C just to avoid an ! 468: error for the example shown above. ! 469: ! 470: * Accesses to bitfields even in volatile objects works by accessing ! 471: larger objects, such as a byte or a word. You cannot rely on what ! 472: size of object is accessed in order to read or write the bitfield; ! 473: it may even vary for a given bitfield according to the precise ! 474: usage. ! 475: ! 476: If you care about controlling the amount of memory that is ! 477: accessed, use volatile but do not use bitfields. ! 478: ! 479: * On 68000 systems, you can get paradoxical results if you test the ! 480: precise values of floating point numbers. For example, you can ! 481: find that a floating point value which is not a NaN is not equal ! 482: to itself. This results from the fact that the the floating point ! 483: registers hold a few more bits of precision than fit in a `double' ! 484: in memory. Compiled code moves values between memory and floating ! 485: point registers at its convenience, and moving them into memory ! 486: truncates them. ! 487: ! 488: You can partially avoid this problem by using the option ! 489: `-ffloat-store' (*note Optimize Options::.). ! 490: ! 491: * On the MIPS, variable argument functions using `varargs.h' cannot ! 492: have a floating point value for the first argument. The reason ! 493: for this is that in the absence of a prototype in scope, if the ! 494: first argument is a floating point, it is passed in a floating ! 495: point register, rather than an integer resgister. ! 496: ! 497: If the code is rewritten to use the ANSI standard `stdarg.h' ! 498: method of variable arguments, and the prototype is in scope at the ! 499: time of the call, everything will work fine. 1.1.1.3 root 500: 501: 1.1.1.4 ! root 502: File: gcc.info, Node: Protoize Caveats, Next: Non-bugs, Prev: Disappointments, Up: Trouble 1.1.1.3 root 503: 1.1.1.4 ! root 504: Caveats of using `protoize' ! 505: =========================== 1.1.1.3 root 506: 1.1.1.4 ! root 507: The conversion programs `protoize' and `unprotoize' can sometimes ! 508: change a source file in a way that won't work unless you rearrange it. ! 509: ! 510: * `protoize' can insert references to a type name or type tag before ! 511: the definition, or in a file where they are not defined. ! 512: ! 513: If this happens, compiler error messages should show you where the ! 514: new references are, so fixing the file by hand is straightforward. ! 515: ! 516: * There are some C constructs which `protoize' cannot figure out. ! 517: For example, it can't determine argument types for declaring a ! 518: pointer-to-function variable; this you must do by hand. `protoize' ! 519: inserts a comment containing `???' each time it finds such a ! 520: variable; so you can find all such variables by searching for this ! 521: string. ANSI C does not require declaring the argument types of ! 522: pointer-to-function types. ! 523: ! 524: * Using `unprotoize' can easily introduce bugs. If the program ! 525: relied on prototypes to bring about conversion of arguments, these ! 526: conversions will not take place in the program without prototypes. ! 527: One case in which you can be sure `unprotoize' is safe is when you ! 528: are removing prototypes that were made with `protoize'; if the ! 529: program worked before without any prototypes, it will work again ! 530: without them. ! 531: ! 532: You can find all the places where this problem might occur by ! 533: compiling the program with the `-Wconversion' option. It prints a ! 534: warning whenever an argument is converted. ! 535: ! 536: * Both conversion programs can be confused if there are macro calls ! 537: in and around the text to be converted. In other words, the ! 538: standard syntax for a declaration or definition must not result ! 539: from expanding a macro. This problem is inherent in the design of ! 540: C and cannot be fixed. If only a few functions have confusing ! 541: macro calls, you can easily convert them manually. ! 542: ! 543: * `protoize' cannot get the argument types for a function whose ! 544: definition was not actually compiled due to preprocessor ! 545: conditionals. When this happens, `protoize' changes nothing in ! 546: regard to such a function. `protoize' tries to detect such ! 547: instances and warn about them. ! 548: ! 549: You can generally work around this problem by using `protoize' step ! 550: by step, each time specifying a different set of `-D' options for ! 551: compilation, until all of the functions have been converted. ! 552: There is no automatic way to verify that you have got them all, ! 553: however. ! 554: ! 555: * Confusion may result if there is an occasion to convert a function ! 556: declaration or definition in a region of source code where there ! 557: is more than one formal parameter list present. Thus, attempts to ! 558: convert code containing multiple (conditionally compiled) versions ! 559: of a single function header (in the same vicinity) may not produce ! 560: the desired (or expected) results. ! 561: ! 562: If you plan on converting source files which contain such code, it ! 563: is recommended that you first make sure that each conditionally ! 564: compiled region of source code which contains an alternative ! 565: function header also contains at least one additional follower ! 566: token (past the final right parenthesis of the function header). ! 567: This should circumvent the problem. ! 568: ! 569: * `unprotoize' can become confused when trying to convert a function ! 570: definition or declaration which contains a declaration for a ! 571: pointer-to-function formal argument which has the same name as the ! 572: function being defined or declared. We recommand you avoid such ! 573: choices of formal parameter names. ! 574: ! 575: * You might also want to correct some of the indentation by hand and ! 576: break long lines. (The conversion programs don't write lines ! 577: longer than eighty characters in any case.) 1.1 root 578: 579: 1.1.1.4 ! root 580: File: gcc.info, Node: Non-bugs, Prev: Protoize Caveats, Up: Trouble ! 581: ! 582: Certain Changes We Don't Want to Make ! 583: ===================================== 1.1.1.2 root 584: 1.1.1.4 ! root 585: This section lists changes that people frequently request, but which ! 586: we do not make because we think GNU CC is better without them. 1.1.1.2 root 587: 1.1.1.4 ! root 588: * Checking the number and type of arguments to a function which has ! 589: an old-fashioned definition and no prototype. ! 590: ! 591: Such a feature would work only occasionally--only for calls that ! 592: appear in the same file as the called function, following the ! 593: definition. The only way to check all calls reliably is to add a ! 594: prototype for the function. But adding a prototype eliminates the ! 595: motivation for this feature. So the feature is not worthwhile. ! 596: ! 597: * Warning about using an expression whose type is signed as a shift ! 598: count. ! 599: ! 600: Shift count operands are probably signed more often than unsigned. ! 601: Warning about this would cause far more annoyance than good. ! 602: ! 603: * Warning about assigning a signed value to an unsigned variable. ! 604: ! 605: Such assignments must be very common; warning about them would ! 606: cause more annoyance than good. ! 607: ! 608: * Warning about unreachable code. ! 609: ! 610: It's very common to have unreachable code in machine-generated ! 611: programs. For example, this happens normally in some files of GNU ! 612: C itself. ! 613: ! 614: * Warning when a non-void function value is ignored. ! 615: ! 616: Coming as I do from a Lisp background, I balk at the idea that ! 617: there is something dangerous about discarding a value. There are ! 618: functions that return values which some callers may find useful; ! 619: it makes no sense to clutter the program with a cast to `void' ! 620: whenever the value isn't useful. ! 621: ! 622: * Assuming (for optimization) that the address of an external symbol ! 623: is never zero. ! 624: ! 625: This assumption is false on certain systems when `#pragma weak' is ! 626: used. ! 627: ! 628: * Making `-fshort-enums' the default. ! 629: ! 630: This would cause storage layout to be incompatible with most other ! 631: C compilers. And it doesn't seem very important, given that you ! 632: can get the same result in other ways. The case where it matters ! 633: most is when the enumeration-valued object is inside a structure, ! 634: and in that case you can specify a field width explicitly. ! 635: ! 636: * Making bitfields unsigned by default on particular machines where ! 637: "the ABI standard" says to do so. ! 638: ! 639: The ANSI C standard leaves it up to the implementation whether a ! 640: bitfield declared plain `int' is signed or not. This in effect ! 641: creates two alternative dialects of C. ! 642: ! 643: The GNU C compiler supports both dialects; you can specify the ! 644: dialect you want with the option `-fsigned-bitfields' or ! 645: `-funsigned-bitfields'. However, this leaves open the question of ! 646: which dialect to use by default. ! 647: ! 648: Currently, the preferred dialect makes plain bitfields signed, ! 649: because this is simplest. Since `int' is the same as `signed int' ! 650: in every other context, it is cleanest for them to be the same in ! 651: bitfields as well. ! 652: ! 653: Some computer manufacturers have published Application Binary ! 654: Interface standards which specify that plain bitfields should be ! 655: unsigned. It is a mistake, however, to say anything about this ! 656: issue in an ABI. This is because the handling of plain bitfields ! 657: distinguishes two dialects of C. Both dialects are meaningful on ! 658: every type of machine. Whether a particular object file was ! 659: compiled using signed bitfields or unsigned is of no concern to ! 660: other object files, even if they access the same bitfields in the ! 661: same data structures. ! 662: ! 663: A given program is written in one or the other of these two ! 664: dialects. The program stands a chance to work on most any machine ! 665: if it is compiled with the proper dialect. It is unlikely to work ! 666: at all if compiled with the wrong dialect. ! 667: ! 668: Many users appreciate the GNU C compiler because it provides an ! 669: environment that is uniform across machines. These users would be ! 670: inconvenienced if the compiler treated plain bitfields differently ! 671: on certain machines. ! 672: ! 673: Occasionally users write programs intended only for a particular ! 674: machine type. On these occasions, the users would benefit if the ! 675: GNU C compiler were to support by default the same dialect as the ! 676: other compilers on that machine. But such applications are rare. ! 677: And users writing a program to run on more than one type of ! 678: machine cannot possibly benefit from this kind of compatibility. ! 679: ! 680: This is why GNU CC does and will treat plain bitfields in the same ! 681: fashion on all types of machines (by default). ! 682: ! 683: There are some arguments for making bitfields unsigned by default ! 684: on all machines. If, for example, this becomes a universal de ! 685: facto standard, it would make sense for GNU CC to go along with ! 686: it. This is something to be considered in the future. ! 687: ! 688: (Of course, users strongly concerned about portability should ! 689: indicate explicitly in each bitfield whether it is signed or not. ! 690: In this way, they write programs which have the same meaning in ! 691: both C dialects.) ! 692: ! 693: * Undefining `__STDC__' when `-ansi' is not used. ! 694: ! 695: Currently, GNU CC defines `__STDC__' as long as you don't use ! 696: `-traditional'. This provides good results in practice. ! 697: ! 698: Programmers normally use conditionals on `__STDC__' to ask whether ! 699: it is safe to use certain features of ANSI C, such as function ! 700: prototypes or ANSI token concatenation. Since plain `gcc' supports ! 701: all the features of ANSI C, the correct answer to these questions ! 702: is "yes". ! 703: ! 704: Some users try to use `__STDC__' to check for the availability of ! 705: certain library facilities. This is actually incorrect usage in ! 706: an ANSI C program, because the ANSI C standard says that a ! 707: conforming freestanding implementation should define `__STDC__' ! 708: even though it does not have the library facilities. `gcc -ansi ! 709: -pedantic' is a conforming freestanding implementation, and it is ! 710: therefore required to define `__STDC__', even though it does not ! 711: come with an ANSI C library. ! 712: ! 713: Sometimes people say that defining `__STDC__' in a compiler that ! 714: does not completely conform to the ANSI C standard somehow ! 715: violates the standard. This is illogical. The standard is a ! 716: standard for compilers that claim to support ANSI C, such as `gcc ! 717: -ansi'--not for other compilers such as plain `gcc'. Whatever the ! 718: ANSI C standard says is relevant to the design of plain `gcc' ! 719: without `-ansi' only for pragmatic reasons, not as a requirement. ! 720: ! 721: * Undefining `__STDC__' in C++. ! 722: ! 723: Programs written to compile with C++-to-C translators get the ! 724: value of `__STDC__' that goes with the C compiler that is ! 725: subsequently used. These programs must test `__STDC__' to ! 726: determine what kind of C preprocessor that compiler uses: whether ! 727: they should concatenate tokens in the ANSI C fashion or in the ! 728: traditional fashion. ! 729: ! 730: These programs work properly with GNU C++ if `__STDC__' is defined. ! 731: They would not work otherwise. ! 732: ! 733: In addition, many header files are written to provide prototypes ! 734: in ANSI C but not in traditional C. Many of these header files ! 735: can work without change in C++ provided `__STDC__' is defined. If ! 736: `__STDC__' is not defined, they will all fail, and will all need ! 737: to be changed to test explicitly for C++ as well. ! 738: ! 739: * Deleting "empty" loops. ! 740: ! 741: GNU CC does not delete "empty" loops because the most likely reason ! 742: you would put one in a program is to have a delay. Deleting them ! 743: will not make real programs run any faster, so it would be ! 744: pointless. ! 745: ! 746: It would be different if optimization of a nonempty loop could ! 747: produce an empty one. But this generally can't happen. 1.1.1.2 root 748: 749: 1.1.1.4 ! root 750: File: gcc.info, Node: Bugs, Next: Service, Prev: Trouble, Up: Top ! 751: ! 752: Reporting Bugs ! 753: ************** 1.1.1.2 root 754: 1.1.1.4 ! root 755: Your bug reports play an essential role in making GNU CC reliable. 1.1.1.2 root 756: 1.1.1.4 ! root 757: When you encounter a problem, the first thing to do is to see if it ! 758: is already known. *Note Trouble::. If it isn't known, then you should ! 759: report the problem. ! 760: ! 761: Reporting a bug may help you by bringing a solution to your problem, ! 762: or it may not. (If it does not, look in the service directory; see ! 763: *Note Service::.) In any case, the principal function of a bug report ! 764: is to help the entire community by making the next version of GNU CC ! 765: work better. Bug reports are your contribution to the maintenance of ! 766: GNU CC. ! 767: ! 768: In order for a bug report to serve its purpose, you must include the ! 769: information that makes for fixing the bug. 1.1.1.2 root 770: 771: * Menu: 772: 1.1.1.4 ! root 773: * Criteria: Bug Criteria. Have you really found a bug? ! 774: * Where: Bug Lists. Where to send your bug report. ! 775: * Reporting: Bug Reporting. How to report a bug effectively. ! 776: * Patches: Sending Patches. How to send a patch for GNU CC. ! 777: * Known: Trouble. Known problems. ! 778: * Help: Service. Where to ask for help. 1.1.1.2 root 779: 780: 1.1.1.4 ! root 781: File: gcc.info, Node: Bug Criteria, Next: Bug Lists, Up: Bugs 1.1.1.2 root 782: 1.1.1.4 ! root 783: Have You Found a Bug? ! 784: ===================== 1.1.1.2 root 785: 1.1.1.4 ! root 786: If you are not sure whether you have found a bug, here are some ! 787: guidelines: 1.1.1.2 root 788: 1.1.1.4 ! root 789: * If the compiler gets a fatal signal, for any input whatever, that ! 790: is a compiler bug. Reliable compilers never crash. ! 791: ! 792: * If the compiler produces invalid assembly code, for any input ! 793: whatever (except an `asm' statement), that is a compiler bug, ! 794: unless the compiler reports errors (not just warnings) which would ! 795: ordinarily prevent the assembler from being run. ! 796: ! 797: * If the compiler produces valid assembly code that does not ! 798: correctly execute the input source code, that is a compiler bug. ! 799: ! 800: However, you must double-check to make sure, because you may have ! 801: run into an incompatibility between GNU C and traditional C (*note ! 802: Incompatibilities::.). These incompatibilities might be considered ! 803: bugs, but they are inescapable consequences of valuable features. ! 804: ! 805: Or you may have a program whose behavior is undefined, which ! 806: happened by chance to give the desired results with another C or ! 807: C++ compiler. ! 808: ! 809: For example, in many nonoptimizing compilers, you can write `x;' ! 810: at the end of a function instead of `return x;', with the same ! 811: results. But the value of the function is undefined if `return' ! 812: is omitted; it is not a bug when GNU CC produces different results. ! 813: ! 814: Problems often result from expressions with two increment ! 815: operators, as in `f (*p++, *p++)'. Your previous compiler might ! 816: have interpreted that expression the way you intended; GNU CC might ! 817: interpret it another way. Neither compiler is wrong. The bug is ! 818: in your code. ! 819: ! 820: After you have localized the error to a single source line, it ! 821: should be easy to check for these things. If your program is ! 822: correct and well defined, you have found a compiler bug. ! 823: ! 824: * If the compiler produces an error message for valid input, that is ! 825: a compiler bug. ! 826: ! 827: * If the compiler does not produce an error message for invalid ! 828: input, that is a compiler bug. However, you should note that your ! 829: idea of "invalid input" might be my idea of "an extension" or ! 830: "support for traditional practice". ! 831: ! 832: * If you are an experienced user of C or C++ compilers, your ! 833: suggestions for improvement of GNU CC or GNU C++ are welcome in ! 834: any case. 1.1.1.2 root 835: 836: 1.1.1.4 ! root 837: File: gcc.info, Node: Bug Lists, Next: Bug Reporting, Prev: Bug Criteria, Up: Bugs 1.1 root 838: 1.1.1.4 ! root 839: Where to Report Bugs ! 840: ==================== 1.1 root 841: 1.1.1.4 ! root 842: Send bug reports for GNU C to one of these addresses: ! 843: ! 844: [email protected] ! 845: {ucbvax|mit-eddie|uunet}!prep.ai.mit.edu!bug-gcc ! 846: ! 847: Send bug reports for GNU C++ to one of these addresses: ! 848: ! 849: [email protected] ! 850: {ucbvax|mit-eddie|uunet}!prep.ai.mit.edu!bug-g++ ! 851: ! 852: *Do not send bug reports to `help-gcc', or to the newsgroup ! 853: `gnu.gcc.help'.* Most users of GNU CC do not want to receive bug ! 854: reports. Those that do, have asked to be on `bug-gcc' and/or `bug-g++'. ! 855: ! 856: The mailing lists `bug-gcc' and `bug-g++' both have newsgroups which ! 857: serve as repeaters: `gnu.gcc.bug' and `gnu.g++.bug'. Each mailing list ! 858: and its newsgroup carry exactly the same messages. ! 859: ! 860: Often people think of posting bug reports to the newsgroup instead of ! 861: mailing them. This appears to work, but it has one problem which can be ! 862: crucial: a newsgroup posting does not contain a mail path back to the ! 863: sender. Thus, if maintainers need more information, they may be unable ! 864: to reach you. For this reason, you should always send bug reports by ! 865: mail to the proper mailing list. ! 866: ! 867: As a last resort, send bug reports on paper to: ! 868: ! 869: GNU Compiler Bugs ! 870: Free Software Foundation ! 871: 675 Mass Ave ! 872: Cambridge, MA 02139 1.1 root 873: 874: 1.1.1.4 ! root 875: File: gcc.info, Node: Bug Reporting, Next: Sending Patches, Prev: Bug Lists, Up: Bugs 1.1 root 876: 1.1.1.4 ! root 877: How to Report Bugs ! 878: ================== 1.1 root 879: 1.1.1.4 ! root 880: The fundamental principle of reporting bugs usefully is this: ! 881: *report all the facts*. If you are not sure whether to state a fact or ! 882: leave it out, state it! ! 883: ! 884: Often people omit facts because they think they know what causes the ! 885: problem and they conclude that some details don't matter. Thus, you ! 886: might assume that the name of the variable you use in an example does ! 887: not matter. Well, probably it doesn't, but one cannot be sure. Perhaps ! 888: the bug is a stray memory reference which happens to fetch from the ! 889: location where that name is stored in memory; perhaps, if the name were ! 890: different, the contents of that location would fool the compiler into ! 891: doing the right thing despite the bug. Play it safe and give a ! 892: specific, complete example. That is the easiest thing for you to do, ! 893: and the most helpful. ! 894: ! 895: Keep in mind that the purpose of a bug report is to enable someone to ! 896: fix the bug if it is not known. It isn't very important what happens if ! 897: the bug is already known. Therefore, always write your bug reports on ! 898: the assumption that the bug is not known. ! 899: ! 900: Sometimes people give a few sketchy facts and ask, "Does this ring a ! 901: bell?" This cannot help us fix a bug, so it is basically useless. We ! 902: respond by asking for enough details to enable us to investigate. You ! 903: might as well expedite matters by sending them to begin with. ! 904: ! 905: Try to make your bug report self-contained. If we have to ask you ! 906: for more information, it is best if you include all the previous ! 907: information in your response, as well as the information that was ! 908: missing. ! 909: ! 910: To enable someone to investigate the bug, you should include all ! 911: these things: ! 912: ! 913: * The version of GNU CC. You can get this by running it with the ! 914: `-v' option. ! 915: ! 916: Without this, we won't know whether there is any point in looking ! 917: for the bug in the current version of GNU CC. ! 918: ! 919: * A complete input file that will reproduce the bug. If the bug is ! 920: in the C preprocessor, send a source file and any header files ! 921: that it requires. If the bug is in the compiler proper (`cc1'), ! 922: run your source file through the C preprocessor by doing `gcc -E ! 923: SOURCEFILE > OUTFILE', then include the contents of OUTFILE in the ! 924: bug report. (When you do this, use the same `-I', `-D' or `-U' ! 925: options that you used in actual compilation.) ! 926: ! 927: A single statement is not enough of an example. In order to ! 928: compile it, it must be embedded in a complete file of compiler ! 929: input; and the bug might depend on the details of how this is done. ! 930: ! 931: Without a real example one can compile, all anyone can do about ! 932: your bug report is wish you luck. It would be futile to try to ! 933: guess how to provoke the bug. For example, bugs in register ! 934: allocation and reloading frequently depend on every little detail ! 935: of the function they happen in. ! 936: ! 937: Even if the input file that fails comes from a GNU program, you ! 938: should still send the complete test case. Don't ask the GNU CC ! 939: maintainers to do the extra work of obtaining the program in ! 940: question--they are all overworked as it is. Also, the problem may ! 941: depend on what is in the header files on your system; it is ! 942: unreliable for the GNU CC maintainers to try the problem with the ! 943: header files available to them. By sending CPP output, you can ! 944: eliminate this source of uncertainty. ! 945: ! 946: * The command arguments you gave GNU CC or GNU C++ to compile that ! 947: example and observe the bug. For example, did you use `-O'? To ! 948: guarantee you won't omit something important, list all the options. ! 949: ! 950: If we were to try to guess the arguments, we would probably guess ! 951: wrong and then we would not encounter the bug. ! 952: ! 953: * The type of machine you are using, and the operating system name ! 954: and version number. ! 955: ! 956: * The operands you gave to the `configure' command when you installed ! 957: the compiler. ! 958: ! 959: * A complete list of any modifications you have made to the compiler ! 960: source. (We don't promise to investigate the bug unless it ! 961: happens in an unmodified compiler. But if you've made ! 962: modifications and don't tell us, then you are sending us on a wild ! 963: goose chase.) ! 964: ! 965: Be precise about these changes. A description in English is not ! 966: enough--send a context diff for them. ! 967: ! 968: Adding files of your own (such as a machine description for a ! 969: machine we don't support) is a modification of the compiler source. ! 970: ! 971: * Details of any other deviations from the standard procedure for ! 972: installing GNU CC. ! 973: ! 974: * A description of what behavior you observe that you believe is ! 975: incorrect. For example, "The compiler gets a fatal signal," or, ! 976: "The assembler instruction at line 208 in the output is incorrect." ! 977: ! 978: Of course, if the bug is that the compiler gets a fatal signal, ! 979: then one can't miss it. But if the bug is incorrect output, the ! 980: maintainer might not notice unless it is glaringly wrong. None of ! 981: us has time to study all the assembler code from a 50-line C ! 982: program just on the chance that one instruction might be wrong. ! 983: We need *you* to do this part! ! 984: ! 985: Even if the problem you experience is a fatal signal, you should ! 986: still say so explicitly. Suppose something strange is going on, ! 987: such as, your copy of the compiler is out of synch, or you have ! 988: encountered a bug in the C library on your system. (This has ! 989: happened!) Your copy might crash and the copy here would not. If ! 990: you said to expect a crash, then when the compiler here fails to ! 991: crash, we would know that the bug was not happening. If you don't ! 992: say to expect a crash, then we would not know whether the bug was ! 993: happening. We would not be able to draw any conclusion from our ! 994: observations. ! 995: ! 996: If the problem is a diagnostic when compiling GNU CC with some ! 997: other compiler, say whether it is a warning or an error. ! 998: ! 999: Often the observed symptom is incorrect output when your program ! 1000: is run. Sad to say, this is not enough information unless the ! 1001: program is short and simple. None of us has time to study a large ! 1002: program to figure out how it would work if compiled correctly, ! 1003: much less which line of it was compiled wrong. So you will have ! 1004: to do that. Tell us which source line it is, and what incorrect ! 1005: result happens when that line is executed. A person who ! 1006: understands the program can find this as easily as finding a bug ! 1007: in the program itself. ! 1008: ! 1009: * If you send examples of assembler code output from GNU CC or GNU ! 1010: C++, please use `-g' when you make them. The debugging information ! 1011: includes source line numbers which are essential for correlating ! 1012: the output with the input. ! 1013: ! 1014: * If you wish to mention something in the GNU CC source, refer to it ! 1015: by context, not by line number. ! 1016: ! 1017: The line numbers in the development sources don't match those in ! 1018: your sources. Your line numbers would convey no useful ! 1019: information to the maintainers. ! 1020: ! 1021: * Additional information from a debugger might enable someone to ! 1022: find a problem on a machine which he does not have available. ! 1023: However, you need to think when you collect this information if ! 1024: you want it to have any chance of being useful. ! 1025: ! 1026: For example, many people send just a backtrace, but that is never ! 1027: useful by itself. A simple backtrace with arguments conveys little ! 1028: about GNU CC because the compiler is largely data-driven; the same ! 1029: functions are called over and over for different RTL insns, doing ! 1030: different things depending on the details of the insn. ! 1031: ! 1032: Most of the arguments listed in the backtrace are useless because ! 1033: they are pointers to RTL list structure. The numeric values of the ! 1034: pointers, which the debugger prints in the backtrace, have no ! 1035: significance whatever; all that matters is the contents of the ! 1036: objects they point to (and most of the contents are other such ! 1037: pointers). ! 1038: ! 1039: In addition, most compiler passes consist of one or more loops that ! 1040: scan the RTL insn sequence. The most vital piece of information ! 1041: about such a loop--which insn it has reached--is usually in a ! 1042: local variable, not in an argument. ! 1043: ! 1044: What you need to provide in addition to a backtrace are the values ! 1045: of the local variables for several stack frames up. When a local ! 1046: variable or an argument is an RTX, first print its value and then ! 1047: use the GDB command `pr' to print the RTL expression that it points ! 1048: to. (If GDB doesn't run on your machine, use your debugger to call ! 1049: the function `debug_rtx' with the RTX as an argument.) In ! 1050: general, whenever a variable is a pointer, its value is no use ! 1051: without the data it points to. ! 1052: ! 1053: Here are some things that are not necessary: ! 1054: ! 1055: * A description of the envelope of the bug. ! 1056: ! 1057: Often people who encounter a bug spend a lot of time investigating ! 1058: which changes to the input file will make the bug go away and which ! 1059: changes will not affect it. ! 1060: ! 1061: This is often time consuming and not very useful, because the way ! 1062: we will find the bug is by running a single example under the ! 1063: debugger with breakpoints, not by pure deduction from a series of ! 1064: examples. You might as well save your time for something else. ! 1065: ! 1066: Of course, if you can find a simpler example to report *instead* of ! 1067: the original one, that is a convenience. Errors in the output ! 1068: will be easier to spot, running under the debugger will take less ! 1069: time, etc. Most GNU CC bugs involve just one function, so the most ! 1070: straightforward way to simplify an example is to delete all the ! 1071: function definitions except the one where the bug occurs. Those ! 1072: earlier in the file may be replaced by external declarations if ! 1073: the crucial function depends on them. (Exception: inline ! 1074: functions may affect compilation of functions defined later in the ! 1075: file.) ! 1076: ! 1077: However, simplification is not vital; if you don't want to do this, ! 1078: report the bug anyway and send the entire test case you used. ! 1079: ! 1080: * In particular, some people insert conditionals `#ifdef BUG' around ! 1081: a statement which, if removed, makes the bug not happen. These ! 1082: are just clutter; we won't pay any attention to them anyway. ! 1083: Besides, you should send us cpp output, and that can't have ! 1084: conditionals. ! 1085: ! 1086: * A patch for the bug. ! 1087: ! 1088: A patch for the bug is useful if it is a good one. But don't omit ! 1089: the necessary information, such as the test case, on the ! 1090: assumption that a patch is all we need. We might see problems ! 1091: with your patch and decide to fix the problem another way, or we ! 1092: might not understand it at all. ! 1093: ! 1094: Sometimes with a program as complicated as GNU CC it is very hard ! 1095: to construct an example that will make the program follow a ! 1096: certain path through the code. If you don't send the example, we ! 1097: won't be able to construct one, so we won't be able to verify that ! 1098: the bug is fixed. ! 1099: ! 1100: And if we can't understand what bug you are trying to fix, or why ! 1101: your patch should be an improvement, we won't install it. A test ! 1102: case will help us to understand. ! 1103: ! 1104: *Note Sending Patches::, for guidelines on how to make it easy for ! 1105: us to understand and install your patches. ! 1106: ! 1107: * A guess about what the bug is or what it depends on. ! 1108: ! 1109: Such guesses are usually wrong. Even I can't guess right about ! 1110: such things without first using the debugger to find the facts. ! 1111: ! 1112: * A core dump file. ! 1113: ! 1114: We have no way of examining a core dump for your type of machine ! 1115: unless we have an identical system--and if we do have one, we ! 1116: should be able to reproduce the crash ourselves. 1.1 root 1117: 1118:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.