mirror of
https://git.proxmox.com/git/wasi-libc
synced 2025-08-16 01:08:20 +00:00
Replace old <signal.h> support with emulated <signal.h> support. (#183)
wasm doesn't support signals, so provide an emulation layer, enabled with -D_WASI_EMULATED_SIGNAL and -lwasi-emulated-signal.
This commit is contained in:
parent
a6d0b4c74b
commit
d1cd4f4836
21
Makefile
21
Makefile
@ -62,6 +62,11 @@ LIBC_BOTTOM_HALF_ALL_SOURCES = \
|
|||||||
$(shell find $(LIBC_BOTTOM_HALF_SOURCES) -name \*.c)
|
$(shell find $(LIBC_BOTTOM_HALF_SOURCES) -name \*.c)
|
||||||
LIBWASI_EMULATED_MMAN_SOURCES = \
|
LIBWASI_EMULATED_MMAN_SOURCES = \
|
||||||
$(shell find $(LIBC_BOTTOM_HALF_DIR)/mman -name \*.c)
|
$(shell find $(LIBC_BOTTOM_HALF_DIR)/mman -name \*.c)
|
||||||
|
LIBWASI_EMULATED_SIGNAL_SOURCES = \
|
||||||
|
$(shell find $(LIBC_BOTTOM_HALF_DIR)/signal -name \*.c)
|
||||||
|
LIBWASI_EMULATED_SIGNAL_MUSL_SOURCES = \
|
||||||
|
$(LIBC_TOP_HALF_MUSL_SRC_DIR)/signal/psignal.c \
|
||||||
|
$(LIBC_TOP_HALF_MUSL_SRC_DIR)/string/strsignal.c
|
||||||
LIBC_BOTTOM_HALF_CRT_SOURCES = $(wildcard $(LIBC_BOTTOM_HALF_DIR)/crt/*.c)
|
LIBC_BOTTOM_HALF_CRT_SOURCES = $(wildcard $(LIBC_BOTTOM_HALF_DIR)/crt/*.c)
|
||||||
LIBC_TOP_HALF_DIR = $(CURDIR)/libc-top-half
|
LIBC_TOP_HALF_DIR = $(CURDIR)/libc-top-half
|
||||||
LIBC_TOP_HALF_MUSL_DIR = $(LIBC_TOP_HALF_DIR)/musl
|
LIBC_TOP_HALF_MUSL_DIR = $(LIBC_TOP_HALF_DIR)/musl
|
||||||
@ -232,6 +237,8 @@ MUSL_PRINTSCAN_OBJS = $(call objs,$(MUSL_PRINTSCAN_SOURCES))
|
|||||||
MUSL_PRINTSCAN_LONG_DOUBLE_OBJS = $(patsubst %.o,%.long-double.o,$(MUSL_PRINTSCAN_OBJS))
|
MUSL_PRINTSCAN_LONG_DOUBLE_OBJS = $(patsubst %.o,%.long-double.o,$(MUSL_PRINTSCAN_OBJS))
|
||||||
MUSL_PRINTSCAN_NO_FLOATING_POINT_OBJS = $(patsubst %.o,%.no-floating-point.o,$(MUSL_PRINTSCAN_OBJS))
|
MUSL_PRINTSCAN_NO_FLOATING_POINT_OBJS = $(patsubst %.o,%.no-floating-point.o,$(MUSL_PRINTSCAN_OBJS))
|
||||||
LIBWASI_EMULATED_MMAN_OBJS = $(call objs,$(LIBWASI_EMULATED_MMAN_SOURCES))
|
LIBWASI_EMULATED_MMAN_OBJS = $(call objs,$(LIBWASI_EMULATED_MMAN_SOURCES))
|
||||||
|
LIBWASI_EMULATED_SIGNAL_OBJS = $(call objs,$(LIBWASI_EMULATED_SIGNAL_SOURCES))
|
||||||
|
LIBWASI_EMULATED_SIGNAL_MUSL_OBJS = $(call objs,$(LIBWASI_EMULATED_SIGNAL_MUSL_SOURCES))
|
||||||
|
|
||||||
# These variables describe the locations of various files and
|
# These variables describe the locations of various files and
|
||||||
# directories in the generated sysroot tree.
|
# directories in the generated sysroot tree.
|
||||||
@ -333,6 +340,8 @@ $(SYSROOT_LIB)/libc-printscan-no-floating-point.a: $(MUSL_PRINTSCAN_NO_FLOATING_
|
|||||||
|
|
||||||
$(SYSROOT_LIB)/libwasi-emulated-mman.a: $(LIBWASI_EMULATED_MMAN_OBJS)
|
$(SYSROOT_LIB)/libwasi-emulated-mman.a: $(LIBWASI_EMULATED_MMAN_OBJS)
|
||||||
|
|
||||||
|
$(SYSROOT_LIB)/libwasi-emulated-signal.a: $(LIBWASI_EMULATED_SIGNAL_OBJS) $(LIBWASI_EMULATED_SIGNAL_MUSL_OBJS)
|
||||||
|
|
||||||
%.a:
|
%.a:
|
||||||
@mkdir -p "$(@D)"
|
@mkdir -p "$(@D)"
|
||||||
# On Windows, the commandline for the ar invocation got too long, so it needs to be split up.
|
# On Windows, the commandline for the ar invocation got too long, so it needs to be split up.
|
||||||
@ -352,6 +361,9 @@ $(MUSL_PRINTSCAN_NO_FLOATING_POINT_OBJS): WASM_CFLAGS += \
|
|||||||
-D__wasilibc_printscan_no_floating_point \
|
-D__wasilibc_printscan_no_floating_point \
|
||||||
-D__wasilibc_printscan_floating_point_support_option="\"remove -lc-printscan-no-floating-point from the link command\""
|
-D__wasilibc_printscan_floating_point_support_option="\"remove -lc-printscan-no-floating-point from the link command\""
|
||||||
|
|
||||||
|
$(LIBWASI_EMULATED_SIGNAL_MUSL_OBJS): WASM_CFLAGS += \
|
||||||
|
-D_WASI_EMULATED_SIGNAL
|
||||||
|
|
||||||
$(OBJDIR)/%.long-double.o: $(CURDIR)/%.c include_dirs
|
$(OBJDIR)/%.long-double.o: $(CURDIR)/%.c include_dirs
|
||||||
@mkdir -p "$(@D)"
|
@mkdir -p "$(@D)"
|
||||||
"$(WASM_CC)" $(WASM_CFLAGS) -MD -MP -o $@ -c $<
|
"$(WASM_CC)" $(WASM_CFLAGS) -MD -MP -o $@ -c $<
|
||||||
@ -374,7 +386,7 @@ startup_files $(LIBC_BOTTOM_HALF_ALL_OBJS): WASM_CFLAGS += \
|
|||||||
-I$(LIBC_BOTTOM_HALF_CLOUDLIBC_SRC_INC) \
|
-I$(LIBC_BOTTOM_HALF_CLOUDLIBC_SRC_INC) \
|
||||||
-I$(LIBC_BOTTOM_HALF_CLOUDLIBC_SRC)
|
-I$(LIBC_BOTTOM_HALF_CLOUDLIBC_SRC)
|
||||||
|
|
||||||
$(LIBC_TOP_HALF_ALL_OBJS) $(MUSL_PRINTSCAN_LONG_DOUBLE_OBJS) $(MUSL_PRINTSCAN_NO_FLOATING_POINT_OBJS): WASM_CFLAGS += \
|
$(LIBC_TOP_HALF_ALL_OBJS) $(MUSL_PRINTSCAN_LONG_DOUBLE_OBJS) $(MUSL_PRINTSCAN_NO_FLOATING_POINT_OBJS) $(LIBWASI_EMULATED_SIGNAL_MUSL_OBJS): WASM_CFLAGS += \
|
||||||
-I$(LIBC_TOP_HALF_MUSL_SRC_DIR)/include \
|
-I$(LIBC_TOP_HALF_MUSL_SRC_DIR)/include \
|
||||||
-I$(LIBC_TOP_HALF_MUSL_SRC_DIR)/internal \
|
-I$(LIBC_TOP_HALF_MUSL_SRC_DIR)/internal \
|
||||||
-I$(LIBC_TOP_HALF_MUSL_DIR)/arch/wasm32 \
|
-I$(LIBC_TOP_HALF_MUSL_DIR)/arch/wasm32 \
|
||||||
@ -434,7 +446,8 @@ libc: include_dirs \
|
|||||||
$(SYSROOT_LIB)/libc.a \
|
$(SYSROOT_LIB)/libc.a \
|
||||||
$(SYSROOT_LIB)/libc-printscan-long-double.a \
|
$(SYSROOT_LIB)/libc-printscan-long-double.a \
|
||||||
$(SYSROOT_LIB)/libc-printscan-no-floating-point.a \
|
$(SYSROOT_LIB)/libc-printscan-no-floating-point.a \
|
||||||
$(SYSROOT_LIB)/libwasi-emulated-mman.a
|
$(SYSROOT_LIB)/libwasi-emulated-mman.a \
|
||||||
|
$(SYSROOT_LIB)/libwasi-emulated-signal.a
|
||||||
|
|
||||||
finish: startup_files libc
|
finish: startup_files libc
|
||||||
#
|
#
|
||||||
@ -458,7 +471,7 @@ finish: startup_files libc
|
|||||||
@# since these dependencies can vary between llvm versions.
|
@# since these dependencies can vary between llvm versions.
|
||||||
"$(WASM_NM)" --defined-only "$(SYSROOT_LIB)"/libc.a "$(SYSROOT_LIB)"/*.o \
|
"$(WASM_NM)" --defined-only "$(SYSROOT_LIB)"/libc.a "$(SYSROOT_LIB)"/*.o \
|
||||||
|grep ' [[:upper:]] ' |sed 's/.* [[:upper:]] //' |LC_ALL=C sort > "$(SYSROOT_SHARE)/defined-symbols.txt"
|
|grep ' [[:upper:]] ' |sed 's/.* [[:upper:]] //' |LC_ALL=C sort > "$(SYSROOT_SHARE)/defined-symbols.txt"
|
||||||
for undef_sym in $$("$(WASM_NM)" --undefined-only "$(SYSROOT_LIB)"/*.a "$(SYSROOT_LIB)"/*.o \
|
for undef_sym in $$("$(WASM_NM)" --undefined-only "$(SYSROOT_LIB)"/libc.a "$(SYSROOT_LIB)"/libc-*.a "$(SYSROOT_LIB)"/*.o \
|
||||||
|grep ' U ' |sed 's/.* U //' |LC_ALL=C sort |uniq); do \
|
|grep ' U ' |sed 's/.* U //' |LC_ALL=C sort |uniq); do \
|
||||||
grep -q '\<'$$undef_sym'\>' "$(SYSROOT_SHARE)/defined-symbols.txt" || echo $$undef_sym; \
|
grep -q '\<'$$undef_sym'\>' "$(SYSROOT_SHARE)/defined-symbols.txt" || echo $$undef_sym; \
|
||||||
done | grep -v "^__mul" > "$(SYSROOT_SHARE)/undefined-symbols.txt"
|
done | grep -v "^__mul" > "$(SYSROOT_SHARE)/undefined-symbols.txt"
|
||||||
@ -469,7 +482,7 @@ finish: startup_files libc
|
|||||||
# Generate a test file that includes all public header files.
|
# Generate a test file that includes all public header files.
|
||||||
#
|
#
|
||||||
cd "$(SYSROOT)" && \
|
cd "$(SYSROOT)" && \
|
||||||
for header in $$(find include -type f -not -name mman.h |grep -v /bits/); do \
|
for header in $$(find include -type f -not -name mman.h -not -name signal.h |grep -v /bits/); do \
|
||||||
echo '#include <'$$header'>' | sed 's/include\///' ; \
|
echo '#include <'$$header'>' | sed 's/include\///' ; \
|
||||||
done |LC_ALL=C sort >share/$(MULTIARCH_TRIPLE)/include-all.c ; \
|
done |LC_ALL=C sort >share/$(MULTIARCH_TRIPLE)/include-all.c ; \
|
||||||
cd - >/dev/null
|
cd - >/dev/null
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
void abort(void) {
|
void abort(void) {
|
||||||
// WASI doesn't yet support signals, so just trap to halt the program.
|
// wasm doesn't support signals, so just trap to halt the program.
|
||||||
__builtin_trap();
|
__builtin_trap();
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
#include <__function___isatty.h>
|
#include <__function___isatty.h>
|
||||||
#include <__functions_malloc.h>
|
#include <__functions_malloc.h>
|
||||||
#include <__functions_memcpy.h>
|
#include <__functions_memcpy.h>
|
||||||
#include <__header_bits_signal.h>
|
|
||||||
#include <__header_dirent.h>
|
#include <__header_dirent.h>
|
||||||
#include <__header_fcntl.h>
|
#include <__header_fcntl.h>
|
||||||
#include <__header_inttypes.h>
|
#include <__header_inttypes.h>
|
||||||
@ -117,7 +116,6 @@
|
|||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
#include <search.h>
|
#include <search.h>
|
||||||
#include <semaphore.h>
|
#include <semaphore.h>
|
||||||
#include <signal.h>
|
|
||||||
#include <stdalign.h>
|
#include <stdalign.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdc-predef.h>
|
#include <stdc-predef.h>
|
||||||
@ -141,7 +139,6 @@
|
|||||||
#include <sys/reg.h>
|
#include <sys/reg.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
#include <sys/signal.h>
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/stropts.h>
|
#include <sys/stropts.h>
|
||||||
|
@ -75,11 +75,6 @@
|
|||||||
#define BLK_RESTART 0x10
|
#define BLK_RESTART 0x10
|
||||||
#define BREAK 243
|
#define BREAK 243
|
||||||
#define BUFSIZ 1024
|
#define BUFSIZ 1024
|
||||||
#define BUS_ADRALN 1
|
|
||||||
#define BUS_ADRERR 2
|
|
||||||
#define BUS_MCEERR_AO 5
|
|
||||||
#define BUS_MCEERR_AR 4
|
|
||||||
#define BUS_OBJERR 3
|
|
||||||
#define BYTE_ORDER __BYTE_ORDER
|
#define BYTE_ORDER __BYTE_ORDER
|
||||||
#define CANBSIZ 255
|
#define CANBSIZ 255
|
||||||
#define CBRK CEOL
|
#define CBRK CEOL
|
||||||
@ -98,12 +93,6 @@
|
|||||||
#define CHRTYPE '3'
|
#define CHRTYPE '3'
|
||||||
#define CINTR CTRL('c')
|
#define CINTR CTRL('c')
|
||||||
#define CKILL CTRL('u')
|
#define CKILL CTRL('u')
|
||||||
#define CLD_CONTINUED 6
|
|
||||||
#define CLD_DUMPED 3
|
|
||||||
#define CLD_EXITED 1
|
|
||||||
#define CLD_KILLED 2
|
|
||||||
#define CLD_STOPPED 5
|
|
||||||
#define CLD_TRAPPED 4
|
|
||||||
#define CLNEXT CTRL('v')
|
#define CLNEXT CTRL('v')
|
||||||
#define CLOCKS_PER_SEC ((clock_t)1000000000)
|
#define CLOCKS_PER_SEC ((clock_t)1000000000)
|
||||||
#define CLOCK_MONOTONIC (&_CLOCK_MONOTONIC)
|
#define CLOCK_MONOTONIC (&_CLOCK_MONOTONIC)
|
||||||
@ -384,14 +373,6 @@
|
|||||||
#define FORM_C 3
|
#define FORM_C 3
|
||||||
#define FORM_N 1
|
#define FORM_N 1
|
||||||
#define FORM_T 2
|
#define FORM_T 2
|
||||||
#define FPE_FLTDIV 3
|
|
||||||
#define FPE_FLTINV 7
|
|
||||||
#define FPE_FLTOVF 4
|
|
||||||
#define FPE_FLTRES 6
|
|
||||||
#define FPE_FLTSUB 8
|
|
||||||
#define FPE_FLTUND 5
|
|
||||||
#define FPE_INTDIV 1
|
|
||||||
#define FPE_INTOVF 2
|
|
||||||
#define FP_ILOGB0 FP_ILOGBNAN
|
#define FP_ILOGB0 FP_ILOGBNAN
|
||||||
#define FP_ILOGBNAN (-1-0x7fffffff)
|
#define FP_ILOGBNAN (-1-0x7fffffff)
|
||||||
#define FP_INFINITE 1
|
#define FP_INFINITE 1
|
||||||
@ -588,14 +569,6 @@
|
|||||||
#define IGMP_V2_MEMBERSHIP_REPORT 0x16
|
#define IGMP_V2_MEMBERSHIP_REPORT 0x16
|
||||||
#define IGMP_v1_ROUTER 1
|
#define IGMP_v1_ROUTER 1
|
||||||
#define IGMP_v2_ROUTER 2
|
#define IGMP_v2_ROUTER 2
|
||||||
#define ILL_BADSTK 8
|
|
||||||
#define ILL_COPROC 7
|
|
||||||
#define ILL_ILLADR 3
|
|
||||||
#define ILL_ILLOPC 1
|
|
||||||
#define ILL_ILLOPN 2
|
|
||||||
#define ILL_ILLTRP 4
|
|
||||||
#define ILL_PRVOPC 5
|
|
||||||
#define ILL_PRVREG 6
|
|
||||||
#define IN6ADDRSZ NS_IN6ADDRSZ
|
#define IN6ADDRSZ NS_IN6ADDRSZ
|
||||||
#define IN6ADDR_ANY_INIT { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }
|
#define IN6ADDR_ANY_INIT { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } }
|
||||||
#define IN6ADDR_LOOPBACK_INIT { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } }
|
#define IN6ADDR_LOOPBACK_INIT { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 } }
|
||||||
@ -1571,10 +1544,6 @@
|
|||||||
#define SEEK_END __WASI_WHENCE_END
|
#define SEEK_END __WASI_WHENCE_END
|
||||||
#define SEEK_SET __WASI_WHENCE_SET
|
#define SEEK_SET __WASI_WHENCE_SET
|
||||||
#define SEGSIZE 512
|
#define SEGSIZE 512
|
||||||
#define SEGV_ACCERR 2
|
|
||||||
#define SEGV_BNDERR 3
|
|
||||||
#define SEGV_MAPERR 1
|
|
||||||
#define SEGV_PKUERR 4
|
|
||||||
#define SEM_FAILED ((sem_t *)0)
|
#define SEM_FAILED ((sem_t *)0)
|
||||||
#define SERVFAIL ns_r_servfail
|
#define SERVFAIL ns_r_servfail
|
||||||
#define SHORTBITS (sizeof(short) * 8)
|
#define SHORTBITS (sizeof(short) * 8)
|
||||||
@ -1583,59 +1552,10 @@
|
|||||||
#define SHUT_RD __WASI_SDFLAGS_RD
|
#define SHUT_RD __WASI_SDFLAGS_RD
|
||||||
#define SHUT_RDWR (SHUT_RD | SHUT_WR)
|
#define SHUT_RDWR (SHUT_RD | SHUT_WR)
|
||||||
#define SHUT_WR __WASI_SDFLAGS_WR
|
#define SHUT_WR __WASI_SDFLAGS_WR
|
||||||
#define SIGABRT __WASI_SIGNAL_ABRT
|
|
||||||
#define SIGALRM __WASI_SIGNAL_ALRM
|
|
||||||
#define SIGBUS __WASI_SIGNAL_BUS
|
|
||||||
#define SIGCHLD __WASI_SIGNAL_CHLD
|
|
||||||
#define SIGCONT __WASI_SIGNAL_CONT
|
|
||||||
#define SIGEV_NONE 1
|
|
||||||
#define SIGEV_SIGNAL 0
|
|
||||||
#define SIGEV_THREAD 2
|
|
||||||
#define SIGFPE __WASI_SIGNAL_FPE
|
|
||||||
#define SIGHUP __WASI_SIGNAL_HUP
|
|
||||||
#define SIGILL __WASI_SIGNAL_ILL
|
|
||||||
#define SIGINT __WASI_SIGNAL_INT
|
|
||||||
#define SIGIO SIGPOLL
|
|
||||||
#define SIGIOT SIGABRT
|
|
||||||
#define SIGKILL __WASI_SIGNAL_KILL
|
|
||||||
#define SIGPIPE __WASI_SIGNAL_PIPE
|
|
||||||
#define SIGPOLL __WASI_SIGNAL_POLL
|
|
||||||
#define SIGPROF __WASI_SIGNAL_PROF
|
|
||||||
#define SIGPWR __WASI_SIGNAL_PWR
|
|
||||||
#define SIGQUIT __WASI_SIGNAL_QUIT
|
|
||||||
#define SIGSEGV __WASI_SIGNAL_SEGV
|
|
||||||
#define SIGSTOP __WASI_SIGNAL_STOP
|
|
||||||
#define SIGSYS __WASI_SIGNAL_SYS
|
|
||||||
#define SIGTERM __WASI_SIGNAL_TERM
|
|
||||||
#define SIGTRAP __WASI_SIGNAL_TRAP
|
|
||||||
#define SIGTSTP __WASI_SIGNAL_TSTP
|
|
||||||
#define SIGTTIN __WASI_SIGNAL_TTIN
|
|
||||||
#define SIGTTOU __WASI_SIGNAL_TTOU
|
|
||||||
#define SIGUNUSED SIGSYS
|
|
||||||
#define SIGURG __WASI_SIGNAL_URG
|
|
||||||
#define SIGUSR1 __WASI_SIGNAL_USR1
|
|
||||||
#define SIGUSR2 __WASI_SIGNAL_USR2
|
|
||||||
#define SIGVTALRM __WASI_SIGNAL_VTALRM
|
|
||||||
#define SIGWINCH __WASI_SIGNAL_WINCH
|
|
||||||
#define SIGXCPU __WASI_SIGNAL_XCPU
|
|
||||||
#define SIGXFSZ __WASI_SIGNAL_XFSZ
|
|
||||||
#define SIG_ATOMIC_MAX INT32_MAX
|
#define SIG_ATOMIC_MAX INT32_MAX
|
||||||
#define SIG_ATOMIC_MIN INT32_MIN
|
#define SIG_ATOMIC_MIN INT32_MIN
|
||||||
#define SIG_BLOCK 0
|
|
||||||
#define SIG_HOLD ((void (*)(int)) 2)
|
|
||||||
#define SIG_SETMASK 2
|
|
||||||
#define SIG_UNBLOCK 1
|
|
||||||
#define SIZE_MAX UINT32_MAX
|
#define SIZE_MAX UINT32_MAX
|
||||||
#define SI_ASYNCIO (-4)
|
|
||||||
#define SI_ASYNCNL (-60)
|
|
||||||
#define SI_KERNEL 128
|
|
||||||
#define SI_LOAD_SHIFT 16
|
#define SI_LOAD_SHIFT 16
|
||||||
#define SI_MESGQ (-3)
|
|
||||||
#define SI_QUEUE (-1)
|
|
||||||
#define SI_SIGIO (-5)
|
|
||||||
#define SI_TIMER (-2)
|
|
||||||
#define SI_TKILL (-6)
|
|
||||||
#define SI_USER 0
|
|
||||||
#define SLC_ABORT 7
|
#define SLC_ABORT 7
|
||||||
#define SLC_ACK 0x80
|
#define SLC_ACK 0x80
|
||||||
#define SLC_AO 4
|
#define SLC_AO 4
|
||||||
@ -2366,7 +2286,6 @@
|
|||||||
#define _SC_XOPEN_XPG4 100
|
#define _SC_XOPEN_XPG4 100
|
||||||
#define _SEARCH_H
|
#define _SEARCH_H
|
||||||
#define _SEMAPHORE_H
|
#define _SEMAPHORE_H
|
||||||
#define _SIGNAL_H
|
|
||||||
#define _SIZE_T
|
#define _SIZE_T
|
||||||
#define _STDALIGN_H
|
#define _STDALIGN_H
|
||||||
#define _STDBOOL_H
|
#define _STDBOOL_H
|
||||||
@ -3105,7 +3024,6 @@
|
|||||||
#define __wasilibc___errno_values_h
|
#define __wasilibc___errno_values_h
|
||||||
#define __wasilibc___fd_set_h
|
#define __wasilibc___fd_set_h
|
||||||
#define __wasilibc___function___isatty_h
|
#define __wasilibc___function___isatty_h
|
||||||
#define __wasilibc___header_bits_signal_h
|
|
||||||
#define __wasilibc___header_dirent_h
|
#define __wasilibc___header_dirent_h
|
||||||
#define __wasilibc___header_fcntl_h
|
#define __wasilibc___header_fcntl_h
|
||||||
#define __wasilibc___header_netinet_in_h
|
#define __wasilibc___header_netinet_in_h
|
||||||
@ -3411,32 +3329,10 @@
|
|||||||
#define rr_code rr_hdr.icmp6_code
|
#define rr_code rr_hdr.icmp6_code
|
||||||
#define rr_seqnum rr_hdr.icmp6_data32[0]
|
#define rr_seqnum rr_hdr.icmp6_data32[0]
|
||||||
#define rr_type rr_hdr.icmp6_type
|
#define rr_type rr_hdr.icmp6_type
|
||||||
#define sa_handler __sa_handler.sa_handler
|
|
||||||
#define sa_sigaction __sa_handler.sa_sigaction
|
|
||||||
#define scalbln(x,y) __tg_real_2_1(scalbln, (x), (y))
|
#define scalbln(x,y) __tg_real_2_1(scalbln, (x), (y))
|
||||||
#define scalbn(x,y) __tg_real_2_1(scalbn, (x), (y))
|
#define scalbn(x,y) __tg_real_2_1(scalbn, (x), (y))
|
||||||
#define scandir64 scandir
|
#define scandir64 scandir
|
||||||
#define setbit(x,i) __bitop(x,i,|=)
|
#define setbit(x,i) __bitop(x,i,|=)
|
||||||
#define si_addr __si_fields.__sigfault.si_addr
|
|
||||||
#define si_addr_lsb __si_fields.__sigfault.si_addr_lsb
|
|
||||||
#define si_arch __si_fields.__sigsys.si_arch
|
|
||||||
#define si_band __si_fields.__sigpoll.si_band
|
|
||||||
#define si_call_addr __si_fields.__sigsys.si_call_addr
|
|
||||||
#define si_fd __si_fields.__sigpoll.si_fd
|
|
||||||
#define si_int si_value.sival_int
|
|
||||||
#define si_lower __si_fields.__sigfault.__first.__addr_bnd.si_lower
|
|
||||||
#define si_overrun __si_fields.__si_common.__first.__timer.si_overrun
|
|
||||||
#define si_pid __si_fields.__si_common.__first.__piduid.si_pid
|
|
||||||
#define si_pkey __si_fields.__sigfault.__first.si_pkey
|
|
||||||
#define si_ptr si_value.sival_ptr
|
|
||||||
#define si_status __si_fields.__si_common.__second.__sigchld.si_status
|
|
||||||
#define si_stime __si_fields.__si_common.__second.__sigchld.si_stime
|
|
||||||
#define si_syscall __si_fields.__sigsys.si_syscall
|
|
||||||
#define si_timerid __si_fields.__si_common.__first.__timer.si_timerid
|
|
||||||
#define si_uid __si_fields.__si_common.__first.__piduid.si_uid
|
|
||||||
#define si_upper __si_fields.__sigfault.__first.__addr_bnd.si_upper
|
|
||||||
#define si_utime __si_fields.__si_common.__second.__sigchld.si_utime
|
|
||||||
#define si_value __si_fields.__si_common.__second.si_value
|
|
||||||
#define signbit(x) (__builtin_signbit(x))
|
#define signbit(x) (__builtin_signbit(x))
|
||||||
#define sin(x) __tg_real_complex(sin, (x))
|
#define sin(x) __tg_real_complex(sin, (x))
|
||||||
#define sinh(x) __tg_real_complex(sinh, (x))
|
#define sinh(x) __tg_real_complex(sinh, (x))
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
#ifndef __wasilibc___header_bits_signal_h
|
|
||||||
#define __wasilibc___header_bits_signal_h
|
|
||||||
|
|
||||||
#include <wasi/api.h>
|
|
||||||
|
|
||||||
#define SIGHUP __WASI_SIGNAL_HUP
|
|
||||||
#define SIGINT __WASI_SIGNAL_INT
|
|
||||||
#define SIGQUIT __WASI_SIGNAL_QUIT
|
|
||||||
#define SIGILL __WASI_SIGNAL_ILL
|
|
||||||
#define SIGTRAP __WASI_SIGNAL_TRAP
|
|
||||||
#define SIGABRT __WASI_SIGNAL_ABRT
|
|
||||||
#define SIGBUS __WASI_SIGNAL_BUS
|
|
||||||
#define SIGFPE __WASI_SIGNAL_FPE
|
|
||||||
#define SIGKILL __WASI_SIGNAL_KILL
|
|
||||||
#define SIGUSR1 __WASI_SIGNAL_USR1
|
|
||||||
#define SIGSEGV __WASI_SIGNAL_SEGV
|
|
||||||
#define SIGUSR2 __WASI_SIGNAL_USR2
|
|
||||||
#define SIGPIPE __WASI_SIGNAL_PIPE
|
|
||||||
#define SIGALRM __WASI_SIGNAL_ALRM
|
|
||||||
#define SIGTERM __WASI_SIGNAL_TERM
|
|
||||||
#define SIGCHLD __WASI_SIGNAL_CHLD
|
|
||||||
#define SIGCONT __WASI_SIGNAL_CONT
|
|
||||||
#define SIGSTOP __WASI_SIGNAL_STOP
|
|
||||||
#define SIGTSTP __WASI_SIGNAL_TSTP
|
|
||||||
#define SIGTTIN __WASI_SIGNAL_TTIN
|
|
||||||
#define SIGTTOU __WASI_SIGNAL_TTOU
|
|
||||||
#define SIGURG __WASI_SIGNAL_URG
|
|
||||||
#define SIGXCPU __WASI_SIGNAL_XCPU
|
|
||||||
#define SIGXFSZ __WASI_SIGNAL_XFSZ
|
|
||||||
#define SIGVTALRM __WASI_SIGNAL_VTALRM
|
|
||||||
#define SIGPROF __WASI_SIGNAL_PROF
|
|
||||||
#define SIGWINCH __WASI_SIGNAL_WINCH
|
|
||||||
#define SIGPOLL __WASI_SIGNAL_POLL
|
|
||||||
#define SIGPWR __WASI_SIGNAL_PWR
|
|
||||||
#define SIGSYS __WASI_SIGNAL_SYS
|
|
||||||
|
|
||||||
#define SIGIOT SIGABRT
|
|
||||||
#define SIGIO SIGPOLL
|
|
||||||
#define SIGUNUSED SIGSYS
|
|
||||||
|
|
||||||
#endif
|
|
142
libc-bottom-half/signal/signal.c
Normal file
142
libc-bottom-half/signal/signal.c
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
// Userspace emulation of `raise` and `signal`.
|
||||||
|
//
|
||||||
|
// WebAssembly doesn't support asynchronous signal delivery, so we can't
|
||||||
|
// support it in WASI libc. But we can make things like `raise` work.
|
||||||
|
|
||||||
|
#define _WASI_EMULATED_SIGNAL
|
||||||
|
#define _ALL_SOURCE
|
||||||
|
#define _GNU_SOURCE
|
||||||
|
#include <signal.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
void __SIG_IGN(int sig) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
_Noreturn
|
||||||
|
void __SIG_ERR(int sig) {
|
||||||
|
__builtin_trap();
|
||||||
|
}
|
||||||
|
|
||||||
|
_Noreturn
|
||||||
|
static void core_handler(int sig) {
|
||||||
|
fprintf(stderr, "Program recieved fatal signal: %s\n", strsignal(sig));
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
_Noreturn
|
||||||
|
static void terminate_handler(int sig) {
|
||||||
|
fprintf(stderr, "Program recieved termination signal: %s\n", strsignal(sig));
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
_Noreturn
|
||||||
|
static void stop_handler(int sig) {
|
||||||
|
fprintf(stderr, "Program recieved stop signal: %s\n", strsignal(sig));
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void continue_handler(int sig) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
static const sighandler_t default_handlers[_NSIG] = {
|
||||||
|
// Default behavior: "core".
|
||||||
|
[SIGABRT] = core_handler,
|
||||||
|
[SIGBUS] = core_handler,
|
||||||
|
[SIGFPE] = core_handler,
|
||||||
|
[SIGILL] = core_handler,
|
||||||
|
#if SIGIOT != SIGABRT
|
||||||
|
[SIGIOT] = core_handler,
|
||||||
|
#endif
|
||||||
|
[SIGQUIT] = core_handler,
|
||||||
|
[SIGSEGV] = core_handler,
|
||||||
|
[SIGSYS] = core_handler,
|
||||||
|
[SIGTRAP] = core_handler,
|
||||||
|
[SIGXCPU] = core_handler,
|
||||||
|
[SIGXFSZ] = core_handler,
|
||||||
|
#if defined(SIGUNUSED) && SIGUNUSED != SIGSYS
|
||||||
|
[SIGUNUSED] = core_handler,
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Default behavior: ignore.
|
||||||
|
[SIGCHLD] = SIG_IGN,
|
||||||
|
#if defined(SIGCLD) && SIGCLD != SIGCHLD
|
||||||
|
[SIGCLD] = SIG_IGN,
|
||||||
|
#endif
|
||||||
|
[SIGURG] = SIG_IGN,
|
||||||
|
[SIGWINCH] = SIG_IGN,
|
||||||
|
|
||||||
|
// Default behavior: "continue".
|
||||||
|
[SIGCONT] = continue_handler,
|
||||||
|
|
||||||
|
// Default behavior: "stop".
|
||||||
|
[SIGSTOP] = stop_handler,
|
||||||
|
[SIGTSTP] = stop_handler,
|
||||||
|
[SIGTTIN] = stop_handler,
|
||||||
|
[SIGTTOU] = stop_handler,
|
||||||
|
|
||||||
|
// Default behavior: "terminate".
|
||||||
|
[SIGHUP] = terminate_handler,
|
||||||
|
[SIGINT] = terminate_handler,
|
||||||
|
[SIGKILL] = terminate_handler,
|
||||||
|
[SIGUSR1] = terminate_handler,
|
||||||
|
[SIGUSR2] = terminate_handler,
|
||||||
|
[SIGPIPE] = terminate_handler,
|
||||||
|
[SIGALRM] = terminate_handler,
|
||||||
|
[SIGTERM] = terminate_handler,
|
||||||
|
[SIGSTKFLT] = terminate_handler,
|
||||||
|
[SIGVTALRM] = terminate_handler,
|
||||||
|
[SIGPROF] = terminate_handler,
|
||||||
|
[SIGIO] = terminate_handler,
|
||||||
|
#if SIGPOLL != SIGIO
|
||||||
|
[SIGPOLL] = terminate_handler,
|
||||||
|
#endif
|
||||||
|
[SIGPWR] = terminate_handler,
|
||||||
|
};
|
||||||
|
|
||||||
|
static sighandler_t handlers[_NSIG];
|
||||||
|
|
||||||
|
int raise(int sig) {
|
||||||
|
if (sig < 0 || sig >= _NSIG) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sighandler_t func = handlers[sig];
|
||||||
|
|
||||||
|
if (func == NULL) {
|
||||||
|
default_handlers[sig](sig);
|
||||||
|
} else {
|
||||||
|
func(sig);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void (*signal(int sig, void (*func)(int)))(int) {
|
||||||
|
assert(SIG_DFL == NULL);
|
||||||
|
|
||||||
|
if (sig < 0 || sig >= _NSIG) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return SIG_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sig == SIGKILL || sig == SIGSTOP) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return SIG_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
sighandler_t old = handlers[sig];
|
||||||
|
|
||||||
|
handlers[sig] = func;
|
||||||
|
|
||||||
|
return old;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern __typeof(signal) bsd_signal __attribute__((weak, alias("signal")));
|
||||||
|
extern __typeof(signal) __sysv_signal __attribute__((weak, alias("signal")));
|
@ -1 +1,40 @@
|
|||||||
#include <__header_bits_signal.h>
|
#ifdef _WASI_EMULATED_SIGNAL
|
||||||
|
|
||||||
|
#define SIGHUP 1
|
||||||
|
#define SIGINT 2
|
||||||
|
#define SIGQUIT 3
|
||||||
|
#define SIGILL 4
|
||||||
|
#define SIGTRAP 5
|
||||||
|
#define SIGABRT 6
|
||||||
|
#define SIGIOT SIGABRT
|
||||||
|
#define SIGBUS 7
|
||||||
|
#define SIGFPE 8
|
||||||
|
#define SIGKILL 9
|
||||||
|
#define SIGUSR1 10
|
||||||
|
#define SIGSEGV 11
|
||||||
|
#define SIGUSR2 12
|
||||||
|
#define SIGPIPE 13
|
||||||
|
#define SIGALRM 14
|
||||||
|
#define SIGTERM 15
|
||||||
|
#define SIGSTKFLT 16
|
||||||
|
#define SIGCHLD 17
|
||||||
|
#define SIGCONT 18
|
||||||
|
#define SIGSTOP 19
|
||||||
|
#define SIGTSTP 20
|
||||||
|
#define SIGTTIN 21
|
||||||
|
#define SIGTTOU 22
|
||||||
|
#define SIGURG 23
|
||||||
|
#define SIGXCPU 24
|
||||||
|
#define SIGXFSZ 25
|
||||||
|
#define SIGVTALRM 26
|
||||||
|
#define SIGPROF 27
|
||||||
|
#define SIGWINCH 28
|
||||||
|
#define SIGIO 29
|
||||||
|
#define SIGPOLL 29
|
||||||
|
#define SIGPWR 30
|
||||||
|
#define SIGSYS 31
|
||||||
|
#define SIGUNUSED SIGSYS
|
||||||
|
|
||||||
|
#define _NSIG 65
|
||||||
|
|
||||||
|
#endif
|
||||||
|
@ -1,3 +1,7 @@
|
|||||||
|
#ifndef _WASI_EMULATED_SIGNAL
|
||||||
|
#error "wasm lacks signal support; to enable minimal signal emulation, \
|
||||||
|
compile with -D_WASI_EMULATED_SIGNAL and link with -lwasi-emulated-signal"
|
||||||
|
#else
|
||||||
#ifndef _SIGNAL_H
|
#ifndef _SIGNAL_H
|
||||||
#define _SIGNAL_H
|
#define _SIGNAL_H
|
||||||
|
|
||||||
@ -15,7 +19,6 @@ extern "C" {
|
|||||||
#ifdef _GNU_SOURCE
|
#ifdef _GNU_SOURCE
|
||||||
#define __ucontext ucontext
|
#define __ucontext ucontext
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#define __NEED_size_t
|
#define __NEED_size_t
|
||||||
#define __NEED_pid_t
|
#define __NEED_pid_t
|
||||||
@ -44,6 +47,7 @@ extern "C" {
|
|||||||
#define SI_KERNEL 128
|
#define SI_KERNEL 128
|
||||||
|
|
||||||
typedef struct sigaltstack stack_t;
|
typedef struct sigaltstack stack_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -53,6 +57,7 @@ typedef struct sigaltstack stack_t;
|
|||||||
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
|
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
|
||||||
|| defined(_BSD_SOURCE)
|
|| defined(_BSD_SOURCE)
|
||||||
|
|
||||||
|
#ifdef __wasilibc_unmodified_upstream /* WASI has no sigaction */
|
||||||
#define SIG_HOLD ((void (*)(int)) 2)
|
#define SIG_HOLD ((void (*)(int)) 2)
|
||||||
|
|
||||||
#define FPE_INTDIV 1
|
#define FPE_INTDIV 1
|
||||||
@ -190,6 +195,7 @@ struct sigevent {
|
|||||||
#define SIGEV_SIGNAL 0
|
#define SIGEV_SIGNAL 0
|
||||||
#define SIGEV_NONE 1
|
#define SIGEV_NONE 1
|
||||||
#define SIGEV_THREAD 2
|
#define SIGEV_THREAD 2
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __wasilibc_unmodified_upstream /* WASI has no realtime signals */
|
#ifdef __wasilibc_unmodified_upstream /* WASI has no realtime signals */
|
||||||
int __libc_current_sigrtmin(void);
|
int __libc_current_sigrtmin(void);
|
||||||
@ -218,14 +224,16 @@ int sigtimedwait(const sigset_t *__restrict, siginfo_t *__restrict, const struct
|
|||||||
int sigqueue(pid_t, int, union sigval);
|
int sigqueue(pid_t, int, union sigval);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __wasilibc_unmodified_upstream /* WASI has no threads yet */
|
||||||
int pthread_sigmask(int, const sigset_t *__restrict, sigset_t *__restrict);
|
int pthread_sigmask(int, const sigset_t *__restrict, sigset_t *__restrict);
|
||||||
int pthread_kill(pthread_t, int);
|
int pthread_kill(pthread_t, int);
|
||||||
|
|
||||||
#ifdef __wasilibc_unmodified_upstream /* WASI has no signals */
|
|
||||||
void psiginfo(const siginfo_t *, const char *);
|
|
||||||
void psignal(int, const char *);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __wasilibc_unmodified_upstream /* WASI has no siginfo */
|
||||||
|
void psiginfo(const siginfo_t *, const char *);
|
||||||
|
#endif
|
||||||
|
void psignal(int, const char *);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __wasilibc_unmodified_upstream /* WASI has no signals */
|
#ifdef __wasilibc_unmodified_upstream /* WASI has no signals */
|
||||||
@ -256,7 +264,6 @@ void (*sigset(int, void (*)(int)))(int);
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __wasilibc_unmodified_upstream /* WASI has no signals */
|
|
||||||
#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
|
#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
|
||||||
#define NSIG _NSIG
|
#define NSIG _NSIG
|
||||||
typedef void (*sig_t)(int);
|
typedef void (*sig_t)(int);
|
||||||
@ -265,6 +272,7 @@ typedef void (*sig_t)(int);
|
|||||||
#ifdef _GNU_SOURCE
|
#ifdef _GNU_SOURCE
|
||||||
typedef void (*sighandler_t)(int);
|
typedef void (*sighandler_t)(int);
|
||||||
void (*bsd_signal(int, void (*)(int)))(int);
|
void (*bsd_signal(int, void (*)(int)))(int);
|
||||||
|
#ifdef __wasilibc_unmodified_upstream /* WASI has no signal sets */
|
||||||
int sigisemptyset(const sigset_t *);
|
int sigisemptyset(const sigset_t *);
|
||||||
int sigorset (sigset_t *, const sigset_t *, const sigset_t *);
|
int sigorset (sigset_t *, const sigset_t *, const sigset_t *);
|
||||||
int sigandset(sigset_t *, const sigset_t *, const sigset_t *);
|
int sigandset(sigset_t *, const sigset_t *, const sigset_t *);
|
||||||
@ -272,19 +280,30 @@ int sigandset(sigset_t *, const sigset_t *, const sigset_t *);
|
|||||||
#define SA_NOMASK SA_NODEFER
|
#define SA_NOMASK SA_NODEFER
|
||||||
#define SA_ONESHOT SA_RESETHAND
|
#define SA_ONESHOT SA_RESETHAND
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __wasilibc_unmodified_upstream /* 1 is a valid function pointer on wasm */
|
||||||
#define SIG_ERR ((void (*)(int))-1)
|
#define SIG_ERR ((void (*)(int))-1)
|
||||||
#define SIG_DFL ((void (*)(int)) 0)
|
#define SIG_DFL ((void (*)(int)) 0)
|
||||||
#define SIG_IGN ((void (*)(int)) 1)
|
#define SIG_IGN ((void (*)(int)) 1)
|
||||||
|
#else
|
||||||
|
void __SIG_ERR(int);
|
||||||
|
void __SIG_IGN(int);
|
||||||
|
#define SIG_ERR (__SIG_ERR)
|
||||||
|
#define SIG_DFL ((void (*)(int)) 0)
|
||||||
|
#define SIG_IGN (__SIG_IGN)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __wasilibc_unmodified_upstream /* Make sig_atomic_t 64-bit on wasm64 */
|
||||||
typedef int sig_atomic_t;
|
typedef int sig_atomic_t;
|
||||||
|
#else
|
||||||
#ifdef __wasilibc_unmodified_upstream /* WASI has no signals */
|
typedef long sig_atomic_t;
|
||||||
void (*signal(int, void (*)(int)))(int);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void (*signal(int, void (*)(int)))(int);
|
||||||
int raise(int);
|
int raise(int);
|
||||||
|
|
||||||
|
#ifdef __wasilibc_unmodified_upstream /* WASI has no sigtimedwait */
|
||||||
#if _REDIR_TIME64
|
#if _REDIR_TIME64
|
||||||
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|
||||||
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
|
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) \
|
||||||
@ -292,9 +311,11 @@ int raise(int);
|
|||||||
__REDIR(sigtimedwait, __sigtimedwait_time64);
|
__REDIR(sigtimedwait, __sigtimedwait_time64);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
@ -2,7 +2,9 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
|
#ifdef __wasilibc_unmodified_upstream // WASI has no realtime signals
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#endif
|
||||||
#include <sys/sysinfo.h>
|
#include <sys/sysinfo.h>
|
||||||
#include "syscall.h"
|
#include "syscall.h"
|
||||||
#include "libc.h"
|
#include "libc.h"
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "../../include/signal.h"
|
#include "../../include/signal.h"
|
||||||
|
|
||||||
|
#ifdef __wasilibc_unmodified_upstream // WASI has no sigaction
|
||||||
hidden int __sigaction(int, const struct sigaction *, struct sigaction *);
|
hidden int __sigaction(int, const struct sigaction *, struct sigaction *);
|
||||||
|
|
||||||
hidden void __block_all_sigs(void *);
|
hidden void __block_all_sigs(void *);
|
||||||
@ -10,5 +11,6 @@ hidden void __block_app_sigs(void *);
|
|||||||
hidden void __restore_sigs(void *);
|
hidden void __restore_sigs(void *);
|
||||||
|
|
||||||
hidden void __get_handler_set(sigset_t *);
|
hidden void __get_handler_set(sigset_t *);
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user