summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2004-02-18 00:54:17 +0000
committerpeter <peter@FreeBSD.org>2004-02-18 00:54:17 +0000
commit175d4b65a9c9cd4b2d3024c70cdf24d9cdb4800c (patch)
tree35e36006965893775bb5c0f6cec18913e0fac5d9 /sys/kern
parent60723c32606f318dd3816d81ba433654f812312b (diff)
downloadFreeBSD-src-175d4b65a9c9cd4b2d3024c70cdf24d9cdb4800c.zip
FreeBSD-src-175d4b65a9c9cd4b2d3024c70cdf24d9cdb4800c.tar.gz
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.
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/kern_exec.c26
1 files changed, 22 insertions, 4 deletions
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
OpenPOWER on IntegriCloud