Module Name: src Committed By: thorpej Date: Sat Nov 6 20:42:57 UTC 2021
Modified Files: src/sys/arch/aarch64/aarch64: netbsd32_machdep.c src/sys/arch/amd64/amd64: netbsd32_machdep.c netbsd32_machdep_16.c src/sys/arch/arm/include: netbsd32_machdep.h src/sys/arch/mips/mips: netbsd32_machdep.c netbsd32_machdep_16.c src/sys/arch/sparc64/sparc64: netbsd32_machdep.c netbsd32_machdep_16.c src/sys/compat/netbsd32: netbsd32.h netbsd32_exec.h netbsd32_signal.c Log Message: COMPAT_NETBSD32 is all about running the 32-bit flavor of native binaries on a 64-bit platform[*], as such: - Make the logic about which "sendsig" flavor to call MI (as it is in the native 64-bit environment) and follow the same rules as the native 32-bit environment. - Make COMPAT_NETBSD32 x COMPAT_16 work the same as it would in the native 32-bit environment by providing a netbsd32_sendsig_sigcontext_16_hook, rather than overriding the entire sendsig logic with a netbsd32_sendsig_hook. - In netbsd32___sigaction_sigtramp(), make sure the compat_netbsd32_16 module is loaded if the trampoline version specifies a sigcontext style handler, otherwise return EINVAL so that libc can try again with siginfo style. [*] ...except for arm32, which uses it to mean "run 32-bit OABI binaries from the 32-bit EABI environment". Doing it this way was arguably a mistake, but we are stuck with it for now, so support it by providing a machine- dependent override for netbsd32_sendsig() that also disables the corresponding logic in netbsd32___sigaction_sigtramp(). Fixes PR kern/56487. To generate a diff of this commit: cvs rdiff -u -r1.21 -r1.22 src/sys/arch/aarch64/aarch64/netbsd32_machdep.c cvs rdiff -u -r1.139 -r1.140 src/sys/arch/amd64/amd64/netbsd32_machdep.c cvs rdiff -u -r1.6 -r1.7 src/sys/arch/amd64/amd64/netbsd32_machdep_16.c cvs rdiff -u -r1.3 -r1.4 src/sys/arch/arm/include/netbsd32_machdep.h cvs rdiff -u -r1.22 -r1.23 src/sys/arch/mips/mips/netbsd32_machdep.c cvs rdiff -u -r1.6 -r1.7 src/sys/arch/mips/mips/netbsd32_machdep_16.c cvs rdiff -u -r1.116 -r1.117 src/sys/arch/sparc64/sparc64/netbsd32_machdep.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/sparc64/sparc64/netbsd32_machdep_16.c cvs rdiff -u -r1.137 -r1.138 src/sys/compat/netbsd32/netbsd32.h cvs rdiff -u -r1.36 -r1.37 src/sys/compat/netbsd32/netbsd32_exec.h cvs rdiff -u -r1.52 -r1.53 src/sys/compat/netbsd32/netbsd32_signal.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.