svn commit: r219155 - in stable/8/sys: amd64/linux32
compat/freebsd32
Konstantin Belousov
kib at FreeBSD.org
Tue Mar 1 21:51:32 UTC 2011
Author: kib
Date: Tue Mar 1 21:51:32 2011
New Revision: 219155
URL: http://svn.freebsd.org/changeset/base/219155
Log:
MFC r210431:
Remove the linux_exec_copyin_args(), freebsd32_exec_copyin_args() may
serve as well. COMPAT_FREEBSD32 is a prerequisite for COMPAT_LINUX32.
MFC r210451:
Use forward declartion for enum uio_seg in imgact.h. This allows to remove
inclusion of sys/uio.h from the header.
MFC r210498:
Revert r210451, and the similar part of the r210431. The forward-declaration
for the enum tag when enum definition is not complete is not allowed by
C99, and is gcc extension.
MFC r210501:
Remove unneeded includes.
Requested by: dchagin
Modified:
stable/8/sys/amd64/linux32/linux32_machdep.c
stable/8/sys/amd64/linux32/syscalls.master
stable/8/sys/compat/freebsd32/freebsd32_misc.c
stable/8/sys/compat/freebsd32/freebsd32_util.h
Directory Properties:
stable/8/sys/ (props changed)
stable/8/sys/amd64/include/xen/ (props changed)
stable/8/sys/cddl/contrib/opensolaris/ (props changed)
stable/8/sys/contrib/dev/acpica/ (props changed)
stable/8/sys/contrib/pf/ (props changed)
Modified: stable/8/sys/amd64/linux32/linux32_machdep.c
==============================================================================
--- stable/8/sys/amd64/linux32/linux32_machdep.c Tue Mar 1 21:48:22 2011 (r219154)
+++ stable/8/sys/amd64/linux32/linux32_machdep.c Tue Mar 1 21:51:32 2011 (r219155)
@@ -60,10 +60,9 @@ __FBSDID("$FreeBSD$");
#include <vm/vm.h>
#include <vm/pmap.h>
-#include <vm/vm_extern.h>
-#include <vm/vm_kern.h>
#include <vm/vm_map.h>
+#include <compat/freebsd32/freebsd32_util.h>
#include <amd64/linux32/linux.h>
#include <amd64/linux32/linux32_proto.h>
#include <compat/linux/linux_ipc.h>
@@ -107,105 +106,6 @@ bsd_to_linux_sigaltstack(int bsa)
return (lsa);
}
-/*
- * Custom version of exec_copyin_args() so that we can translate
- * the pointers.
- */
-static int
-linux_exec_copyin_args(struct image_args *args, char *fname,
- enum uio_seg segflg, char **argv, char **envv)
-{
- char *argp, *envp;
- u_int32_t *p32, arg;
- size_t length;
- int error;
-
- bzero(args, sizeof(*args));
- if (argv == NULL)
- return (EFAULT);
-
- /*
- * Allocate temporary demand zeroed space for argument and
- * environment strings
- */
- args->buf = (char *)kmem_alloc_wait(exec_map,
- PATH_MAX + ARG_MAX + MAXSHELLCMDLEN);
- if (args->buf == NULL)
- return (ENOMEM);
- args->begin_argv = args->buf;
- args->endp = args->begin_argv;
- args->stringspace = ARG_MAX;
-
- args->fname = args->buf + ARG_MAX;
-
- /*
- * Copy the file name.
- */
- error = (segflg == UIO_SYSSPACE) ?
- copystr(fname, args->fname, PATH_MAX, &length) :
- copyinstr(fname, args->fname, PATH_MAX, &length);
- if (error != 0)
- goto err_exit;
-
- /*
- * extract arguments first
- */
- p32 = (u_int32_t *)argv;
- for (;;) {
- error = copyin(p32++, &arg, sizeof(arg));
- if (error)
- goto err_exit;
- if (arg == 0)
- break;
- argp = PTRIN(arg);
- error = copyinstr(argp, args->endp, args->stringspace, &length);
- if (error) {
- if (error == ENAMETOOLONG)
- error = E2BIG;
-
- goto err_exit;
- }
- args->stringspace -= length;
- args->endp += length;
- args->argc++;
- }
-
- args->begin_envv = args->endp;
-
- /*
- * extract environment strings
- */
- if (envv) {
- p32 = (u_int32_t *)envv;
- for (;;) {
- error = copyin(p32++, &arg, sizeof(arg));
- if (error)
- goto err_exit;
- if (arg == 0)
- break;
- envp = PTRIN(arg);
- error = copyinstr(envp, args->endp, args->stringspace,
- &length);
- if (error) {
- if (error == ENAMETOOLONG)
- error = E2BIG;
- goto err_exit;
- }
- args->stringspace -= length;
- args->endp += length;
- args->envc++;
- }
- }
-
- return (0);
-
-err_exit:
- kmem_free_wakeup(exec_map, (vm_offset_t)args->buf,
- PATH_MAX + ARG_MAX + MAXSHELLCMDLEN);
- args->buf = NULL;
- return (error);
-}
-
int
linux_execve(struct thread *td, struct linux_execve_args *args)
{
@@ -220,8 +120,8 @@ linux_execve(struct thread *td, struct l
printf(ARGS(execve, "%s"), path);
#endif
- error = linux_exec_copyin_args(&eargs, path, UIO_SYSSPACE, args->argp,
- args->envp);
+ error = freebsd32_exec_copyin_args(&eargs, path, UIO_SYSSPACE,
+ args->argp, args->envp);
free(path, M_TEMP);
if (error == 0)
error = kern_execve(td, &eargs, NULL);
Modified: stable/8/sys/amd64/linux32/syscalls.master
==============================================================================
--- stable/8/sys/amd64/linux32/syscalls.master Tue Mar 1 21:48:22 2011 (r219154)
+++ stable/8/sys/amd64/linux32/syscalls.master Tue Mar 1 21:51:32 2011 (r219155)
@@ -54,8 +54,8 @@
l_int mode); }
9 AUE_LINK STD { int linux_link(char *path, char *to); }
10 AUE_UNLINK STD { int linux_unlink(char *path); }
-11 AUE_EXECVE STD { int linux_execve(char *path, char **argp, \
- char **envp); }
+11 AUE_EXECVE STD { int linux_execve(char *path, u_int32_t *argp, \
+ u_int32_t *envp); }
12 AUE_CHDIR STD { int linux_chdir(char *path); }
13 AUE_NULL STD { int linux_time(l_time_t *tm); }
14 AUE_MKNOD STD { int linux_mknod(char *path, l_int mode, \
Modified: stable/8/sys/compat/freebsd32/freebsd32_misc.c
==============================================================================
--- stable/8/sys/compat/freebsd32/freebsd32_misc.c Tue Mar 1 21:48:22 2011 (r219154)
+++ stable/8/sys/compat/freebsd32/freebsd32_misc.c Tue Mar 1 21:51:32 2011 (r219155)
@@ -265,7 +265,7 @@ freebsd32_sigaltstack(struct thread *td,
* Custom version of exec_copyin_args() so that we can translate
* the pointers.
*/
-static int
+int
freebsd32_exec_copyin_args(struct image_args *args, char *fname,
enum uio_seg segflg, u_int32_t *argv, u_int32_t *envv)
{
Modified: stable/8/sys/compat/freebsd32/freebsd32_util.h
==============================================================================
--- stable/8/sys/compat/freebsd32/freebsd32_util.h Tue Mar 1 21:48:22 2011 (r219154)
+++ stable/8/sys/compat/freebsd32/freebsd32_util.h Tue Mar 1 21:51:32 2011 (r219155)
@@ -34,6 +34,7 @@
#include <sys/cdefs.h>
#include <sys/exec.h>
#include <sys/sysent.h>
+#include <sys/uio.h>
#include <vm/vm.h>
#include <vm/vm_param.h>
@@ -101,5 +102,8 @@ int freebsd32_copyiniov(struct iovec32 *
struct iovec **iov, int error);
void freebsd32_rusage_out(const struct rusage *s, struct rusage32 *s32);
+struct image_args;
+int freebsd32_exec_copyin_args(struct image_args *args, char *fname,
+ enum uio_seg segflg, u_int32_t *argv, u_int32_t *envv);
#endif /* !_COMPAT_FREEBSD32_FREEBSD32_UTIL_H_ */
More information about the svn-src-stable
mailing list