|
|
1.1 root 1: This is Info file gcc.info, produced by Makeinfo-1.54 from the input
2: file gcc.texi.
3:
4: This file documents the use and the internals of the GNU compiler.
5:
6: Published by the Free Software Foundation 675 Massachusetts Avenue
7: Cambridge, MA 02139 USA
8:
9: Copyright (C) 1988, 1989, 1992, 1993 Free Software Foundation, Inc.
10:
11: Permission is granted to make and distribute verbatim copies of this
12: manual provided the copyright notice and this permission notice are
13: preserved on all copies.
14:
15: Permission is granted to copy and distribute modified versions of
16: this manual under the conditions for verbatim copying, provided also
17: that the sections entitled "GNU General Public License" and "Protect
18: Your Freedom--Fight `Look And Feel'" are included exactly as in the
19: original, and provided that the entire resulting derived work is
20: distributed under the terms of a permission notice identical to this
21: one.
22:
23: Permission is granted to copy and distribute translations of this
24: manual into another language, under the above conditions for modified
25: versions, except that the sections entitled "GNU General Public
26: License" and "Protect Your Freedom--Fight `Look And Feel'", and this
27: permission notice, may be included in translations approved by the Free
28: Software Foundation instead of in the original English.
29:
30:
31: File: gcc.info, Node: C++ Extensions, Next: Trouble, Prev: C Extensions, Up: Top
32:
33: Extensions to the C++ Language
34: ******************************
35:
36: The GNU compiler provides these extensions to the C++ language (and
37: you can also use most of the C language extensions in your C++
38: programs). If you want to write code that checks whether these
39: features are available, you can test for the GNU compiler the same way
40: as for C programs: check for a predefined macro `__GNUC__'. You can
41: also use `__GNUG__' to test specifically for GNU C++ (*note Standard
42: Predefined Macros: (cpp.info)Standard Predefined.).
43:
44: * Menu:
45:
46: * Naming Results:: Giving a name to C++ function return values.
47: * Min and Max:: C++ Minimum and maximum operators.
48: * Destructors and Goto:: Goto is safe to use in C++ even when destructors
49: are needed.
50: * C++ Interface:: You can use a single C++ header file for both
51: declarations and definitions.
52:
53:
54: File: gcc.info, Node: Naming Results, Next: Min and Max, Up: C++ Extensions
55:
56: Named Return Values in C++
57: ==========================
58:
59: GNU C++ extends the function-definition syntax to allow you to
60: specify a name for the result of a function outside the body of the
61: definition, in C++ programs:
62:
63: TYPE
64: FUNCTIONNAME (ARGS) return RESULTNAME;
65: {
66: ...
67: BODY
68: ...
69: }
70:
71: You can use this feature to avoid an extra constructor call when a
72: function result has a class type. For example, consider a function
73: `m', declared as `X v = m ();', whose result is of class `X':
74:
75: X
76: m ()
77: {
78: X b;
79: b.a = 23;
80: return b;
81: }
82:
83: Although `m' appears to have no arguments, in fact it has one
84: implicit argument: the address of the return value. At invocation, the
85: address of enough space to hold `v' is sent in as the implicit argument.
86: Then `b' is constructed and its `a' field is set to the value 23.
87: Finally, a copy constructor (a constructor of the form `X(X&)') is
88: applied to `b', with the (implicit) return value location as the
89: target, so that `v' is now bound to the return value.
90:
91: But this is wasteful. The local `b' is declared just to hold
92: something that will be copied right out. While a compiler that
93: combined an "elision" algorithm with interprocedural data flow analysis
94: could conceivably eliminate all of this, it is much more practical to
95: allow you to assist the compiler in generating efficient code by
96: manipulating the return value explicitly, thus avoiding the local
97: variable and copy constructor altogether.
98:
99: Using the extended GNU C++ function-definition syntax, you can avoid
100: the temporary allocation and copying by naming `r' as your return value
101: as the outset, and assigning to its `a' field directly:
102:
103: X
104: m () return r;
105: {
106: r.a = 23;
107: }
108:
109: The declaration of `r' is a standard, proper declaration, whose effects
110: are executed *before* any of the body of `m'.
111:
112: Functions of this type impose no additional restrictions; in
113: particular, you can execute `return' statements, or return implicitly by
114: reaching the end of the function body ("falling off the edge"). Cases
115: like
116:
117: X
118: m () return r (23);
119: {
120: return;
121: }
122:
123: (or even `X m () return r (23); { }') are unambiguous, since the return
124: value `r' has been initialized in either case. The following code may
125: be hard to read, but also works predictably:
126:
127: X
128: m () return r;
129: {
130: X b;
131: return b;
132: }
133:
134: The return value slot denoted by `r' is initialized at the outset,
135: but the statement `return b;' overrides this value. The compiler deals
136: with this by destroying `r' (calling the destructor if there is one, or
137: doing nothing if there is not), and then reinitializing `r' with `b'.
138:
139: This extension is provided primarily to help people who use
140: overloaded operators, where there is a great need to control not just
141: the arguments, but the return values of functions. For classes where
142: the copy constructor incurs a heavy performance penalty (especially in
143: the common case where there is a quick default constructor), this is a
144: major savings. The disadvantage of this extension is that you do not
145: control when the default constructor for the return value is called: it
146: is always called at the beginning.
147:
148:
149: File: gcc.info, Node: Min and Max, Next: Destructors and Goto, Prev: Naming Results, Up: C++ Extensions
150:
151: Minimum and Maximum Operators in C++
152: ====================================
153:
154: It is very convenient to have operators which return the "minimum"
155: or the "maximum" of two arguments. In GNU C++ (but not in GNU C),
156:
157: `A <? B'
158: is the "minimum", returning the smaller of the numeric values A
159: and B;
160:
161: `A >? B'
162: is the "maximum", returning the larger of the numeric values A and
163: B.
164:
165: These operations are not primitive in ordinary C++, since you can
166: use a macro to return the minimum of two things in C++, as in the
167: following example.
168:
169: #define MIN(X,Y) ((X) < (Y) ? : (X) : (Y))
170:
171: You might then use `int min = MIN (i, j);' to set MIN to the minimum
172: value of variables I and J.
173:
174: However, side effects in `X' or `Y' may cause unintended behavior.
175: For example, `MIN (i++, j++)' will fail, incrementing the smaller
176: counter twice. A GNU C extension allows you to write safe macros that
177: avoid this kind of problem (*note Naming an Expression's Type: Naming
178: Types.). However, writing `MIN' and `MAX' as macros also forces you to
179: use function-call notation notation for a fundamental arithmetic
180: operation. Using GNU C++ extensions, you can write `int min = i <? j;'
181: instead.
182:
183: Since `<?' and `>?' are built into the compiler, they properly
184: handle expressions with side-effects; `int min = i++ <? j++;' works
185: correctly.
186:
187:
188: File: gcc.info, Node: Destructors and Goto, Next: C++ Interface, Prev: Min and Max, Up: C++ Extensions
189:
190: `goto' and Destructors in GNU C++
191: =================================
192:
193: In C++ programs, you can safely use the `goto' statement. When you
194: use it to exit a block which contains aggregates requiring destructors,
195: the destructors will run before the `goto' transfers control. (In ANSI
196: C++, `goto' is restricted to targets within the current block.)
197:
198: The compiler still forbids using `goto' to *enter* a scope that
199: requires constructors.
200:
201:
202: File: gcc.info, Node: C++ Interface, Prev: Destructors and Goto, Up: C++ Extensions
203:
204: Declarations and Definitions in One Header
205: ==========================================
206:
207: C++ object definitions can be quite complex. In principle, your
208: source code will need two kinds of things for each object that you use
209: across more than one source file. First, you need an "interface"
210: specification, describing its structure with type declarations and
211: function prototypes. Second, you need the "implementation" itself. It
212: can be tedious to maintain a separate interface description in a header
213: file, in parallel to the actual implementation. It is also dangerous,
214: since separate interface and implementation definitions may not remain
215: parallel.
216:
217: With GNU C++, you can use a single header file for both purposes.
218:
219: *Warning:* The mechanism to specify this is in transition. For the
220: nonce, you must use one of two `#pragma' commands; in a future
221: release of GNU C++, an alternative mechanism will make these
222: `#pragma' commands unnecessary.
223:
224: The header file contains the full definitions, but is marked with
225: `#pragma interface' in the source code. This allows the compiler to
226: use the header file only as an interface specification when ordinary
227: source files incorporate it with `#include'. In the single source file
228: where the full implementation belongs, you can use either a naming
229: convention or `#pragma implementation' to indicate this alternate use
230: of the header file.
231:
232: `#pragma interface'
233: Use this directive in *header files* that define object classes,
234: to save space in most of the object files that use those classes.
235: Normally, local copies of certain information (backup copies of
236: inline member functions, debugging information, and the internal
237: tables that implement virtual functions) must be kept in each
238: object file that includes class definitions. You can use this
239: pragma to avoid such duplication. When a header file containing
240: `#pragma interface' is included in a compilation, this auxiliary
241: information will not be generated (unless the main input source
242: file itself uses `#pragma implementation'). Instead, the object
243: files will contain references to be resolved at link time.
244:
245: `#pragma implementation'
246: `#pragma implementation "OBJECTS.h"'
247: Use this pragma in a *main input file*, when you want full output
248: from included header files to be generated (and made globally
249: visible). The included header file, in turn, should use `#pragma
250: interface'. Backup copies of inline member functions, debugging
251: information, and the internal tables used to implement virtual
252: functions are all generated in implementation files.
253:
254: `#pragma implementation' is *implied* whenever the basename(1) of
255: your source file matches the basename of a header file it
256: includes. There is no way to turn this off (other than using a
257: different name for one of the two files). In the same vein, if
258: you use `#pragma implementation' with no argument, it applies to an
259: include file with the same basename as your source file. For
260: example, in `allclass.cc', `#pragma implementation' by itself is
261: equivalent to `#pragma implementation "allclass.h"'; but even if
262: you do not say `#pragma implementation' at all, `allclass.h' is
263: treated as an implementation file whenever you include it from
264: `allclass.cc'.
265:
266: If you use an explicit `#pragma implementation', it must appear in
267: your source file *before* you include the affected header files.
268:
269: Use the string argument if you want a single implementation file to
270: include code from multiple header files. (You must also use
271: `#include' to include the header file; `#pragma implementation'
272: only specifies how to use the file--it doesn't actually include
273: it.)
274:
275: There is no way to split up the contents of a single header file
276: into multiple implementation files.
277:
278: `#pragma implementation' and `#pragma interface' also have an effect
279: on function inlining.
280:
281: If you define a class in a header file marked with `#pragma
282: interface', the effect on a function defined in that class is similar to
283: an explicit `extern' declaration--the compiler emits no code at all to
284: define an independent version of the function. Its definition is used
285: only for inlining with its callers.
286:
287: Conversely, when you include the same header file in a main source
288: file that declares it as `#pragma implementation', the compiler emits
289: code for the function itself; this defines a version of the function
290: that can be found via pointers (or by callers compiled without
291: inlining).
292:
293: ---------- Footnotes ----------
294:
295: (1) A file's "basename" is the name stripped of all leading path
296: information and of trailing suffixes, such as `.h' or `.C' or `.cc'.
297:
298:
299: File: gcc.info, Node: Trouble, Next: Bugs, Prev: C++ Extensions, Up: Top
300:
301: Known Causes of Trouble with GNU CC
302: ***********************************
303:
304: This section describes known problems that affect users of GNU CC.
305: Most of these are not GNU CC bugs per se--if they were, we would fix
306: them. But the result for a user may be like the result of a bug.
307:
308: Some of these problems are due to bugs in other software, some are
309: missing features that are too much work to add, and some are places
310: where people's opinions differ as to what is best.
311:
312: * Menu:
313:
314: * Actual Bugs:: Bugs we will fix later.
315: * Installation Problems:: Problems that manifest when you install GNU CC.
316: * Cross-Compiler Problems:: Common problems of cross compiling with GNU CC.
317: * Interoperation:: Problems using GNU CC with other compilers,
318: and with certain linkers, assemblers and debuggers.
319: * External Bugs:: Problems compiling certain programs.
320: * Incompatibilities:: GNU CC is incompatible with traditional C.
321: * Fixed Headers:: GNU C uses corrected versions of system header files.
322: This is necessary, but doesn't always work smoothly.
323: * Disappointments:: Regrettable things we can't change, but not quite bugs.
324: * C++ Misunderstandings:: Common misunderstandings with GNU C++.
325: * Protoize Caveats:: Things to watch out for when using `protoize'.
326: * Non-bugs:: Things we think are right, but some others disagree.
327: * Warnings and Errors:: Which problems in your code get warnings,
328: and which get errors.
329:
330:
331: File: gcc.info, Node: Actual Bugs, Next: Installation Problems, Up: Trouble
332:
333: Actual Bugs We Haven't Fixed Yet
334: ================================
335:
336: * The `fixincludes' script interacts badly with automounters; if the
337: directory of system header files is automounted, it tends to be
338: unmounted while `fixincludes' is running. This would seem to be a
339: bug in the automounter. We don't know any good way to work around
340: it.
341:
342: * Loop unrolling doesn't work properly for certain C++ programs.
343: This is because of difficulty in updating the debugging
344: information within the loop being unrolled. We plan to revamp the
345: representation of debugging information so that this will work
346: properly, but we have not done this in version 2.5 because we
347: don't want to delay it any further.
348:
349:
350: File: gcc.info, Node: Installation Problems, Next: Cross-Compiler Problems, Prev: Actual Bugs, Up: Trouble
351:
352: Installation Problems
353: =====================
354:
355: This is a list of problems (and some apparent problems which don't
356: really mean anything is wrong) that show up during installation of GNU
357: CC.
358:
359: * On certain systems, defining certain environment variables such as
360: `CC' can interfere with the functioning of `make'.
361:
362: * If you encounter seemingly strange errors when trying to build the
363: compiler in a directory other than the source directory, it could
364: be because you have previously configured the compiler in the
365: source directory. Make sure you have done all the necessary
366: preparations. *Note Other Dir::.
367:
368: * In previous versions of GNU CC, the `gcc' driver program looked for
369: `as' and `ld' in various places; for example, in files beginning
370: with `/usr/local/lib/gcc-'. GNU CC version 2 looks for them in
371: the directory `/usr/local/lib/gcc-lib/TARGET/VERSION'.
372:
373: Thus, to use a version of `as' or `ld' that is not the system
374: default, for example `gas' or GNU `ld', you must put them in that
375: directory (or make links to them from that directory).
376:
377: * Some commands executed when making the compiler may fail (return a
378: non-zero status) and be ignored by `make'. These failures, which
379: are often due to files that were not found, are expected, and can
380: safely be ignored.
381:
382: * It is normal to have warnings in compiling certain files about
383: unreachable code and about enumeration type clashes. These files'
384: names begin with `insn-'. Also, `real.c' may get some warnings
385: that you can ignore.
386:
387: * Sometimes `make' recompiles parts of the compiler when installing
388: the compiler. In one case, this was traced down to a bug in
389: `make'. Either ignore the problem or switch to GNU Make.
390:
391: * If you have installed a program known as purify, you may find that
392: it causes errors while linking `enquire', which is part of building
393: GNU CC. The fix is to get rid of the file `real-ld' which purify
394: installs--so that GNU CC won't try to use it.
395:
396: * On Linux SLS 1.01, there is a problem with `libc.a': it does not
397: contain the obstack functions. However, GNU CC assumes that the
398: obstack functions are in `libc.a' when it is the GNU C library.
399: To work around this problem, change the `__GNU_LIBRARY__'
400: conditional around line 31 to `#if 1'.
401:
402: * On some 386 systems, building the compiler never finishes because
403: `enquire' hangs due to a hardware problem in the motherboard--it
404: reports floating point exceptions to the kernel incorrectly. You
405: can install GNU CC except for `float.h' by patching out the
406: command to run `enquire'. You may also be able to fix the problem
407: for real by getting a replacement motherboard. This problem was
408: observed in Revision E of the Micronics motherboard, and is fixed
409: in Revision F. It has also been observed in the MYLEX MXA-33
410: motherboard.
411:
412: If you encounter this problem, you may also want to consider
413: removing the FPU from the socket during the compilation.
414: Alternatively, if you are running SCO Unix, you can reboot and
415: force the FPU to be ignored. To do this, type `hd(40)unix auto
416: ignorefpu'.
417:
418: * On some 386 systems, GNU CC crashes trying to compile `enquire.c'.
419: This happens on machines that don't have a 387 FPU chip. On 386
420: machines, the system kernel is supposed to emulate the 387 when you
421: don't have one. The crash is due to a bug in the emulator.
422:
423: One of these systems is the Unix from Interactive Systems: 386/ix.
424: On this system, an alternate emulator is provided, and it does
425: work. To use it, execute this command as super-user:
426:
427: ln /etc/emulator.rel1 /etc/emulator
428:
429: and then reboot the system. (The default emulator file remains
430: present under the name `emulator.dflt'.)
431:
432: Try using `/etc/emulator.att', if you have such a problem on the
433: SCO system.
434:
435: Another system which has this problem is Esix. We don't know
436: whether it has an alternate emulator that works.
437:
438: On NetBSD 0.8, a similar problem manifests itself as these error
439: messages:
440:
441: enquire.c: In function `fprop':
442: enquire.c:2328: floating overflow
443:
444: * On SCO systems, when compiling GNU CC with the system's compiler,
445: do not use `-O'. Some versions of the system's compiler miscompile
446: GNU CC with `-O'.
447:
448: * Sometimes on a Sun 4 you may observe a crash in the program
449: `genflags' or `genoutput' while building GNU CC. This is said to
450: be due to a bug in `sh'. You can probably get around it by running
451: `genflags' or `genoutput' manually and then retrying the `make'.
452:
453: * On Solaris 2, executables of GNU CC version 2.0.2 are commonly
454: available, but they have a bug that shows up when compiling current
455: versions of GNU CC: undefined symbol errors occur during assembly
456: if you use `-g'.
457:
458: The solution is to compile the current version of GNU CC without
459: `-g'. That makes a working compiler which you can use to recompile
460: with `-g'.
461:
462: * Solaris 2 comes with a number of optional OS packages. Some of
463: these packages are needed to use GNU CC fully. If you did not
464: install all optional packages when installing Solaris, you will
465: need to verify that the packages that GNU CC needs are installed.
466:
467: To check whether an optional package is installed, use the
468: `pkginfo' command. To add an optional package, use the `pkgadd'
469: command. For further details, see the Solaris documentation.
470:
471: For Solaris 2.0 and 2.1, GNU CC needs six packages: `SUNWarc',
472: `SUNWbtool', `SUNWesu', `SUNWhea', `SUNWlibm', and `SUNWtoo'.
473:
474: For Solaris 2.2, GNU CC needs an additional seventh package:
475: `SUNWsprot'.
476:
477: * On Solaris 2, trying to use the linker and other tools in
478: `/usr/ucb' to install GNU CC has been observed to cause trouble.
479: For example, the linker may hang indefinitely. The fix is to
480: remove `/usr/ucb' from your `PATH'.
481:
482: * If you use the 1.31 version of the MIPS assembler (such as was
483: shipped with Ultrix 3.1), you will need to use the
484: -fno-delayed-branch switch when optimizing floating point code.
485: Otherwise, the assembler will complain when the GCC compiler fills
486: a branch delay slot with a floating point instruction, such as
487: add.d.
488:
489: * If on a MIPS system you get an error message saying "does not have
490: gp sections for all it's [sic] sectons [sic]", don't worry about
491: it. This happens whenever you use GAS with the MIPS linker, but
492: there is not really anything wrong, and it is okay to use the
493: output file. You can stop such warnings by installing the GNU
494: linker.
495:
496: It would be nice to extend GAS to produce the gp tables, but they
497: are optional, and there should not be a warning about their
498: absence.
499:
500: * Users have reported some problems with version 2.0 of the MIPS
501: compiler tools that were shipped with Ultrix 4.1. Version 2.10
502: which came with Ultrix 4.2 seems to work fine.
503:
504: * Some versions of the MIPS linker will issue an assertion failure
505: when linking code that uses `alloca' against shared libraries on
506: RISC-OS 5.0, and DEC's OSF/1 systems. This is a bug in the
507: linker, that is supposed to be fixed in future revisions. To
508: protect against this, GCC passes `-non_shared' to the linker
509: unless you pass an explicit `-shared' or `-call_shared' switch.
510:
511: * On System V release 3, you may get this error message while
512: linking:
513:
514: ld fatal: failed to write symbol name SOMETHING
515: in strings table for file WHATEVER
516:
517: This probably indicates that the disk is full or your ULIMIT won't
518: allow the file to be as large as it needs to be.
519:
520: This problem can also result because the kernel parameter `MAXUMEM'
521: is too small. If so, you must regenerate the kernel and make the
522: value much larger. The default value is reported to be 1024; a
523: value of 32768 is said to work. Smaller values may also work.
524:
525: * On System V, if you get an error like this,
526:
527: /usr/local/lib/bison.simple: In function `yyparse':
528: /usr/local/lib/bison.simple:625: virtual memory exhausted
529:
530: that too indicates a problem with disk space, ULIMIT, or `MAXUMEM'.
531:
532: * Current GNU CC versions probably do not work on version 2 of the
533: NeXT operating system.
534:
535: * On the Tower models 4N0 and 6N0, by default a process is not
536: allowed to have more than one megabyte of memory. GNU CC cannot
537: compile itself (or many other programs) with `-O' in that much
538: memory.
539:
540: To solve this problem, reconfigure the kernel adding the following
541: line to the configuration file:
542:
543: MAXUMEM = 4096
544:
545: * On HP 9000 series 300 or 400 running HP-UX release 8.0, there is a
546: bug in the assembler that must be fixed before GNU CC can be
547: built. This bug manifests itself during the first stage of
548: compilation, while building `libgcc2.a':
549:
550: _floatdisf
551: cc1: warning: `-g' option not supported on this version of GCC
552: cc1: warning: `-g1' option not supported on this version of GCC
553: ./xgcc: Internal compiler error: program as got fatal signal 11
554:
555: A patched version of the assembler is available by anonymous ftp
556: from `altdorf.ai.mit.edu' as the file
557: `archive/cph/hpux-8.0-assembler'. If you have HP software support,
558: the patch can also be obtained directly from HP, as described in
559: the following note:
560:
561: This is the patched assembler, to patch SR#1653-010439, where
562: the assembler aborts on floating point constants.
563:
564: The bug is not really in the assembler, but in the shared
565: library version of the function "cvtnum(3c)". The bug on
566: "cvtnum(3c)" is SR#4701-078451. Anyway, the attached
567: assembler uses the archive library version of "cvtnum(3c)"
568: and thus does not exhibit the bug.
569:
570: This patch is also known as PHCO_0800.
571:
572: * Some versions of the Pyramid C compiler are reported to be unable
573: to compile GNU CC. You must use an older version of GNU CC for
574: bootstrapping. One indication of this problem is if you get a
575: crash when GNU CC compiles the function `muldi3' in file
576: `libgcc2.c'.
577:
578: You may be able to succeed by getting GNU CC version 1, installing
579: it, and using it to compile GNU CC version 2. The bug in the
580: Pyramid C compiler does not seem to affect GNU CC version 1.
581:
582: * There may be similar problems on System V Release 3.1 on 386
583: systems.
584:
585: * On the Altos 3068, programs compiled with GNU CC won't work unless
586: you fix a kernel bug. This happens using system versions V.2.2
587: 1.0gT1 and V.2.2 1.0e and perhaps later versions as well. See the
588: file `README.ALTOS'.
589:
590: * You will get several sorts of compilation and linking errors on the
591: we32k if you don't follow the special instructions. *Note WE32K
592: Install::.
593:
594:
595: File: gcc.info, Node: Cross-Compiler Problems, Next: Interoperation, Prev: Installation Problems, Up: Trouble
596:
597: Cross-Compiler Problems
598: =======================
599:
600: You may run into problems with cross compilation on certain machines,
601: for several reasons.
602:
603: * Cross compilation can run into trouble for certain machines because
604: some target machines' assemblers require floating point numbers to
605: be written as *integer* constants in certain contexts.
606:
607: The compiler writes these integer constants by examining the
608: floating point value as an integer and printing that integer,
609: because this is simple to write and independent of the details of
610: the floating point representation. But this does not work if the
611: compiler is running on a different machine with an incompatible
612: floating point format, or even a different byte-ordering.
613:
614: In addition, correct constant folding of floating point values
615: requires representing them in the target machine's format. (The C
616: standard does not quite require this, but in practice it is the
617: only way to win.)
618:
619: It is now possible to overcome these problems by defining macros
620: such as `REAL_VALUE_TYPE'. But doing so is a substantial amount of
621: work for each target machine. *Note Cross-compilation::.
622:
623: * At present, the program `mips-tfile' which adds debug support to
624: object files on MIPS systems does not work in a cross compile
625: environment.
626:
627:
628: File: gcc.info, Node: Interoperation, Next: External Bugs, Prev: Cross-Compiler Problems, Up: Trouble
629:
630: Interoperation
631: ==============
632:
633: This section lists various difficulties encountered in using GNU C or
634: GNU C++ together with other compilers or with the assemblers, linkers,
635: libraries and debuggers on certain systems.
636:
637: * If you are using version 2.3 of libg++, you need to rebuild it with
638: `make CC=gcc' to avoid mismatches in the definition of `size_t'.
639:
640: * Objective C does not work on the RS/6000 or the Alpha.
641:
642: * GNU C++ does not do name mangling in the same way as other C++
643: compilers. This means that object files compiled with one compiler
644: cannot be used with another.
645:
646: This effect is intentional, to protect you from more subtle
647: problems. Compilers differ as to many internal details of C++
648: implementation, including: how class instances are laid out, how
649: multiple inheritance is implemented, and how virtual function
650: calls are handled. If the name encoding were made the same, your
651: programs would link against libraries provided from other
652: compilers--but the programs would then crash when run.
653: Incompatible libraries are then detected at link time, rather than
654: at run time.
655:
656: * Older GDB versions sometimes fail to read the output of GNU CC
657: version 2. If you have trouble, get GDB version 4.4 or later.
658:
659: * DBX rejects some files produced by GNU CC, though it accepts
660: similar constructs in output from PCC. Until someone can supply a
661: coherent description of what is valid DBX input and what is not,
662: there is nothing I can do about these problems. You are on your
663: own.
664:
665: * The GNU assembler (GAS) does not support PIC. To generate PIC
666: code, you must use some other assembler, such as `/bin/as'.
667:
668: * On some BSD systems including some versions of Ultrix, use of
669: profiling causes static variable destructors (currently used only
670: in C++) not to be run.
671:
672: * Use of `-I/usr/include' may cause trouble.
673:
674: Many systems come with header files that won't work with GNU CC
675: unless corrected by `fixincludes'. The corrected header files go
676: in a new directory; GNU CC searches this directory before
677: `/usr/include'. If you use `-I/usr/include', this tells GNU CC to
678: search `/usr/include' earlier on, before the corrected headers.
679: The result is that you get the uncorrected header files.
680:
681: Instead, you should use these options (when compiling C programs):
682:
683: -I/usr/local/lib/gcc-lib/TARGET/VERSION/include -I/usr/include
684:
685: For C++ programs, GNU CC also uses a special directory that
686: defines C++ interfaces to standard C subroutines. This directory
687: is meant to be searched *before* other standard include
688: directories, so that it takes precedence. If you are compiling
689: C++ programs and specifying include directories explicitly, use
690: this option first, then the two options above:
691:
692: -I/usr/local/lib/g++-include
693:
694: * On a Sparc, GNU CC aligns all values of type `double' on an 8-byte
695: boundary, and it expects every `double' to be so aligned. The Sun
696: compiler usually gives `double' values 8-byte alignment, with one
697: exception: function arguments of type `double' may not be aligned.
698:
699: As a result, if a function compiled with Sun CC takes the address
700: of an argument of type `double' and passes this pointer of type
701: `double *' to a function compiled with GNU CC, dereferencing the
702: pointer may cause a fatal signal.
703:
704: One way to solve this problem is to compile your entire program
705: with GNU CC. Another solution is to modify the function that is
706: compiled with Sun CC to copy the argument into a local variable;
707: local variables are always properly aligned. A third solution is
708: to modify the function that uses the pointer to dereference it via
709: the following function `access_double' instead of directly with
710: `*':
711:
712: inline double
713: access_double (double *unaligned_ptr)
714: {
715: union d2i { double d; int i[2]; };
716:
717: union d2i *p = (union d2i *) unaligned_ptr;
718: union d2i u;
719:
720: u.i[0] = p->i[0];
721: u.i[1] = p->i[1];
722:
723: return u.d;
724: }
725:
726: Storing into the pointer can be done likewise with the same union.
727:
728: * On Solaris, the `malloc' function in the `libmalloc.a' library may
729: allocate memory that is only 4 byte aligned. Since GNU CC on the
730: Sparc assumes that doubles are 8 byte aligned, this may result in a
731: fatal signal if doubles are stored in memory allocated by the
732: `libmalloc.a' library.
733:
734: The solution is to not use the `libmalloc.a' library. Use instead
735: `malloc' and related functions from `libc.a'; they do not have
736: this problem.
737:
738: * On a Sun, linking using GNU CC fails to find a shared library and
739: reports that the library doesn't exist at all.
740:
741: This happens if you are using the GNU linker, because it does only
742: static linking and looks only for unshared libraries. If you have
743: a shared library with no unshared counterpart, the GNU linker
744: won't find anything.
745:
746: We hope to make a linker which supports Sun shared libraries, but
747: please don't ask when it will be finished--we don't know.
748:
749: * Sun forgot to include a static version of `libdl.a' with some
750: versions of SunOS (mainly 4.1). This results in undefined symbols
751: when linking static binaries (that is, if you use `-static'). If
752: you see undefined symbols `_dlclose', `_dlsym' or `_dlopen' when
753: linking, compile and link against the file `mit/util/misc/dlsym.c'
754: from the MIT version of X windows.
755:
756: * The 128-bit long double format that the Sparc port supports
757: currently works by using the architecturally defined quad-word
758: floating point instructions. Since there is no hardware that
759: supports these instructions they must be emulated by the operating
760: system. Long doubles do not work in Sun OS versions 4.0.3 and
761: earlier, because the kernel eumulator uses an obsolete and
762: incompatible format. Long doubles do not work in Sun OS versions
763: 4.1.1 to 4.1.3 because of emululator bugs that cause random
764: unpredicatable failures. Long doubles appear to work in Sun OS 5.x
765: (Solaris 2.x).
766:
767: A future implementation of the sparc long double support will use
768: functions calls to library routines instead of the quad-word
769: floating point instructions. This will allow long doubles to work
770: in more situtations, since one can then substitute a working
771: library if the kernel emulator is buggy.
772:
773: * On HP-UX version 9.01 on the HP PA, the HP compiler `cc' does not
774: compile GNU CC correctly. We do not yet know why. However, GNU CC
775: compiled on earlier HP-UX versions works properly on HP-UX 9.01
776: and can compile itself properly on 9.01.
777:
778: * On the HP PA machine, ADB sometimes fails to work on functions
779: compiled with GNU CC. Specifically, it fails to work on functions
780: that use `alloca' or variable-size arrays. This is because GNU CC
781: doesn't generate HP-UX unwind descriptors for such functions. It
782: may even be impossible to generate them.
783:
784: * Debugging (`-g') is not supported on the HP PA machine, unless you
785: use the preliminary GNU tools (*note Installation::.).
786:
787: * Taking the address of a label may generate errors from the HP-UX
788: PA assembler. GAS for the PA does not have this problem.
789:
790: * Using floating point parameters for indirect calls to static
791: functions will not work when using the HP assembler. There simply
792: is no way for GCC to specify what registers hold arguments for
793: static functions when using the HP assembler. GAS for the PA does
794: not have this problem.
795:
796: * For some very large functions you may receive errors from the HP
797: linker complaining about an out of bounds unconditional branch
798: offset. Fixing this problem correctly requires fixing problems in
799: GNU CC and GAS. We hope to fix this in time for GNU CC 2.6.
800: Until then you can work around by making your function smaller,
801: and if you are using GAS, splitting the function into multiple
802: source files may be necessary.
803:
804: * GNU CC compiled code sometimes emits warnings from the HP-UX
805: assembler of the form:
806:
807: (warning) Use of GR3 when
808: frame >= 8192 may cause conflict.
809:
810: These warnings are harmless and can be safely ignored.
811:
812: * The current version of the assembler (`/bin/as') for the RS/6000
813: has certain problems that prevent the `-g' option in GCC from
814: working. Note that `Makefile.in' uses `-g' by default when
815: compiling `libgcc2.c'.
816:
817: IBM has produced a fixed version of the assembler. The upgraded
818: assembler unfortunately was not included in any of the AIX 3.2
819: update PTF releases (3.2.2, 3.2.3, or 3.2.3e). Users of AIX 3.1
820: should request PTF U403044 from IBM and users of AIX 3.2 should
821: request PTF U416277. See the file `README.RS6000' for more
822: details on these updates.
823:
824: You can test for the presense of a fixed assembler by using the
825: command
826:
827: as -u < /dev/null
828:
829: If the command exits normally, the assembler fix already is
830: installed. If the assembler complains that "-u" is an unknown
831: flag, you need to order the fix.
832:
833: * On the IBM RS/6000, compiling code of the form
834:
835: extern int foo;
836:
837: ... foo ...
838:
839: static int foo;
840:
841: will cause the linker to report an undefined symbol `foo'.
842: Although this behavior differs from most other systems, it is not a
843: bug because redefining an `extern' variable as `static' is
844: undefined in ANSI C.
845:
846: * AIX on the RS/6000 provides support (NLS) for environments outside
847: of the United States. Compilers and assemblers use NLS to support
848: locale-specific representations of various objects including
849: floating-point numbers ("." vs "," for separating decimal
850: fractions). There have been problems reported where the library
851: linked with GCC does not produce the same floating-point formats
852: that the assembler accepts. If you have this problem, set the
853: LANG environment variable to "C" or "En_US".
854:
855: * On the RS/6000, XLC version 1.3.0.0 will miscompile `jump.c'. XLC
856: version 1.3.0.1 or later fixes this problem. We do not yet have a
857: PTF number for this fix.
858:
859: * There is an assembler bug in versions of DG/UX prior to 5.4.2.01
860: that occurs when the `fldcr' instruction is used. GNU CC uses
861: `fldcr' on the 88100 to serialize volatile memory references. Use
862: the option `-mno-serialize-volatile' if your version of the
863: assembler has this bug.
864:
865: * On VMS, GAS versions 1.38.1 and earlier may cause spurious warning
866: messages from the linker. These warning messages complain of
867: mismatched psect attributes. You can ignore them. *Note VMS
868: Install::.
869:
870: * On NewsOS version 3, if you include both of the files `stddef.h'
871: and `sys/types.h', you get an error because there are two typedefs
872: of `size_t'. You should change `sys/types.h' by adding these
873: lines around the definition of `size_t':
874:
875: #ifndef _SIZE_T
876: #define _SIZE_T
877: ACTUAL TYPEDEF HERE
878: #endif
879:
880: * On the Alliant, the system's own convention for returning
881: structures and unions is unusual, and is not compatible with GNU
882: CC no matter what options are used.
883:
884: * On the IBM RT PC, the MetaWare HighC compiler (hc) uses a different
885: convention for structure and union returning. Use the option
886: `-mhc-struct-return' to tell GNU CC to use a convention compatible
887: with it.
888:
889: * On Ultrix, the Fortran compiler expects registers 2 through 5 to
890: be saved by function calls. However, the C compiler uses
891: conventions compatible with BSD Unix: registers 2 through 5 may be
892: clobbered by function calls.
893:
894: GNU CC uses the same convention as the Ultrix C compiler. You can
895: use these options to produce code compatible with the Fortran
896: compiler:
897:
898: -fcall-saved-r2 -fcall-saved-r3 -fcall-saved-r4 -fcall-saved-r5
899:
900: * On the WE32k, you may find that programs compiled with GNU CC do
901: not work with the standard shared C ilbrary. You may need to link
902: with the ordinary C compiler. If you do so, you must specify the
903: following options:
904:
905: -L/usr/local/lib/gcc-lib/we32k-att-sysv/2.5 -lgcc -lc_s
906:
907: The first specifies where to find the library `libgcc.a' specified
908: with the `-lgcc' option.
909:
910: GNU CC does linking by invoking `ld', just as `cc' does, and there
911: is no reason why it *should* matter which compilation program you
912: use to invoke `ld'. If someone tracks this problem down, it can
913: probably be fixed easily.
914:
915: * On the Alpha, you may get assembler errors about invalid syntax as
916: a result of floating point constants. This is due to a bug in the
917: C library functions `ecvt', `fcvt' and `gcvt'. Given valid
918: floating point numbers, they sometimes print `NaN'.
919:
920: * On Irix 4.0.5F (and perhaps in some other versions), an assembler
921: bug sometimes reorders instructions incorrectly when optimization
922: is turned on. If you think this may be happening to you, try
923: using the GNU assembler; GAS version 2.1 supports ECOFF on Irix.
924:
925: Or use the `-noasmopt' option when you compile GNU CC with itself,
926: and then again when you compile your program. (This is a temporary
927: kludge to turn off assembler optimization on Irix.) If this
928: proves to be what you need, edit the assembler spec in the file
929: `specs' so that it unconditionally passes `-O0' to the assembler,
930: and never passes `-O2' or `-O3'.
931:
932:
933: File: gcc.info, Node: External Bugs, Next: Incompatibilities, Prev: Interoperation, Up: Trouble
934:
935: Problems Compiling Certain Programs
936: ===================================
937:
938: * Parse errors may occur compiling X11 on a Decstation running
939: Ultrix 4.2 because of problems in DEC's versions of the X11 header
940: files `X11/Xlib.h' and `X11/Xutil.h'. People recommend adding
941: `-I/usr/include/mit' to use the MIT versions of the header files,
942: using the `-traditional' switch to turn off ANSI C, or fixing the
943: header files by adding this:
944:
945: #ifdef __STDC__
946: #define NeedFunctionPrototypes 0
947: #endif
948:
949: * If you have trouble compiling Perl on a SunOS 4 system, it may be
950: because Perl specifies `-I/usr/ucbinclude'. This accesses the
951: unfixed header files. Perl specifies the options
952:
953: -traditional -Dvolatile=__volatile__
954: -I/usr/include/sun -I/usr/ucbinclude
955: -fpcc-struct-return
956:
957: all of which are unnecessary with GCC 2.4.5 and newer versions.
958: You can make a properly working Perl by setting `ccflags' and
959: `cppflags' to empty values in `config.sh', then typing `./doSH;
960: make depend; make'.
961:
962: * On various 386 Unix systems derived from System V, including SCO,
963: ISC, and ESIX, you may get error messages about running out of
964: virtual memory while compiling certain programs.
965:
966: You can prevent this problem by linking GNU CC with the GNU malloc
967: (which thus replaces the malloc that comes with the system). GNU
968: malloc is available as a separate package, and also in the file
969: `src/gmalloc.c' in the GNU Emacs 19 distribution.
970:
971: If you have installed GNU malloc as a separate library package,
972: use this option when you relink GNU CC:
973:
974: MALLOC=/usr/local/lib/libgmalloc.a
975:
976: Alternatively, if you have compiled `gmalloc.c' from Emacs 19, copy
977: the object file to `gmalloc.o' and use this option when you relink
978: GNU CC:
979:
980: MALLOC=gmalloc.o
981:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.