[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1156947397.18390.4.camel@localhost>
Date: Wed, 30 Aug 2006 16:16:37 +0200
From: Martin Schwidefsky <schwidefsky@...ibm.com>
To: Arnd Bergmann <arnd@...db.de>
Cc: linux-kernel@...r.kernel.org, linux-arch@...r.kernel.org,
Jeff Dike <jdike@...toit.com>,
Bjoern Steinbrink <B.Steinbrink@....de>,
Arjan van de Ven <arjan@...radead.org>,
Chase Venters <chase.venters@...entec.com>,
Andrew Morton <akpm@...l.org>,
David Howells <dhowells@...hat.com>, Andi Kleen <ak@...e.de>,
"H. Peter Anvin" <hpa@...or.com>
Subject: Re: [PATCH 3/6] provide kernel_execve on all architectures
On Wed, 2006-08-30 at 14:43 +0200, Arnd Bergmann wrote:
> This adds the new kernel_execve function on all architectures
> that were using _syscall3() to implement execve.
Doesn't compile for s390. Patch attached, issues fixed:
1) Include unistd.h for __NR_execve
2) The compiler warns about __arg2 and __arg3 assignments (watch out for
the *const* - isn't C a lovely language ;-)
3) The inline assembly does not clobber register "1", nor the condition
code. The call to kernel_execve does clobber both so it is not really a
problem, but nit-picking is fun >:-)
--
blue skies,
Martin.
Martin Schwidefsky
Linux for zSeries Development & Services
IBM Deutschland Entwicklung GmbH
"Reality continues to ruin my life." - Calvin.
---
diff -urpN linux-2.6/arch/s390/kernel/sys_s390.c linux-2.6-patched/arch/s390/kernel/sys_s390.c
--- linux-2.6/arch/s390/kernel/sys_s390.c 2006-08-30 15:23:14.000000000 +0200
+++ linux-2.6-patched/arch/s390/kernel/sys_s390.c 2006-08-30 15:18:37.000000000 +0200
@@ -27,6 +27,7 @@
#include <linux/file.h>
#include <linux/utsname.h>
#include <linux/personality.h>
+#include <linux/unistd.h>
#include <asm/uaccess.h>
#include <asm/ipc.h>
@@ -273,14 +274,15 @@ s390_fadvise64_64(struct fadvise64_64_ar
int kernel_execve(const char *filename, char *const argv[], char *const envp[])
{
register const char *__arg1 asm("2") = filename;
- register void *__arg2 asm("3") = argv;
- register void *__arg3 asm("4") = envp;
+ register char *const*__arg2 asm("3") = argv;
+ register char *const*__arg3 asm("4") = envp;
register long __svcres asm("2");
- asm volatile ("svc %b1"
+ asm volatile(
+ "svc %b1"
: "=d" (__svcres)
: "i" (__NR_execve),
"0" (__arg1),
"d" (__arg2),
- "d" (__arg3) : "1", "cc", "memory");
+ "d" (__arg3) : "memory");
return __svcres;
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists