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/imgact_aout.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/imgact_aout.c')
-rw-r--r-- | sys/kern/imgact_aout.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/kern/imgact_aout.c b/sys/kern/imgact_aout.c index 9e7455e14e1d..7d7ba51efd84 100644 --- a/sys/kern/imgact_aout.c +++ b/sys/kern/imgact_aout.c @@ -103,6 +103,7 @@ struct sysentvec aout_sysvec = { .sv_trap = NULL, .sv_onexec_old = exec_onexec_old, .sv_onexit = exit_onexit, + .sv_set_fork_retval = x86_set_fork_retval, }; #elif defined(__amd64__) @@ -141,6 +142,7 @@ struct sysentvec aout_sysvec = { .sv_syscallnames = freebsd32_syscallnames, .sv_onexec_old = exec_onexec_old, .sv_onexit = exit_onexit, + .sv_set_fork_retval = x86_set_fork_retval, }; #else #error "Port me" |