diff options
author | Dmitry Chagin <dchagin@FreeBSD.org> | 2021-08-12 08:45:25 +0000 |
---|---|---|
committer | Dmitry Chagin <dchagin@FreeBSD.org> | 2021-08-12 08:45:25 +0000 |
commit | de8374df28cc23ce0d893fd96d1ad0a861414154 (patch) | |
tree | 55b80d76c65061e6746ca6f7635b201829229d5c /sys/kern/init_main.c | |
parent | fc37be246021ee9b7110c9f506141c2bf0bc9fb0 (diff) | |
download | src-de8374df28cc23ce0d893fd96d1ad0a861414154.tar.gz src-de8374df28cc23ce0d893fd96d1ad0a861414154.zip |
fork: Allow ABI to specify fork return values for child.
At least Linux x86 ABI's does not use carry bit and expects that the dx register
is preserved. For this add a new sv_set_fork_retval hook and call it from cpu_fork().
Add a short comment about touching dx in x86_set_fork_retval(), for more details
see phab comments from kib@ and imp@.
Reviewed by: kib
Differential revision: https://reviews.freebsd.org/D31472
MFC after: 2 weeks
Diffstat (limited to 'sys/kern/init_main.c')
-rw-r--r-- | sys/kern/init_main.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/sys/kern/init_main.c b/sys/kern/init_main.c index 86cc2494272f..fde07dcbf46d 100644 --- a/sys/kern/init_main.c +++ b/sys/kern/init_main.c @@ -402,6 +402,12 @@ null_set_syscall_retval(struct thread *td __unused, int error __unused) panic("null_set_syscall_retval"); } +static void +null_set_fork_retval(struct thread *td __unused) +{ + +} + struct sysentvec null_sysvec = { .sv_size = 0, .sv_table = NULL, @@ -430,6 +436,7 @@ struct sysentvec null_sysvec = { .sv_schedtail = NULL, .sv_thread_detach = NULL, .sv_trap = NULL, + .sv_set_fork_retval = null_set_fork_retval, }; /* |