|
|
1.1.1.10! root 1: This is Info file gcc.info, produced by Makeinfo version 1.67 from the ! 2: input file gcc.texi. 1.1 root 3: 4: This file documents the use and the internals of the GNU compiler. 5: 1.1.1.8 root 6: Published by the Free Software Foundation 59 Temple Place - Suite 330 7: Boston, MA 02111-1307 USA 1.1.1.5 root 8: 1.1.1.8 root 9: Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995 Free Software 10: Foundation, Inc. 1.1 root 11: 1.1.1.3 root 12: Permission is granted to make and distribute verbatim copies of this 13: manual provided the copyright notice and this permission notice are 14: preserved on all copies. 1.1 root 15: 16: Permission is granted to copy and distribute modified versions of 17: this manual under the conditions for verbatim copying, provided also 1.1.1.7 root 18: that the sections entitled "GNU General Public License," "Funding for 19: Free Software," and "Protect Your Freedom--Fight `Look And Feel'" are 20: included exactly as in the original, and provided that the entire 21: resulting derived work is distributed under the terms of a permission 22: notice identical to this one. 1.1 root 23: 24: Permission is granted to copy and distribute translations of this 25: manual into another language, under the above conditions for modified 1.1.1.3 root 26: versions, except that the sections entitled "GNU General Public 1.1.1.7 root 27: License," "Funding for Free Software," and "Protect Your Freedom--Fight 28: `Look And Feel'", and this permission notice, may be included in 29: translations approved by the Free Software Foundation instead of in the 30: original English. 1.1.1.3 root 31: 32: 1.1.1.8 root 33: File: gcc.info, Node: Installation Problems, Next: Cross-Compiler Problems, Prev: Actual Bugs, Up: Trouble 1.1.1.6 root 34: 1.1.1.8 root 35: Installation Problems 36: ===================== 1.1.1.6 root 37: 1.1.1.8 root 38: This is a list of problems (and some apparent problems which don't 39: really mean anything is wrong) that show up during installation of GNU 40: CC. 1.1.1.6 root 41: 1.1.1.8 root 42: * On certain systems, defining certain environment variables such as 43: `CC' can interfere with the functioning of `make'. 1.1.1.6 root 44: 1.1.1.8 root 45: * If you encounter seemingly strange errors when trying to build the 46: compiler in a directory other than the source directory, it could 47: be because you have previously configured the compiler in the 48: source directory. Make sure you have done all the necessary 49: preparations. *Note Other Dir::. 1.1.1.6 root 50: 1.1.1.8 root 51: * If you build GNU CC on a BSD system using a directory stored in a 52: System V file system, problems may occur in running `fixincludes' 53: if the System V file system doesn't support symbolic links. These 54: problems result in a failure to fix the declaration of `size_t' in 55: `sys/types.h'. If you find that `size_t' is a signed type and 56: that type mismatches occur, this could be the cause. 1.1.1.6 root 57: 1.1.1.8 root 58: The solution is not to use such a directory for building GNU CC. 1.1.1.7 root 59: 1.1.1.8 root 60: * In previous versions of GNU CC, the `gcc' driver program looked for 61: `as' and `ld' in various places; for example, in files beginning 62: with `/usr/local/lib/gcc-'. GNU CC version 2 looks for them in 63: the directory `/usr/local/lib/gcc-lib/TARGET/VERSION'. 64: 65: Thus, to use a version of `as' or `ld' that is not the system 66: default, for example `gas' or GNU `ld', you must put them in that 67: directory (or make links to them from that directory). 68: 69: * Some commands executed when making the compiler may fail (return a 70: non-zero status) and be ignored by `make'. These failures, which 71: are often due to files that were not found, are expected, and can 72: safely be ignored. 73: 74: * It is normal to have warnings in compiling certain files about 75: unreachable code and about enumeration type clashes. These files' 76: names begin with `insn-'. Also, `real.c' may get some warnings 77: that you can ignore. 78: 79: * Sometimes `make' recompiles parts of the compiler when installing 80: the compiler. In one case, this was traced down to a bug in 81: `make'. Either ignore the problem or switch to GNU Make. 82: 83: * If you have installed a program known as purify, you may find that 84: it causes errors while linking `enquire', which is part of building 85: GNU CC. The fix is to get rid of the file `real-ld' which purify 86: installs--so that GNU CC won't try to use it. 87: 1.1.1.9 root 88: * On SLS 1.01, a Linux-based GNU system, there is a problem with 89: `libc.a': it does not contain the obstack functions. However, GNU 90: CC assumes that the obstack functions are in `libc.a' when it is 91: the GNU C library. To work around this problem, change the 92: `__GNU_LIBRARY__' conditional around line 31 to `#if 1'. 1.1.1.8 root 93: 94: * On some 386 systems, building the compiler never finishes because 95: `enquire' hangs due to a hardware problem in the motherboard--it 96: reports floating point exceptions to the kernel incorrectly. You 97: can install GNU CC except for `float.h' by patching out the 98: command to run `enquire'. You may also be able to fix the problem 99: for real by getting a replacement motherboard. This problem was 100: observed in Revision E of the Micronics motherboard, and is fixed 101: in Revision F. It has also been observed in the MYLEX MXA-33 102: motherboard. 103: 104: If you encounter this problem, you may also want to consider 105: removing the FPU from the socket during the compilation. 106: Alternatively, if you are running SCO Unix, you can reboot and 107: force the FPU to be ignored. To do this, type `hd(40)unix auto 108: ignorefpu'. 109: 110: * On some 386 systems, GNU CC crashes trying to compile `enquire.c'. 111: This happens on machines that don't have a 387 FPU chip. On 386 112: machines, the system kernel is supposed to emulate the 387 when you 113: don't have one. The crash is due to a bug in the emulator. 114: 115: One of these systems is the Unix from Interactive Systems: 386/ix. 116: On this system, an alternate emulator is provided, and it does 117: work. To use it, execute this command as super-user: 118: 119: ln /etc/emulator.rel1 /etc/emulator 120: 121: and then reboot the system. (The default emulator file remains 122: present under the name `emulator.dflt'.) 123: 124: Try using `/etc/emulator.att', if you have such a problem on the 125: SCO system. 126: 127: Another system which has this problem is Esix. We don't know 128: whether it has an alternate emulator that works. 129: 130: On NetBSD 0.8, a similar problem manifests itself as these error 131: messages: 132: 133: enquire.c: In function `fprop': 134: enquire.c:2328: floating overflow 135: 136: * On SCO systems, when compiling GNU CC with the system's compiler, 137: do not use `-O'. Some versions of the system's compiler miscompile 138: GNU CC with `-O'. 139: 140: * Sometimes on a Sun 4 you may observe a crash in the program 141: `genflags' or `genoutput' while building GNU CC. This is said to 142: be due to a bug in `sh'. You can probably get around it by running 143: `genflags' or `genoutput' manually and then retrying the `make'. 144: 145: * On Solaris 2, executables of GNU CC version 2.0.2 are commonly 146: available, but they have a bug that shows up when compiling current 147: versions of GNU CC: undefined symbol errors occur during assembly 148: if you use `-g'. 149: 150: The solution is to compile the current version of GNU CC without 151: `-g'. That makes a working compiler which you can use to recompile 152: with `-g'. 153: 154: * Solaris 2 comes with a number of optional OS packages. Some of 155: these packages are needed to use GNU CC fully. If you did not 156: install all optional packages when installing Solaris, you will 157: need to verify that the packages that GNU CC needs are installed. 158: 159: To check whether an optional package is installed, use the 160: `pkginfo' command. To add an optional package, use the `pkgadd' 161: command. For further details, see the Solaris documentation. 162: 163: For Solaris 2.0 and 2.1, GNU CC needs six packages: `SUNWarc', 164: `SUNWbtool', `SUNWesu', `SUNWhea', `SUNWlibm', and `SUNWtoo'. 165: 166: For Solaris 2.2, GNU CC needs an additional seventh package: 167: `SUNWsprot'. 168: 169: * On Solaris 2, trying to use the linker and other tools in 170: `/usr/ucb' to install GNU CC has been observed to cause trouble. 171: For example, the linker may hang indefinitely. The fix is to 172: remove `/usr/ucb' from your `PATH'. 173: 174: * If you use the 1.31 version of the MIPS assembler (such as was 175: shipped with Ultrix 3.1), you will need to use the 176: -fno-delayed-branch switch when optimizing floating point code. 177: Otherwise, the assembler will complain when the GCC compiler fills 178: a branch delay slot with a floating point instruction, such as 179: `add.d'. 180: 181: * If on a MIPS system you get an error message saying "does not have 182: gp sections for all it's [sic] sectons [sic]", don't worry about 183: it. This happens whenever you use GAS with the MIPS linker, but 184: there is not really anything wrong, and it is okay to use the 185: output file. You can stop such warnings by installing the GNU 186: linker. 187: 188: It would be nice to extend GAS to produce the gp tables, but they 189: are optional, and there should not be a warning about their 190: absence. 191: 192: * In Ultrix 4.0 on the MIPS machine, `stdio.h' does not work with GNU 193: CC at all unless it has been fixed with `fixincludes'. This causes 194: problems in building GNU CC. Once GNU CC is installed, the 195: problems go away. 196: 197: To work around this problem, when making the stage 1 compiler, 198: specify this option to Make: 199: 200: GCC_FOR_TARGET="./xgcc -B./ -I./include" 201: 202: When making stage 2 and stage 3, specify this option: 203: 204: CFLAGS="-g -I./include" 205: 206: * Users have reported some problems with version 2.0 of the MIPS 207: compiler tools that were shipped with Ultrix 4.1. Version 2.10 208: which came with Ultrix 4.2 seems to work fine. 209: 210: Users have also reported some problems with version 2.20 of the 211: MIPS compiler tools that were shipped with RISC/os 4.x. The 212: earlier version 2.11 seems to work fine. 213: 214: * Some versions of the MIPS linker will issue an assertion failure 215: when linking code that uses `alloca' against shared libraries on 216: RISC-OS 5.0, and DEC's OSF/1 systems. This is a bug in the 217: linker, that is supposed to be fixed in future revisions. To 218: protect against this, GNU CC passes `-non_shared' to the linker 219: unless you pass an explicit `-shared' or `-call_shared' switch. 220: 221: * On System V release 3, you may get this error message while 222: linking: 223: 224: ld fatal: failed to write symbol name SOMETHING 225: in strings table for file WHATEVER 226: 227: This probably indicates that the disk is full or your ULIMIT won't 228: allow the file to be as large as it needs to be. 229: 230: This problem can also result because the kernel parameter `MAXUMEM' 231: is too small. If so, you must regenerate the kernel and make the 232: value much larger. The default value is reported to be 1024; a 233: value of 32768 is said to work. Smaller values may also work. 234: 235: * On System V, if you get an error like this, 236: 237: /usr/local/lib/bison.simple: In function `yyparse': 238: /usr/local/lib/bison.simple:625: virtual memory exhausted 239: 240: that too indicates a problem with disk space, ULIMIT, or `MAXUMEM'. 241: 242: * Current GNU CC versions probably do not work on version 2 of the 243: NeXT operating system. 244: 245: * On NeXTStep 3.0, the Objective C compiler does not work, due, 246: apparently, to a kernel bug that it happens to trigger. This 247: problem does not happen on 3.1. 248: 249: * On the Tower models 4N0 and 6N0, by default a process is not 250: allowed to have more than one megabyte of memory. GNU CC cannot 251: compile itself (or many other programs) with `-O' in that much 252: memory. 253: 254: To solve this problem, reconfigure the kernel adding the following 255: line to the configuration file: 256: 257: MAXUMEM = 4096 1.1.1.6 root 258: 1.1.1.8 root 259: * On HP 9000 series 300 or 400 running HP-UX release 8.0, there is a 260: bug in the assembler that must be fixed before GNU CC can be 261: built. This bug manifests itself during the first stage of 262: compilation, while building `libgcc2.a': 1.1.1.7 root 263: 1.1.1.8 root 264: _floatdisf 265: cc1: warning: `-g' option not supported on this version of GCC 266: cc1: warning: `-g1' option not supported on this version of GCC 267: ./xgcc: Internal compiler error: program as got fatal signal 11 1.1.1.7 root 268: 1.1.1.8 root 269: A patched version of the assembler is available by anonymous ftp 270: from `altdorf.ai.mit.edu' as the file 271: `archive/cph/hpux-8.0-assembler'. If you have HP software support, 272: the patch can also be obtained directly from HP, as described in 273: the following note: 1.1.1.7 root 274: 1.1.1.8 root 275: This is the patched assembler, to patch SR#1653-010439, where 276: the assembler aborts on floating point constants. 277: 278: The bug is not really in the assembler, but in the shared 279: library version of the function "cvtnum(3c)". The bug on 280: "cvtnum(3c)" is SR#4701-078451. Anyway, the attached 281: assembler uses the archive library version of "cvtnum(3c)" 282: and thus does not exhibit the bug. 283: 284: This patch is also known as PHCO_4484. 285: 286: * On HP-UX version 8.05, but not on 8.07 or more recent versions, 287: the `fixproto' shell script triggers a bug in the system shell. 288: If you encounter this problem, upgrade your operating system or 289: use BASH (the GNU shell) to run `fixproto'. 290: 291: * Some versions of the Pyramid C compiler are reported to be unable 292: to compile GNU CC. You must use an older version of GNU CC for 293: bootstrapping. One indication of this problem is if you get a 294: crash when GNU CC compiles the function `muldi3' in file 295: `libgcc2.c'. 296: 297: You may be able to succeed by getting GNU CC version 1, installing 298: it, and using it to compile GNU CC version 2. The bug in the 299: Pyramid C compiler does not seem to affect GNU CC version 1. 300: 301: * There may be similar problems on System V Release 3.1 on 386 302: systems. 303: 304: * On the Intel Paragon (an i860 machine), if you are using operating 305: system version 1.0, you will get warnings or errors about 306: redefinition of `va_arg' when you build GNU CC. 307: 308: If this happens, then you need to link most programs with the 309: library `iclib.a'. You must also modify `stdio.h' as follows: 310: before the lines 311: 312: #if defined(__i860__) && !defined(_VA_LIST) 313: #include <va_list.h> 314: 315: insert the line 316: 317: #if __PGC__ 318: 319: and after the lines 320: 321: extern int vprintf(const char *, va_list ); 322: extern int vsprintf(char *, const char *, va_list ); 323: #endif 324: 325: insert the line 326: 327: #endif /* __PGC__ */ 328: 329: These problems don't exist in operating system version 1.1. 330: 331: * On the Altos 3068, programs compiled with GNU CC won't work unless 332: you fix a kernel bug. This happens using system versions V.2.2 333: 1.0gT1 and V.2.2 1.0e and perhaps later versions as well. See the 334: file `README.ALTOS'. 335: 336: * You will get several sorts of compilation and linking errors on the 337: we32k if you don't follow the special instructions. *Note 338: Configurations::. 339: 340: * A bug in the HP-UX 8.05 (and earlier) shell will cause the fixproto 341: program to report an error of the form: 342: 343: ./fixproto: sh internal 1K buffer overflow 344: 345: To fix this, change the first line of the fixproto script to look 346: like: 347: 348: #!/bin/ksh 1.1.1.6 root 349: 350: 1.1.1.8 root 351: File: gcc.info, Node: Cross-Compiler Problems, Next: Interoperation, Prev: Installation Problems, Up: Trouble 1.1.1.6 root 352: 1.1.1.8 root 353: Cross-Compiler Problems 354: ======================= 1.1.1.6 root 355: 1.1.1.8 root 356: You may run into problems with cross compilation on certain machines, 357: for several reasons. 1.1.1.6 root 358: 1.1.1.8 root 359: * Cross compilation can run into trouble for certain machines because 360: some target machines' assemblers require floating point numbers to 361: be written as *integer* constants in certain contexts. 362: 363: The compiler writes these integer constants by examining the 364: floating point value as an integer and printing that integer, 365: because this is simple to write and independent of the details of 366: the floating point representation. But this does not work if the 367: compiler is running on a different machine with an incompatible 368: floating point format, or even a different byte-ordering. 369: 370: In addition, correct constant folding of floating point values 371: requires representing them in the target machine's format. (The C 372: standard does not quite require this, but in practice it is the 373: only way to win.) 374: 375: It is now possible to overcome these problems by defining macros 376: such as `REAL_VALUE_TYPE'. But doing so is a substantial amount of 377: work for each target machine. *Note Cross-compilation::. 378: 379: * At present, the program `mips-tfile' which adds debug support to 380: object files on MIPS systems does not work in a cross compile 381: environment. 382: 383: 384: File: gcc.info, Node: Interoperation, Next: External Bugs, Prev: Cross-Compiler Problems, Up: Trouble 385: 386: Interoperation 387: ============== 1.1.1.7 root 388: 1.1.1.8 root 389: This section lists various difficulties encountered in using GNU C or 390: GNU C++ together with other compilers or with the assemblers, linkers, 391: libraries and debuggers on certain systems. 392: 393: * Objective C does not work on the RS/6000. 394: 395: * GNU C++ does not do name mangling in the same way as other C++ 396: compilers. This means that object files compiled with one compiler 397: cannot be used with another. 398: 399: This effect is intentional, to protect you from more subtle 400: problems. Compilers differ as to many internal details of C++ 401: implementation, including: how class instances are laid out, how 402: multiple inheritance is implemented, and how virtual function 403: calls are handled. If the name encoding were made the same, your 404: programs would link against libraries provided from other 405: compilers--but the programs would then crash when run. 406: Incompatible libraries are then detected at link time, rather than 407: at run time. 408: 409: * Older GDB versions sometimes fail to read the output of GNU CC 410: version 2. If you have trouble, get GDB version 4.4 or later. 411: 412: * DBX rejects some files produced by GNU CC, though it accepts 413: similar constructs in output from PCC. Until someone can supply a 414: coherent description of what is valid DBX input and what is not, 415: there is nothing I can do about these problems. You are on your 416: own. 417: 418: * The GNU assembler (GAS) does not support PIC. To generate PIC 419: code, you must use some other assembler, such as `/bin/as'. 420: 421: * On some BSD systems, including some versions of Ultrix, use of 422: profiling causes static variable destructors (currently used only 423: in C++) not to be run. 424: 425: * Use of `-I/usr/include' may cause trouble. 426: 427: Many systems come with header files that won't work with GNU CC 428: unless corrected by `fixincludes'. The corrected header files go 429: in a new directory; GNU CC searches this directory before 430: `/usr/include'. If you use `-I/usr/include', this tells GNU CC to 431: search `/usr/include' earlier on, before the corrected headers. 432: The result is that you get the uncorrected header files. 433: 434: Instead, you should use these options (when compiling C programs): 435: 436: -I/usr/local/lib/gcc-lib/TARGET/VERSION/include -I/usr/include 437: 438: For C++ programs, GNU CC also uses a special directory that 439: defines C++ interfaces to standard C subroutines. This directory 440: is meant to be searched *before* other standard include 441: directories, so that it takes precedence. If you are compiling 442: C++ programs and specifying include directories explicitly, use 443: this option first, then the two options above: 444: 445: -I/usr/local/lib/g++-include 446: 447: * On some SGI systems, when you use `-lgl_s' as an option, it gets 448: translated magically to `-lgl_s -lX11_s -lc_s'. Naturally, this 449: does not happen when you use GNU CC. You must specify all three 450: options explicitly. 451: 452: * On a Sparc, GNU CC aligns all values of type `double' on an 8-byte 453: boundary, and it expects every `double' to be so aligned. The Sun 454: compiler usually gives `double' values 8-byte alignment, with one 455: exception: function arguments of type `double' may not be aligned. 456: 457: As a result, if a function compiled with Sun CC takes the address 458: of an argument of type `double' and passes this pointer of type 459: `double *' to a function compiled with GNU CC, dereferencing the 460: pointer may cause a fatal signal. 461: 462: One way to solve this problem is to compile your entire program 463: with GNU CC. Another solution is to modify the function that is 464: compiled with Sun CC to copy the argument into a local variable; 465: local variables are always properly aligned. A third solution is 466: to modify the function that uses the pointer to dereference it via 467: the following function `access_double' instead of directly with 468: `*': 469: 470: inline double 471: access_double (double *unaligned_ptr) 472: { 473: union d2i { double d; int i[2]; }; 474: 475: union d2i *p = (union d2i *) unaligned_ptr; 476: union d2i u; 477: 478: u.i[0] = p->i[0]; 479: u.i[1] = p->i[1]; 480: 481: return u.d; 482: } 483: 484: Storing into the pointer can be done likewise with the same union. 485: 486: * On Solaris, the `malloc' function in the `libmalloc.a' library may 487: allocate memory that is only 4 byte aligned. Since GNU CC on the 488: Sparc assumes that doubles are 8 byte aligned, this may result in a 489: fatal signal if doubles are stored in memory allocated by the 490: `libmalloc.a' library. 491: 492: The solution is to not use the `libmalloc.a' library. Use instead 493: `malloc' and related functions from `libc.a'; they do not have 494: this problem. 495: 496: * Sun forgot to include a static version of `libdl.a' with some 497: versions of SunOS (mainly 4.1). This results in undefined symbols 498: when linking static binaries (that is, if you use `-static'). If 499: you see undefined symbols `_dlclose', `_dlsym' or `_dlopen' when 500: linking, compile and link against the file `mit/util/misc/dlsym.c' 501: from the MIT version of X windows. 502: 503: * The 128-bit long double format that the Sparc port supports 504: currently works by using the architecturally defined quad-word 505: floating point instructions. Since there is no hardware that 506: supports these instructions they must be emulated by the operating 507: system. Long doubles do not work in Sun OS versions 4.0.3 and 508: earlier, because the kernel emulator uses an obsolete and 509: incompatible format. Long doubles do not work in Sun OS version 510: 4.1.1 due to a problem in a Sun library. Long doubles do work on 511: Sun OS versions 4.1.2 and higher, but GNU CC does not enable them 512: by default. Long doubles appear to work in Sun OS 5.x (Solaris 513: 2.x). 514: 515: * On HP-UX version 9.01 on the HP PA, the HP compiler `cc' does not 516: compile GNU CC correctly. We do not yet know why. However, GNU CC 517: compiled on earlier HP-UX versions works properly on HP-UX 9.01 518: and can compile itself properly on 9.01. 519: 520: * On the HP PA machine, ADB sometimes fails to work on functions 521: compiled with GNU CC. Specifically, it fails to work on functions 522: that use `alloca' or variable-size arrays. This is because GNU CC 523: doesn't generate HP-UX unwind descriptors for such functions. It 524: may even be impossible to generate them. 525: 526: * Debugging (`-g') is not supported on the HP PA machine, unless you 527: use the preliminary GNU tools (*note Installation::.). 528: 529: * Taking the address of a label may generate errors from the HP-UX 530: PA assembler. GAS for the PA does not have this problem. 531: 532: * Using floating point parameters for indirect calls to static 533: functions will not work when using the HP assembler. There simply 534: is no way for GCC to specify what registers hold arguments for 535: static functions when using the HP assembler. GAS for the PA does 536: not have this problem. 537: 538: * In extremely rare cases involving some very large functions you may 539: receive errors from the HP linker complaining about an out of 540: bounds unconditional branch offset. This used to occur more often 541: in previous versions of GNU CC, but is now exceptionally rare. If 542: you should run into it, you can work around by making your 543: function smaller. 544: 545: * GNU CC compiled code sometimes emits warnings from the HP-UX 546: assembler of the form: 547: 548: (warning) Use of GR3 when 549: frame >= 8192 may cause conflict. 550: 551: These warnings are harmless and can be safely ignored. 552: 553: * The current version of the assembler (`/bin/as') for the RS/6000 554: has certain problems that prevent the `-g' option in GCC from 555: working. Note that `Makefile.in' uses `-g' by default when 556: compiling `libgcc2.c'. 557: 558: IBM has produced a fixed version of the assembler. The upgraded 559: assembler unfortunately was not included in any of the AIX 3.2 560: update PTF releases (3.2.2, 3.2.3, or 3.2.3e). Users of AIX 3.1 561: should request PTF U403044 from IBM and users of AIX 3.2 should 562: request PTF U416277. See the file `README.RS6000' for more 563: details on these updates. 564: 565: You can test for the presense of a fixed assembler by using the 566: command 567: 568: as -u < /dev/null 569: 570: If the command exits normally, the assembler fix already is 571: installed. If the assembler complains that "-u" is an unknown 572: flag, you need to order the fix. 573: 574: * On the IBM RS/6000, compiling code of the form 575: 576: extern int foo; 577: 578: ... foo ... 579: 580: static int foo; 581: 582: will cause the linker to report an undefined symbol `foo'. 583: Although this behavior differs from most other systems, it is not a 584: bug because redefining an `extern' variable as `static' is 585: undefined in ANSI C. 586: 587: * AIX on the RS/6000 provides support (NLS) for environments outside 588: of the United States. Compilers and assemblers use NLS to support 589: locale-specific representations of various objects including 590: floating-point numbers ("." vs "," for separating decimal 591: fractions). There have been problems reported where the library 592: linked with GCC does not produce the same floating-point formats 593: that the assembler accepts. If you have this problem, set the 594: LANG environment variable to "C" or "En_US". 595: 596: * Even if you specify `-fdollars-in-identifiers', you cannot 597: successfully use `$' in identifiers on the RS/6000 due to a 598: restriction in the IBM assembler. GAS supports these identifiers. 599: 600: * On the RS/6000, XLC version 1.3.0.0 will miscompile `jump.c'. XLC 601: version 1.3.0.1 or later fixes this problem. You can obtain 602: XLC-1.3.0.2 by requesting PTF 421749 from IBM. 603: 604: * There is an assembler bug in versions of DG/UX prior to 5.4.2.01 605: that occurs when the `fldcr' instruction is used. GNU CC uses 606: `fldcr' on the 88100 to serialize volatile memory references. Use 607: the option `-mno-serialize-volatile' if your version of the 608: assembler has this bug. 609: 610: * On VMS, GAS versions 1.38.1 and earlier may cause spurious warning 611: messages from the linker. These warning messages complain of 612: mismatched psect attributes. You can ignore them. *Note VMS 613: Install::. 614: 615: * On NewsOS version 3, if you include both of the files `stddef.h' 616: and `sys/types.h', you get an error because there are two typedefs 617: of `size_t'. You should change `sys/types.h' by adding these 618: lines around the definition of `size_t': 619: 620: #ifndef _SIZE_T 621: #define _SIZE_T 622: ACTUAL TYPEDEF HERE 623: #endif 624: 625: * On the Alliant, the system's own convention for returning 626: structures and unions is unusual, and is not compatible with GNU 627: CC no matter what options are used. 628: 629: * On the IBM RT PC, the MetaWare HighC compiler (hc) uses a different 630: convention for structure and union returning. Use the option 631: `-mhc-struct-return' to tell GNU CC to use a convention compatible 632: with it. 633: 634: * On Ultrix, the Fortran compiler expects registers 2 through 5 to 635: be saved by function calls. However, the C compiler uses 636: conventions compatible with BSD Unix: registers 2 through 5 may be 637: clobbered by function calls. 638: 639: GNU CC uses the same convention as the Ultrix C compiler. You can 640: use these options to produce code compatible with the Fortran 641: compiler: 642: 643: -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5 644: 645: * On the WE32k, you may find that programs compiled with GNU CC do 646: not work with the standard shared C library. You may need to link 647: with the ordinary C compiler. If you do so, you must specify the 648: following options: 649: 650: -L/usr/local/lib/gcc-lib/we32k-att-sysv/2.7.1 -lgcc -lc_s 651: 652: The first specifies where to find the library `libgcc.a' specified 653: with the `-lgcc' option. 654: 655: GNU CC does linking by invoking `ld', just as `cc' does, and there 656: is no reason why it *should* matter which compilation program you 657: use to invoke `ld'. If someone tracks this problem down, it can 658: probably be fixed easily. 659: 660: * On the Alpha, you may get assembler errors about invalid syntax as 661: a result of floating point constants. This is due to a bug in the 662: C library functions `ecvt', `fcvt' and `gcvt'. Given valid 663: floating point numbers, they sometimes print `NaN'. 664: 665: * On Irix 4.0.5F (and perhaps in some other versions), an assembler 666: bug sometimes reorders instructions incorrectly when optimization 667: is turned on. If you think this may be happening to you, try 668: using the GNU assembler; GAS version 2.1 supports ECOFF on Irix. 669: 670: Or use the `-noasmopt' option when you compile GNU CC with itself, 671: and then again when you compile your program. (This is a temporary 672: kludge to turn off assembler optimization on Irix.) If this 673: proves to be what you need, edit the assembler spec in the file 674: `specs' so that it unconditionally passes `-O0' to the assembler, 675: and never passes `-O2' or `-O3'. 1.1.1.6 root 676: 677: 1.1.1.8 root 678: File: gcc.info, Node: External Bugs, Next: Incompatibilities, Prev: Interoperation, Up: Trouble 1.1.1.6 root 679: 1.1.1.8 root 680: Problems Compiling Certain Programs 681: =================================== 682: 683: Certain programs have problems compiling. 684: 685: * Parse errors may occur compiling X11 on a Decstation running 686: Ultrix 4.2 because of problems in DEC's versions of the X11 header 687: files `X11/Xlib.h' and `X11/Xutil.h'. People recommend adding 688: `-I/usr/include/mit' to use the MIT versions of the header files, 689: using the `-traditional' switch to turn off ANSI C, or fixing the 690: header files by adding this: 691: 692: #ifdef __STDC__ 693: #define NeedFunctionPrototypes 0 694: #endif 695: 696: * If you have trouble compiling Perl on a SunOS 4 system, it may be 697: because Perl specifies `-I/usr/ucbinclude'. This accesses the 698: unfixed header files. Perl specifies the options 699: 700: -traditional -Dvolatile=__volatile__ 701: -I/usr/include/sun -I/usr/ucbinclude 702: -fpcc-struct-return 703: 704: most of which are unnecessary with GCC 2.4.5 and newer versions. 705: You can make a properly working Perl by setting `ccflags' to 706: `-fwritable-strings' (implied by the `-traditional' in the 707: original options) and `cppflags' to empty in `config.sh', then 708: typing `./doSH; make depend; make'. 1.1.1.6 root 709: 1.1.1.8 root 710: * On various 386 Unix systems derived from System V, including SCO, 711: ISC, and ESIX, you may get error messages about running out of 712: virtual memory while compiling certain programs. 713: 714: You can prevent this problem by linking GNU CC with the GNU malloc 715: (which thus replaces the malloc that comes with the system). GNU 716: malloc is available as a separate package, and also in the file 717: `src/gmalloc.c' in the GNU Emacs 19 distribution. 718: 719: If you have installed GNU malloc as a separate library package, 720: use this option when you relink GNU CC: 721: 722: MALLOC=/usr/local/lib/libgmalloc.a 723: 724: Alternatively, if you have compiled `gmalloc.c' from Emacs 19, copy 725: the object file to `gmalloc.o' and use this option when you relink 726: GNU CC: 727: 728: MALLOC=gmalloc.o 1.1.1.6 root 729: 730: 1.1.1.8 root 731: File: gcc.info, Node: Incompatibilities, Next: Fixed Headers, Prev: External Bugs, Up: Trouble 1.1.1.6 root 732: 1.1.1.8 root 733: Incompatibilities of GNU CC 1.1.1.7 root 734: =========================== 1.1.1.6 root 735: 1.1.1.8 root 736: There are several noteworthy incompatibilities between GNU C and most 737: existing (non-ANSI) versions of C. The `-traditional' option 738: eliminates many of these incompatibilities, *but not all*, by telling 739: GNU C to behave like the other C compilers. 740: 741: * GNU CC normally makes string constants read-only. If several 742: identical-looking string constants are used, GNU CC stores only one 743: copy of the string. 744: 745: One consequence is that you cannot call `mktemp' with a string 746: constant argument. The function `mktemp' always alters the string 747: its argument points to. 748: 749: Another consequence is that `sscanf' does not work on some systems 750: when passed a string constant as its format control string or 751: input. This is because `sscanf' incorrectly tries to write into 752: the string constant. Likewise `fscanf' and `scanf'. 753: 754: The best solution to these problems is to change the program to use 755: `char'-array variables with initialization strings for these 756: purposes instead of string constants. But if this is not possible, 757: you can use the `-fwritable-strings' flag, which directs GNU CC to 758: handle string constants the same way most C compilers do. 759: `-traditional' also has this effect, among others. 760: 761: * `-2147483648' is positive. 762: 763: This is because 2147483648 cannot fit in the type `int', so 764: (following the ANSI C rules) its data type is `unsigned long int'. 765: Negating this value yields 2147483648 again. 766: 767: * GNU CC does not substitute macro arguments when they appear inside 768: of string constants. For example, the following macro in GNU CC 769: 770: #define foo(a) "a" 771: 772: will produce output `"a"' regardless of what the argument A is. 773: 774: The `-traditional' option directs GNU CC to handle such cases 775: (among others) in the old-fashioned (non-ANSI) fashion. 776: 777: * When you use `setjmp' and `longjmp', the only automatic variables 778: guaranteed to remain valid are those declared `volatile'. This is 779: a consequence of automatic register allocation. Consider this 780: function: 781: 782: jmp_buf j; 783: 784: foo () 785: { 786: int a, b; 787: 788: a = fun1 (); 789: if (setjmp (j)) 790: return a; 791: 792: a = fun2 (); 793: /* `longjmp (j)' may occur in `fun3'. */ 794: return a + fun3 (); 795: } 796: 797: Here `a' may or may not be restored to its first value when the 798: `longjmp' occurs. If `a' is allocated in a register, then its 799: first value is restored; otherwise, it keeps the last value stored 800: in it. 801: 802: If you use the `-W' option with the `-O' option, you will get a 803: warning when GNU CC thinks such a problem might be possible. 804: 805: The `-traditional' option directs GNU C to put variables in the 806: stack by default, rather than in registers, in functions that call 807: `setjmp'. This results in the behavior found in traditional C 808: compilers. 809: 810: * Programs that use preprocessing directives in the middle of macro 811: arguments do not work with GNU CC. For example, a program like 812: this will not work: 813: 814: foobar ( 815: #define luser 816: hack) 817: 818: ANSI C does not permit such a construct. It would make sense to 819: support it when `-traditional' is used, but it is too much work to 820: implement. 821: 822: * Declarations of external variables and functions within a block 823: apply only to the block containing the declaration. In other 824: words, they have the same scope as any other declaration in the 825: same place. 826: 827: In some other C compilers, a `extern' declaration affects all the 828: rest of the file even if it happens within a block. 829: 830: The `-traditional' option directs GNU C to treat all `extern' 831: declarations as global, like traditional compilers. 832: 833: * In traditional C, you can combine `long', etc., with a typedef 834: name, as shown here: 835: 836: typedef int foo; 837: typedef long foo bar; 838: 839: In ANSI C, this is not allowed: `long' and other type modifiers 840: require an explicit `int'. Because this criterion is expressed by 841: Bison grammar rules rather than C code, the `-traditional' flag 842: cannot alter it. 843: 844: * PCC allows typedef names to be used as function parameters. The 845: difficulty described immediately above applies here too. 846: 847: * PCC allows whitespace in the middle of compound assignment 848: operators such as `+='. GNU CC, following the ANSI standard, does 849: not allow this. The difficulty described immediately above 850: applies here too. 851: 852: * GNU CC complains about unterminated character constants inside of 853: preprocessing conditionals that fail. Some programs have English 854: comments enclosed in conditionals that are guaranteed to fail; if 855: these comments contain apostrophes, GNU CC will probably report an 856: error. For example, this code would produce an error: 857: 858: #if 0 859: You can't expect this to work. 860: #endif 861: 862: The best solution to such a problem is to put the text into an 863: actual C comment delimited by `/*...*/'. However, `-traditional' 864: suppresses these error messages. 865: 866: * Many user programs contain the declaration `long time ();'. In the 867: past, the system header files on many systems did not actually 868: declare `time', so it did not matter what type your program 869: declared it to return. But in systems with ANSI C headers, `time' 870: is declared to return `time_t', and if that is not the same as 871: `long', then `long time ();' is erroneous. 872: 873: The solution is to change your program to use `time_t' as the 874: return type of `time'. 875: 876: * When compiling functions that return `float', PCC converts it to a 877: double. GNU CC actually returns a `float'. If you are concerned 878: with PCC compatibility, you should declare your functions to return 879: `double'; you might as well say what you mean. 880: 881: * When compiling functions that return structures or unions, GNU CC 882: output code normally uses a method different from that used on most 883: versions of Unix. As a result, code compiled with GNU CC cannot 884: call a structure-returning function compiled with PCC, and vice 885: versa. 886: 887: The method used by GNU CC is as follows: a structure or union 888: which is 1, 2, 4 or 8 bytes long is returned like a scalar. A 889: structure or union with any other size is stored into an address 890: supplied by the caller (usually in a special, fixed register, but 891: on some machines it is passed on the stack). The 892: machine-description macros `STRUCT_VALUE' and 893: `STRUCT_INCOMING_VALUE' tell GNU CC where to pass this address. 894: 895: By contrast, PCC on most target machines returns structures and 896: unions of any size by copying the data into an area of static 897: storage, and then returning the address of that storage as if it 898: were a pointer value. The caller must copy the data from that 899: memory area to the place where the value is wanted. GNU CC does 900: not use this method because it is slower and nonreentrant. 901: 902: On some newer machines, PCC uses a reentrant convention for all 903: structure and union returning. GNU CC on most of these machines 904: uses a compatible convention when returning structures and unions 905: in memory, but still returns small structures and unions in 906: registers. 907: 908: You can tell GNU CC to use a compatible convention for all 909: structure and union returning with the option 910: `-fpcc-struct-return'. 911: 912: * GNU C complains about program fragments such as `0x74ae-0x4000' 913: which appear to be two hexadecimal constants separated by the minus 914: operator. Actually, this string is a single "preprocessing token". 915: Each such token must correspond to one token in C. Since this 916: does not, GNU C prints an error message. Although it may appear 917: obvious that what is meant is an operator and two values, the ANSI 918: C standard specifically requires that this be treated as erroneous. 919: 920: A "preprocessing token" is a "preprocessing number" if it begins 921: with a digit and is followed by letters, underscores, digits, 922: periods and `e+', `e-', `E+', or `E-' character sequences. 923: 924: To make the above program fragment valid, place whitespace in 925: front of the minus sign. This whitespace will end the 926: preprocessing number. 1.1.1.6 root 927: 928: 1.1.1.8 root 929: File: gcc.info, Node: Fixed Headers, Next: Standard Libraries, Prev: Incompatibilities, Up: Trouble 1.1.1.3 root 930: 1.1.1.8 root 931: Fixed Header Files 932: ================== 1.1.1.3 root 933: 1.1.1.8 root 934: GNU CC needs to install corrected versions of some system header 935: files. This is because most target systems have some header files that 936: won't work with GNU CC unless they are changed. Some have bugs, some 937: are incompatible with ANSI C, and some depend on special features of 938: other compilers. 939: 940: Installing GNU CC automatically creates and installs the fixed header 941: files, by running a program called `fixincludes' (or for certain 942: targets an alternative such as `fixinc.svr4'). Normally, you don't 943: need to pay attention to this. But there are cases where it doesn't do 944: the right thing automatically. 945: 946: * If you update the system's header files, such as by installing a 947: new system version, the fixed header files of GNU CC are not 948: automatically updated. The easiest way to update them is to 949: reinstall GNU CC. (If you want to be clever, look in the makefile 950: and you can find a shortcut.) 951: 952: * On some systems, in particular SunOS 4, header file directories 953: contain machine-specific symbolic links in certain places. This 954: makes it possible to share most of the header files among hosts 955: running the same version of SunOS 4 on different machine models. 956: 957: The programs that fix the header files do not understand this 958: special way of using symbolic links; therefore, the directory of 959: fixed header files is good only for the machine model used to 960: build it. 961: 962: In SunOS 4, only programs that look inside the kernel will notice 963: the difference between machine models. Therefore, for most 964: purposes, you need not be concerned about this. 965: 966: It is possible to make separate sets of fixed header files for the 967: different machine models, and arrange a structure of symbolic 968: links so as to use the proper set, but you'll have to do this by 969: hand. 970: 971: * On Lynxos, GNU CC by default does not fix the header files. This 972: is because bugs in the shell cause the `fixincludes' script to 973: fail. 974: 975: This means you will encounter problems due to bugs in the system 976: header files. It may be no comfort that they aren't GNU CC's 977: fault, but it does mean that there's nothing for us to do about 978: them. 1.1.1.7 root 979: 1.1.1.8 root 980: 981: File: gcc.info, Node: Standard Libraries, Next: Disappointments, Prev: Fixed Headers, Up: Trouble 982: 983: Standard Libraries 984: ================== 985: 986: GNU CC by itself attempts to be what the ISO/ANSI C standard calls a 987: "conforming freestanding implementation". This means all ANSI C 988: language features are available, as well as the contents of `float.h', 989: `limits.h', `stdarg.h', and `stddef.h'. The rest of the C library is 990: supplied by the vendor of the operating system. If that C library 991: doesn't conform to the C standards, then your programs might get 992: warnings (especially when using `-Wall') that you don't expect. 993: 994: For example, the `sprintf' function on SunOS 4.1.3 returns `char *' 995: while the C standard says that `sprintf' returns an `int'. The 996: `fixincludes' program could make the prototype for this function match 997: the Standard, but that would be wrong, since the function will still 998: return `char *'. 999: 1000: If you need a Standard compliant library, then you need to find one, 1001: as GNU CC does not provide one. The GNU C library (called `glibc') has 1002: been ported to a number of operating systems, and provides ANSI/ISO, 1003: POSIX, BSD and SystemV compatibility. You could also ask your operating 1004: system vendor if newer libraries are available. 1005: 1006: 1007: File: gcc.info, Node: Disappointments, Next: C++ Misunderstandings, Prev: Standard Libraries, Up: Trouble 1.1.1.7 root 1008: 1.1.1.8 root 1009: Disappointments and Misunderstandings 1010: ===================================== 1011: 1012: These problems are perhaps regrettable, but we don't know any 1013: practical way around them. 1014: 1015: * Certain local variables aren't recognized by debuggers when you 1016: compile with optimization. 1017: 1018: This occurs because sometimes GNU CC optimizes the variable out of 1019: existence. There is no way to tell the debugger how to compute the 1020: value such a variable "would have had", and it is not clear that 1021: would be desirable anyway. So GNU CC simply does not mention the 1022: eliminated variable when it writes debugging information. 1023: 1024: You have to expect a certain amount of disagreement between the 1025: executable and your source code, when you use optimization. 1026: 1027: * Users often think it is a bug when GNU CC reports an error for code 1028: like this: 1029: 1030: int foo (struct mumble *); 1031: 1032: struct mumble { ... }; 1033: 1034: int foo (struct mumble *x) 1035: { ... } 1036: 1037: This code really is erroneous, because the scope of `struct 1038: mumble' in the prototype is limited to the argument list 1039: containing it. It does not refer to the `struct mumble' defined 1040: with file scope immediately below--they are two unrelated types 1041: with similar names in different scopes. 1042: 1043: But in the definition of `foo', the file-scope type is used 1044: because that is available to be inherited. Thus, the definition 1045: and the prototype do not match, and you get an error. 1046: 1047: This behavior may seem silly, but it's what the ANSI standard 1048: specifies. It is easy enough for you to make your code work by 1049: moving the definition of `struct mumble' above the prototype. 1050: It's not worth being incompatible with ANSI C just to avoid an 1051: error for the example shown above. 1052: 1053: * Accesses to bitfields even in volatile objects works by accessing 1054: larger objects, such as a byte or a word. You cannot rely on what 1055: size of object is accessed in order to read or write the bitfield; 1056: it may even vary for a given bitfield according to the precise 1057: usage. 1058: 1059: If you care about controlling the amount of memory that is 1060: accessed, use volatile but do not use bitfields. 1061: 1062: * GNU CC comes with shell scripts to fix certain known problems in 1063: system header files. They install corrected copies of various 1064: header files in a special directory where only GNU CC will 1065: normally look for them. The scripts adapt to various systems by 1066: searching all the system header files for the problem cases that 1067: we know about. 1068: 1069: If new system header files are installed, nothing automatically 1070: arranges to update the corrected header files. You will have to 1071: reinstall GNU CC to fix the new header files. More specifically, 1072: go to the build directory and delete the files `stmp-fixinc' and 1073: `stmp-headers', and the subdirectory `include'; then do `make 1074: install' again. 1075: 1076: * On 68000 systems, you can get paradoxical results if you test the 1077: precise values of floating point numbers. For example, you can 1078: find that a floating point value which is not a NaN is not equal 1079: to itself. This results from the fact that the the floating point 1080: registers hold a few more bits of precision than fit in a `double' 1081: in memory. Compiled code moves values between memory and floating 1082: point registers at its convenience, and moving them into memory 1083: truncates them. 1084: 1085: You can partially avoid this problem by using the `-ffloat-store' 1086: option (*note Optimize Options::.). 1087: 1088: * On the MIPS, variable argument functions using `varargs.h' cannot 1089: have a floating point value for the first argument. The reason 1090: for this is that in the absence of a prototype in scope, if the 1091: first argument is a floating point, it is passed in a floating 1092: point register, rather than an integer register. 1093: 1094: If the code is rewritten to use the ANSI standard `stdarg.h' 1095: method of variable arguments, and the prototype is in scope at the 1096: time of the call, everything will work fine. 1.1.1.5 root 1097: 1098: 1.1.1.8 root 1099: File: gcc.info, Node: C++ Misunderstandings, Next: Protoize Caveats, Prev: Disappointments, Up: Trouble 1100: 1101: Common Misunderstandings with GNU C++ 1102: ===================================== 1.1.1.5 root 1103: 1.1.1.8 root 1104: C++ is a complex language and an evolving one, and its standard 1105: definition (the ANSI C++ draft standard) is also evolving. As a result, 1106: your C++ compiler may occasionally surprise you, even when its behavior 1107: is correct. This section discusses some areas that frequently give 1108: rise to questions of this sort. 1.1.1.5 root 1109: 1.1.1.8 root 1110: * Menu: 1111: 1112: * Static Definitions:: Static member declarations are not definitions 1113: * Temporaries:: Temporaries may vanish before you expect 1.1.1.7 root 1114: 1115: 1.1.1.8 root 1116: File: gcc.info, Node: Static Definitions, Next: Temporaries, Up: C++ Misunderstandings 1.1.1.5 root 1117: 1.1.1.8 root 1118: Declare *and* Define Static Members 1119: ----------------------------------- 1.1.1.5 root 1120: 1.1.1.8 root 1121: When a class has static data members, it is not enough to *declare* 1122: the static member; you must also *define* it. For example: 1.1.1.7 root 1123: 1.1.1.8 root 1124: class Foo 1.1.1.7 root 1125: { 1126: ... 1.1.1.8 root 1127: void method(); 1128: static int bar; 1129: }; 1130: 1131: This declaration only establishes that the class `Foo' has an `int' 1132: named `Foo::bar', and a member function named `Foo::method'. But you 1133: still need to define *both* `method' and `bar' elsewhere. According to 1134: the draft ANSI standard, you must supply an initializer in one (and 1135: only one) source file, such as: 1136: 1137: int Foo::bar = 0; 1138: 1139: Other C++ compilers may not correctly implement the standard 1140: behavior. As a result, when you switch to `g++' from one of these 1141: compilers, you may discover that a program that appeared to work 1142: correctly in fact does not conform to the standard: `g++' reports as 1143: undefined symbols any static data members that lack definitions. 1.1.1.5 root 1144:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.