Skip to content

Commit 87fc0bf

Browse files
authored
Use precise size for sigset_t. NFC (#26574)
1 parent aec26fd commit 87fc0bf

5 files changed

Lines changed: 21 additions & 6 deletions

File tree

system/lib/libc/musl/arch/emscripten/bits/alltypes.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,8 +400,15 @@ typedef struct __locale_struct * locale_t;
400400
#endif
401401

402402

403+
// Musl uses 128 bytes for sigset_t, presumably for some kind of ABI
404+
// compatability with the kernel or GLIBC, but in emscripten we can be precise.
405+
// Since we have _NSIG = 65 which only need 2 `long`s for the bitmask.
406+
// The signals we support are
407+
// 1 - 31 - standard POSIX signals (see emscripten/bits/signal.h)
408+
// 32 - 34 - pthread-specific signals (see pthread_impl.h>
409+
// 35 - 65 - user-defined RT signals (we don't currently have any test coverage of these).
403410
#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t)
404-
typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t;
411+
typedef struct __sigset_t { unsigned long __bits[2]; } sigset_t;
405412
#define __DEFINED_sigset_t
406413
#endif
407414

system/lib/libc/musl/include/alltypes.h.in

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,14 @@ TYPEDEF struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t;
7373

7474
TYPEDEF struct __locale_struct * locale_t;
7575

76-
TYPEDEF struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t;
76+
// Musl uses 128 bytes for sigset_t, presumably for some kind of ABI
77+
// compatability with the kernel or GLIBC, but in emscripten we can be precise.
78+
// Since we have _NSIG = 65 which only need 2 `long`s for the bitmask.
79+
// The signals we support are
80+
// 1 - 31 - standard POSIX signals (see emscripten/bits/signal.h)
81+
// 32 - 34 - pthread-specific signals (see pthread_impl.h>
82+
// 35 - 65 - user-defined RT signals (we don't currently have any test coverage of these).
83+
TYPEDEF struct __sigset_t { unsigned long __bits[2]; } sigset_t;
7784

7885
STRUCT iovec { void *iov_base; size_t iov_len; };
7986

test/codesize/test_codesize_cxx_lto.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
"a.out.js": 18563,
33
"a.out.js.gz": 7666,
44
"a.out.nodebug.wasm": 101956,
5-
"a.out.nodebug.wasm.gz": 39461,
5+
"a.out.nodebug.wasm.gz": 39460,
66
"total": 120519,
7-
"total_gz": 47127,
7+
"total_gz": 47126,
88
"sent": [
99
"a (emscripten_resize_heap)",
1010
"b (_setitimer_js)",

test/codesize/test_codesize_hello_dylink_all.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"a.out.js": 244300,
3-
"a.out.nodebug.wasm": 577451,
4-
"total": 821751,
3+
"a.out.nodebug.wasm": 577444,
4+
"total": 821744,
55
"sent": [
66
"IMG_Init",
77
"IMG_Load",

test/core/test_signals.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ void test_sigaction() {
146146

147147
void test_sigemptyset() {
148148
sigset_t s = { 0 };
149+
printf("sizeof sigset_t: %zu\n", sizeof(sigset_t));
149150
assert(sigisemptyset(&s));
150151
sigaddset(&s, SIGUSR1);
151152
assert(!sigisemptyset(&s));

0 commit comments

Comments
 (0)