shithub: scc

Download patch

ref: 9765e95b59e0b020c32609b69cf573c597857abf
parent: 54289f10c0e558019e9ffd49274f8008c909680d
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Sat Oct 2 17:42:30 EDT 2021

libc: Fix sigaction() for OpenBSD

OpenBSD had the same sigaction() implementation than NetBSD,
but the implementation of OpenBSD is much simpler and we
only have to call the syscall.

diff: cannot open b/include/bits/openbsd/amd64/arch//null: file does not exist: 'b/include/bits/openbsd/amd64/arch//null' diff: cannot open a/src/libc/arch/bsd//null: file does not exist: 'a/src/libc/arch/bsd//null'
--- /dev/null
+++ b/include/bits/openbsd/amd64/arch/sigaction.h
@@ -1,0 +1,15 @@
+typedef unsigned int sigset_t;
+typedef struct siginfo siginfo_t;
+
+struct sigaction {
+	union {
+		void (*__sa_handler)(int);
+		void (*__sa_sigaction)(int, siginfo_t *, void *);
+	} __sigaction_u;
+
+	sigset_t sa_mask;
+	int sa_flags;
+};
+
+#define sa_handler      __sigaction_u.__sa_handler
+#define sa_sigaction    __sigaction_u.__sa_sigaction
--- /dev/null
+++ b/include/bits/openbsd/amd64/arch/stdint.h
@@ -1,0 +1,115 @@
+#define INT8_MAX  0x7F
+#define INT8_MIN  (-INT8_MAX-1)
+#define UINT8_MAX 0xFF
+
+#define INT16_MAX  0x7FFF
+#define INT16_MIN  (-INT16_MAX-1)
+#define UINT16_MAX 0xFFFF
+
+#define INT32_MAX  0x7FFFFFFF
+#define INT32_MIN  (-INT32_MAX-1)
+#define UINT32_MAX 0xFFFFFFFF
+
+#define INT64_MAX  0x7FFFFFFFFFFFFFFF
+#define INT64_MIN  (-INT64_MAX-1)
+#define UINT64_MAX 0xFFFFFFFFFFFFFFFF
+
+#define INT_LEAST8_MIN  INT8_MIN
+#define INT_LEAST8_MAX  INT8_MAX
+#define UINT_LEAST8_MAX UINT8_MAX
+
+#define INT_LEAST16_MIN  INT32_MIN
+#define INT_LEAST16_MAX  INT32_MAX
+#define UINT_LEAST16_MAX UINT32_MAX
+
+#define INT_LEAST32_MIN  INT32_MIN
+#define INT_LEAST32_MAX  INT32_MAX
+#define UINT_LEAST32_MAX UINT32_MAX
+
+#define INT_LEAST64_MIN  INT64_MIN
+#define INT_LEAST64_MAX  INT64_MAX
+#define UINT_LEAST64_MAX UINT64_MAX
+
+#define INT_FAST8_MIN  INT32_MIN
+#define INT_FAST8_MAX  INT32_MAX
+#define UINT_FAST8_MAX UINT32_MAX
+
+#define INT_FAST16_MIN  INT32_MIN
+#define INT_FAST16_MAX  INT32_MAX
+#define UINT_FAST16_MAX UINT32_MAX
+
+#define INT_FAST32_MIN  INT32_MIN
+#define INT_FAST32_MAX  INT32_MAX
+#define UINT_FAST32_MAX UINT32_MAX
+
+#define INT_FAST64_MIN  INT64_MIN
+#define INT_FAST64_MAX  INT64_MAX
+#define UINT_FAST64_MAX UINT64_MAX
+
+#define INTPTR_MIN  INT64_MIN
+#define INTPTR_MAX  INT64_MAX
+#define UINTPTR_MAX UINT64_MAX
+
+#define INTMAX_MIN  INT64_MIN
+#define INTMAX_MAX  INT64_MAX
+#define UINTMAX_MAX UINT64_MAX
+
+#define PTRDIFF_MIN INT64_MIN
+#define PTRDIFF_MAX INT64_MAX
+
+#define SIG_ATOMIC_MIN INT32_MIN
+#define SIG_ATOMIC_MAX INT32_MAX
+
+#define SIZE_MAX UINT64_MAX
+
+#define WCHAR_MIN INT32_MIN
+#define WCHAR_MAX INT32_MAX
+
+#define INT8_C(x)  x
+#define INT16_C(x) x
+#define INT32_C(x) x
+#define INT64_C(x) x ## LL
+
+#define UINT8_C(x)  x
+#define UINT16_C(x) x
+#define UINT32_C(x) x ## U
+#define UINT64_C(x) x ## ULL
+
+#define INTMAX_C(x)  x ## LL
+#define UINTMAX_C(x) x ## ULL
+
+typedef signed char int8_t;
+typedef short int16_t;
+typedef int int32_t;
+typedef long int64_t;
+
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned uint32_t;
+typedef unsigned long uint64_t;
+
+typedef signed char int_least8_t;
+typedef short int_least16_t;
+typedef int int_least32_t;
+typedef long int_least64_t;
+
+typedef unsigned char uint_least8_t;
+typedef unsigned short uint_least16_t;
+typedef unsigned uint_least32_t;
+typedef unsigned long uint_least64_t;
+
+typedef int int_fast8_t;
+typedef int int_fast16_t;
+typedef int int_fast32_t;
+typedef int int_fast64_t;
+
+typedef unsigned uint_fast8_t;
+typedef unsigned uint_fast16_t;
+typedef unsigned uint_fast32_t;
+typedef unsigned long uint_fast64_t;
+
+typedef long intptr_t;
+typedef unsigned long uintptr_t;
+
+typedef long intmax_t;
+typedef unsigned long uintmax_t;
--- /dev/null
+++ b/include/bits/openbsd/amd64/arch/time.h
@@ -1,0 +1,5 @@
+#define _MAXYEAR 9999
+
+typedef long time_t;
+typedef long clock_t;
+typedef long __suseconds_t;
--- a/include/bits/openbsd/amd64/stdint.h
+++ /dev/null
@@ -1,115 +1,0 @@
-#define INT8_MAX  0x7F
-#define INT8_MIN  (-INT8_MAX-1)
-#define UINT8_MAX 0xFF
-
-#define INT16_MAX  0x7FFF
-#define INT16_MIN  (-INT16_MAX-1)
-#define UINT16_MAX 0xFFFF
-
-#define INT32_MAX  0x7FFFFFFF
-#define INT32_MIN  (-INT32_MAX-1)
-#define UINT32_MAX 0xFFFFFFFF
-
-#define INT64_MAX  0x7FFFFFFFFFFFFFFF
-#define INT64_MIN  (-INT64_MAX-1)
-#define UINT64_MAX 0xFFFFFFFFFFFFFFFF
-
-#define INT_LEAST8_MIN  INT8_MIN
-#define INT_LEAST8_MAX  INT8_MAX
-#define UINT_LEAST8_MAX UINT8_MAX
-
-#define INT_LEAST16_MIN  INT32_MIN
-#define INT_LEAST16_MAX  INT32_MAX
-#define UINT_LEAST16_MAX UINT32_MAX
-
-#define INT_LEAST32_MIN  INT32_MIN
-#define INT_LEAST32_MAX  INT32_MAX
-#define UINT_LEAST32_MAX UINT32_MAX
-
-#define INT_LEAST64_MIN  INT64_MIN
-#define INT_LEAST64_MAX  INT64_MAX
-#define UINT_LEAST64_MAX UINT64_MAX
-
-#define INT_FAST8_MIN  INT32_MIN
-#define INT_FAST8_MAX  INT32_MAX
-#define UINT_FAST8_MAX UINT32_MAX
-
-#define INT_FAST16_MIN  INT32_MIN
-#define INT_FAST16_MAX  INT32_MAX
-#define UINT_FAST16_MAX UINT32_MAX
-
-#define INT_FAST32_MIN  INT32_MIN
-#define INT_FAST32_MAX  INT32_MAX
-#define UINT_FAST32_MAX UINT32_MAX
-
-#define INT_FAST64_MIN  INT64_MIN
-#define INT_FAST64_MAX  INT64_MAX
-#define UINT_FAST64_MAX UINT64_MAX
-
-#define INTPTR_MIN  INT64_MIN
-#define INTPTR_MAX  INT64_MAX
-#define UINTPTR_MAX UINT64_MAX
-
-#define INTMAX_MIN  INT64_MIN
-#define INTMAX_MAX  INT64_MAX
-#define UINTMAX_MAX UINT64_MAX
-
-#define PTRDIFF_MIN INT64_MIN
-#define PTRDIFF_MAX INT64_MAX
-
-#define SIG_ATOMIC_MIN INT32_MIN
-#define SIG_ATOMIC_MAX INT32_MAX
-
-#define SIZE_MAX UINT64_MAX
-
-#define WCHAR_MIN INT32_MIN
-#define WCHAR_MAX INT32_MAX
-
-#define INT8_C(x)  x
-#define INT16_C(x) x
-#define INT32_C(x) x
-#define INT64_C(x) x ## LL
-
-#define UINT8_C(x)  x
-#define UINT16_C(x) x
-#define UINT32_C(x) x ## U
-#define UINT64_C(x) x ## ULL
-
-#define INTMAX_C(x)  x ## LL
-#define UINTMAX_C(x) x ## ULL
-
-typedef signed char int8_t;
-typedef short int16_t;
-typedef int int32_t;
-typedef long int64_t;
-
-typedef unsigned char uint8_t;
-typedef unsigned short uint16_t;
-typedef unsigned uint32_t;
-typedef unsigned long uint64_t;
-
-typedef signed char int_least8_t;
-typedef short int_least16_t;
-typedef int int_least32_t;
-typedef long int_least64_t;
-
-typedef unsigned char uint_least8_t;
-typedef unsigned short uint_least16_t;
-typedef unsigned uint_least32_t;
-typedef unsigned long uint_least64_t;
-
-typedef int int_fast8_t;
-typedef int int_fast16_t;
-typedef int int_fast32_t;
-typedef int int_fast64_t;
-
-typedef unsigned uint_fast8_t;
-typedef unsigned uint_fast16_t;
-typedef unsigned uint_fast32_t;
-typedef unsigned long uint_fast64_t;
-
-typedef long intptr_t;
-typedef unsigned long uintptr_t;
-
-typedef long intmax_t;
-typedef unsigned long uintmax_t;
--- a/include/bits/openbsd/amd64/time.h
+++ /dev/null
@@ -1,5 +1,0 @@
-#define _MAXYEAR 9999
-
-typedef long time_t;
-typedef long clock_t;
-typedef long __suseconds_t;
--- a/include/bits/openbsd/sys.h
+++ b/include/bits/openbsd/sys.h
@@ -12,11 +12,7 @@
 
 typedef int pid_t;
 
-struct sigaction {
-	void (*sa_handler)(int);
-	int sa_mask;
-	int sa_flags;
-};
+struct sigaction;
 
 extern pid_t _getpid(void);
 extern int _kill(pid_t pid, int signum);
--- a/src/libc/arch/Makefile
+++ b/src/libc/arch/Makefile
@@ -3,24 +3,27 @@
 PROJECTDIR = ../../..
 
 DIRS =\
+	$(ARCHS)\
+	$(SYSTEMS)\
+	posix\
+
+ARCHS =\
 	amd64\
 	arm64\
 	arm\
-	darwin\
-	dragonfly\
 	i386\
-	linux\
-	netbsd\
-	openbsd\
-	posix\
 	ppc\
 
-BSD =\
+POSIX =\
 	netbsd\
 	openbsd\
 	darwin\
 	dragonfly\
+	linux\
 
+SYSTEM =\
+	$(POSIX)\
+
 include $(PROJECTDIR)/scripts/rules.mk
 include ../rules.mk
 
@@ -28,6 +31,4 @@
 
 all: $(ARCH) $(SYS)
 
-linux: posix
-
-$(BSD): bsd
+$(POSIX): posix
--- a/src/libc/arch/amd64/openbsd/.gitignore
+++ b/src/libc/arch/amd64/openbsd/.gitignore
@@ -7,6 +7,5 @@
 _open.s
 _read.s
 _sigaction.s
-_sigaction2.s
 _sys_errlist.c
 _write.s
--- a/src/libc/arch/amd64/openbsd/Makefile
+++ b/src/libc/arch/amd64/openbsd/Makefile
@@ -13,27 +13,23 @@
 	_lseek.$O\
 	_open.$O\
 	_read.$O\
-	_sigaction2.$O\
+	_sigaction.$O\
 	_write.$O\
 
-GENSRC = $(GENOBJS:.$O=.s)
-
 OBJS =\
 	$(GENOBJS)\
 	_sys_errlist.$O\
 
-all: $(LIBC) $(CRT)
+GENSRC = $(GENOBJS:.$O=.s)
 
-$(LIBC): $(OBJS)
-	$(MKLST)
+all: $(OBJS) $(CRT)
 
-crt.$O: ../crt-posix.s ../openbsd/crt.s
+$(CRT): ../crt-posix.s ../openbsd/crt.s
 
 $(GENSRC): syscall.lst
 	./gensys.sh $(@:.s=)
 
 clean:
-	rm -f $(GENSRC)
-	rm -f syscall _sys_errlist.c
+	rm -f $(GENSRC) _sys_errlist.c
 
 include deps.mk
--- a/src/libc/arch/amd64/openbsd/syscall.lst
+++ b/src/libc/arch/amd64/openbsd/syscall.lst
@@ -7,6 +7,6 @@
 6	_close	1
 17	_brk	1
 20	_getpid	0
-46	_sigaction2	5
+46	_sigaction	3
 122	_kill	2
 198	_lseek	3
--- a/src/libc/arch/bsd/_sigaction.c
+++ /dev/null
@@ -1,17 +1,0 @@
-#include <stddef.h>
-#include <sys.h>
-
-typedef struct ucontext_t ucontext_t;
-
-extern int _sigaction2(int,
-                       struct sigaction *, struct sigaction *,
-                       const void *,
-                       int);
-
-extern int _setcontext(ucontext_t *);
-
-int
-_sigaction(int sig, struct sigaction *new, struct sigaction *old)
-{
-	return _sigaction2(sig, new, old, _setcontext, 2);
-}
--- a/src/libc/arch/netbsd/Makefile
+++ b/src/libc/arch/netbsd/Makefile
@@ -3,4 +3,9 @@
 include $(PROJECTDIR)/scripts/rules.mk
 include ../../rules.mk
 
+OBJS =\
+	sigaction.$O\
+
 NODEP = 1
+
+all: $(OBJS)
--- /dev/null
+++ b/src/libc/arch/netbsd/_sigaction.c
@@ -1,0 +1,17 @@
+#include <stddef.h>
+#include <sys.h>
+
+typedef struct ucontext_t ucontext_t;
+
+extern int _sigaction2(int,
+                       struct sigaction *, struct sigaction *,
+                       const void *,
+                       int);
+
+extern int _setcontext(ucontext_t *);
+
+int
+_sigaction(int sig, struct sigaction *new, struct sigaction *old)
+{
+	return _sigaction2(sig, new, old, _setcontext, 2);
+}
--- a/src/libc/objs/amd64-openbsd.mk
+++ b/src/libc/objs/amd64-openbsd.mk
@@ -2,3 +2,35 @@
 
 OBJS =\
 	$(COMMON_OBJS)\
+	arch/amd64/openbsd/_brk.$O\
+	arch/amd64/openbsd/_close.$O\
+	arch/amd64/openbsd/_exit.$O\
+	arch/amd64/openbsd/_getpid.$O\
+	arch/amd64/openbsd/_kill.$O\
+	arch/amd64/openbsd/_lseek.$O\
+	arch/amd64/openbsd/_open.$O\
+	arch/amd64/openbsd/_read.$O\
+	arch/amd64/openbsd/_sigaction.$O\
+	arch/amd64/openbsd/_write.$O\
+	arch/amd64/openbsd/crt.$O\
+	arch/amd64/openbsd/_sys_errlist.$O\
+	arch/amd64/longjmp.$O\
+	arch/amd64/memchr.$O\
+	arch/amd64/memcmp.$O\
+	arch/amd64/memcpy.$O\
+	arch/amd64/memmove.$O\
+	arch/amd64/memset.$O\
+	arch/amd64/setjmp.$O\
+	arch/amd64/strchr.$O\
+	arch/amd64/strcmp.$O\
+	arch/amd64/strcpy.$O\
+	arch/posix/_getheap.$O\
+	arch/posix/_open.$O\
+	arch/posix/_systime.$O\
+	arch/posix/_tzone.$O\
+	arch/posix/clock.$O\
+	arch/posix/getenv.$O\
+	arch/posix/raise.$O\
+	arch/posix/signal.$O\
+	arch/posix/time.$O\
+	string/strlen.$O\