See sigsetops(3) for details on manipulating signal sets.
If a signal is both blocked and has a disposition of "ignored", it is not added to the mask of pending signals when generated.
The set of signals that is pending for a thread is the union of the set of signals that is pending for that thread and the set of signals that is pending for the process as a whole; see signal(7).
A child created via fork(2) initially has an empty pending signal set; the pending signal set is preserved across an execve(2).
The original Linux system call was named sigpending(). However, with the addition of real-time signals in Linux 2.2, the fixed-size, 32-bit sigset_t argument supported by that system call was no longer fit for purpose. Consequently, a new system call, rt_sigpending(), was added to support an enlarged sigset_t type. The new system call takes a second argument, size_t sigsetsize, which specifies the size in bytes of the signal set in set. The glibc sigpending() wrapper function hides these details from us, transparently calling rt_sigpending() when the kernel provides it.