void print_sigset_addr_len(struct tcb *tcp, long addr, long len) { char mask[NSIG / 8]; if (!addr) { tprints("NULL"); return; } /* Here len is usually equals NSIG / 8 or current_wordsize. * But we code this defensively: */ if (len < 0) { bad: tprintf("%#lx", addr); return; } if (len >= NSIG / 8) len = NSIG / 8; else len = (len + 3) & ~3; if (umoven(tcp, addr, len, mask) < 0) goto bad; tprints(sprintsigmask_n("", mask, len)); }
static const char * sprint_old_sigmask_val(const char *const prefix, const unsigned long mask) { #if defined(current_wordsize) || !defined(WORDS_BIGENDIAN) return sprintsigmask_n(prefix, &mask, current_wordsize); #else /* !current_wordsize && WORDS_BIGENDIAN */ if (current_wordsize == sizeof(mask)) { return sprintsigmask_val(prefix, mask); } else { uint32_t mask32 = mask; return sprintsigmask_val(prefix, mask32); } #endif }
static void print_sigset_addr_len_limit(struct tcb *tcp, long addr, long len, long min_len) { /* * Here len is usually equal to NSIG / 8 or current_wordsize. * But we code this defensively: */ if (len < min_len || len > NSIG / 8) { printaddr(addr); return; } int mask[NSIG / 8 / sizeof(int)] = {}; if (umoven_or_printaddr(tcp, addr, len, mask)) return; tprints(sprintsigmask_n("", mask, len)); }
static void print_sigset_addr_len_limit(struct tcb *const tcp, const kernel_ulong_t addr, const kernel_ulong_t len, const unsigned int min_len) { /* * Here len is usually equal to NSIG_BYTES or current_wordsize. * But we code this defensively: */ if (len < min_len || len > NSIG_BYTES) { printaddr(addr); return; } int mask[NSIG_BYTES / sizeof(int)] = {}; if (umoven_or_printaddr(tcp, addr, len, mask)) return; tprints(sprintsigmask_n("", mask, len)); }
void print_sigset_addr_len(struct tcb *tcp, long addr, long len) { char mask[NSIG / 8]; /* Here len is usually equals NSIG / 8 or current_wordsize. * But we code this defensively: */ if (len < 0) { printaddr(addr); return; } if (len >= NSIG / 8) len = NSIG / 8; else len = (len + 3) & ~3; if (umoven_or_printaddr(tcp, addr, len, mask)) return; tprints(sprintsigmask_n("", mask, len)); }