From 175d4b65a9c9cd4b2d3024c70cdf24d9cdb4800c Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 18 Feb 2004 00:54:17 +0000 Subject: Checkpoint a hack to enable running i386 libc_r binaries on a 64 bit kernel. I'm not happy with it yet - refinements are to come. This hack allows the kern.ps_strings and kern.usrstack sysctls to respond to a 32 bit request, such as those coming from emulated i386 binaries. --- sys/kern/kern_exec.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'sys/kern') diff --git a/sys/kern/kern_exec.c b/sys/kern/kern_exec.c index 6e3d86e..4d2a7fe 100644 --- a/sys/kern/kern_exec.c +++ b/sys/kern/kern_exec.c @@ -102,20 +102,38 @@ static int sysctl_kern_ps_strings(SYSCTL_HANDLER_ARGS) { struct proc *p; + int error; p = curproc; - return (SYSCTL_OUT(req, &p->p_sysent->sv_psstrings, - sizeof(p->p_sysent->sv_psstrings))); +#if defined(__amd64__) || defined(__ia64__) + if (req->oldlen == sizeof(unsigned int)) { + unsigned int val; + val = (unsigned int)p->p_sysent->sv_psstrings; + error = SYSCTL_OUT(req, &val, sizeof(val)); + } else +#endif + error = SYSCTL_OUT(req, &p->p_sysent->sv_psstrings, + sizeof(p->p_sysent->sv_psstrings)); + return error; } static int sysctl_kern_usrstack(SYSCTL_HANDLER_ARGS) { struct proc *p; + int error; p = curproc; - return (SYSCTL_OUT(req, &p->p_sysent->sv_usrstack, - sizeof(p->p_sysent->sv_usrstack))); +#if defined(__amd64__) || defined(__ia64__) + if (req->oldlen == sizeof(unsigned int)) { + unsigned int val; + val = (unsigned int)p->p_sysent->sv_usrstack; + error = SYSCTL_OUT(req, &val, sizeof(val)); + } else +#endif + error = SYSCTL_OUT(req, &p->p_sysent->sv_usrstack, + sizeof(p->p_sysent->sv_usrstack)); + return error; } static int -- cgit v1.1