#endif
#ifdef RECALC_SIGPENDING_TAKES_VOID
-#define PENDING(p,b) has_pending_signals(&(p)->signal, (b))
+/* Principal of maximum uselessness says we need to provide this */
+static inline int _has_pending_signals(sigset_t *signal, sigset_t *blocked)
+{
+ unsigned long ready;
+ long i;
+
+ switch (_NSIG_WORDS) {
+ default:
+ for (i = _NSIG_WORDS, ready = 0; --i >= 0 ;)
+ ready |= signal->sig[i] &~ blocked->sig[i];
+ break;
+
+ case 4: ready = signal->sig[3] &~ blocked->sig[3];
+ ready |= signal->sig[2] &~ blocked->sig[2];
+ ready |= signal->sig[1] &~ blocked->sig[1];
+ ready |= signal->sig[0] &~ blocked->sig[0];
+ break;
+
+ case 2: ready = signal->sig[1] &~ blocked->sig[1];
+ ready |= signal->sig[0] &~ blocked->sig[0];
+ break;
+
+ case 1: ready = signal->sig[0] &~ blocked->sig[0];
+ }
+ return ready != 0;
+}
+
+#define PENDING(p,b) _has_pending_signals(&(p)->signal, (b))
static inline void _recalc_sigpending_tsk(struct task_struct *t)
{
t->sigpending = PENDING(&t->pending, &t->blocked) ||