delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp-workers/1998/09/04/11:07:09

Date: Fri, 4 Sep 1998 17:18:41 +0200 (WET)
From: Andris Pavenis <pavenis AT lanet DOT lv>
To: djgpp-workers AT delorie DOT com
Message-ID: <Pine.A32.3.91.980904164338.55298A-100000@ieva01.lanet.lv>
MIME-Version: 1.0

This is announcment of test release of DJGPP port of egcs-1.1a
[ egcs-2.91.57 19980901 (egcs-1.1 release) ].  It is available
on DJGPP distribution in directory v2gnu/alphas/egcs-1.1a

ftp://ftp.cdrom.com/pub/simtelnet/gnu/djgpp/v2gnu/alphas/egcs-1.1a/


My experience (not only with release but also with previous 
development snapshots for about a month) shows that binaries
are stable enough and I haven't met any serious problems yet.

I build egcs-1.1a using slightly patched djdev202-980726. Only
problem when using binaries with djdev201 I know is that exceptions
will not work however the way used in port of gcc-2.8.1 is still
usable. I'm including bash script that performs needed changes
at end of this message (You must have gcc-e11b.zip installed before
running this script)

I'm asking to test it especially with djdev201 as I did only
some such tests. Please inform about problems if You found any
(excluding need for LFN while building egcs)

Also one other question: is it reasonable to release it for all
users with changes needed to get it fully working with current 
stable version (djdev201)? Of course answer will require testing 

Andris


PS. Sorry for huge message but  think it is better to include full
    readme and also changes needed to use binaries with djdev201 
    here 

--------------  Contents of readme.djgpp  -----------------------
This is the port of egcs-1.1a for DJGPP. It comes as usual in
different zip-archives for the sources and the binaries.

##############################################################################
Please read this file up to end (maybe skipping sections You don't need,
for example You don't need to read how to build egcs-1.1a from sources
if You only intend to use binary archives). Also consult DJGPP documentation
and FAQ where needed.
##############################################################################
Requirements to use this binary release:
    djdev202-980726 or above (Some hacking needed to use with djdev201)
    binutils-2.8.1 or above (I haven't tests earlier versions)
##############################################################################
Requirements to build egcs-1.1a from sources:
    Long filename support (will NOT work when not available)
    djdev202-980726 or above (for that version it's necessary to patch some
        modules (see below)
    other GNU utilities (see below)
##############################################################################

See also 

http://egcs.cygnus.com/egcs-1.1/egcs-1.1.html 

for additional information about egcs-1.1

The source archive egcs11s.zip contains all the sources to build
all compilers (C, C++, Objective C, GNU Fortran) and also C++
and Fortran libraries (libstdcxx.a, libgpp.a and libf2c.a). 
I included in source archive libg++-2.8.1.1a which originally were
not a part of egcs-1.1a distribution. Look below for more detailed 
information about source archive.

NOTE: LFN support is required to build egcs-1.1a from sources.


But the binary archives are split into 5 parts:

  gcc-e11b.zip : The gcc.exe driver program and the C compiler.
                 It also contains the documentation.
  gpp-e11b.zip : The C++ compiler and libstdcxx.a together 
                 with needed header files 
  objce11b.zip : The OBJC compiler and libobjc.a and the needed
                 header files.
  g77-e11b.zip : GNU Fortran compiler (version 0.5.24) and libg2c.a
                 and g2f.h. 
  lgp-e11b.zip : libg++ binary archive (needed if You want to use it).
                 Using libg++ for new programs is not recommended as
                 this library is no more maintained. 

The archive gcc-e11b.zip is also required by gpp281b.zip, objc281b.zip
and g770523b.zip

Before you install egcs-1.1a
============================

The DJGPP distribution of egcs-1.1a is now different from the one used
by gcc 2.7.x. Now the directory structure is more similar to that of
unix systems and also all the DJGPP standard directories are hardcoded
already. Similar directory structure were already used for gcc-2.8.X

To get no trouble, you should remove at least your old gcc installation
completely, especially the compilers (cc1.exe, cc1plus.exe ...) and
libgcc.a from directory $DJDIR/lib, because they will not overwritten 
by the new distribution. You will have such files if previous gcc version 
were 2.7.2. 

You should avoid having following files in $DJDIR/lib:
	specs, djgpp.djl, libgcc.a, libobjc.a

and following files in $DJDIR/bin
	cc1.exe, cc1plus.exe, cc1obj.exe, f771.exe

If you don't remove them, and you don't modify your djgpp.env file,
new version of gcc can still use these old binaries or the libgcc.a
because they are in directories which are searched before the hardcoded
ones. 

I also recommend removing the files 'specs' and 'djgpp.djl' from %DJDIR/lib.
Archive gcc281b.zip contains replacement for these files which will
go to a different directory %DJDIR/lib/gcc-lib/djgpp/egcs-291.57.
If you have changed either of these 2 files you might consider transferring
these changes to the new files. It is possible to avoid removing these files
but don't do this unless you know what you are doing.

Additionally you can safely remove the [gcc] and [cpp] section from your
djgpp.env file, since the path-settings there are not longer needed, because
gcc (and cpp) is configured already in a way to search these directories
by default. If you have modified already these sections for instance to
have some of your own directories searched by default, you should leave
only those directories there and remove the standard DJGPP directories.

Modifying the djgpp.env is not really necessary, but I recommend it.

NOTE for users of RHIDE-1.4
============================

The name of C++ library is now libstdcxx.a instead of libstdcx.a as it was
for port of gcc-2.7.2.1. RHIDE-1.4 uses latest name by default. I included
fix (section [rhide]) in example of DJGPP.ENV file mentioned above.
An alternate way is to add line (create new file if needed). There is no 
such problem with RHIDE-1.4.5. 

RHIDE_TYPED_LIBS_DJGPP.cc=stdcxx

to file %DJDIR/share/rhide/rhide.env

Similary to use GNU Fortran from RHIDE, You should add line 

RHIDE_TYPED_LIBS.f=g2c m

to the same file (this change is needed also for RHIDE-1.4.5)


How to install the binary archives?
===================================

Install them like any other DJGPP binary archive:

- change to your DJGPP base directory (often c:/djgpp) and unzip
  there the archive

  unzip gcc-e11b.zip

  (if you are using PKUNZIP, remember to use the -d switch!!)

and that's all.

Installing under Windows 95
===========================

If you want to install and use gcc under Windows 95, you should remember
that this OS can handle long and case sensitive filenames. Here are
three cases:

1. Only long filenames
----------------------

Unzip the binaries with an unzip program, which can restore the long filenames
stored in the zip archive.

2. Only short filenames
-----------------------

Unzip the binaries with an unzip program which doesn't know about long
filenames, or if your unzipper knows about them, please follow first
the steps described in the DJGPP FAQ 2.01 in the section 
about setting the NameNumericTail to 0 __BEFORE__!!! unzipping the archives.

3. Long and short filenames at the same time
--------------------------------------------

Use an unzip program which can restore the long filenames and follow
the instructions under 2. when the unzipper knows about long filenames.


DJGPP specific hints for C++
============================

Since there are still some long filename problems which could not be solved
in an easy way, there are some tricks to get all the functionality in C++.
Especially, some headers are renamed to avoid conflicts with either each other
or with existing header files from libc.

I list here all the relevant header files and how they are named for DJGPP

Complex.h   		-> _Complex.h
String.h    		-> _String.h
Regex.h     		-> _Regex.h
iostreamP.h 		-> _iostreamP.h
stl_algobase.h 		-> stlalgobase.h
stl_hash_map.h 		-> stlhashmap.h
stl_hash_set.h 		-> stlhashset.h
stl_hashtable.h 	-> stlhashtable.h
stl_multiset.h 		-> stlmultiset.h

So there are now two ways to include these headers. Either use the DJGPP
specific name or use a new feature of the preprocessor cpp. It accepts now
a new commandline switch "-remap" which tells cpp to look in a directory
for a file named "header.gcc". It takes that file as a translation
table if a requested file was not found in the directory.

The DJGPP distribution of g++ and libg++ already come with these translation
files, but they are currently not used. To use them, you have to modify your
specs file to add the "-remap" switch to the call for cpp, since this switch
cannot passed to cpp from the gcc comanndline. Here is a possible line
from the spec file in your lib/ directory:

*cpp:
-remap %{posix:-D_POSIX_SOURCE}

Exception support under DJGPP 
=============================

With djdev202.zip (currently still alpha version) there is no need to
do anything to get exceptions working.

If djdev201.zip is being used situation is more complicated. I didn't 
provide files that were included in DJGPP port of gcc-2.8.1 for that
purpose. Following steps are necessary:
   - take crtf.o from gcc-2.8.1 binary distribution (gcc281b). gcc281b
     contains also source (crtf.c) so You can recompile it however I
     think it is not needed. crtf.o should be copied to directory
   - specs file should be modified to provide linking crtf.o

Rebuilding gcc from the sources
===============================

Requirememts
------------

To build gcc you need many GNU utilities installed. This includes at the
very least bash and a symlink sh to it.  
********
To get it, change to the DJGPP bin directory and type there

ln -s bash.exe sh.exe
********

You need LFN support to build
egcs-1.1a from current sources (don't even try to do this when 
LFN support is not available, this will not work).

I built egcs using djdev202-980726 (alpha version) after applying 2 patches
to it:
1) applied Robert's Hoehne fix to realloc() [file src/libc/ansi/stdlib/malloc.h]
----------------------------------------------------------------------
--- malloc.c~	Sun Jun 28 22:14:04 1998
+++ malloc.c	Thu Aug  6 21:56:04 1998
@@ -333,12 +333,12 @@
   if (ptr == 0)
     return malloc(size);
 
-  copysize = b->size;
-  if (size <= b->size)
+  copysize = b->size & ~1;
+  if (size <= copysize)
   {
 #if 0
     if (b->size < 2*MIN_SAVE_EXTRA
-	|| (size >= b->size-512 && size >= b->size/2))
+	|| (size >= b->size-512 && size >= copysize/2))
 #endif
       return ptr;
     copysize = size;
@@ -347,7 +347,7 @@
   newptr = (char *)malloc(size);
 #if DEBUG
   printf("realloc %d %d/%08x %08x->%08, %d\n",
-	 size, b->size, b, ptr, newptr, copysize);
+	 size, b->size & ~1, b, ptr, newptr, copysize);
 #endif
   memcpy(newptr, ptr, copysize);
   free(ptr);
----------------------------------------------------------------------
2) fixed bug in src/libc/dos/errno/doserr2e.c (thanks Eli for hint)
----------------------------------------------------------------------
--- doserr2e.c~	Sun Jun 28 23:33:56 1998
+++ doserr2e.c	Mon Aug 24 10:57:14 1998
@@ -6,7 +6,7 @@
 static unsigned char map[] = {
   /* 00-07 */ 0, EINVAL, ENOENT, ENOENT, EMFILE, EACCES, EBADF, EFAULT,
   /* 08-0f */ ENOMEM, EFAULT, EFAULT, EINVAL, EINVAL, EINVAL, EINVAL, ENODEV,
-  /* 10-17 */ EBUSY, EXDEV, ENFILE, EROFS, ENXIO, ENXIO, EINVAL, EIO,
+  /* 10-17 */ EBUSY, EXDEV, ENMFILE, EROFS, ENXIO, ENXIO, EINVAL, EIO,
   /* 18-1f */ EINVAL, EIO, EIO, EIO, EIO, EIO, EIO, EIO,
   /* 20-27 */ EPERM, EPERM, ENXIO, EBADF, ENOLCK, EINVAL, EIO, ENOSPC,
   /* 28-2f */ EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, EINVAL, EINVAL,
----------------------------------------------------------------------


Because it is really not possible for me to check for any needed program
I include here only a list of packages which you will need at least:

- fil316b.zip
- find41b.zip
- grep20b.zip
- mak377b.zip
- sed302b.zip
- shl112b.zip
- txt122b.zip
- txi312b.zip

I configured gcc and libraries with autoconf-1.12 and automake-1.3 installed.
However they should not be needed if sources are not modified.

And you need about much free disk space, when you build without
debugging information. I think 120 Mb free space before unpacking
source archive could be good approximation.

Extracting the sources
----------------------

At first you should unzip the archive egcs11s.zip. The sources are _NOT_
the complete sources like the original egcs-1.1a distribution. I have
removed many files to save disk space which are not needed for the DJGPP
port. I changed also directory structure of source archive as building
gcc simultanously with libraries did not work under DJGPP.

Therefore sources are split into 2 directories: gcc and libs
    - directory gcc contains sources of gcc
    - directory libs contains sources of C++ and Fortran libraries.

There are 2 steps necessary to compile egcs for DJGPP
    - compile and install gcc
    - compile libraries with newly compiled gcc and install them


Compiling gcc
-------------

Directory gnu/egcs-1.1a/gcc contains sources of gcc and should be
built before libraries. gcc sources are already configured, but if you 
want to reconfigure them, please use _ONLY_ the script file 'djconfig.sh'
instead of running the configure script, since it does some 
tricks before running configure. (Read the comments inside this file!!).
This file is in directory gnu/egcs-1.1a/gcc/build.djg. To run it you 
must have bash installed and a symlink sh.exe to bash.exe.

I configured compiler sources to be compiled in directory gcc/build.djg. 

Then to run the djconfig.sh script type there

sh djconfig.sh [any-additional-paramter]


Another script 'djmake.sh' must be used used instead of simply make. 
As above: Please use _ONLY_ this script instead of running a simple make 
(unless of course you know what you're doing).

Now you run make by typing

sh djmake.sh [any-additional-paramter]

as replacement for

make [any-additional-parameter]


Installing newly compiled gcc
-----------------------------

You can install newly compiled gcc by typing

./djmake.sh install prefix=directory_where_to_install

I recommend to install into temporary directory instead of directly into
DJGPP directory as some manual changes will be needed after this.
It is necessary to specify prefix as ./djconfig.sh uses some tricks 
to get $DJDIR hardcoded into binaries. That will prevent normal work
of ./djmake.sh install when prefix is not specified.


Compiling in another directory
-------------------------------

I configured gcc to be compiled in directory build.djg. To change this
directory you should move its contents to the desired location and modify
both scripts (djconfig.sh and djmake.sh) to set the exact path to sources.
After that, you can use these scripts as described above.


Building C++ and Fortran libraries
==================================

Please install newly compiled gcc before trying to build libraries.

Directory gnu/egcs-1.1a/libs contains sources of C++ and Fortran libraries
and should be built using previously compiled version of gcc.
Sources are already configured, but if you want to reconfigure them, 
please use _ONLY_ the script file 'djconfig.sh' instead of running the 
configure script, since it does some tricks before running configure. 
(Read the comments inside this file!!). This file is in directory 
gnu/egcs-1.1a/libs/build.djg. To run it you must have bash installed 
and a symlink sh.exe to bash.exe.

I configured libraries to be compiled in directory libs/build.djg. 

Then to run the djconfig.sh script type there

sh djconfig.sh [any-additional-paramter]


Another script 'djmake.sh' must be used used instead of simply make. 
As above: Please use _ONLY_ this script instead of running a simple make 
(unless of course you know what you're doing).

Now you run make by typing

sh djmake.sh [any-additional-paramter]

as replacement for

make [any-additional-parameter]


Things to do
============

- Make compiling egcs to work without LFN support. It is significant not
  break things similary as it was done with port of gcc-2.8.1. Perhaps I'll
  not do this. Unfortunatelly I don't think all will work without LFN support,
  but at least compiling should work.



Patching original egcs sources to be used with DJGPP
====================================================

- This is newest and perhaps less tested part of source archive. I included
  shell script that creates sources usable with DJGPP in directory 
  gnu/egcs-1.1a/contrib. To get sources for DJGPP following steps
  should be done:
    1) unpack original sources of egcs
    2) unpack original sources of libg++ (move them to get subdirectories
       libg++ and librx under main egcs directory). I used 
       libg++-2.8.1.1a but also development versions of libg++-2.8.2
       should work (I had problems with ./djmake.sh install later when
       I tried them)
    3) change to main egcs directory and run patching script
            ../contrib/egcs-patch.sh
        There will be error messages from autoconf in librx (I ignored them) 
    4) in directory gcc/build.djg:
            - run './djconfig.sh' (You need autoconf for this)
            - run './djmake.sh cstamp-h.in' (You need patched auptoheader, see below)
            - run './djconfig.sh once more' 
    5) in directory libs/build.djg:
            - run './djconfig.sh'
            - run './djmake.sh configure-target-libiberty \
                configure-target-libio configure-target-libstdc++ \
                configure-target-libg++ configure-target-libf2c'
            - run './djmake.sh clean' if You intend o make distribution archive
               (otherwise You can skip this)
            - after that You can make source archive for DJGPP (some cleanup
              of directory texinfo can be done before). 

  This steps to build source distribution of egcs for DJGPP should (as I expect)
  work also for PGCC and next minor releases of egcs (maybe with some minimal
  modifications of patching script). However I haven't tested this all with
  PGCC. I used earlier versions of patching script to build earlier 
  development snapshots of egcs-1.1 (and also prerelease)



Installing newly compiled libraries
------------------------------------

You can install newly compiled libraries by typing

./djmake.sh install prefix=directory_where_to_install

I recommend to install into temporary directory instead of directly into
DJGPP directory as some manual changes will be needed after this.


Reporting bugs
==============

If you found a bug in egcs, please report it to the egcs bug adresses and _NOT_
(or at least not only) in the DJGPP news group. But if you think you found
a bug in the DJGPP related things, then please report it in comp.os.msdos.djgpp
(the news group) or mail it to djgpp AT delorie DOT com, which is the gateway to
the news group.

Some possible situations:
  - gcc says 'Internal compiler error'
       more likely it is error of gcc. It would be nice to test on some other
       system (e.g. Linux) and submit report to egcs bug address
  - gcc crashes or freezes. 


Please email me directly only in rare cases, if you think it is only of
interest to me, since I see the reports in comp.os.msdos.djgpp also.


  Have fun with egcs,

Andris Pavenis <pavenis AT lanet DOT lv>

----------------------------------------------------------------------
patch to autoheader. Nedeed ONLY if you need to run autoheader under 
Windows 95. Normally NOT NEEDED to build gcc unless you modify Configure.in
-----------------  patch to autoheader  ------------------------
*** autoheader~	Wed May 14 17:33:34 1997
--- autoheader	Tue Mar 24 15:03:18 1998
***************
*** 261,266 ****
--- 261,267 ----
  fi
  
  if test $# -eq 0; then
+   exec > con 
    if test $status -eq 0; then
      if test -f ${config_h_in} && cmp -s $tmpout ${config_h_in}; then
        rm -f $tmpout # File didn't change, so don't update its mod time.
----------------------------------------------------------------






  Script for patching EGCS-1.1 binary distribution for use with djdev201

------------------------------------------------------------------------
#! /bin/sh
##############################################################################
#   If You don't understand what this file means and how to run it
#           then it is not for You.
#   This file must be considered obsolete when DJDEV202 will be released
#-----------------------------------------------------------------------------
#   This is script that slightly modifies installed egcs-1.1a to have
#   proper exceptions handling in C++ when DJDEV201.ZIP is being used. 
#   It is not needed when DJDEV202.ZIP is installed. This script is intended
#   to be used with binaries of egcs-1.1a release ONLY.
##############################################################################
gv=`gcc -v 2>&1 | sed 1q`
if [ "x$gv" = "xUsing builtin specs." ]; then
   echo "Instalation problem: quitting..."
   exit
fi 
#
if echo $gv | grep -q egcs-291.57; then
specs_name=`gcc -print-file-name=specs`
version_dir=`echo $specs_name | sed -e 's,57[/]specs,57,g'`
patch -N $specs_name << 'EOF'
--- specs.orig	Thu Sep  3 11:03:46 1998
+++ specs	Fri Sep  4 10:19:54 1998
@@ -26,7 +26,7 @@
 -lgcc
 
 *startfile:
-%{pg:gcrt0.o%s}%{!pg:crt0.o%s}
+crtf.o%s %{pg:gcrt0.o%s}%{!pg:crt0.o%s}
 
 *switches_need_spaces:
 
EOF
echo "Writting file $version_dir/crtf.c"
cat >$version_dir/crtf.c << 'EOF'
/* crtf.c is copyright by Robert H”hne 1998. You can use it freely
   and also modify it if you want but in that case please include
   a note that you have modified it before you distribute modified
   versions of it.
   You are not allowed to distribute this file in compiled form
   only. You have to include ever the source for the file so the
   user can see, what the startup file really does.
   Use that file at your own risk.
*/
/* This file is used as additional startup file when linking programs
   for DJGPP. This is needed if you want to have full exception support.
   It needs some assistance by the linker script and assumes that in the
   linker script the symbol ___EH_FRAME_BEGIN__ is defined and that this
   symbol is defined as the first symbol in the .eh_frame section (shortened
   to the .eh_fram section). To explain it, here a snipped from a linker
   script, how it could be written:

  .data  ALIGN(0x200) : {
    djgpp_first_ctor = . ;
    LONG(_init_frame) ;
    *(.ctor)
    djgpp_last_ctor = . ;
    djgpp_first_dtor = . ;
    *(.dtor)
    djgpp_last_dtor = . ;
    *(.data)
    *(.gcc_exc)
    ___EH_FRAME_BEGIN__ = . ;
    *(.eh_fram)
    ___EH_FRAME_END__ = . ;
    LONG(0)
     edata  =  . ; _edata = .;
     . = ALIGN(0x200);
  }
   

   As the next it assumes, that this file is placed as the first (or the
   second after crt0.o) object file in each executable via the specs
   file so it can be sure, that the function with the constructor attribute
   is called first before any other constructors. As an example, here a
   sample entry, how the specs file could be written:

*startfile:
%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crtf.o crt0.o%s}}

   
*/
   
extern void __EH_FRAME_BEGIN__();
/* This function is provided with the libgcc.a library which
   simply registers the start of the exception tables by remembering
   the address passed with the first argument and initializing
   a struct passed with the second argument. */
extern void __register_frame_info (void *, void *);

static void __attribute__((constructor))
frame_dummy ()
{
  /* normally this should be a
  struct object {
    void *pc_begin;
    void *pc_end;
    void *fde_begin;
    void **fde_array;
    size_t count;
    struct object *next;
  };
  but a placeholder of the same size does it also */
  /* W A R N I N G : If the size of this struct changes in future
     versions of gcc, remember this here !!! The struct is declared
     in the file frame.h from the gcc sources */
  static int object[6];

  __register_frame_info (__EH_FRAME_BEGIN__, &object);
}                           

EOF
echo "Compiling file $version_dir/crtf.c"
gcc -v -c -O2 $version_dir/crtf.c -o $version_dir/crtf.o
#######################################################################
echo "Writting file $version_dir/include/math.h"
cat >$version_dir/include/math.h << 'EOF'
/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
#ifndef __dj_include_math_h_
#define __dj_include_math_h_

#ifdef _USE_LIBM_MATH_H
#include <libm/math.h>
#else

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __dj_ENFORCE_ANSI_FREESTANDING

extern double __dj_huge_val;
#define HUGE_VAL  __dj_huge_val

double	acos(double _x);
double	asin(double _x);
double	atan(double _x);
double	atan2(double _y, double _x);
double	ceil(double _x);
double	cos(double _x);
double	cosh(double _x);
double	exp(double _x);
double	fabs(double _x);
double	floor(double _x);
double	fmod(double _x, double _y);
double	frexp(double _x, int *_pexp);
double	ldexp(double _x, int _exp);
double	log(double _y);
double	log10(double _x);
double	modf(double _x, double *_pint);
double	pow(double _x, double _y);
double	sin(double _x);
double	sinh(double _x);
double	sqrt(double _x);
double	tan(double _x);
double	tanh(double _x);
  
#ifndef __STRICT_ANSI__

#ifndef _POSIX_SOURCE

#define M_E		2.7182818284590452354
#define M_LOG2E		1.4426950408889634074
#define M_LOG10E	0.43429448190325182765
#define M_LN2		0.69314718055994530942
#define M_LN10		2.30258509299404568402
#define M_PI		3.14159265358979323846
#define M_PI_2		1.57079632679489661923
#define M_PI_4		0.78539816339744830962
#define M_1_PI		0.31830988618379067154
#define M_2_PI		0.63661977236758134308
#define M_2_SQRTPI	1.12837916709551257390
#define M_SQRT2		1.41421356237309504880
#define M_SQRT1_2	0.70710678118654752440
#define PI		M_PI
#define PI2		M_PI_2

double	log2(double _x);
long double modfl(long double _x, long double *_pint);
double	pow10(double _x);
double	pow2(double _x);

/* These are in libm.a (Cygnus).  You must link -lm to get these */
/* See libm/math.h for comments */

#ifndef __cplusplus
struct exception {
	int type;
	char *name;
	double arg1;
	double arg2;
	double retval;
};
#endif

extern double erf(double);
extern double erfc(double);
extern double gamma(double);
extern double hypot(double, double);
extern int isinf(double);
extern int isnan(double);
extern int finite(double);
extern double j0(double);
extern double j1(double);
extern double jn(int, double);
extern double lgamma(double);
extern double y0(double);
extern double y1(double);
extern double yn(int, double);
extern double acosh(double);
extern double asinh(double);
extern double atanh(double);
extern double cbrt(double);
extern double logb(double);
extern double nextafter(double, double);
extern double remainder(double, double);
extern double scalb(double, double);
#ifndef __cplusplus
extern int matherr(struct exception *);
#endif
extern double significand(double);
extern double copysign(double, double);
extern int ilogb(double);
extern double rint(double);
extern double scalbn(double, int);
extern double drem(double, double);
extern double expm1(double);
extern double log1p(double);
#ifdef _REENTRANT
extern double gamma_r(double, int *);
extern double lgamma_r(double, int *);
#endif /* _REENTRANT */
extern float acosf(float);
extern float asinf(float);
extern float atanf(float);
extern float atan2f(float, float);
extern float cosf(float);
extern float sinf(float);
extern float tanf(float);
extern float coshf(float);
extern float sinhf(float);
extern float tanhf(float);
extern float expf(float);
extern float frexpf(float, int *);
extern float ldexpf(float, int);
extern float logf(float);
extern float log10f(float);
extern float modff(float, float *);
extern float powf(float, float);
extern float sqrtf(float);
extern float ceilf(float);
extern float fabsf(float);
extern float floorf(float);
extern float fmodf(float, float);
extern float erff(float);
extern float erfcf(float);
extern float gammaf(float);
extern float hypotf(float, float);
extern int isinff(float);
extern int isnanf(float);
extern int finitef(float);
extern float j0f(float);
extern float j1f(float);
extern float jnf(int, float);
extern float lgammaf(float);
extern float y0f(float);
extern float y1f(float);
extern float ynf(int, float);
extern float acoshf(float);
extern float asinhf(float);
extern float atanhf(float);
extern float cbrtf(float);
extern float logbf(float);
extern float nextafterf(float, float);
extern float remainderf(float, float);
extern float scalbf(float, float);
extern float significandf(float);
extern float copysignf(float, float);
extern int ilogbf(float);
extern float rintf(float);
extern float scalbnf(float, int);
extern float dremf(float, float);
extern float expm1f(float);
extern float log1pf(float);
#ifdef _REENTRANT
extern float gammaf_r(float, int *);
extern float lgammaf_r(float, int *);
#endif	/* _REENTRANT */

#endif /* !_POSIX_SOURCE */
#endif /* !__STRICT_ANSI__ */
#endif /* !__dj_ENFORCE_ANSI_FREESTANDING */

#ifndef __dj_ENFORCE_FUNCTION_CALLS
#endif /* !__dj_ENFORCE_FUNCTION_CALLS */

#ifdef __cplusplus
}
#endif

#endif /* _USE_LIBM_MATH_H */

#endif /* !__dj_include_math_h_ */
EOF
##############################################################################
else
   echo "Incorrect gcc version: egcs-2.91.57 19980901 (egcs-1.1 release) required"
fi
 


- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019