Inetd.c sigpause() --> __xpg_sigpause() not in uClibc

John Z. Bohach jzb at aexorsyst.com
Tue Nov 8 15:40:43 PST 2005


The recent synching of inetd.c with the Slackware version has the undesirable 
sideffect of using sigpause() (network/inetd.c, line 1386).

According to the sigpause() manpage, sigpause is deprecated and sigsuspend() 
should be used instead.

Philosophical arguments aside, when buildroot attempts to build busybox with 
uClibc, the sigpause call is mangled to __xpg_sigpause(), perhaps for POSIX 
compliance, though the rationale for such mangling's a bit beyond my 
expertise.  However, there is no __xpg_sigpause provided by uClibc, just 
__sigpause().

So you guessed it, linker chokes with undefined reference error to 
__xpg_sigpause(), which is why I'm emailing this list...

In looking at the diff that caused the changed:

http://www.busybox.net/cgi-bin/viewcvs.cgi/trunk/busybox/networking/inetd.c?rev=11732&r1=11010&r2=11732

it appears that reverting the few lines around the sigpause() back to the way 
it used to be with the sigsuspend in rev. 11010 would not do any harm, though 
appearances can be deceiving.  Either that, or try to get uClibc to add 
__xpg_sigpause as a weak-definition for __sigpause might also work.  But 
since sigpause is deprecated, I'd vote for the busybox solution (to not use 
sigpause()).

I can test this out and send the results back, if anyone's interested...

Regards,
John

P.S.:  By the way, this isn't an issue with glibc, since glibc provides 
__xpg_sigpause (as well as __sigpause).

-- 
     ###  Any similarity between my views and the truth is completely ###
     ###  coincidental, except that they are endorsed by NO ONE       ###



More information about the busybox mailing list