Full_Name: Gek Low Version: 1.2 OS: Linux URL: ftp://ftp.openldap.org/incoming/ Submission from: (NULL) (63.211.143.38) I am trying to build OpenLDAP on the IA64 (Linux OS) and I found out that it is not including the prototype for sigset(), so the compiler is assuming it returns int, which is bad on a 64-bit system, because ints are only 32 bits. The prototype must be included to generate correct code. The sigset() prototype on Linux systems is contained within the __USE_UNIX98 ifdef in signal.h, so it is not included at all. However, there is a sigset function in libc, so everything links. The OpenLDAP configure script correctly/incorrectly says sigset() exist on Linux, but the missing prototype will not work for 64-bit Linux.
At 04:54 PM 6/23/00 GMT, geksiong@sendmail.com wrote: >Full_Name: Gek Low >Version: 1.2 >OS: Linux >URL: ftp://ftp.openldap.org/incoming/ >Submission from: (NULL) (63.211.143.38) > > >I am trying to build OpenLDAP on the IA64 (Linux OS) and I found out that it is >not >including the prototype for sigset(), so the compiler is assuming it returns >int, which >is bad on a 64-bit system, because ints are only 32 bits. The prototype must be >included >to generate correct code. > >The sigset() prototype on Linux systems is contained within the __USE_UNIX98 >ifdef in >signal.h, so it is not included at all. However, there is a sigset function in >libc, >so everything links. The OpenLDAP configure script correctly/incorrectly says >sigset() >exist on Linux, but the missing prototype will not work for 64-bit Linux. I suggest using: env ac_cv_func_sigset=no ./configure to workaround this problem. I do not suggest defining __USE_UNIX98. This macro is internal to the implementation of the C library and, as such, applications should not muck with it. Kurt
moved from Incoming to Build
On Fri, 23 Jun 2000 Kurt@OpenLDAP.org wrote: > Date: Fri, 23 Jun 2000 22:41:16 GMT > From: Kurt@OpenLDAP.org > To: openldap-its@OpenLDAP.org > Subject: Re: sigset prototype not included on Linux platforms (ITS#603) > > At 04:54 PM 6/23/00 GMT, geksiong@sendmail.com wrote: > >Full_Name: Gek Low > >Version: 1.2 > >OS: Linux > >URL: ftp://ftp.openldap.org/incoming/ > >Submission from: (NULL) (63.211.143.38) > > > > > >I am trying to build OpenLDAP on the IA64 (Linux OS) and I found out that it is > >not > >including the prototype for sigset(), so the compiler is assuming it returns > >int, which > >is bad on a 64-bit system, because ints are only 32 bits. The prototype must be > >included > >to generate correct code. > > > >The sigset() prototype on Linux systems is contained within the __USE_UNIX98 > >ifdef in > >signal.h, so it is not included at all. However, there is a sigset function in > >libc, > >so everything links. The OpenLDAP configure script correctly/incorrectly says > >sigset() > >exist on Linux, but the missing prototype will not work for 64-bit Linux. > > I suggest using: > env ac_cv_func_sigset=no ./configure > > to workaround this problem. I do not suggest defining __USE_UNIX98. > This macro is internal to the implementation of the C library and, > as such, applications should not muck with it. > > Kurt > I beleive that using the sigaction() function whenever available is preferred to either signal() or sigset(). The semantices of signal() is not very well standardized and sigset() is less supported. On linux with glibc2 signal() has BSD semantics, and sigset() is supposed to have BSD semantics for signal() except for automaticaly restarting system calls. Linux with libc5 has sysV signal() and no sigset() but does have sigaction(). With sigaction() you can control the semantics to mach your needs. Villy
changed notes changed state Open to Suspended
changed state Suspended to Closed
Devel codes use sigaction. Likely will not be backported.