diff options
author | Marc Espie <espie@cvs.openbsd.org> | 1999-05-26 16:30:51 +0000 |
---|---|---|
committer | Marc Espie <espie@cvs.openbsd.org> | 1999-05-26 16:30:51 +0000 |
commit | b9666a04899b8427ad99256361691ad4f08d17b2 (patch) | |
tree | 782aaf9251a058333775595f88d85e65bea4dd19 /gnu/usr.bin/gcc/INSTALL | |
parent | ae415c5f809531e1ff6823250f15e15c5e221f34 (diff) |
So long, and thanks for all the bugs.
Diffstat (limited to 'gnu/usr.bin/gcc/INSTALL')
-rw-r--r-- | gnu/usr.bin/gcc/INSTALL | 2072 |
1 files changed, 0 insertions, 2072 deletions
diff --git a/gnu/usr.bin/gcc/INSTALL b/gnu/usr.bin/gcc/INSTALL deleted file mode 100644 index 172688e0df9..00000000000 --- a/gnu/usr.bin/gcc/INSTALL +++ /dev/null @@ -1,2072 +0,0 @@ -This file documents the installation of the GNU compiler. Copyright -(C) 1988, 1989, 1992, 1994, 1995 Free Software Foundation, Inc. You -may copy, distribute, and modify it freely as long as you preserve this -copyright notice and permission notice. - -Installing GNU CC -***************** - - Here is the procedure for installing GNU CC on a Unix system. See -*Note VMS Install::, for VMS systems. In this section we assume you -compile in the same directory that contains the source files; see *Note -Other Dir::, to find out how to compile in a separate directory on Unix -systems. - - You cannot install GNU C by itself on MSDOS; it will not compile -under any MSDOS compiler except itself. You need to get the complete -compilation package DJGPP, which includes binaries as well as sources, -and includes all the necessary compilation tools and libraries. - - 1. If you have built GNU CC previously in the same directory for a - different target machine, do `make distclean' to delete all files - that might be invalid. One of the files this deletes is - `Makefile'; if `make distclean' complains that `Makefile' does not - exist, it probably means that the directory is already suitably - clean. - - 2. On a System V release 4 system, make sure `/usr/bin' precedes - `/usr/ucb' in `PATH'. The `cc' command in `/usr/ucb' uses - libraries which have bugs. - - 3. Specify the host, build and target machine configurations. You do - this by running the file `configure'. - - The "build" machine is the system which you are using, the "host" - machine is the system where you want to run the resulting compiler - (normally the build machine), and the "target" machine is the - system for which you want the compiler to generate code. - - If you are building a compiler to produce code for the machine it - runs on (a native compiler), you normally do not need to specify - any operands to `configure'; it will try to guess the type of - machine you are on and use that as the build, host and target - machines. So you don't need to specify a configuration when - building a native compiler unless `configure' cannot figure out - what your configuration is or guesses wrong. - - In those cases, specify the build machine's "configuration name" - with the `--host' option; the host and target will default to be - the same as the host machine. (If you are building a - cross-compiler, see *Note Cross-Compiler::.) - - Here is an example: - - ./configure --build=sparc-sun-sunos4.1 - - A configuration name may be canonical or it may be more or less - abbreviated. - - A canonical configuration name has three parts, separated by - dashes. It looks like this: `CPU-COMPANY-SYSTEM'. (The three - parts may themselves contain dashes; `configure' can figure out - which dashes serve which purpose.) For example, - `m68k-sun-sunos4.1' specifies a Sun 3. - - You can also replace parts of the configuration by nicknames or - aliases. For example, `sun3' stands for `m68k-sun', so - `sun3-sunos4.1' is another way to specify a Sun 3. You can also - use simply `sun3-sunos', since the version of SunOS is assumed by - default to be version 4. - - You can specify a version number after any of the system types, - and some of the CPU types. In most cases, the version is - irrelevant, and will be ignored. So you might as well specify the - version if you know it. - - See *Note Configurations::, for a list of supported configuration - names and notes on many of the configurations. You should check - the notes in that section before proceeding any further with the - installation of GNU CC. - - There are four additional options you can specify independently to - describe variant hardware and software configurations. These are - `--with-gnu-as', `--with-gnu-ld', `--with-stabs' and `--nfp'. - - `--with-gnu-as' - If you will use GNU CC with the GNU assembler (GAS), you - should declare this by using the `--with-gnu-as' option when - you run `configure'. - - Using this option does not install GAS. It only modifies the - output of GNU CC to work with GAS. Building and installing - GAS is up to you. - - Conversely, if you *do not* wish to use GAS and do not specify - `--with-gnu-as' when building GNU CC, it is up to you to make - sure that GAS is not installed. GNU CC searches for a - program named `as' in various directories; if the program it - finds is GAS, then it runs GAS. If you are not sure where - GNU CC finds the assembler it is using, try specifying `-v' - when you run it. - - The systems where it makes a difference whether you use GAS - are - `hppa1.0-ANY-ANY', `hppa1.1-ANY-ANY', `i386-ANY-sysv', - `i386-ANY-isc', - `i860-ANY-bsd', `m68k-bull-sysv', - `m68k-hp-hpux', `m68k-sony-bsd', - `m68k-altos-sysv', `m68000-hp-hpux', - `m68000-att-sysv', `ANY-lynx-lynxos', and `mips-ANY'). On - any other system, `--with-gnu-as' has no effect. - - On the systems listed above (except for the HP-PA, for ISC on - the 386, and for `mips-sgi-irix5.*'), if you use GAS, you - should also use the GNU linker (and specify `--with-gnu-ld'). - - `--with-gnu-ld' - Specify the option `--with-gnu-ld' if you plan to use the GNU - linker with GNU CC. - - This option does not cause the GNU linker to be installed; it - just modifies the behavior of GNU CC to work with the GNU - linker. Specifically, it inhibits the installation of - `collect2', a program which otherwise serves as a front-end - for the system's linker on most configurations. - - `--with-stabs' - On MIPS based systems and on Alphas, you must specify whether - you want GNU CC to create the normal ECOFF debugging format, - or to use BSD-style stabs passed through the ECOFF symbol - table. The normal ECOFF debug format cannot fully handle - languages other than C. BSD stabs format can handle other - languages, but it only works with the GNU debugger GDB. - - Normally, GNU CC uses the ECOFF debugging format by default; - if you prefer BSD stabs, specify `--with-stabs' when you - configure GNU CC. - - No matter which default you choose when you configure GNU CC, - the user can use the `-gcoff' and `-gstabs+' options to - specify explicitly the debug format for a particular - compilation. - - `--with-stabs' is meaningful on the ISC system on the 386, - also, if `--with-gas' is used. It selects use of stabs - debugging information embedded in COFF output. This kind of - debugging information supports C++ well; ordinary COFF - debugging information does not. - - `--with-stabs' is also meaningful on 386 systems running - SVR4. It selects use of stabs debugging information embedded - in ELF output. The C++ compiler currently (2.6.0) does not - support the DWARF debugging information normally used on 386 - SVR4 platforms; stabs provide a workable alternative. This - requires gas and gdb, as the normal SVR4 tools can not - generate or interpret stabs. - - `--nfp' - On certain systems, you must specify whether the machine has - a floating point unit. These systems include - `m68k-sun-sunosN' and `m68k-isi-bsd'. On any other system, - `--nfp' currently has no effect, though perhaps there are - other systems where it could usefully make a difference. - - `--enable-threads=TYPE' - Certain systems, notably Linux-based GNU systems, can't be - relied on to supply a threads facility for the Objective C - runtime and so will default to single-threaded runtime. They - may, however, have a library threads implementation - available, in which case threads can be enabled with this - option by supplying a suitable TYPE, probably `posix'. The - possibilities for TYPE are `single', `posix', `win32', - `solaris', `irix' and `mach'. - - The `configure' script searches subdirectories of the source - directory for other compilers that are to be integrated into GNU - CC. The GNU compiler for C++, called G++ is in a subdirectory - named `cp'. `configure' inserts rules into `Makefile' to build - all of those compilers. - - Here we spell out what files will be set up by `configure'. - Normally you need not be concerned with these files. - - * A file named `config.h' is created that contains a `#include' - of the top-level config file for the machine you will run the - compiler on (*note The Configuration File: - (gcc.info)Config.). This file is responsible for defining - information about the host machine. It includes `tm.h'. - - The top-level config file is located in the subdirectory - `config'. Its name is always `xm-SOMETHING.h'; usually - `xm-MACHINE.h', but there are some exceptions. - - If your system does not support symbolic links, you might - want to set up `config.h' to contain a `#include' command - which refers to the appropriate file. - - * A file named `tconfig.h' is created which includes the - top-level config file for your target machine. This is used - for compiling certain programs to run on that machine. - - * A file named `tm.h' is created which includes the - machine-description macro file for your target machine. It - should be in the subdirectory `config' and its name is often - `MACHINE.h'. - - * The command file `configure' also constructs the file - `Makefile' by adding some text to the template file - `Makefile.in'. The additional text comes from files in the - `config' directory, named `t-TARGET' and `x-HOST'. If these - files do not exist, it means nothing needs to be added for a - given target or host. - - 4. The standard directory for installing GNU CC is `/usr/local/lib'. - If you want to install its files somewhere else, specify - `--prefix=DIR' when you run `configure'. Here DIR is a directory - name to use instead of `/usr/local' for all purposes with one - exception: the directory `/usr/local/include' is searched for - header files no matter where you install the compiler. To override - this name, use the `--local-prefix' option below. - - 5. Specify `--local-prefix=DIR' if you want the compiler to search - directory `DIR/include' for locally installed header files - *instead* of `/usr/local/include'. - - You should specify `--local-prefix' *only* if your site has a - different convention (not `/usr/local') for where to put - site-specific files. - - The default value for `--local-prefix' is `/usr/local' regardless - of the value of `--prefix'. Specifying `--prefix' has no effect - on which directory GNU CC searches for local header files. This - may seem counterintuitive, but actually it is logical. - - The purpose of `--prefix' is to specify where to *install GNU CC*. - The local header files in `/usr/local/include'--if you put any in - that directory--are not part of GNU CC. They are part of other - programs--perhaps many others. (GNU CC installs its own header - files in another directory which is based on the `--prefix' value.) - - *Do not* specify `/usr' as the `--local-prefix'! The directory - you use for `--local-prefix' *must not* contain any of the - system's standard header files. If it did contain them, certain - programs would be miscompiled (including GNU Emacs, on certain - targets), because this would override and nullify the header file - corrections made by the `fixincludes' script. - - Indications are that people who use this option use it based on - mistaken ideas of what it is for. People use it as if it specified - where to install part of GNU CC. Perhaps they make this assumption - because installing GNU CC creates the directory. - - 6. Make sure the Bison parser generator is installed. (This is - unnecessary if the Bison output files `c-parse.c' and `cexp.c' are - more recent than `c-parse.y' and `cexp.y' and you do not plan to - change the `.y' files.) - - Bison versions older than Sept 8, 1988 will produce incorrect - output for `c-parse.c'. - - 7. If you have chosen a configuration for GNU CC which requires other - GNU tools (such as GAS or the GNU linker) instead of the standard - system tools, install the required tools in the build directory - under the names `as', `ld' or whatever is appropriate. This will - enable the compiler to find the proper tools for compilation of - the program `enquire'. - - Alternatively, you can do subsequent compilation using a value of - the `PATH' environment variable such that the necessary GNU tools - come before the standard system tools. - - 8. Build the compiler. Just type `make LANGUAGES=c' in the compiler - directory. - - `LANGUAGES=c' specifies that only the C compiler should be - compiled. The makefile normally builds compilers for all the - supported languages; currently, C, C++ and Objective C. However, - C is the only language that is sure to work when you build with - other non-GNU C compilers. In addition, building anything but C - at this stage is a waste of time. - - In general, you can specify the languages to build by typing the - argument `LANGUAGES="LIST"', where LIST is one or more words from - the list `c', `c++', and `objective-c'. If you have any - additional GNU compilers as subdirectories of the GNU CC source - directory, you may also specify their names in this list. - - Ignore any warnings you may see about "statement not reached" in - `insn-emit.c'; they are normal. Also, warnings about "unknown - escape sequence" are normal in `genopinit.c' and perhaps some - other files. Likewise, you should ignore warnings about "constant - is so large that it is unsigned" in `insn-emit.c' and - `insn-recog.c' and a warning about a comparison always being zero - in `enquire.o'. Any other compilation errors may represent bugs in - the port to your machine or operating system, and should be - investigated and reported. - - Some commercial compilers fail to compile GNU CC because they have - bugs or limitations. For example, the Microsoft compiler is said - to run out of macro space. Some Ultrix compilers run out of - expression space; then you need to break up the statement where - the problem happens. - - 9. If you are building a cross-compiler, stop here. *Note - Cross-Compiler::. - - 10. Move the first-stage object files and executables into a - subdirectory with this command: - - make stage1 - - The files are moved into a subdirectory named `stage1'. Once - installation is complete, you may wish to delete these files with - `rm -r stage1'. - - 11. If you have chosen a configuration for GNU CC which requires other - GNU tools (such as GAS or the GNU linker) instead of the standard - system tools, install the required tools in the `stage1' - subdirectory under the names `as', `ld' or whatever is - appropriate. This will enable the stage 1 compiler to find the - proper tools in the following stage. - - Alternatively, you can do subsequent compilation using a value of - the `PATH' environment variable such that the necessary GNU tools - come before the standard system tools. - - 12. Recompile the compiler with itself, with this command: - - make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2" - - This is called making the stage 2 compiler. - - The command shown above builds compilers for all the supported - languages. If you don't want them all, you can specify the - languages to build by typing the argument `LANGUAGES="LIST"'. LIST - should contain one or more words from the list `c', `c++', - `objective-c', and `proto'. Separate the words with spaces. - `proto' stands for the programs `protoize' and `unprotoize'; they - are not a separate language, but you use `LANGUAGES' to enable or - disable their installation. - - If you are going to build the stage 3 compiler, then you might - want to build only the C language in stage 2. - - Once you have built the stage 2 compiler, if you are short of disk - space, you can delete the subdirectory `stage1'. - - On a 68000 or 68020 system lacking floating point hardware, unless - you have selected a `tm.h' file that expects by default that there - is no such hardware, do this instead: - - make CC="stage1/xgcc -Bstage1/" CFLAGS="-g -O2 -msoft-float" - - 13. If you wish to test the compiler by compiling it with itself one - more time, install any other necessary GNU tools (such as GAS or - the GNU linker) in the `stage2' subdirectory as you did in the - `stage1' subdirectory, then do this: - - make stage2 - make CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O2" - - This is called making the stage 3 compiler. Aside from the `-B' - option, the compiler options should be the same as when you made - the stage 2 compiler. But the `LANGUAGES' option need not be the - same. The command shown above builds compilers for all the - supported languages; if you don't want them all, you can specify - the languages to build by typing the argument `LANGUAGES="LIST"', - as described above. - - If you do not have to install any additional GNU tools, you may - use the command - - make bootstrap LANGUAGES=LANGUAGE-LIST BOOT_CFLAGS=OPTION-LIST - - instead of making `stage1', `stage2', and performing the two - compiler builds. - - 14. Then compare the latest object files with the stage 2 object - files--they ought to be identical, aside from time stamps (if any). - - On some systems, meaningful comparison of object files is - impossible; they always appear "different." This is currently - true on Solaris and some systems that use ELF object file format. - On some versions of Irix on SGI machines and DEC Unix (OSF/1) on - Alpha systems, you will not be able to compare the files without - specifying `-save-temps'; see the description of individual - systems above to see if you get comparison failures. You may have - similar problems on other systems. - - Use this command to compare the files: - - make compare - - This will mention any object files that differ between stage 2 and - stage 3. Any difference, no matter how innocuous, indicates that - the stage 2 compiler has compiled GNU CC incorrectly, and is - therefore a potentially serious bug which you should investigate - and report. - - If your system does not put time stamps in the object files, then - this is a faster way to compare them (using the Bourne shell): - - for file in *.o; do - cmp $file stage2/$file - done - - If you have built the compiler with the `-mno-mips-tfile' option on - MIPS machines, you will not be able to compare the files. - - 15. Install the compiler driver, the compiler's passes and run-time - support with `make install'. Use the same value for `CC', - `CFLAGS' and `LANGUAGES' that you used when compiling the files - that are being installed. One reason this is necessary is that - some versions of Make have bugs and recompile files gratuitously - when you do this step. If you use the same variable values, those - files will be recompiled properly. - - For example, if you have built the stage 2 compiler, you can use - the following command: - - make install CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O" LANGUAGES="LIST" - - This copies the files `cc1', `cpp' and `libgcc.a' to files `cc1', - `cpp' and `libgcc.a' in the directory - `/usr/local/lib/gcc-lib/TARGET/VERSION', which is where the - compiler driver program looks for them. Here TARGET is the - canonicalized form of target machine type specified when you ran - `configure', and VERSION is the version number of GNU CC. This - naming scheme permits various versions and/or cross-compilers to - coexist. It also copies the executables for compilers for other - languages (e.g., `cc1plus' for C++) to the same directory. - - This also copies the driver program `xgcc' into - `/usr/local/bin/gcc', so that it appears in typical execution - search paths. It also copies `gcc.1' into `/usr/local/man/man1' - and info pages into `/usr/local/info'. - - On some systems, this command causes recompilation of some files. - This is usually due to bugs in `make'. You should either ignore - this problem, or use GNU Make. - - *Warning: there is a bug in `alloca' in the Sun library. To avoid - this bug, be sure to install the executables of GNU CC that were - compiled by GNU CC. (That is, the executables from stage 2 or 3, - not stage 1.) They use `alloca' as a built-in function and never - the one in the library.* - - (It is usually better to install GNU CC executables from stage 2 - or 3, since they usually run faster than the ones compiled with - some other compiler.) - - 16. If you're going to use C++, it's likely that you need to also - install a C++ runtime library. Just as GNU C does not distribute - a C runtime library, it also does not include a C++ runtime - library. All I/O functionality, special class libraries, etc., are - provided by the C++ runtime library. - - The standard C++ runtime library for GNU CC is called `libstdc++'. - An obsolescent library `libg++' may also be available, but it's - necessary only for older software that hasn't been converted yet; - if you don't know whether you need `libg++' then you probably don't - need it. - - Here's one way to build and install `libstdc++' for GNU CC: - - * Build and install GNU CC, so that invoking `gcc' obtains the - GNU CC that was just built. - - * Obtain a copy of a compatible `libstdc++' distribution. For - example, the `libstdc++-2.8.0.tar.gz' distribution should be - compatible with GCC 2.8.0. GCC distributors normally - distribute `libstdc++' as well. - - * Set the `CXX' environment variable to `gcc' while running the - `libstdc++' distribution's `configure' command. Use the same - `configure' options that you used when you invoked GCC's - `configure' command. - - * Invoke `make' to build the C++ runtime. - - * Invoke `make install' to install the C++ runtime. - - To summarize, after building and installing GNU CC, invoke the - following shell commands in the topmost directory of the C++ - library distribution. For CONFIGURE-OPTIONS, use the same options - that you used to configure GNU CC. - - $ CXX=gcc ./configure CONFIGURE-OPTIONS - $ make - $ make install - - 17. GNU CC includes a runtime library for Objective-C because it is an - integral part of the language. You can find the files associated - with the library in the subdirectory `objc'. The GNU Objective-C - Runtime Library requires header files for the target's C library in - order to be compiled,and also requires the header files for the - target's thread library if you want thread support. *Note - Cross-Compilers and Header Files: Cross Headers, for discussion - about header files issues for cross-compilation. - - When you run `configure', it picks the appropriate Objective-C - thread implementation file for the target platform. In some - situations, you may wish to choose a different back-end as some - platforms support multiple thread implementations or you may wish - to disable thread support completely. You do this by specifying a - value for the OBJC_THREAD_FILE makefile variable on the command - line when you run make, for example: - - make CC="stage2/xgcc -Bstage2/" CFLAGS="-g -O2" OBJC_THREAD_FILE=thr-single - - Below is a list of the currently available back-ends. - - * thr-single Disable thread support, should work for all - platforms. - - * thr-decosf1 DEC OSF/1 thread support. - - * thr-irix SGI IRIX thread support. - - * thr-mach Generic MACH thread support, known to work on - NEXTSTEP. - - * thr-os2 IBM OS/2 thread support. - - * thr-posix Generix POSIX thread support. - - * thr-pthreads PCThreads on Linux-based GNU systems. - - * thr-solaris SUN Solaris thread support. - - * thr-win32 Microsoft Win32 API thread support. - -Configurations Supported by GNU CC -================================== - - Here are the possible CPU types: - - 1750a, a29k, alpha, arm, cN, clipper, dsp16xx, elxsi, h8300, - hppa1.0, hppa1.1, i370, i386, i486, i586, i860, i960, m32r, - m68000, m68k, m88k, mips, mipsel, mips64, mips64el, ns32k, - powerpc, powerpcle, pyramid, romp, rs6000, sh, sparc, sparclite, - sparc64, vax, we32k. - - Here are the recognized company names. As you can see, customary -abbreviations are used rather than the longer official names. - - acorn, alliant, altos, apollo, apple, att, bull, cbm, convergent, - convex, crds, dec, dg, dolphin, elxsi, encore, harris, hitachi, - hp, ibm, intergraph, isi, mips, motorola, ncr, next, ns, omron, - plexus, sequent, sgi, sony, sun, tti, unicom, wrs. - - The company name is meaningful only to disambiguate when the rest of -the information supplied is insufficient. You can omit it, writing -just `CPU-SYSTEM', if it is not needed. For example, `vax-ultrix4.2' -is equivalent to `vax-dec-ultrix4.2'. - - Here is a list of system types: - - 386bsd, aix, acis, amigaos, aos, aout, aux, bosx, bsd, clix, coff, - ctix, cxux, dgux, dynix, ebmon, ecoff, elf, esix, freebsd, hms, - genix, gnu, linux-gnu, hiux, hpux, iris, irix, isc, luna, lynxos, - mach, minix, msdos, mvs, netbsd, newsos, nindy, ns, osf, osfrose, - ptx, riscix, riscos, rtu, sco, sim, solaris, sunos, sym, sysv, - udi, ultrix, unicos, uniplus, unos, vms, vsta, vxworks, winnt, - xenix. - -You can omit the system type; then `configure' guesses the operating -system from the CPU and company. - - You can add a version number to the system type; this may or may not -make a difference. For example, you can write `bsd4.3' or `bsd4.4' to -distinguish versions of BSD. In practice, the version number is most -needed for `sysv3' and `sysv4', which are often treated differently. - - If you specify an impossible combination such as `i860-dg-vms', then -you may get an error message from `configure', or it may ignore part of -the information and do the best it can with the rest. `configure' -always prints the canonical name for the alternative that it used. GNU -CC does not support all possible alternatives. - - Often a particular model of machine has a name. Many machine names -are recognized as aliases for CPU/company combinations. Thus, the -machine name `sun3', mentioned above, is an alias for `m68k-sun'. -Sometimes we accept a company name as a machine name, when the name is -popularly used for a particular machine. Here is a table of the known -machine names: - - 3300, 3b1, 3bN, 7300, altos3068, altos, apollo68, att-7300, - balance, convex-cN, crds, decstation-3100, decstation, delta, - encore, fx2800, gmicro, hp7NN, hp8NN, hp9k2NN, hp9k3NN, hp9k7NN, - hp9k8NN, iris4d, iris, isi68, m3230, magnum, merlin, miniframe, - mmax, news-3600, news800, news, next, pbd, pc532, pmax, powerpc, - powerpcle, ps2, risc-news, rtpc, sun2, sun386i, sun386, sun3, - sun4, symmetry, tower-32, tower. - -Remember that a machine name specifies both the cpu type and the company -name. If you want to install your own homemade configuration files, -you can use `local' as the company name to access them. If you use -configuration `CPU-local', the configuration name without the cpu prefix -is used to form the configuration file names. - - Thus, if you specify `m68k-local', configuration uses files -`m68k.md', `local.h', `m68k.c', `xm-local.h', `t-local', and `x-local', -all in the directory `config/m68k'. - - Here is a list of configurations that have special treatment or -special things you must know: - -`1750a-*-*' - MIL-STD-1750A processors. - - The MIL-STD-1750A cross configuration produces output for - `as1750', an assembler/linker available under the GNU Public - License for the 1750A. `as1750' can be obtained at - *ftp://ftp.fta-berlin.de/pub/crossgcc/1750gals/*. A similarly - licensed simulator for the 1750A is available from same address. - - You should ignore a fatal error during the building of libgcc - (libgcc is not yet implemented for the 1750A.) - - The `as1750' assembler requires the file `ms1750.inc', which is - found in the directory `config/1750a'. - - GNU CC produced the same sections as the Fairchild F9450 C - Compiler, namely: - - `Normal' - The program code section. - - `Static' - The read/write (RAM) data section. - - `Konst' - The read-only (ROM) constants section. - - `Init' - Initialization section (code to copy KREL to SREL). - - The smallest addressable unit is 16 bits (BITS_PER_UNIT is 16). - This means that type `char' is represented with a 16-bit word per - character. The 1750A's "Load/Store Upper/Lower Byte" instructions - are not used by GNU CC. - -`alpha-*-osf1' - Systems using processors that implement the DEC Alpha architecture - and are running the DEC Unix (OSF/1) operating system, for example - the DEC Alpha AXP systems.CC.) - - GNU CC writes a `.verstamp' directive to the assembler output file - unless it is built as a cross-compiler. It gets the version to - use from the system header file `/usr/include/stamp.h'. If you - install a new version of DEC Unix, you should rebuild GCC to pick - up the new version stamp. - - Note that since the Alpha is a 64-bit architecture, - cross-compilers from 32-bit machines will not generate code as - efficient as that generated when the compiler is running on a - 64-bit machine because many optimizations that depend on being - able to represent a word on the target in an integral value on the - host cannot be performed. Building cross-compilers on the Alpha - for 32-bit machines has only been tested in a few cases and may - not work properly. - - `make compare' may fail on old versions of DEC Unix unless you add - `-save-temps' to `CFLAGS'. On these systems, the name of the - assembler input file is stored in the object file, and that makes - comparison fail if it differs between the `stage1' and `stage2' - compilations. The option `-save-temps' forces a fixed name to be - used for the assembler input file, instead of a randomly chosen - name in `/tmp'. Do not add `-save-temps' unless the comparisons - fail without that option. If you add `-save-temps', you will have - to manually delete the `.i' and `.s' files after each series of - compilations. - - GNU CC now supports both the native (ECOFF) debugging format used - by DBX and GDB and an encapsulated STABS format for use only with - GDB. See the discussion of the `--with-stabs' option of - `configure' above for more information on these formats and how to - select them. - - There is a bug in DEC's assembler that produces incorrect line - numbers for ECOFF format when the `.align' directive is used. To - work around this problem, GNU CC will not emit such alignment - directives while writing ECOFF format debugging information even - if optimization is being performed. Unfortunately, this has the - very undesirable side-effect that code addresses when `-O' is - specified are different depending on whether or not `-g' is also - specified. - - To avoid this behavior, specify `-gstabs+' and use GDB instead of - DBX. DEC is now aware of this problem with the assembler and - hopes to provide a fix shortly. - -`arc-*-elf' - Argonaut ARC processor. This configuration is intended for - embedded systems. - -`arm-*-aout' - Advanced RISC Machines ARM-family processors. These are often - used in embedded applications. There are no standard Unix - configurations. This configuration corresponds to the basic - instruction sequences and will produce `a.out' format object - modules. - - You may need to make a variant of the file `arm.h' for your - particular configuration. - -`arm-*-linuxaout' - Any of the ARM family processors running the Linux-based GNU - system with the `a.out' binary format (ELF is not yet supported). - You must use version 2.8.1.0.7 or later of the GNU/Linux binutils, - which you can download from `sunsite.unc.edu:/pub/Linux/GCC' and - other mirror sites for Linux-based GNU systems. - -`arm-*-riscix' - The ARM2 or ARM3 processor running RISC iX, Acorn's port of BSD - Unix. If you are running a version of RISC iX prior to 1.2 then - you must specify the version number during configuration. Note - that the assembler shipped with RISC iX does not support stabs - debugging information; a new version of the assembler, with stabs - support included, is now available from Acorn and via ftp - `ftp.acorn.com:/pub/riscix/as+xterm.tar.Z'. To enable stabs - debugging, pass `--with-gnu-as' to configure. - - You will need to install GNU `sed' before you can run configure. - -`a29k' - AMD Am29k-family processors. These are normally used in embedded - applications. There are no standard Unix configurations. This - configuration corresponds to AMD's standard calling sequence and - binary interface and is compatible with other 29k tools. - - You may need to make a variant of the file `a29k.h' for your - particular configuration. - -`a29k-*-bsd' - AMD Am29050 used in a system running a variant of BSD Unix. - -`decstation-*' - MIPS-based DECstations can support three different personalities: - Ultrix, DEC OSF/1, and OSF/rose. (Alpha-based DECstation products - have a configuration name beginning with `alpha-dec'.) To - configure GCC for these platforms use the following configurations: - - `decstation-ultrix' - Ultrix configuration. - - `decstation-osf1' - Dec's version of OSF/1. - - `decstation-osfrose' - Open Software Foundation reference port of OSF/1 which uses - the OSF/rose object file format instead of ECOFF. Normally, - you would not select this configuration. - - The MIPS C compiler needs to be told to increase its table size - for switch statements with the `-Wf,-XNg1500' option in order to - compile `cp/parse.c'. If you use the `-O2' optimization option, - you also need to use `-Olimit 3000'. Both of these options are - automatically generated in the `Makefile' that the shell script - `configure' builds. If you override the `CC' make variable and - use the MIPS compilers, you may need to add `-Wf,-XNg1500 -Olimit - 3000'. - -`elxsi-elxsi-bsd' - The Elxsi's C compiler has known limitations that prevent it from - compiling GNU C. Please contact `mrs@cygnus.com' for more details. - -`dsp16xx' - A port to the AT&T DSP1610 family of processors. - -`h8300-*-*' - Hitachi H8/300 series of processors. - - The calling convention and structure layout has changed in release - 2.6. All code must be recompiled. The calling convention now - passes the first three arguments in function calls in registers. - Structures are no longer a multiple of 2 bytes. - -`hppa*-*-*' - There are several variants of the HP-PA processor which run a - variety of operating systems. GNU CC must be configured to use - the correct processor type and operating system, or GNU CC will - not function correctly. The easiest way to handle this problem is - to *not* specify a target when configuring GNU CC, the `configure' - script will try to automatically determine the right processor - type and operating system. - - `-g' does not work on HP-UX, since that system uses a peculiar - debugging format which GNU CC does not know about. However, `-g' - will work if you also use GAS and GDB in conjunction with GCC. We - highly recommend using GAS for all HP-PA configurations. - - You should be using GAS-2.6 (or later) along with GDB-4.16 (or - later). These can be retrieved from all the traditional GNU ftp - archive sites. - - GAS will need to be installed into a directory before `/bin', - `/usr/bin', and `/usr/ccs/bin' in your search path. You should - install GAS before you build GNU CC. - - To enable debugging, you must configure GNU CC with the - `--with-gnu-as' option before building. - -`i370-*-*' - This port is very preliminary and has many known bugs. We hope to - have a higher-quality port for this machine soon. - -`i386-*-linux-gnuoldld' - Use this configuration to generate `a.out' binaries on Linux-based - GNU systems if you do not have gas/binutils version 2.5.2 or later - installed. This is an obsolete configuration. - -`i386-*-linux-gnuaout' - Use this configuration to generate `a.out' binaries on Linux-based - GNU systems. This configuration is being superseded. You must use - gas/binutils version 2.5.2 or later. - -`i386-*-linux-gnu' - Use this configuration to generate ELF binaries on Linux-based GNU - systems. You must use gas/binutils version 2.5.2 or later. - -`i386-*-sco' - Compilation with RCC is recommended. Also, it may be a good idea - to link with GNU malloc instead of the malloc that comes with the - system. - -`i386-*-sco3.2v4' - Use this configuration for SCO release 3.2 version 4. - -`i386-*-sco3.2v5*' - Use this for the SCO OpenServer Release family including 5.0.0, - 5.0.2, 5.0.4, Internet FastStart 1.0, and Internet FastStart 1.1. - - GNU CC can generate either ELF or COFF binaries. ELF is the - default. To get COFF output, you must specify `-mcoff' on the - command line. - - For 5.0.0 and 5.0.2, you must install TLS597 from ftp.sco.com/TLS. - 5.0.4 and later do not require this patch. - - *NOTE:* You must follow the instructions about invoking `make - bootstrap' because the native OpenServer compiler builds a - `cc1plus' that will not correctly parse many valid C++ programs. - You must do a `make bootstrap' if you are building with the native - compiler. - -`i386-*-isc' - It may be a good idea to link with GNU malloc instead of the - malloc that comes with the system. - - In ISC version 4.1, `sed' core dumps when building `deduced.h'. - Use the version of `sed' from version 4.0. - -`i386-*-esix' - It may be good idea to link with GNU malloc instead of the malloc - that comes with the system. - -`i386-ibm-aix' - You need to use GAS version 2.1 or later, and LD from GNU binutils - version 2.2 or later. - -`i386-sequent-bsd' - Go to the Berkeley universe before compiling. - -`i386-sequent-ptx1*' - Sequent DYNIX/ptx 1.x. - -`i386-sequent-ptx2*' - Sequent DYNIX/ptx 2.x. - -`i386-sun-sunos4' - You may find that you need another version of GNU CC to begin - bootstrapping with, since the current version when built with the - system's own compiler seems to get an infinite loop compiling part - of `libgcc2.c'. GNU CC version 2 compiled with GNU CC (any - version) seems not to have this problem. - - See *Note Sun Install::, for information on installing GNU CC on - Sun systems. - -`i[345]86-*-winnt3.5' - This version requires a GAS that has not yet been released. Until - it is, you can get a prebuilt binary version via anonymous ftp from - `cs.washington.edu:pub/gnat' or `cs.nyu.edu:pub/gnat'. You must - also use the Microsoft header files from the Windows NT 3.5 SDK. - Find these on the CDROM in the `/mstools/h' directory dated - 9/4/94. You must use a fixed version of Microsoft linker made - especially for NT 3.5, which is also is available on the NT 3.5 - SDK CDROM. If you do not have this linker, can you also use the - linker from Visual C/C++ 1.0 or 2.0. - - Installing GNU CC for NT builds a wrapper linker, called `ld.exe', - which mimics the behaviour of Unix `ld' in the specification of - libraries (`-L' and `-l'). `ld.exe' looks for both Unix and - Microsoft named libraries. For example, if you specify `-lfoo', - `ld.exe' will look first for `libfoo.a' and then for `foo.lib'. - - You may install GNU CC for Windows NT in one of two ways, - depending on whether or not you have a Unix-like shell and various - Unix-like utilities. - - 1. If you do not have a Unix-like shell and few Unix-like - utilities, you will use a DOS style batch script called - `configure.bat'. Invoke it as `configure winnt' from an - MSDOS console window or from the program manager dialog box. - `configure.bat' assumes you have already installed and have - in your path a Unix-like `sed' program which is used to - create a working `Makefile' from `Makefile.in'. - - `Makefile' uses the Microsoft Nmake program maintenance - utility and the Visual C/C++ V8.00 compiler to build GNU CC. - You need only have the utilities `sed' and `touch' to use - this installation method, which only automatically builds the - compiler itself. You must then examine what `fixinc.winnt' - does, edit the header files by hand and build `libgcc.a' - manually. - - 2. The second type of installation assumes you are running a - Unix-like shell, have a complete suite of Unix-like utilities - in your path, and have a previous version of GNU CC already - installed, either through building it via the above - installation method or acquiring a pre-built binary. In this - case, use the `configure' script in the normal fashion. - -`i860-intel-osf1' - This is the Paragon. If you have version 1.0 of the operating - system, you need to take special steps to build GNU CC due to - peculiarities of the system. Newer system versions have no - problem. See the section `Installation Problems' in the GNU CC - Manual. - -`*-lynx-lynxos' - LynxOS 2.2 and earlier comes with GNU CC 1.x already installed as - `/bin/gcc'. You should compile with this instead of `/bin/cc'. - You can tell GNU CC to use the GNU assembler and linker, by - specifying `--with-gnu-as --with-gnu-ld' when configuring. These - will produce COFF format object files and executables; otherwise - GNU CC will use the installed tools, which produce `a.out' format - executables. - -`m32r-*-elf' - Mitsubishi M32R processor. This configuration is intended for - embedded systems. - -`m68000-hp-bsd' - HP 9000 series 200 running BSD. Note that the C compiler that - comes with this system cannot compile GNU CC; contact - `law@cygnus.com' to get binaries of GNU CC for bootstrapping. - -`m68k-altos' - Altos 3068. You must use the GNU assembler, linker and debugger. - Also, you must fix a kernel bug. Details in the file - `README.ALTOS'. - -`m68k-apple-aux' - Apple Macintosh running A/UX. You may configure GCC to use - either the system assembler and linker or the GNU assembler and - linker. You should use the GNU configuration if you can, - especially if you also want to use GNU C++. You enabled that - configuration with + the `--with-gnu-as' and `--with-gnu-ld' - options to `configure'. - - Note the C compiler that comes with this system cannot compile GNU - CC. You can fine binaries of GNU CC for bootstrapping on - `jagubox.gsfc.nasa.gov'. You will also a patched version of - `/bin/ld' there that raises some of the arbitrary limits found in - the original. - -`m68k-att-sysv' - AT&T 3b1, a.k.a. 7300 PC. Special procedures are needed to - compile GNU CC with this machine's standard C compiler, due to - bugs in that compiler. You can bootstrap it more easily with - previous versions of GNU CC if you have them. - - Installing GNU CC on the 3b1 is difficult if you do not already - have GNU CC running, due to bugs in the installed C compiler. - However, the following procedure might work. We are unable to - test it. - - 1. Comment out the `#include "config.h"' line near the start of - `cccp.c' and do `make cpp'. This makes a preliminary version - of GNU cpp. - - 2. Save the old `/lib/cpp' and copy the preliminary GNU cpp to - that file name. - - 3. Undo your change in `cccp.c', or reinstall the original - version, and do `make cpp' again. - - 4. Copy this final version of GNU cpp into `/lib/cpp'. - - 5. Replace every occurrence of `obstack_free' in the file - `tree.c' with `_obstack_free'. - - 6. Run `make' to get the first-stage GNU CC. - - 7. Reinstall the original version of `/lib/cpp'. - - 8. Now you can compile GNU CC with itself and install it in the - normal fashion. - -`m68k-bull-sysv' - Bull DPX/2 series 200 and 300 with BOS-2.00.45 up to BOS-2.01. GNU - CC works either with native assembler or GNU assembler. You can use - GNU assembler with native coff generation by providing - `--with-gnu-as' to the configure script or use GNU assembler with - dbx-in-coff encapsulation by providing `--with-gnu-as --stabs'. - For any problem with native assembler or for availability of the - DPX/2 port of GAS, contact `F.Pierresteguy@frcl.bull.fr'. - -`m68k-crds-unox' - Use `configure unos' for building on Unos. - - The Unos assembler is named `casm' instead of `as'. For some - strange reason linking `/bin/as' to `/bin/casm' changes the - behavior, and does not work. So, when installing GNU CC, you - should install the following script as `as' in the subdirectory - where the passes of GCC are installed: - - #!/bin/sh - casm $* - - The default Unos library is named `libunos.a' instead of `libc.a'. - To allow GNU CC to function, either change all references to - `-lc' in `gcc.c' to `-lunos' or link `/lib/libc.a' to - `/lib/libunos.a'. - - When compiling GNU CC with the standard compiler, to overcome bugs - in the support of `alloca', do not use `-O' when making stage 2. - Then use the stage 2 compiler with `-O' to make the stage 3 - compiler. This compiler will have the same characteristics as the - usual stage 2 compiler on other systems. Use it to make a stage 4 - compiler and compare that with stage 3 to verify proper - compilation. - - (Perhaps simply defining `ALLOCA' in `x-crds' as described in the - comments there will make the above paragraph superfluous. Please - inform us of whether this works.) - - Unos uses memory segmentation instead of demand paging, so you - will need a lot of memory. 5 Mb is barely enough if no other - tasks are running. If linking `cc1' fails, try putting the object - files into a library and linking from that library. - -`m68k-hp-hpux' - HP 9000 series 300 or 400 running HP-UX. HP-UX version 8.0 has a - bug in the assembler that prevents compilation of GNU CC. To fix - it, get patch PHCO_4484 from HP. - - In addition, if you wish to use gas `--with-gnu-as' you must use - gas version 2.1 or later, and you must use the GNU linker version - 2.1 or later. Earlier versions of gas relied upon a program which - converted the gas output into the native HP/UX format, but that - program has not been kept up to date. gdb does not understand - that native HP/UX format, so you must use gas if you wish to use - gdb. - -`m68k-sun' - Sun 3. We do not provide a configuration file to use the Sun FPA - by default, because programs that establish signal handlers for - floating point traps inherently cannot work with the FPA. - - See *Note Sun Install::, for information on installing GNU CC on - Sun systems. - -`m88k-*-svr3' - Motorola m88k running the AT&T/Unisoft/Motorola V.3 reference port. - These systems tend to use the Green Hills C, revision 1.8.5, as the - standard C compiler. There are apparently bugs in this compiler - that result in object files differences between stage 2 and stage - 3. If this happens, make the stage 4 compiler and compare it to - the stage 3 compiler. If the stage 3 and stage 4 object files are - identical, this suggests you encountered a problem with the - standard C compiler; the stage 3 and 4 compilers may be usable. - - It is best, however, to use an older version of GNU CC for - bootstrapping if you have one. - -`m88k-*-dgux' - Motorola m88k running DG/UX. To build 88open BCS native or cross - compilers on DG/UX, specify the configuration name as - `m88k-*-dguxbcs' and build in the 88open BCS software development - environment. To build ELF native or cross compilers on DG/UX, - specify `m88k-*-dgux' and build in the DG/UX ELF development - environment. You set the software development environment by - issuing `sde-target' command and specifying either `m88kbcs' or - `m88kdguxelf' as the operand. - - If you do not specify a configuration name, `configure' guesses the - configuration based on the current software development - environment. - -`m88k-tektronix-sysv3' - Tektronix XD88 running UTekV 3.2e. Do not turn on optimization - while building stage1 if you bootstrap with the buggy Green Hills - compiler. Also, The bundled LAI System V NFS is buggy so if you - build in an NFS mounted directory, start from a fresh reboot, or - avoid NFS all together. Otherwise you may have trouble getting - clean comparisons between stages. - -`mips-mips-bsd' - MIPS machines running the MIPS operating system in BSD mode. It's - possible that some old versions of the system lack the functions - `memcpy', `memcmp', and `memset'. If your system lacks these, you - must remove or undo the definition of `TARGET_MEM_FUNCTIONS' in - `mips-bsd.h'. - - The MIPS C compiler needs to be told to increase its table size - for switch statements with the `-Wf,-XNg1500' option in order to - compile `cp/parse.c'. If you use the `-O2' optimization option, - you also need to use `-Olimit 3000'. Both of these options are - automatically generated in the `Makefile' that the shell script - `configure' builds. If you override the `CC' make variable and - use the MIPS compilers, you may need to add `-Wf,-XNg1500 -Olimit - 3000'. - -`mips-mips-riscos*' - The MIPS C compiler needs to be told to increase its table size - for switch statements with the `-Wf,-XNg1500' option in order to - compile `cp/parse.c'. If you use the `-O2' optimization option, - you also need to use `-Olimit 3000'. Both of these options are - automatically generated in the `Makefile' that the shell script - `configure' builds. If you override the `CC' make variable and - use the MIPS compilers, you may need to add `-Wf,-XNg1500 -Olimit - 3000'. - - MIPS computers running RISC-OS can support four different - personalities: default, BSD 4.3, System V.3, and System V.4 (older - versions of RISC-OS don't support V.4). To configure GCC for - these platforms use the following configurations: - - `mips-mips-riscos`rev'' - Default configuration for RISC-OS, revision `rev'. - - `mips-mips-riscos`rev'bsd' - BSD 4.3 configuration for RISC-OS, revision `rev'. - - `mips-mips-riscos`rev'sysv4' - System V.4 configuration for RISC-OS, revision `rev'. - - `mips-mips-riscos`rev'sysv' - System V.3 configuration for RISC-OS, revision `rev'. - - The revision `rev' mentioned above is the revision of RISC-OS to - use. You must reconfigure GCC when going from a RISC-OS revision - 4 to RISC-OS revision 5. This has the effect of avoiding a linker - bug. - -`mips-sgi-*' - In order to compile GCC on an SGI running IRIX 4, the "c.hdr.lib" - option must be installed from the CD-ROM supplied from Silicon - Graphics. This is found on the 2nd CD in release 4.0.1. - - In order to compile GCC on an SGI running IRIX 5, the - "compiler_dev.hdr" subsystem must be installed from the IDO CD-ROM - supplied by Silicon Graphics. - - `make compare' may fail on version 5 of IRIX unless you add - `-save-temps' to `CFLAGS'. On these systems, the name of the - assembler input file is stored in the object file, and that makes - comparison fail if it differs between the `stage1' and `stage2' - compilations. The option `-save-temps' forces a fixed name to be - used for the assembler input file, instead of a randomly chosen - name in `/tmp'. Do not add `-save-temps' unless the comparisons - fail without that option. If you do you `-save-temps', you will - have to manually delete the `.i' and `.s' files after each series - of compilations. - - The MIPS C compiler needs to be told to increase its table size - for switch statements with the `-Wf,-XNg1500' option in order to - compile `cp/parse.c'. If you use the `-O2' optimization option, - you also need to use `-Olimit 3000'. Both of these options are - automatically generated in the `Makefile' that the shell script - `configure' builds. If you override the `CC' make variable and - use the MIPS compilers, you may need to add `-Wf,-XNg1500 -Olimit - 3000'. - - On Irix version 4.0.5F, and perhaps on some other versions as well, - there is an assembler bug that reorders instructions incorrectly. - To work around it, specify the target configuration - `mips-sgi-irix4loser'. This configuration inhibits assembler - optimization. - - In a compiler configured with target `mips-sgi-irix4', you can turn - off assembler optimization by using the `-noasmopt' option. This - compiler option passes the option `-O0' to the assembler, to - inhibit reordering. - - The `-noasmopt' option can be useful for testing whether a problem - is due to erroneous assembler reordering. Even if a problem does - not go away with `-noasmopt', it may still be due to assembler - reordering--perhaps GNU CC itself was miscompiled as a result. - - To enable debugging under Irix 5, you must use GNU as 2.5 or later, - and use the `--with-gnu-as' configure option when configuring gcc. - GNU as is distributed as part of the binutils package. - -`mips-sony-sysv' - Sony MIPS NEWS. This works in NEWSOS 5.0.1, but not in 5.0.2 - (which uses ELF instead of COFF). Support for 5.0.2 will probably - be provided soon by volunteers. In particular, the linker does - not like the code generated by GCC when shared libraries are - linked in. - -`ns32k-encore' - Encore ns32000 system. Encore systems are supported only under - BSD. - -`ns32k-*-genix' - National Semiconductor ns32000 system. Genix has bugs in `alloca' - and `malloc'; you must get the compiled versions of these from GNU - Emacs. - -`ns32k-sequent' - Go to the Berkeley universe before compiling. - -`ns32k-utek' - UTEK ns32000 system ("merlin"). The C compiler that comes with - this system cannot compile GNU CC; contact `tektronix!reed!mason' - to get binaries of GNU CC for bootstrapping. - -`romp-*-aos' -`romp-*-mach' - The only operating systems supported for the IBM RT PC are AOS and - MACH. GNU CC does not support AIX running on the RT. We - recommend you compile GNU CC with an earlier version of itself; if - you compile GNU CC with `hc', the Metaware compiler, it will work, - but you will get mismatches between the stage 2 and stage 3 - compilers in various files. These errors are minor differences in - some floating-point constants and can be safely ignored; the stage - 3 compiler is correct. - -`rs6000-*-aix' -`powerpc-*-aix' - Various early versions of each release of the IBM XLC compiler - will not bootstrap GNU CC. Symptoms include differences between - the stage2 and stage3 object files, and errors when compiling - `libgcc.a' or `enquire'. Known problematic releases include: - xlc-1.2.1.8, xlc-1.3.0.0 (distributed with AIX 3.2.5), and - xlc-1.3.0.19. Both xlc-1.2.1.28 and xlc-1.3.0.24 (PTF 432238) are - known to produce working versions of GNU CC, but most other recent - releases correctly bootstrap GNU CC. - - Release 4.3.0 of AIX and ones prior to AIX 3.2.4 include a version - of the IBM assembler which does not accept debugging directives: - assembler updates are available as PTFs. Also, if you are using - AIX 3.2.5 or greater and the GNU assembler, you must have a - version modified after October 16th, 1995 in order for the GNU C - compiler to build. See the file `README.RS6000' for more details - on any of these problems. - - GNU CC does not yet support the 64-bit PowerPC instructions. - - Objective C does not work on this architecture because it makes - assumptions that are incompatible with the calling conventions. - - AIX on the RS/6000 provides support (NLS) for environments outside - of the United States. Compilers and assemblers use NLS to support - locale-specific representations of various objects including - floating-point numbers ("." vs "," for separating decimal - fractions). There have been problems reported where the library - linked with GNU CC does not produce the same floating-point - formats that the assembler accepts. If you have this problem, set - the LANG environment variable to "C" or "En_US". - - Due to changes in the way that GNU CC invokes the binder (linker) - for AIX 4.1, you may now receive warnings of duplicate symbols - from the link step that were not reported before. The assembly - files generated by GNU CC for AIX have always included multiple - symbol definitions for certain global variable and function - declarations in the original program. The warnings should not - prevent the linker from producing a correct library or runnable - executable. - - By default, AIX 4.1 produces code that can be used on either Power - or PowerPC processors. - - You can specify a default version for the `-mcpu='CPU_TYPE switch - by using the configure option `--with-cpu-'CPU_TYPE. - -`powerpc-*-elf' -`powerpc-*-sysv4' - PowerPC system in big endian mode, running System V.4. - - You can specify a default version for the `-mcpu='CPU_TYPE switch - by using the configure option `--with-cpu-'CPU_TYPE. - -`powerpc-*-linux-gnu' - PowerPC system in big endian mode, running the Linux-based GNU - system. - - You can specify a default version for the `-mcpu='CPU_TYPE switch - by using the configure option `--with-cpu-'CPU_TYPE. - -`powerpc-*-eabiaix' - Embedded PowerPC system in big endian mode with -mcall-aix - selected as the default. - - You can specify a default version for the `-mcpu='CPU_TYPE switch - by using the configure option `--with-cpu-'CPU_TYPE. - -`powerpc-*-eabisim' - Embedded PowerPC system in big endian mode for use in running - under the PSIM simulator. - - You can specify a default version for the `-mcpu='CPU_TYPE switch - by using the configure option `--with-cpu-'CPU_TYPE. - -`powerpc-*-eabi' - Embedded PowerPC system in big endian mode. - - You can specify a default version for the `-mcpu='CPU_TYPE switch - by using the configure option `--with-cpu-'CPU_TYPE. - -`powerpcle-*-elf' -`powerpcle-*-sysv4' - PowerPC system in little endian mode, running System V.4. - - You can specify a default version for the `-mcpu='CPU_TYPE switch - by using the configure option `--with-cpu-'CPU_TYPE. - -`powerpcle-*-solaris2*' - PowerPC system in little endian mode, running Solaris 2.5.1 or - higher. - - You can specify a default version for the `-mcpu='CPU_TYPE switch - by using the configure option `--with-cpu-'CPU_TYPE. Beta - versions of the Sun 4.0 compiler do not seem to be able to build - GNU CC correctly. There are also problems with the host assembler - and linker that are fixed by using the GNU versions of these tools. - -`powerpcle-*-eabisim' - Embedded PowerPC system in little endian mode for use in running - under the PSIM simulator. - -`powerpcle-*-eabi' - Embedded PowerPC system in little endian mode. - - You can specify a default version for the `-mcpu='CPU_TYPE switch - by using the configure option `--with-cpu-'CPU_TYPE. - -`powerpcle-*-winnt' -`powerpcle-*-pe' - PowerPC system in little endian mode running Windows NT. - - You can specify a default version for the `-mcpu='CPU_TYPE switch - by using the configure option `--with-cpu-'CPU_TYPE. - -`vax-dec-ultrix' - Don't try compiling with Vax C (`vcc'). It produces incorrect code - in some cases (for example, when `alloca' is used). - - Meanwhile, compiling `cp/parse.c' with pcc does not work because of - an internal table size limitation in that compiler. To avoid this - problem, compile just the GNU C compiler first, and use it to - recompile building all the languages that you want to run. - -`sparc-sun-*' - See *Note Sun Install::, for information on installing GNU CC on - Sun systems. - -`vax-dec-vms' - See *Note VMS Install::, for details on how to install GNU CC on - VMS. - -`we32k-*-*' - These computers are also known as the 3b2, 3b5, 3b20 and other - similar names. (However, the 3b1 is actually a 68000; see *Note - Configurations::.) - - Don't use `-g' when compiling with the system's compiler. The - system's linker seems to be unable to handle such a large program - with debugging information. - - The system's compiler runs out of capacity when compiling `stmt.c' - in GNU CC. You can work around this by building `cpp' in GNU CC - first, then use that instead of the system's preprocessor with the - system's C compiler to compile `stmt.c'. Here is how: - - mv /lib/cpp /lib/cpp.att - cp cpp /lib/cpp.gnu - echo '/lib/cpp.gnu -traditional ${1+"$@"}' > /lib/cpp - chmod +x /lib/cpp - - The system's compiler produces bad code for some of the GNU CC - optimization files. So you must build the stage 2 compiler without - optimization. Then build a stage 3 compiler with optimization. - That executable should work. Here are the necessary commands: - - make LANGUAGES=c CC=stage1/xgcc CFLAGS="-Bstage1/ -g" - make stage2 - make CC=stage2/xgcc CFLAGS="-Bstage2/ -g -O" - - You may need to raise the ULIMIT setting to build a C++ compiler, - as the file `cc1plus' is larger than one megabyte. - -Compilation in a Separate Directory -=================================== - - If you wish to build the object files and executables in a directory -other than the one containing the source files, here is what you must -do differently: - - 1. Make sure you have a version of Make that supports the `VPATH' - feature. (GNU Make supports it, as do Make versions on most BSD - systems.) - - 2. If you have ever run `configure' in the source directory, you must - undo the configuration. Do this by running: - - make distclean - - 3. Go to the directory in which you want to build the compiler before - running `configure': - - mkdir gcc-sun3 - cd gcc-sun3 - - On systems that do not support symbolic links, this directory must - be on the same file system as the source code directory. - - 4. Specify where to find `configure' when you run it: - - ../gcc/configure ... - - This also tells `configure' where to find the compiler sources; - `configure' takes the directory from the file name that was used to - invoke it. But if you want to be sure, you can specify the source - directory with the `--srcdir' option, like this: - - ../gcc/configure --srcdir=../gcc OTHER OPTIONS - - The directory you specify with `--srcdir' need not be the same as - the one that `configure' is found in. - - Now, you can run `make' in that directory. You need not repeat the -configuration steps shown above, when ordinary source files change. You -must, however, run `configure' again when the configuration files -change, if your system does not support symbolic links. - -Building and Installing a Cross-Compiler -======================================== - - GNU CC can function as a cross-compiler for many machines, but not -all. - - * Cross-compilers for the Mips as target using the Mips assembler - currently do not work, because the auxiliary programs - `mips-tdump.c' and `mips-tfile.c' can't be compiled on anything - but a Mips. It does work to cross compile for a Mips if you use - the GNU assembler and linker. - - * Cross-compilers between machines with different floating point - formats have not all been made to work. GNU CC now has a floating - point emulator with which these can work, but each target machine - description needs to be updated to take advantage of it. - - * Cross-compilation between machines of different word sizes is - somewhat problematic and sometimes does not work. - - Since GNU CC generates assembler code, you probably need a -cross-assembler that GNU CC can run, in order to produce object files. -If you want to link on other than the target machine, you need a -cross-linker as well. You also need header files and libraries suitable -for the target machine that you can install on the host machine. - -Steps of Cross-Compilation --------------------------- - - To compile and run a program using a cross-compiler involves several -steps: - - * Run the cross-compiler on the host machine to produce assembler - files for the target machine. This requires header files for the - target machine. - - * Assemble the files produced by the cross-compiler. You can do this - either with an assembler on the target machine, or with a - cross-assembler on the host machine. - - * Link those files to make an executable. You can do this either - with a linker on the target machine, or with a cross-linker on the - host machine. Whichever machine you use, you need libraries and - certain startup files (typically `crt....o') for the target - machine. - - It is most convenient to do all of these steps on the same host -machine, since then you can do it all with a single invocation of GNU -CC. This requires a suitable cross-assembler and cross-linker. For -some targets, the GNU assembler and linker are available. - -Configuring a Cross-Compiler ----------------------------- - - To build GNU CC as a cross-compiler, you start out by running -`configure'. Use the `--target=TARGET' to specify the target type. If -`configure' was unable to correctly identify the system you are running -on, also specify the `--build=BUILD' option. For example, here is how -to configure for a cross-compiler that produces code for an HP 68030 -system running BSD on a system that `configure' can correctly identify: - - ./configure --target=m68k-hp-bsd4.3 - -Tools and Libraries for a Cross-Compiler ----------------------------------------- - - If you have a cross-assembler and cross-linker available, you should -install them now. Put them in the directory `/usr/local/TARGET/bin'. -Here is a table of the tools you should put in this directory: - -`as' - This should be the cross-assembler. - -`ld' - This should be the cross-linker. - -`ar' - This should be the cross-archiver: a program which can manipulate - archive files (linker libraries) in the target machine's format. - -`ranlib' - This should be a program to construct a symbol table in an archive - file. - - The installation of GNU CC will find these programs in that -directory, and copy or link them to the proper place to for the -cross-compiler to find them when run later. - - The easiest way to provide these files is to build the Binutils -package and GAS. Configure them with the same `--host' and `--target' -options that you use for configuring GNU CC, then build and install -them. They install their executables automatically into the proper -directory. Alas, they do not support all the targets that GNU CC -supports. - - If you want to install libraries to use with the cross-compiler, -such as a standard C library, put them in the directory -`/usr/local/TARGET/lib'; installation of GNU CC copies all the files in -that subdirectory into the proper place for GNU CC to find them and -link with them. Here's an example of copying some libraries from a -target machine: - - ftp TARGET-MACHINE - lcd /usr/local/TARGET/lib - cd /lib - get libc.a - cd /usr/lib - get libg.a - get libm.a - quit - -The precise set of libraries you'll need, and their locations on the -target machine, vary depending on its operating system. - - Many targets require "start files" such as `crt0.o' and `crtn.o' -which are linked into each executable; these too should be placed in -`/usr/local/TARGET/lib'. There may be several alternatives for -`crt0.o', for use with profiling or other compilation options. Check -your target's definition of `STARTFILE_SPEC' to find out what start -files it uses. Here's an example of copying these files from a target -machine: - - ftp TARGET-MACHINE - lcd /usr/local/TARGET/lib - prompt - cd /lib - mget *crt*.o - cd /usr/lib - mget *crt*.o - quit - -`libgcc.a' and Cross-Compilers ------------------------------- - - Code compiled by GNU CC uses certain runtime support functions -implicitly. Some of these functions can be compiled successfully with -GNU CC itself, but a few cannot be. These problem functions are in the -source file `libgcc1.c'; the library made from them is called -`libgcc1.a'. - - When you build a native compiler, these functions are compiled with -some other compiler-the one that you use for bootstrapping GNU CC. -Presumably it knows how to open code these operations, or else knows how -to call the run-time emulation facilities that the machine comes with. -But this approach doesn't work for building a cross-compiler. The -compiler that you use for building knows about the host system, not the -target system. - - So, when you build a cross-compiler you have to supply a suitable -library `libgcc1.a' that does the job it is expected to do. - - To compile `libgcc1.c' with the cross-compiler itself does not work. -The functions in this file are supposed to implement arithmetic -operations that GNU CC does not know how to open code for your target -machine. If these functions are compiled with GNU CC itself, they will -compile into infinite recursion. - - On any given target, most of these functions are not needed. If GNU -CC can open code an arithmetic operation, it will not call these -functions to perform the operation. It is possible that on your target -machine, none of these functions is needed. If so, you can supply an -empty library as `libgcc1.a'. - - Many targets need library support only for multiplication and -division. If you are linking with a library that contains functions for -multiplication and division, you can tell GNU CC to call them directly -by defining the macros `MULSI3_LIBCALL', and the like. These macros -need to be defined in the target description macro file. For some -targets, they are defined already. This may be sufficient to avoid the -need for libgcc1.a; if so, you can supply an empty library. - - Some targets do not have floating point instructions; they need other -functions in `libgcc1.a', which do floating arithmetic. Recent -versions of GNU CC have a file which emulates floating point. With a -certain amount of work, you should be able to construct a floating -point emulator that can be used as `libgcc1.a'. Perhaps future -versions will contain code to do this automatically and conveniently. -That depends on whether someone wants to implement it. - - Some embedded targets come with all the necessary `libgcc1.a' -routines written in C or assembler. These targets build `libgcc1.a' -automatically and you do not need to do anything special for them. -Other embedded targets do not need any `libgcc1.a' routines since all -the necessary operations are supported by the hardware. - - If your target system has another C compiler, you can configure GNU -CC as a native compiler on that machine, build just `libgcc1.a' with -`make libgcc1.a' on that machine, and use the resulting file with the -cross-compiler. To do this, execute the following on the target -machine: - - cd TARGET-BUILD-DIR - ./configure --host=sparc --target=sun3 - make libgcc1.a - -And then this on the host machine: - - ftp TARGET-MACHINE - binary - cd TARGET-BUILD-DIR - get libgcc1.a - quit - - Another way to provide the functions you need in `libgcc1.a' is to -define the appropriate `perform_...' macros for those functions. If -these definitions do not use the C arithmetic operators that they are -meant to implement, you should be able to compile them with the -cross-compiler you are building. (If these definitions already exist -for your target file, then you are all set.) - - To build `libgcc1.a' using the perform macros, use -`LIBGCC1=libgcc1.a OLDCC=./xgcc' when building the compiler. -Otherwise, you should place your replacement library under the name -`libgcc1.a' in the directory in which you will build the -cross-compiler, before you run `make'. - -Cross-Compilers and Header Files --------------------------------- - - If you are cross-compiling a standalone program or a program for an -embedded system, then you may not need any header files except the few -that are part of GNU CC (and those of your program). However, if you -intend to link your program with a standard C library such as `libc.a', -then you probably need to compile with the header files that go with -the library you use. - - The GNU C compiler does not come with these files, because (1) they -are system-specific, and (2) they belong in a C library, not in a -compiler. - - If the GNU C library supports your target machine, then you can get -the header files from there (assuming you actually use the GNU library -when you link your program). - - If your target machine comes with a C compiler, it probably comes -with suitable header files also. If you make these files accessible -from the host machine, the cross-compiler can use them also. - - Otherwise, you're on your own in finding header files to use when -cross-compiling. - - When you have found suitable header files, put them in the directory -`/usr/local/TARGET/include', before building the cross compiler. Then -installation will run fixincludes properly and install the corrected -versions of the header files where the compiler will use them. - - Provide the header files before you build the cross-compiler, because -the build stage actually runs the cross-compiler to produce parts of -`libgcc.a'. (These are the parts that *can* be compiled with GNU CC.) -Some of them need suitable header files. - - Here's an example showing how to copy the header files from a target -machine. On the target machine, do this: - - (cd /usr/include; tar cf - .) > tarfile - - Then, on the host machine, do this: - - ftp TARGET-MACHINE - lcd /usr/local/TARGET/include - get tarfile - quit - tar xf tarfile - -Actually Building the Cross-Compiler ------------------------------------- - - Now you can proceed just as for compiling a single-machine compiler -through the step of building stage 1. If you have not provided some -sort of `libgcc1.a', then compilation will give up at the point where -it needs that file, printing a suitable error message. If you do -provide `libgcc1.a', then building the compiler will automatically -compile and link a test program called `libgcc1-test'; if you get -errors in the linking, it means that not all of the necessary routines -in `libgcc1.a' are available. - - You must provide the header file `float.h'. One way to do this is -to compile `enquire' and run it on your target machine. The job of -`enquire' is to run on the target machine and figure out by experiment -the nature of its floating point representation. `enquire' records its -findings in the header file `float.h'. If you can't produce this file -by running `enquire' on the target machine, then you will need to come -up with a suitable `float.h' in some other way (or else, avoid using it -in your programs). - - Do not try to build stage 2 for a cross-compiler. It doesn't work to -rebuild GNU CC as a cross-compiler using the cross-compiler, because -that would produce a program that runs on the target machine, not on the -host. For example, if you compile a 386-to-68030 cross-compiler with -itself, the result will not be right either for the 386 (because it was -compiled into 68030 code) or for the 68030 (because it was configured -for a 386 as the host). If you want to compile GNU CC into 68030 code, -whether you compile it on a 68030 or with a cross-compiler on a 386, you -must specify a 68030 as the host when you configure it. - - To install the cross-compiler, use `make install', as usual. - -Installing GNU CC on the Sun -============================ - - On Solaris, do not use the linker or other tools in `/usr/ucb' to -build GNU CC. Use `/usr/ccs/bin'. - - If the assembler reports `Error: misaligned data' when bootstrapping, -you are probably using an obsolete version of the GNU assembler. -Upgrade to the latest version of GNU `binutils', or use the Solaris -assembler. - - Make sure the environment variable `FLOAT_OPTION' is not set when -you compile `libgcc.a'. If this option were set to `f68881' when -`libgcc.a' is compiled, the resulting code would demand to be linked -with a special startup file and would not link properly without special -pains. - - There is a bug in `alloca' in certain versions of the Sun library. -To avoid this bug, install the binaries of GNU CC that were compiled by -GNU CC. They use `alloca' as a built-in function and never the one in -the library. - - Some versions of the Sun compiler crash when compiling GNU CC. The -problem is a segmentation fault in cpp. This problem seems to be due to -the bulk of data in the environment variables. You may be able to avoid -it by using the following command to compile GNU CC with Sun CC: - - make CC="TERMCAP=x OBJS=x LIBFUNCS=x STAGESTUFF=x cc" - - SunOS 4.1.3 and 4.1.3_U1 have bugs that can cause intermittent core -dumps when compiling GNU CC. A common symptom is an internal compiler -error which does not recur if you run it again. To fix the problem, -install Sun recommended patch 100726 (for SunOS 4.1.3) or 101508 (for -SunOS 4.1.3_U1), or upgrade to a later SunOS release. - -Installing GNU CC on VMS -======================== - - The VMS version of GNU CC is distributed in a backup saveset -containing both source code and precompiled binaries. - - To install the `gcc' command so you can use the compiler easily, in -the same manner as you use the VMS C compiler, you must install the VMS -CLD file for GNU CC as follows: - - 1. Define the VMS logical names `GNU_CC' and `GNU_CC_INCLUDE' to - point to the directories where the GNU CC executables - (`gcc-cpp.exe', `gcc-cc1.exe', etc.) and the C include files are - kept respectively. This should be done with the commands: - - $ assign /system /translation=concealed - - disk:[gcc.] gnu_cc - $ assign /system /translation=concealed - - disk:[gcc.include.] gnu_cc_include - - with the appropriate disk and directory names. These commands can - be placed in your system startup file so they will be executed - whenever the machine is rebooted. You may, if you choose, do this - via the `GCC_INSTALL.COM' script in the `[GCC]' directory. - - 2. Install the `GCC' command with the command line: - - $ set command /table=sys$common:[syslib]dcltables - - /output=sys$common:[syslib]dcltables gnu_cc:[000000]gcc - $ install replace sys$common:[syslib]dcltables - - 3. To install the help file, do the following: - - $ library/help sys$library:helplib.hlb gcc.hlp - - Now you can invoke the compiler with a command like `gcc /verbose - file.c', which is equivalent to the command `gcc -v -c file.c' in - Unix. - - If you wish to use GNU C++ you must first install GNU CC, and then -perform the following steps: - - 1. Define the VMS logical name `GNU_GXX_INCLUDE' to point to the - directory where the preprocessor will search for the C++ header - files. This can be done with the command: - - $ assign /system /translation=concealed - - disk:[gcc.gxx_include.] gnu_gxx_include - - with the appropriate disk and directory name. If you are going to - be using a C++ runtime library, this is where its install - procedure will install its header files. - - 2. Obtain the file `gcc-cc1plus.exe', and place this in the same - directory that `gcc-cc1.exe' is kept. - - The GNU C++ compiler can be invoked with a command like `gcc /plus - /verbose file.cc', which is equivalent to the command `g++ -v -c - file.cc' in Unix. - - We try to put corresponding binaries and sources on the VMS -distribution tape. But sometimes the binaries will be from an older -version than the sources, because we don't always have time to update -them. (Use the `/version' option to determine the version number of -the binaries and compare it with the source file `version.c' to tell -whether this is so.) In this case, you should use the binaries you get -to recompile the sources. If you must recompile, here is how: - - 1. Execute the command procedure `vmsconfig.com' to set up the files - `tm.h', `config.h', `aux-output.c', and `md.', and to create files - `tconfig.h' and `hconfig.h'. This procedure also creates several - linker option files used by `make-cc1.com' and a data file used by - `make-l2.com'. - - $ @vmsconfig.com - - 2. Setup the logical names and command tables as defined above. In - addition, define the VMS logical name `GNU_BISON' to point at the - to the directories where the Bison executable is kept. This - should be done with the command: - - $ assign /system /translation=concealed - - disk:[bison.] gnu_bison - - You may, if you choose, use the `INSTALL_BISON.COM' script in the - `[BISON]' directory. - - 3. Install the `BISON' command with the command line: - - $ set command /table=sys$common:[syslib]dcltables - - /output=sys$common:[syslib]dcltables - - gnu_bison:[000000]bison - $ install replace sys$common:[syslib]dcltables - - 4. Type `@make-gcc' to recompile everything (alternatively, submit - the file `make-gcc.com' to a batch queue). If you wish to build - the GNU C++ compiler as well as the GNU CC compiler, you must - first edit `make-gcc.com' and follow the instructions that appear - in the comments. - - 5. In order to use GCC, you need a library of functions which GCC - compiled code will call to perform certain tasks, and these - functions are defined in the file `libgcc2.c'. To compile this - you should use the command procedure `make-l2.com', which will - generate the library `libgcc2.olb'. `libgcc2.olb' should be built - using the compiler built from the same distribution that - `libgcc2.c' came from, and `make-gcc.com' will automatically do - all of this for you. - - To install the library, use the following commands: - - $ library gnu_cc:[000000]gcclib/delete=(new,eprintf) - $ library gnu_cc:[000000]gcclib/delete=L_* - $ library libgcc2/extract=*/output=libgcc2.obj - $ library gnu_cc:[000000]gcclib libgcc2.obj - - The first command simply removes old modules that will be replaced - with modules from `libgcc2' under different module names. The - modules `new' and `eprintf' may not actually be present in your - `gcclib.olb'--if the VMS librarian complains about those modules - not being present, simply ignore the message and continue on with - the next command. The second command removes the modules that - came from the previous version of the library `libgcc2.c'. - - Whenever you update the compiler on your system, you should also - update the library with the above procedure. - - 6. You may wish to build GCC in such a way that no files are written - to the directory where the source files reside. An example would - be the when the source files are on a read-only disk. In these - cases, execute the following DCL commands (substituting your - actual path names): - - $ assign dua0:[gcc.build_dir.]/translation=concealed, - - dua1:[gcc.source_dir.]/translation=concealed gcc_build - $ set default gcc_build:[000000] - - where the directory `dua1:[gcc.source_dir]' contains the source - code, and the directory `dua0:[gcc.build_dir]' is meant to contain - all of the generated object files and executables. Once you have - done this, you can proceed building GCC as described above. (Keep - in mind that `gcc_build' is a rooted logical name, and thus the - device names in each element of the search list must be an actual - physical device name rather than another rooted logical name). - - 7. *If you are building GNU CC with a previous version of GNU CC, you - also should check to see that you have the newest version of the - assembler*. In particular, GNU CC version 2 treats global constant - variables slightly differently from GNU CC version 1, and GAS - version 1.38.1 does not have the patches required to work with GCC - version 2. If you use GAS 1.38.1, then `extern const' variables - will not have the read-only bit set, and the linker will generate - warning messages about mismatched psect attributes for these - variables. These warning messages are merely a nuisance, and can - safely be ignored. - - If you are compiling with a version of GNU CC older than 1.33, - specify `/DEFINE=("inline=")' as an option in all the - compilations. This requires editing all the `gcc' commands in - `make-cc1.com'. (The older versions had problems supporting - `inline'.) Once you have a working 1.33 or newer GNU CC, you can - change this file back. - - 8. If you want to build GNU CC with the VAX C compiler, you will need - to make minor changes in `make-cccp.com' and `make-cc1.com' to - choose alternate definitions of `CC', `CFLAGS', and `LIBS'. See - comments in those files. However, you must also have a working - version of the GNU assembler (GNU as, aka GAS) as it is used as - the back-end for GNU CC to produce binary object modules and is - not included in the GNU CC sources. GAS is also needed to compile - `libgcc2' in order to build `gcclib' (see above); `make-l2.com' - expects to be able to find it operational in - `gnu_cc:[000000]gnu-as.exe'. - - To use GNU CC on VMS, you need the VMS driver programs `gcc.exe', - `gcc.com', and `gcc.cld'. They are distributed with the VMS - binaries (`gcc-vms') rather than the GNU CC sources. GAS is also - included in `gcc-vms', as is Bison. - - Once you have successfully built GNU CC with VAX C, you should use - the resulting compiler to rebuild itself. Before doing this, be - sure to restore the `CC', `CFLAGS', and `LIBS' definitions in - `make-cccp.com' and `make-cc1.com'. The second generation - compiler will be able to take advantage of many optimizations that - must be suppressed when building with other compilers. - - Under previous versions of GNU CC, the generated code would -occasionally give strange results when linked with the sharable -`VAXCRTL' library. Now this should work. - - Even with this version, however, GNU CC itself should not be linked -with the sharable `VAXCRTL'. The version of `qsort' in `VAXCRTL' has a -bug (known to be present in VMS versions V4.6 through V5.5) which -causes the compiler to fail. - - The executables are generated by `make-cc1.com' and `make-cccp.com' -use the object library version of `VAXCRTL' in order to make use of the -`qsort' routine in `gcclib.olb'. If you wish to link the compiler -executables with the shareable image version of `VAXCRTL', you should -edit the file `tm.h' (created by `vmsconfig.com') to define the macro -`QSORT_WORKAROUND'. - - `QSORT_WORKAROUND' is always defined when GNU CC is compiled with -VAX C, to avoid a problem in case `gcclib.olb' is not yet available. - -`collect2' -========== - - Many target systems do not have support in the assembler and linker -for "constructors"--initialization functions to be called before the -official "start" of `main'. On such systems, GNU CC uses a utility -called `collect2' to arrange to call these functions at start time. - - The program `collect2' works by linking the program once and looking -through the linker output file for symbols with particular names -indicating they are constructor functions. If it finds any, it creates -a new temporary `.c' file containing a table of them, compiles it, and -links the program a second time including that file. - - The actual calls to the constructors are carried out by a subroutine -called `__main', which is called (automatically) at the beginning of -the body of `main' (provided `main' was compiled with GNU CC). Calling -`__main' is necessary, even when compiling C code, to allow linking C -and C++ object code together. (If you use `-nostdlib', you get an -unresolved reference to `__main', since it's defined in the standard -GCC library. Include `-lgcc' at the end of your compiler command line -to resolve this reference.) - - The program `collect2' is installed as `ld' in the directory where -the passes of the compiler are installed. When `collect2' needs to -find the *real* `ld', it tries the following file names: - - * `real-ld' in the directories listed in the compiler's search - directories. - - * `real-ld' in the directories listed in the environment variable - `PATH'. - - * The file specified in the `REAL_LD_FILE_NAME' configuration macro, - if specified. - - * `ld' in the compiler's search directories, except that `collect2' - will not execute itself recursively. - - * `ld' in `PATH'. - - "The compiler's search directories" means all the directories where -`gcc' searches for passes of the compiler. This includes directories -that you specify with `-B'. - - Cross-compilers search a little differently: - - * `real-ld' in the compiler's search directories. - - * `TARGET-real-ld' in `PATH'. - - * The file specified in the `REAL_LD_FILE_NAME' configuration macro, - if specified. - - * `ld' in the compiler's search directories. - - * `TARGET-ld' in `PATH'. - - `collect2' explicitly avoids running `ld' using the file name under -which `collect2' itself was invoked. In fact, it remembers up a list -of such names--in case one copy of `collect2' finds another copy (or -version) of `collect2' installed as `ld' in a second place in the -search path. - - `collect2' searches for the utilities `nm' and `strip' using the -same algorithm as above for `ld'. - -Standard Header File Directories -================================ - - `GCC_INCLUDE_DIR' means the same thing for native and cross. It is -where GNU CC stores its private include files, and also where GNU CC -stores the fixed include files. A cross compiled GNU CC runs -`fixincludes' on the header files in `$(tooldir)/include'. (If the -cross compilation header files need to be fixed, they must be installed -before GNU CC is built. If the cross compilation header files are -already suitable for ANSI C and GNU CC, nothing special need be done). - - `GPLUS_INCLUDE_DIR' means the same thing for native and cross. It -is where `g++' looks first for header files. The C++ library installs -only target independent header files in that directory. - - `LOCAL_INCLUDE_DIR' is used only for a native compiler. It is -normally `/usr/local/include'. GNU CC searches this directory so that -users can install header files in `/usr/local/include'. - - `CROSS_INCLUDE_DIR' is used only for a cross compiler. GNU CC -doesn't install anything there. - - `TOOL_INCLUDE_DIR' is used for both native and cross compilers. It -is the place for other packages to install header files that GNU CC will -use. For a cross-compiler, this is the equivalent of `/usr/include'. -When you build a cross-compiler, `fixincludes' processes any header -files in this directory. - |