Eu não sei o motivo original; em 1996, o cabeçalho específico do Linux era adicionado com a seguinte definição:
/* A 'sigset_t' has a bit for each signal. Having 32 * 4 * 8 bits gives
us up to 1024 signals. */
#define _SIGSET_NWORDS 32
typedef struct
{
unsigned int __val[_SIGSET_NWORDS];
} __sigset_t;
e este limite de "1024 sinais" foi preservado na definição atual:
/* A 'sigset_t' has a bit for each signal. */
#define _SIGSET_NWORDS (1024 / (8 * sizeof (unsigned long int)))
typedef struct
{
unsigned long int __val[_SIGSET_NWORDS];
} __sigset_t;
que torna o cálculo baseado em 1024 mais claro (e resulta em 16 longs não assinados em x86 de 64 bits, isto é, 128 bytes).
Presumivelmente, os mantenedores da glibc queriam deixar espaço para crescimento ...
musl quer compatibilidade ABI com glibc para sigaction
, então usa o mesmo tamanho de 1024 bits (128 bytes) :
TYPEDEF struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t;