Changes between several latest versions pgcc-2.95.3, Sunday January 2, 2000 * EGCS and GCC teams are back together. Thats good. * Well, 'gcc -v' calls itself 'pgcc-2.95.2' but it is pgcc-2.95.3 indeed. Marc forgot to change version number before releasing 2.95.3. * Fixed bug with libstdc++ not correctly displaying floating-point numbers (cout << 1.234F). Well, not my fault anyway. I didn't changed anything in libstdc++. * Changed directory structure to be as much Unix-like as possible. FAT support is dropped altogether. Most version-specific files are stored under /emx/lib/gcc-lib/i386-pc-os2_emx/pgcc-2.95.2/. This allows for multiple installed compiler versions. A short description of the new directory structure: [emx] The basic emx directory +--[lib] Compiler-independent libraries | +--[gcc-lib] GNU Compiler Suite specific stuff | +--[i386-pc-emx_os2] Machine type-dependent directory | +--[pgcc-2.95.2] Compiler version-specific libraries, | | C/C++/ObjC/Fortran/etc compilers. | +--[st] Single-threaded libgcc & libstdc++ | +--[mt] Multi-threaded libgcc & libstdc++ +--[include] Compiler-independent include files +--[g++-3] GNU libstdc++ version 3 pgcc-1.1.3 for OS/2 * Upgraded to egcs 1.1.2/pgcc 1.1.3 * Multithreaded exceptions! LIBGCC is now canned in two separate versions: multithreaded and single-threaded (and goes from now on into lib/st and lib/mt directories). Also there is a separate LIBGCC (called gpp.a) for C++ with exception handling enabled (this has a small overhead even on programs that do not use exceptions, see tips section below). * Applied patch from Marc Leeuwen that fixes incorrect output (program crashes) on following testcase: #define LUARRAYROWS 101L #define LUARRAYCOLS 101L static void build_problem (double a[][LUARRAYCOLS], int n, double b[LUARRAYROWS]) { long i, j, k, k1; for (i = 0; i < 8 * n; i++) { k = 1; k1 = 2; for (j = 0; j < n; j++) a[k][j] += 1; } return; } Thanks to Vadim Yegorov for pointing this bug to me. * Applied patch that fixes internal compiler error when using alias typedefs on classes. Here is a testcase: class A { public: }; class B { public: }; class C : public A, public B { public: int zz; }; typedef C ccc; int a = int (&((ccc *)0)->zz); Note that because of above two patches the compiler is not quite "version 1.1.3", it is rather "version 1.1.3 plus two patches". Don't forget to mention this whenever this could matter. * I've recompiled all non-compiler files to not use libgcc runtime DLL anymore. This will remove the need to download new binutils if you don't want to keep old gcc runtime DLL anymore. The only DLLs required are those included with emx. pgcc-1.1.1 for OS/2 release 2 * Ported almost all binutils 2.9.1 instead of just GAS. * Added libopcodes.a and libbfd.a into binutils distribution - both in static and dynamic form. * Recompiled all executables to use only pgcc 1.1.1 runtime DLL. Previous release contained several executables that requires runtime DLL from pgcc 1.0.2. * Added dllar.cmd to base distribution - someone could find it useful. It is similar to "ar" except that it creates .dll instead of .a libraries. Also it can be used to convert .a archives into .dll. * Added book on gprof into docs archive. * Moved all .h files from include.new/gnu into include.new. * Changed naming convention for archives. Now [libname].a is an import library (i.e. for dynamically linking in a .dll) and [libname]_s.a is the static library. pgcc-1.1.1 for OS/2 * Upgraded to egcs/pgcc 1.1.1 * Upgraded to emx 0.9d: PGCC will not work anymore with emx 0.9c. * Now command-line help works without termcap; this is better since it achieves consistent results across different termcap files (the one that comes with emx works not too well with CLH). The CLH_TERM variable can be assigned three different values: "-" for non-colored output, "mono" for monochrome output and anything other (or unset) for colored output. * Exceptions will work from now ONLY if you will link with g++ and ONLY if you did not used -fno-exceptions during linking. Otherwise a different version of libgcc is used that has smaller size overhead (~10K) by the cost of exception handling. pgcc-1.0.2 release 2 - minor bugfixes * Re-compiled ld.exe and emxomfld.exe to not use gcc290.dll from pgcc-1.0.0 * Changed front-end to pre-define __OS2__ symbol when using -Zomf * Fixed an inconsistency between ld and emxomfld: ld used ldstub.bin when run with -Zexe while emxomfld searched for nullstub.exe. Now the "launcher" stub is always called ldstub.bin. * minor bug in emxfix.cmd: lib/st and lib/mt already exists, so there is no need to create them. * New libraries: gpp*.a (which have almost the same functionality as their gcc*.a counterparts). I was forced to split g++ runtime from gcc runtime since g++ when used with frame-unwind exceptions required a slightly longer initialization sequence which pulls a lot of unused code into executables, even for plain C and F77 not speaking of C++ code without exceptions. So I suggest now linking with gcc even C++ code without exceptions - this will produce slightly smaller executables (5-10K). * Fixed the bug with creating a ".exe" file when feeding only linker files to frontent (ex: gcc -s a.o b.o c.o will produce ".exe"). Now it takes the basename of first object file and appends .exe or .dll. pgcc-1.0.2 for OS/2 * Upgraded to egcs-1.0.2. * Ooops! Due to a bug in my makefiles, libgcc previously used C versions of some functions instead of optimized versions I wrote in config/i386/emx-libgcc1.asm. 64-bit division should be slightly faster now. * Renamed dynamically-loaded libgcc from gcc290.dll to gcc29027.dll. This happened because libgcc in pgcc-1.0.2 has been changed, to avoid conflicts with previous versions of gcc*.dll. * Added include/cpp/new, include/cpp/exception, include/cpp/typeinfo files. I don't really know what they are for :-) I don't use libstdc++. * Included GNU -liberty library into base PGCC/2 binary distribution. The files added were: o libiberty.h - mostly interface for string functions in libiberty o objalloc.h - obstack management o obstack.h - same o getopt.h - GNU getopt (getopt_long included too). Replaces EMX's getopt.h o demangle.h - C++/Java name demangling functions o fnmatch.h - Wildcard filename match function Replaces EMX's fnmatch.h o ansidecl.h - auxiliary file o iberty_s.a - static library o iberty.a - import library o iberty.dll - dynamic library To link against static version of GNU -liberty library use: gcc [...] -liberty_s To link against dynamic version of GNU -liberty library use: gcc [...] -liberty iberty.dll should be on your LIBPATH (and distributed with your programs, if used). It should be distributed under GNU Library Public License (LGPL) which can be found in file COPYING.LIB. 2nd release of PGCC-1.0 * multi-threaded and single-threaded libstdc++ library! multi-threaded libstdc++ uses emx's fast mutex semaphores (fmutex) for synchronising access to streams, so it is now REALLY multithreaded :-) The files stdcpp.a and stdcpp.lib have been moved into /emx/lib/st/ and /emx/lib/mt/ directories. * fixed a bug with _IO_flockfile and _IO_funlockfile in libstdc++ * fixed a number of minor bugs in supplied header files o removed limits.h - emx's is good enough o removed float.h - emx's is good enough o removed sysinclude.h which is garbage o removed proto.h which is garbage o fixed a definition conflict with emx headers in varargs.h and stdarg.h * changed behaviour of command-line help. Now by default "gcc -h" will list a digest of most used GCC options. To see the full help index use gcc -h* or gcc --help=* 1st release of PGCC-1.0 * My Command-Line help patch is now included! Try gcc -h or gcc --help and tell me what you think :-) * libstdc++ (AKA stdcpp.a) is now included into gpp archive. * IOstream and GNU Fortran manuals are included into the doc archive (in INF format). * Caught a bug! in old ld included with EMX. It does not importing properly symbols from dynamically-linked libraries into the data segment. I.e: { static FILE *f = stdio; } won't work with -Zcrtdll since stdio is exported from C runtime DLLs, and f is placed into .data section. Now it works properly (ugh). * G++ exceptions now works (although I didn't have time to check it deeply). I've had to add the support for exceptions into EMX libraries, so you will need a separate lib/ directory for the new PGCC containing the modified versions of EMX' libraries. The libraries themself are partially contained in pgcc-os2-2.95.3-gcc.zip archive, partially made with the emxfix.cmd file included in same archive. You should run it right after unpacking the archive. The dark side is that exceptions are for now single threaded. That is, you must be sure that no two (no three, no four etc :-) exceptions will be triggered at same time in two threads of your program, otherwise most likely you will crash. The cause is that GCC uses for exception handling some global variables. However, I hope next release of PGCC will be multithreaded, there is already a patch for this, but it requires some work. * EGCS-1.0 has a optional new sheduler called `haifa'. The precompiled binaries were made with --enable-haifa, so it is enabled now. This should (could?) give some performance gain with optimization levels below PGCC's (i.e -O1 through -O3). PGCC optimizes better, as always :-) ------------------------------------------------------------------------