From: hlu@yoda.eecs.wsu.edu (Hongjiu Lu -- Graduate Student)
Subject: gcc 2.1 beta is available
Date: Mon, 6 Apr 92 05:17:24 GMT

Hi,

I am putting gcc 2.1 beta on headrest.woz.colorado.edu under
/pub/linux/gcc and banjo.concert.net under /pub/Linux/GCC. They should
be there in a few hours. Drew, could you please move 2.1lib.tar.Z,
2.1misc.tar.Z, libc-2.1.tar.Z and 2.1shared-A.tar.Z to /pub/linux/gcc?

Although gcc 2.1 is beta, it is quite stable. During the alpha testing
stage, we fixed lots of bugs. It should run well for most of you.
But I cannot guarantee it has no bugs. If you find any bug, please
send it to me at "hlu@eecs.wsu.edu" as well as the channel "GCC" on the
Linux mailing list.

THANKS TO ALL THE ALPHA TESTERS. You did a great job and help me a lot,
Without you guys, I cannot image how I could find all those bugs.

I am enclosing the FAQ for gcc 2.1. PLEASE DO READ IT. It may have the
answers for your questions. You must follow the instructions in the FAQ.

I also put a patch, 2.1kernel.tar.Z, for kernel to compile with
gcc 2.1. You have to apply Linus' second patch first. And another
package, 2.1ps.tar.Z, for ps is modified by me to gcc 2.1.

BTW, make sure tar and compress you have are working right. Some
problems for the previous gcc 2.1 seemed to be caused by bad
tar/compress.

H.J.
-- 
School of EECS                          Internet: hlu@eecs.wsu.edu
Washington State University             BITNET:   60935893@WSUVM1.BITNET
Pullman, WA 99164                       Phone:    (509) 335-6470 (O)
USA                                               (509) 334-6315 (H)
=========FAQ=======
QUESTION: Where is the gcc 2.1 beta?

ANSWER: It's on banjo.concert.net under /pub/Linux/GCC and
headrest.woz.colorado.edu under /pub/linux/?. You may find it on the
other sites. But I am not sure if they are up to date. There are two
files, 2.1lib.tar.Z and 2.1misc.tar.Z. Another file, binutils.tar.Z,
is not the part of gcc 2.1, but used by gcc 2.1. It contains all the
binary utilities you need to run gcc 2.1.

There may be also some files called 2.1shared-x.tar.Z. They have some
programs compiled in .a format.  Please take a look at

        /usr/shared/obj/README*

after unpack 2.1shared-A.tar.Z under /usr.

QUESTION: What are the contents of them?

ANSWER: 2.1lib.tar.Z contains cc1, cc1plus and cpp. 2.1misc.tar.Z
contains gcc 2.1 drivers, header files, libraries, manual pages and
installation instructions.

QUESTION: How do I install it?

ANSWER: First of all, backup the old compiler if you have one and
remove it from your hard drive. YOU MUST BE ABSOLUTELY SURE THERE IS NO
ANY OTHER C COMPILER ON YOUR SYSTEM INSTALLED. I heard too much stories
about it. By compiler, I mean the executables, libraries (crt0.o) and
header files. This gcc 2.1 will only work with the kernel above 0.95.
You may have to have 2 MB ram to run it and have some swap space
(> 4MB) since cc1 and cc1plus are about 1 MB. First do

        cd /usr
        tar xvpfvz xxxx/2.1misc.tar.Z

Then read FAQ in /usr/install/gcc2. After

        cd /usr
        tar xvpfvz xxxx/2.1lib.tar.Z

run the shell script "inst2.x". If you need binutils.tar.Z, do a

        cd /usr
        tar xvpfvz xxxx/binutils.tar.Z

Please check the file permission for all files you have unpacked. Maybe
I should write a shell script to do that.

QUESTION: How do I install a new release of gcc 2.1?

ANSWER: Depends on the nature of the new release, if the gcc itself is
changed, you have to install everything in 2.1lib.tar.Z and
2.1misc.tar.Z come with the new release. If just the libraries are
changed, you can just pick 2.1update.tar.Z and unpack it in /usr. Then
do

        cd /usr
        tar xvpfvz xxxx/2.1update.tar.Z
        cd /usr/install/gcc2
        update2.x

In both cases, it is recommended to relink all the shared executables.
If the gcc itself is changed, a new set of .a's may be released too.

QUESTION: What are the main differences with the old release?

ANSWER: Here are the features

1. gcc and g++ are in one.

2. ANSI and BSD 4.4 compatible stdio.

3. iostream for g++. It has

* Full implementation of ANSI C stdio.
* Full implementation of the streambuf layer of AT&T's
  iostream library for C++.
* Full compatibility between stdio and streambufs.

and libg++.a 2.0.

4. Libc.a is almost new. Most of glibc.a 1.02 (nonnetwork stuffs) are 
here.

        a. ctype
        b. grp
        c. locale
        d. malloc (libmcheck.a)
        e. posix
        f. pwd
        g. stdlib
        h. string

Some other functions are added.

        b. cvt
        b. drand48
        c. getlogin (poeigl-1.2)
        d. getpass (poeigl-1.2)
        e. mkfifo (is that supported in kernel?)
        f. regex (GNU)
        g. curses (BSD)
        h. swab
        i. time (BSD, untested)
        j. ufc
        k. utmp stuffs (poeigl-1.2)

These old functions are not changed very much.

        a. soft math (fmod is added)
        b. math (some are new)
        c. termcap
        d. unistd

5. The shared libraries are here. To link with the static libraries,
add the -static flag to gcc.

QUESTION: Is stdio ANSI compatible?

ANSWER: Yes, please test it.

QUESTION: Is g++ in 2.1?

ANSWER: Yes. Use g++ to compile the C++ code. Libg++.a 2.0 is here.
One thing missing is curses. I will take a look if I have time. And
fix.o failed to compile. 

QUESTION: What options can I use for gcc?

ANSWER: Read manual page, gcc.ps or gcc.man. -O3, -O4, -O5 or even
higher should work with 2.1. -O3 is said to be the best. Don't ask me
why. Try it yourself. Also -static tells gcc to use the static
libraries. The default is the shared libraries.

QUESTION: Where is the source code of the new libc.a?

ANSWER: The same place you find this file. It is called libc-2.1.tar.Z.

QUESTION: How can I use gcc 2.1 to compile the kernel?

ANSWER: The kernel has to be compiled with the header files come with
it. I will ask Linus to make it easy for you. Please keep in mind,
kernel uses the different header files. Do not include any header files
from gcc 2.1. It can be done by using

        cc -nostdinc -I....

QUESTION: Why does gcc say "foo.h not found" when compiling the
kernel and I am following the instruction above?

ANSWER: Not every source code under ./linux is kernel code. By kernel,
I mean those linked together and written to boot image. If there is a
file which is compiled to run under Linux, that is an application and
you should follow the instruction below.

QUESTION: How can I use gcc 2.1 to compile applications?

ANSWER: Any application has to be compiled with the header files come
with gcc 2.1. If you need some header files from the kernel sources,
do a

        #include "/foo/src/linux/include/linux/bar.h"

It is strongly recommended to prototype all the library functions by
including the appropriate head files. At least, it will save you
trouble of malloc (0).

QUESTION: Why does a program compiled ok by gcc 2.1 and the new binary
utilities get an error from kernel saying something about binary file
format?

ANSWER: Linux has changed a.out.h. The new a.out.h is compatible with
the applications compiled with the old a.out.h. But if an application is
compiled with the new a.out.h, you have to use the new a.out.h. If you
get this error message, you should get the new a.out.h and old ld from
where you get this and use them to recompile the kernel.

QUESTION: Why does g++ complain?

ANSWER: You need "expr". It is in GNU shell utilities 1.6.

From: hlu@luke.eecs.wsu.edu (Hongjiu Lu -- Graduate Student)
Crossposted-To: alt.os.linux
Subject: IMPORTANT: gcc 2.1, libc.a 2.1a and Linux
Date: 6 Apr 92 21:15:00 GMT

Hi,

I heard there were some problems with binaries linked with my new ld.
That is caused by the new a.out.h introduced with Linus's second patch.
The new a.out.h is compatible with the old one, But not vice versa.

My new ld (binutils.tar.Z) uses the new a.out.h. The binaries
linked by it can only run under the kernel with Linus's second patch,
which has to be built by the old ld.

Any programs using the old a.out.h, e.g., gdb, will not recognize the
binaries linked by the new ld. You can either use the old ld or use
the new version compiled with the new a.out.h.

From Linus's second patch, we are moving to VFS. As a result, there
will be some changes in libc.a. That means next release of gcc 2.x and
libs will not run under the kernel below Linus's second patch to 0.95a.
I strongly recommend you move to 0.95a with Linus's second patch if you
haven't done so.

H.J.

From: hlu@luke.eecs.wsu.edu (Hongjiu Lu -- Graduate Student)
Subject: FAQ: gcc 2.1 and kernel
Date: Tue, 7 Apr 92 20:14:20 GMT

Hi,

There seems some confusion about how to use gcc 2.1 to compile 0.95a
kernel with Linus's second patch. That may be my fault. Ok. Here is the
new FAQ for gcc 2.1. Please save it. THE ONE ON FTP SITES IS NOT SO
CLEAR AS THIS ONE.


H.J.
==========FAQ FOE GCC 2.1====
QUESTION: Where is the gcc 2.1 beta?

ANSWER: It's on banjo.concert.net under /pub/Linux/GCC and
headrest.woz.colorado.edu under /pub/linux/gcc. You may find it on the
other sites. But I am not sure if they are up to date. There are two
files, 2.1lib.tar.Z and 2.1misc.tar.Z. Another file, binutils.tar.Z,
is not the part of gcc 2.1, but used by gcc 2.1. It contains all the
binary utilities you need to run gcc 2.1.

There may be also some files called 2.1shared-x.tar.Z. They have some
programs compiled in .a format. It has almost everything you want for
Linux. Please take a look at

        /usr/shared/obj/README*

after unpack 2.1shared-A.tar.Z under /usr.

QUESTION: What are the contents of them?

ANSWER: 2.1lib.tar.Z contains cc1, cc1plus and cpp. 2.1misc.tar.Z
contains gcc 2.1 drivers, header files, libraries, manual pages and
installation instructions.

QUESTION: How do I install it?

ANSWER: First of all, backup the old compiler if you have one and
remove it from your hard drive. YOU MUST BE ABSOLUTELY SURE THERE IS NO
ANY OTHER C COMPILER ON YOUR SYSTEM INSTALLED. I have heard too many
stories about it. By compiler, I mean the executables, libraries 
(crt0.o) and header files. This gcc 2.1 will only work with the kernel
above 0.95. You may have to have 2 MB ram to run it and have some swap
space (> 4MB) since cc1 and cc1plus are about 1 MB. First do

        cd /usr
        tar xvpfvz xxxx/2.1misc.tar.Z

Then read FAQ in /usr/install/gcc2. After

        cd /usr
        tar xvpfvz xxxx/2.1lib.tar.Z

run the shell script "inst2.x". If you need binutils.tar.Z, do a

        cd /usr
        tar xvpfvz xxxx/binutils.tar.Z

Please check the file permission for all files you have unpacked. Maybe
I should write a shell script to do that.

QUESTION: How do I install a new release of gcc 2.1?

ANSWER: Depends on the nature of the new release, if the gcc itself is
changed, you have to install everything in 2.1lib.tar.Z and
2.1misc.tar.Z come with the new release. If just the libraries are
changed, you can just pick 2.1update.tar.Z and unpack it in /usr. Then
do

        cd /usr
        tar xvpfvz xxxx/2.1update.tar.Z
        cd /usr/install/gcc2
        update2.x

In both cases, it is recommended to relink all the shared executables.
If the gcc itself is changed, a new set of .a's may be released too.

QUESTION: What are the main differences with the old release?

ANSWER: Here are the features

1. gcc and g++ are in one.

2. ANSI and BSD 4.4 compatible stdio.

3. iostream for g++. It has

* Full implementation of ANSI C stdio.
* Full implementation of the streambuf layer of AT&T's
  iostream library for C++.
* Full compatibility between stdio and streambufs.

and libg++.a 2.0.

4. Libc.a is almost new. Most of glibc.a 1.02 (nonnetwork stuffs) are 
here.

        a. ctype
        b. grp
        c. locale
        d. malloc (libmcheck.a)
        e. posix
        f. pwd
        g. stdlib
        h. string

Some other functions are added.

        b. cvt
        b. drand48
        c. getlogin (poeigl-1.2)
        d. getpass (poeigl-1.2)
        e. mkfifo (is that supported in kernel?)
        f. regex (GNU)
        g. curses (BSD)
        h. swab
        i. time (BSD, untested)
        j. ufc
        k. utmp stuffs (poeigl-1.2)

These old functions are not changed very much.

        a. soft math (fmod is added)
        b. math (some are new)
        c. termcap
        d. unistd

5. The shared libraries are here. To link with the static libraries,
add the -static flag to gcc.

QUESTION: Is stdio ANSI compatible?

ANSWER: Yes, please test it.

QUESTION: Is g++ in 2.1?

ANSWER: Yes. Use g++ to compile the C++ code. Libg++.a 2.0 is here.
One thing missing is curses. I will take a look if I have time. And
fix.o failed to compile. 

QUESTION: What options can I use for gcc?

ANSWER: Read manual page, gcc.ps or gcc.man. -O3, -O4, -O5 or even
higher should work with 2.1. -O3 is said to be the best. Don't ask me
why. Try it yourself. I was told you could manipulate those optimation
flags to get the best performance. Also -static tells gcc to use the
static libraries. The default is the shared libraries.

QUESTION: Where is the source code of the new libc.a?

ANSWER: The same place you find this file. It is called libc-2.1.tar.Z.

QUESTION: How can I use gcc 2.1 to compile the kernel?

ANSWER: The kernel has to be compiled with the header files come with
it. Please use my 2.1kernel.tar.Z and 2.1ps.tar.Z, which can be found
where you get gcc 2.1. The kernel uses its own header files. Do not
include any header files from gcc 2.1 while compiling the kernel.

QUESTION: Why does gcc say "foo.h not found" when compiling the
kernel and I am following the instructions above?

ANSWER: Not every source code under ./linux is kernel code. By kernel,
I mean those linked together and written to boot image. If there is a
file which is compiled to run under Linux, that is an application and
you should follow the instruction below. ./tools/build is one of them.
It should be compiled with gcc 2.1 header files. Please read my
2.1kernel.tar.Z.

QUESTION: How can I use gcc 2.1 to compile applications?

ANSWER: Any application has to be compiled with the header files come
with gcc 2.1. If you need some header files from the kernel sources,
do a

        #include "/foo/src/linux/include/linux/bar.h"

It is strongly recommended to prototype all the library functions by
including the appropriate head files. At least, it will save you
trouble of malloc (0) (read stdlib.h).

QUESTION: Why does a program compiled ok by gcc 2.1 and the new binary
utilities get an error from kernel saying something about binary file
format or some weird things?

ANSWER: Linux has changed a.out.h. The new a.out.h in Linus' second
patch is compatible with the applications compiled with the old
a.out.h. But if an application is compiled with the new ld
(binutils.tar.Z) which uses the new a.out.h, you have to use the
kernel compiled with the new a.out.h. You have to recompile the kernel
with Linus' second patch applied and old ld. And then use new ld to
link the programs.

QUESTION: Why does g++ complain even die?

ANSWER: You need "expr", which is in GNU shell utilities 1.6, echo (?)
and sed.

From: hlu@phys1.physics.wsu.edu (Hongjiu Lu)
Subject: New binutils.tar.Z
Date: 7 May 92 00:19:54 GMT

I just put a new binutils.tar.Z on banjo.concert.net under /pub/Linux/GCC.
It just contains a bug fix and now it can handle g++ 2.1 symbols.

H.J.

From: hlu@yoda.eecs.wsu.edu (H.J. Lu)
Subject: gcc 2.11b is released
Date: Mon, 18 May 92 03:08:04 GMT


A new release of gcc 2.1, gcc 2.11b for linux, is on 
banjo.concert.net and headrest.woz.colorado.edu. Along with 2.11b,
there is a binutils.tar.Z, which is used to replace the old buggy one.
Please get it too.

This release just contains some minor fixes for 2.11b.

1. sleep (0) is fixed.
2. All binaries are recompiled with new gas.
3. X11R5 is not the part of gcc anymore.

H.J.

From: hlu@yoda.eecs.wsu.edu (H.J. Lu)
Subject: This is for Orest.
Date: Mon, 18 May 92 03:26:47 GMT

I am trying to send you shlib.tar.Z. But my mail was bounced back
again. Now I put shlib.tar.Z on banjo under /pub/Linux/Gcc.

Hi,

I have released 2.11b, which fixes the bug in gcc 2.1. You may
want to recompile all the X11R5. Please use this to build the shared
images for X11R5. You can see there are stubs libs in shlib/lib, which
are almost the same as the ones in /usr/lib/shared, but there are no
dummies for loading the shared images. Those stubs libs are only for
building the shared libs which need them.

Please get 2.11b and binutils.tar.Z. They are rebuilt due to the bug
in gcc 2.1.

H.J.

From: hlu@yoda.eecs.wsu.edu (H.J. Lu)
Subject: gcc 2.11c is released with source code
Date: 20 May 92 05:36:12 GMT

Hi,

Here is the relaese note for gcc 2.11c.

H.J.
=========
This release just contains some minor improvements over 2.11b. It is on
banjo.concert.net under /pub/Linux/GCC.

ldd is supported. The source code of the libraries is in
libc-2.11c.tar.Z. There are two files, gcc-2.1.tar.Z, for compiler,
including some tips for cross-compiling, shlib-2.11c.tar.Z, for
building the shared libs.

H.J. Lu

hlu@eecs.wsu.edu
05/19/92

From: hlu@yoda.eecs.wsu.edu (H.J. Lu)
Subject: README: gcc 2.2.2 is out
Date: 28 Jun 92 02:08:00 GMT

NOTE: You should only use gcc 2.2.2 for Linux. You should only use the
binaries compiled by it. Anything else may contain bugs due to buggy
gcc from the FSF and buggy libc.a.

The official gcc 2.2.2 is out on banjo.concert.net under pub/Linux/GCC.
Please READ all the docs when you install it. Missing one senetnce may
mean a failure.

The official gcc ftp site is banjo.concert.net. I can guarantee the
files are up to date. But I have no control over any other sites. If you
have any doubt, PLEASE USE banjo.concert.net.

If you are mirroring banjo for gcc, please make sure your directory is
exactly the same as pub/Linux/GCC on banjo, except for
pub/Linux/GCC/private, which is for gcc testing. Otherwise, please
don't mirror it to avoid any confusions.

I also uploaded zsh.tar.Z together with gcc 2.2.2. You have to use gcc
2.2.2 to link zsh.a to make zsh.


H.J.
-- 
gcc/libc maintainer for Linux.
=============release.2.2.2====
This is a testing release until it is announced on comp.os.linux.

Please read all the previous release notes and docs. This release note
only covers the new stuffs.

This is gcc 2.2.2 for Linux. It is on banjo.concert.net under
/pub/Linux/GCC. Gcc 2.3 will support Linux, according to RMS. The FSF
has all the files Linux needs.

Please get the new binutils.tar.Z, which fixed some bugs in as and a
gprof with some patches from Rick Sladkey at jrs@world.std.com, if
you haven't got it.

I added some jumptable stubs to gcc. But I don't have the time to
implement it. In the future, you can use jump table with -jump in
CFLAGS.

Libg++.a is 2.2 beta.

This gcc will produce binaries only run safely under 0.96a patch level
4 or above.

The list of known bugs.

1. one 'cmp' in dbz test fails. Per is not planning on doing anything
   about it. your contribution is welcome.

The following bugs in libc.a are fixed.

1. hard and soft math libs are fixed. some of functions are totally
   rewritten.
2. acosh, asinh and atanh are added to libsoft.a and math.h.
3. open a file for read and write, then do fseek followed by fwrite
   works now.
4. now random () and srandom () are renamed to __random () and
   __srandom (), respectively.
5. the header files taken from glibc.a are fixed.
6. the sys call mount now takes 4 args.
7. getpagesize and getdtablesize work now.
8. netdb.h, resolv.h, sys/uio.h, netinet.h, arpa/inet.h and
   arpa/nameser.h are changed.
9. Some function declarations are added to sys/socket.h in
   0.96bp2inc.tar.Z.

The following functions are added to libc.a.

1. profil.
2. libg.a is there.
3. getdtablesize.
4. lots of stuffs added to errno.h and string/errlist.c.
5. some changes in string/siglist.c.
6. dtoa.
7. there is a new strtod, please check it out.
8. drem.
9. the inet library functions are in libinet.a. They are untested. Once
   they are tested ok, they will be moved to libc.a. All the inet
   library functions are there, except for res_xxxx, rcmd, rexec and
   ruserpass, which require more kernel support, like F_SETOWN, FASYNC,
   and a few network system calls.

   There should also be a set of files in /etc for inet functions. I
   hope Ross will provide them.

In this release, there is a libc_p.a compiled with "-pg" for profiling.

You should use "-g" for debugging and "-pg/-p" for profiling in CFLAGS
when you compile the source code.

There must be a few other bugs. Please let me know if you find any.

File list:

1. 2.2.2db.tar.Z (cpp, libg.a and libc_p.a)
2. 2.2.2lib.tar.Z (cc1, cc1plus)
3. 2.2.2misc.tar.Z (header files, drivers, libs, doc, ....)
4. shlib-2.2.2.tar.Z (making the shared libs for gcc 2.2.2)
5. libc-2.2.2.tar.Z (source code for the libs)
6. gcc-2.2.2.tar.Z (patches for compiling gcc 2.2.2)
7. 0.96bp2inc.tar.Z (the kernel header files for 0.96b patch level 2)

H.J.
hlu@eecs.wsu.edu
06/27/92
=============release.2.2====
Please read all the previous release notes and docs. This release note
only covers the new stuffs.

This is gcc 2.2 for Linux, which is equivalent to gcc 2.2.1 from
the FSF. It is on banjo.concert.net under /pub/Linux/GCC. Gcc 2.3 will
support Linux, according to RMS. The FSF has all the files Linux needs.

Please get the new binutils.tar.Z, which fixed some bugs in as.

>From this release, gcc will use the shared lib. That means you have
to keep the shared images used by all the compilers you have. I think
there is no disk waste here since the benefit of the shared gcc more
than offsets the shared libs. Now both 2.2misc.tar.Z and
2.2lib.tar.Z can fit into one 5.25 floppy.

Libg++.a is 2.1. You can build it yourself. The source code is
available on the GNU ftp site. You may have to hack a little to compile
it. Please do not compile iostream and get rid of
libg++/src/regex.[cc|h]. Make sure ./libiberty only makes those
functions Linux doesn't have. Please send me a note if you are
interested.

The following bugs in libc.a are fixed.

1. index.
2. sigxxxx return values should be right now.
3. execxxx are taken from glibc.a 1.03. Please check it out.
4. malloc in stdlib.h and malloc.h, when they are included together,
   they may cause trouble. Can I include malloc.h in stdlib.h and fix
   malloc in malloc.h?
5. types used in sigsetmask and siggetmask are now sigset_t.
6. signal.h is changed.
7. hypot added to math.h
8. __cpluseplus in setjmp.h
9. prototype of gdbm_open in gdbm.h
10. Per is trying to fix fseek/fwrite with file opened for read and
    write. 
11. dirent.[ch] are fixed such that static memory no longer is used in
    readdir ().
12. sys/dir.h sys/dirent.h are modified such that there will be a
    warning when both of them are included. They are also compatible
    now.
13. __cpluscplus in fnmath.h
14. gets () will only give a warning during linking.
15. wait3 ().
16. <stdio.h> is fixed. fputc, fgets and gets are no longer macros.
17. <sys/user.h> is added in 0.96ap2inc.tar.Z.
18. The return value of clock ticks of the old sysconf () was wrong. It
    returned 60 instead of 100.
19. The domain errors in the math libraries are improved.
20. bsearch and qsort are fixed for zero element.

The following functions are added to libc.a.

1. accept
2. bind
3. bstring
4. connect
5. ftime
6. fchmod
7. fchown
8. ftruncate
9. getpagesize
10. getpeername
11. getsockname
12. getwd
13. ioperm
14. itimer.
15. listen
16. mmap
17. mntent.
18. ntohs/htons
19. ntohl/htonl
20. psignal
21. ptrace
22. setenv/unsetenv
23. sigsetmask
24. siggetmask
25. socket
26. socketpair
27. statfs () and fstatfs ().
28. tell (bsd)
29. truncate
30. usleep
31. vfork
32. wait3() and wait4 ().

Gdbm 1.5 is here for X11R5.

popen now is based on iostream.

I also changed the structure of header files. To install the gcc 2.2,
please do this first

tar cfz inc.bak.tar.Z /usr/include /usr/g++-include
/bin/rm -rf /usr/include /usr/g++-include

A new structure of gcc is introduced here. All the static libs are in
/usr/lib/gcc-lib/i386-linux/2.xxx and all the shared libs are in
/usr/lib/gcc-lib/i386-linux/2.xxx/shared. By default, gcc will search
/usr/lib/gcc-lib/i386-linux/2.xxx/shared first, then the static libs.
You can turn off the shared libs with "-static".

BTW, you can still use the old compiler, xxx, with

gcc -V xxx

which will use the corresponding shared/static libs for that version.
That will make life for X11 easier.

The default should be the same as gcc -V 2.2

If you want to keep gcc 2.11c, please read FAQ. For the older version,
2.12d or above, it is done automatically.

There is a new file for making the shared images for gcc 2.2,
shlib-2.2.tar.Z. Please use that to build the shared libs. In this
file, a new naming scheme is used. The shared images will be called
"libc.2.2", which I think is better than "libc_v_2_2". BTW, you need
awk for inst2.x now.

There must be a few bugs. Please let me know if you find any.

File list:

1. 2.2lib.tar.Z (cpp, cc1, cc1plus)
2. 2.2misc.tar.Z (header files, drivers, libs, doc, ....)
3. shlib-2.2.tar.Z (making the shared libs for gcc 2.2)
4. libc-2.2.tar.Z (source code for the libs)
6. gcc-2.2.1.tar.Z (patches for compiling gcc 2.2.1)
7. 0.96ap2inc.tar.Z (the kernel header files for 0.96a patch level 2
   with <sys/user.h>)
8. 0.96ainc.tar.Z (the kernel header files for 0.96a)

H.J.
hlu@eecs.wsu.edu
06/16/92

From: hlu@yoda.eecs.wsu.edu (H.J. Lu)
Subject: The official gcc FAQ
Date: 28 Jun 92 02:12:23 GMT

This is the offical gcc FAQ. Don't believe anything else.

H.J.
==========
gcc/libc maintainer for Linux
===========FAQ=====
QUESTION: What compiler should I use for Linux?

ANSWER: You should only use the same version on banjo.concert.net
under /pub/Linux/GCC. If you want to use the testing release, first
join the GCC channel on the Linux mailing list, and then send a note to
hlu@eecs.wsu.edu. Don't use gcc older than the one on
banjo.concert.net.

QUESTION: Where is the latest official gcc 2.xx for Linux?

ANSWER: It's on banjo.concert.net under /pub/Linux/GCC, maybe also
fgb1.fgb.mw.tu-muenchen.de under pub/linux/GCC. You may find
it on the other sites. But I am not sure if they are up to date. There
are 3 files, 2.xxdb.tar.Z, 2.xxlib.tar.Z and 2.xxmisc.tar.Z. Another
file, binutils.tar.Z, is not the part of gcc 2.xx, but used by gcc
2.xx. It contains all the binary utilities you need to run gcc 2.xx.
You should read the release note to see if you should get the new
binutils.tar.Z.

QUESTION: What are the contents of them?

ANSWER: 2.xxdb.tar.Z contains cpp, libg.a and libc_p.a. 2.xxlib.tar.Z
contains cc1 and cc1plus. 2.xxmisc.tar.Z contains gcc 2.xx drivers,
header files, libraries, manual pages and installation instructions.

Another file, XXXXinc.tar.Z, where XXXX is the current version number
of Linux kernel, has all the header files to replace the header files 
from kernel. YOU MUST INSTALL IT. Please read README for details.

QUESTION: Is it possible to have gcc 2.12d or above installed and also 
compile X11 v1.0 stuff ?? (i.e. have gcc2.11c co-existing).

ANSWER: If your X11 requires gcc 2.11c, please read the following. If
your X11 requires gcc 2.2.2, just skip the following. You don't have to
do anything.

First, erase any old compilers you already have installed.
Basically, remove these directories:

/usr/{include,g++-include,install,shared}
/usr/lib/{gcc-lib,static,shared}.

Now unpack and re-install 2.11c. Don't forget to run inst2.x. If you
want to use the shared X libs compiled with gcc 2.11c, INSTALL IT NOW.

The directory structure of gcc is re-arranged starting from 2.12d (for
the better) so we need move things around in 2.11c.

In /usr/lib/gcc-lib/i386-linux/2.11c, rename all of the Lib*.a files to
lib*.a.  Now create a new subdirectory called "shared" and copy all of
the files in /usr/lib/shared, including those X11 shared libs compile
with gcc 2.11c, to it.  You can now remove /usr/{shared,install}
and /usr/lib/{static,shared}.

Make a new directory,

mkdir /usr/lib/gcc-lib/i386-linux/2.11c/include

Then move assert.h, float.h, limits.h, proto.h, stddef.h, stdarg.h,
varargs.h and va-*.h (if you have them.)  to

/usr/lib/gcc-lib/i386-linux/2.11c/include

Those files are version-dependent. You have to put them there. Now
remove /usr/{include,g++-include}.

OK, now unpack and install the new version of gcc, 2.12d or above.
Also, reinstall /usr/include/X11 from X11R5 v1.0. Again, don't forget
to run inst2.x and fixfiles.

We're almost there now, we just need to tell gcc how to use the 2.11c
shared libs.  Run 'gcc -V 2.11c -dumpspecs' and re-direct the output to
/usr/lib/gcc-lib/i386-linux/2.11c/specs. Now look at .../2.11c/specs.
You may need to edit it and change version number to 2.11c.

That's it.  You should now be able to use 2.11c by specifying -V 2.11c.
If you don't specify either, you should get the new version by default.

QUESTION: How do I install it?

ANSWER: Do

cd /usr
tar xofz 2.xxmisc.tar.Z

and then read README in /usr/install/gcc2.

QUESTION: What are the main differences with the old release?

ANSWER: Do

cd /usr
tar xofz 2.xxmisc.tar.Z

and then read README in /usr/install/gcc2.

QUESTION: Is stdio ANSI compatible?

ANSWER: Yes, please test it.

QUESTION: Is g++ in 2.xx?

ANSWER: Yes.

QUESTION: What options can I use for gcc?

ANSWER: Read manual page, gcc.ps or gcc.man. -O3, -O4, -O5 or even
higher should work with 2.xx. -O3 is said to be the best. Don't ask me
why. Try it yourself. I was told you could manipulate those
optimization flags to get the best performance. Also -static tells gcc
to use the static libraries. The default is the shared libraries.

QUESTION: Where is the source code of the new libc.a?

ANSWER: The same place you find this file. It is called libc-2.xx.tar.Z.

QUESTION: Why does g++ complain, even die?

ANSWER: You need "expr", which is in GNU shell utilities 1.6, echo (?)
and sed.

QUESTION: How do I generate code for 486?

ANSWER: Add -m486 to CFLAGS.

QUESTION: I heard malloc (0) wouldn't work with Linux, what should I
do?

ANSWER: include <stdlib.h> and don't define NO_FIX_MALLOC.

From: hlu@luke.eecs.wsu.edu (H.J. Lu)
Subject: README: fixed gcc 2.2.2 and zsh 2.2
Date: 28 Jun 92 23:11:36 GMT

Hi,

I just fixed some bugs. I have put the fixed gcc 2.2.2 on
banjo.concert.net under pub/Linux/GCC. Here is the list of the files
you can use to patch the old gcc 2.2.2.

1. 2.2.2fix1.tar.Z. It contains the shared libs and include/mntent.h.
   This is minimum you have to apply. Do
   cd /usr
   tar xvvofz 2.2.2fix1.tar.Z
   mv /usr/lib/gcc-lib/i386-linux/2.2.2/shared/libc.2.2.2 /lib
   mv /usr/lib/gcc-lib/i386-linux/2.2.2/shared/lib[hard|soft].2.2.2 /lib/libm.2.2.2

2. 2.2.2fix2.tar.Z. It has the static libc.a and libcurses.a, as well
   as libc_p.a and libg.a. Do
   cd /usr
   tar xvvofz 2.2.2fix2.tar.Z

3. libc-2.2.2.fix.tar.Z. It has ./libc-linux/string/siglist.c,
   ./libc-linux/mntent/mntent.c and ./libc-linux/curses/newwin.c.

If you are not sure what you are doing, please get the whole new gcc
2.2.2 and reinstall it.

There were some more bugs in zsh 2.2. I have fixed them. I put two new
files for zsh on banjo.concert.net under pub/Linux/GCC. One is
zsh.linux.tar.Z, which has the patches for Linux and zsh.a. The other
is zsh.doc.tar.Z, which has the basic docs for zsh. If you are
mirroring gcc 2.2.2, please delete zsh.tar.Z from your site.

I think we should put zsh linked with the shared libs on the root disk.

I also made some changes to the shared image. Now /lib/libc.2.2.2
contains libc.a, libdbm.a, libcurses.a and libtermcap.a. Orest and
David, please get the new shlib-2.2.2.tar.Z for details.


H.J.
----
gcc/libc maintainer for Linux

From: hlu@yoda.eecs.wsu.edu (H.J. Lu)
Subject: FAQ for gcc
Date: 3 Jul 92 00:20:07 GMT


QUESTION: What compiler should I use for Linux?

ANSWER: You should only use the same version on banjo.concert.net
under /pub/Linux/GCC. If you want to use the testing release, first
join the GCC channel on the Linux mailing list, and then send a note to
hlu@eecs.wsu.edu. Don't use gcc older than the one on
banjo.concert.net.

QUESTION: Where is the latest official gcc 2.xx for Linux?

ANSWER: It's on banjo.concert.net under /pub/Linux/GCC and
fgb1.fgb.mw.tu-muenchen.de under pub/linux/GCC. You may find
it on the other sites. But I am not sure if they are up to date. There
are 3 files, 2.xxdb.tar.Z, 2.xxlib.tar.Z and 2.xxmisc.tar.Z. Another
file, binutils.tar.Z, is not the part of gcc 2.xx, but used by gcc
2.xx. It contains all the binary utilities you need to run gcc 2.xx.
You should read the release note to see if you should get the new
binutils.tar.Z.

QUESTION: What are the contents of them?

ANSWER: 2.xxdb.tar.Z contains cpp, libg.a and libc_p.a. 2.xxlib.tar.Z
contains cc1 and cc1plus. 2.xxmisc.tar.Z contains gcc 2.xx drivers,
header files, libraries, manual pages and installation instructions.

Another file, XXXXinc.tar.Z, where XXXX is the current version number
of Linux kernel, has all the header files to replace the header files 
from kernel. YOU MUST INSTALL IT. Please read README for details.

QUESTION: Is it possible to have gcc 2.12d or above installed and also 
compile X11 v1.0 stuff ?? (i.e. have gcc2.11c co-existing).

ANSWER: If your X11 requires gcc 2.11c, please read the following. If
your X11 requires gcc 2.2.2, just skip the following. You don't have to
do anything.

First, erase any old compilers you already have installed.
Basically, remove these directories:

/usr/{include,g++-include,install,shared}
/usr/lib/{gcc-lib,static,shared}.

Now unpack and re-install 2.11c. Don't forget to run inst2.x. If you
want to use the shared X libs compiled with gcc 2.11c, INSTALL IT NOW.

The directory structure of gcc is re-arranged starting from 2.12d (for
the better) so we need move things around in 2.11c.

In /usr/lib/gcc-lib/i386-linux/2.11c, rename all of the Lib*.a files to
lib*.a.  Now create a new subdirectory called "shared" and copy all of
the files in /usr/lib/shared, including those X11 shared libs compile
with gcc 2.11c, to it.  You can now remove /usr/{shared,install}
and /usr/lib/{static,shared}.

Make a new directory,

mkdir /usr/lib/gcc-lib/i386-linux/2.11c/include

Then move assert.h, float.h, limits.h, proto.h, stddef.h, stdarg.h,
varargs.h and va-*.h (if you have them.)  to

/usr/lib/gcc-lib/i386-linux/2.11c/include

Those files are version-dependent. You have to put them there. Now
remove /usr/{include,g++-include}.

OK, now unpack and install the new version of gcc, 2.12d or above.
Also, reinstall /usr/include/X11 from X11R5 v1.0. Again, don't forget
to run inst2.x and fixfiles.

We're almost there now, we just need to tell gcc how to use the 2.11c
shared libs.  Run 'gcc -V 2.11c -dumpspecs' and re-direct the output to
/usr/lib/gcc-lib/i386-linux/2.11c/specs. Now look at .../2.11c/specs.
You may need to edit it and change version number to 2.11c.

That's it.  You should now be able to use 2.11c by specifying -V 2.11c.
If you don't specify either, you should get the new version by default.

QUESTION: How do I install it?

ANSWER: Do

cd /usr
tar xofz 2.xxmisc.tar.Z

and then read README in /usr/install/gcc2.

QUESTION: What are the main differences with the old release?

ANSWER: Do

cd /usr
tar xofz 2.xxmisc.tar.Z

and then read README in /usr/install/gcc2.

QUESTION: Is stdio ANSI compatible?

ANSWER: Yes, please test it.

QUESTION: Is g++ in 2.xx?

ANSWER: Yes.

QUESTION: What options can I use for gcc?

ANSWER: Read manual page, gcc.ps or gcc.man. -O3, -O4, -O5 or even
higher should work with 2.xx. -O3 is said to be the best. Don't ask me
why. Try it yourself. I was told you could manipulate those
optimization flags to get the best performance. Also -static tells gcc
to use the static libraries. The default is the shared libraries.

QUESTION: Where is the source code of the new libc.a?

ANSWER: The same place you find this file. It is called libc-2.xx.tar.Z.

QUESTION: Why does g++ complain, even die?

ANSWER: You need "expr", which is in GNU shell utilities 1.6, echo (?)
and sed.

QUESTION: How do I generate code for 486?

ANSWER: Add -m486 to CFLAGS.

QUESTION: I heard malloc (0) wouldn't work with Linux, what should I
do?

ANSWER: include <stdlib.h> and don't define NO_FIX_MALLOC.

QUESTION: Why does gcc say "xxxxx..h not found"?

ANSWER: see QUESTION: What are the contents of them?

QUESTION: I really followed every step in the documentation, but when
I do "make", why does it say "don't how to make xxxxxx"?

ANSWER: The dependency in Makefile is dated, you need to make a new
one. Please get some guide on make and read Makefile. For the kernel
sources, please do

cd src/linux
make dep

From: hlu@yoda.eecs.wsu.edu (H.J. Lu)
Subject: FAQ about gcc (how to compile program under Linux)
Date: Sun, 19 Jul 92 06:40:05 GMT


QUESTION: What compiler should I use for Linux?

ANSWER: You should only use the same version on banjo.concert.net
under /pub/Linux/GCC. If you want to use the testing release, first
join the GCC channel on the Linux mailing list, and then send a note to
hlu@eecs.wsu.edu. Don't use gcc older than the one on
banjo.concert.net.

QUESTION: Where is the latest official gcc 2.xx for Linux?

ANSWER: It's on banjo.concert.net under /pub/Linux/GCC and
fgb1.fgb.mw.tu-muenchen.de under pub/linux/GCC. You may find
it on the other sites. There are 3 files, 2.xxdb.tar.Z, 2.xxlib.tar.Z
and 2.xxmisc.tar.Z. Another file, binutils.tar.Z, is not the part of
gcc 2.xx, but used by gcc 2.xx. It contains all the binary utilities
you need to run gcc 2.xx. You should read the release note to see if
you should get the new binutils.tar.Z.

QUESTION: What are the contents of them?

ANSWER: 2.xxdb.tar.Z contains cpp, libg.a and libc_p.a. 2.xxlib.tar.Z
contains cc1 and cc1plus. 2.xxmisc.tar.Z contains gcc 2.xx drivers,
header files, libraries, manual pages and installation instructions.

Another file, XXXXinc.tar.Z, where XXXX is the current version number
of Linux kernel, has all the header files to replace the header files 
from kernel. YOU MUST INSTALL IT. Please read README for details.

QUESTION: How do I install it?

ANSWER: Read README and release notes.

QUESTION: What are the main differences with the old release?

ANSWER: Read README and release notes.

QUESTION: Can I use the old version of gcc?

ANSWER: Please get rid of gcc older than gcc 2.2.2. From gcc 2.2.2, you
can do

        gcc -V xxxx

where xxxx is the version number. Please read `release.xxxx' for
detail.

QUESTION: Is stdio ANSI compatible?

ANSWER: Yes, please test it.

QUESTION: Is g++ in 2.xx?

ANSWER: Yes.

QUESTION: What options can I use for gcc?

ANSWER: Read manual page, gcc.ps or gcc.man. -O3, -O4, -O5 or even
higher should work with 2.xx. -O3 is said to be the best. Don't ask me
why. Try it yourself. I was told you could manipulate those
optimization flags to get the best performance. Also -static tells gcc
to use the static libraries. The default is the shared libraries.

QUESTION: Where is the source code of the new libc.a?

ANSWER: The same place you find this file. It is called libc-2.xx.tar.Z.

QUESTION: Why does g++ complain, even die?

ANSWER: You need "expr", which is in GNU shell utilities 1.6, echo (?)
and sed.

QUESTION: How do I generate code for 486?

ANSWER: Add -m486 to CFLAGS.

QUESTION: I heard malloc (0) wouldn't work with Linux, what should I
do?

ANSWER: include <stdlib.h> and don't define NO_FIX_MALLOC.

QUESTION: Why does gcc say "xxxxx..h not found"?

ANSWER: see QUESTION: What are the contents of them?

QUESTION: I really followed every step in the documentation, but when
I do "make", why does it say "don't how to make xxxxxx"?

ANSWER: The dependency in Makefile is dated, you need to make a new
one. Please get some guide on make and read Makefile. For the kernel
sources, please do

cd src/linux
make dep

QUESTION: What flags should I use for compiling under Linux?

ANSWER: The Linux C library is almost 100% ANSI/POSIX compliant. It
is also very compatible with SYSV and BSD. The C library is loaded
with SYSV and BSD functions. There are three exceptions:

1. signal in Linux is POSIX.
2. tty in Linux is POSIX.
3. time functions are POSIX, plus a few BSD and SYSV extensions.

When you compile a program under Linux, your best bet is include all
the appropriate header files and use -Wall. All the usable functions
and global variables are declared in the corresponding header files.
YOU SHOULD NOT DEFINE ANY functions or global variables OF THE LINUX C
LIBRARY IN YOUR CODE IF YOU WANT TO USE THE SHARED LIBRARIES.

After saying all those, you now should know you can compile a program
with -D_POSIX_SOURCE or -D_GNU_SOURCE (read <features.h> for details).
With a few modifications you can even use -DSYSV, -DUSG or -DBSD.

Please read the header files for details.

To use malloc () and calloc () safely under Linux, please include
<stdlib.h> and don't define NO_FIX_MALLOC.

BTW, gcc -traditional should work with gcc 2.2.2d or above.