-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yaml --- r: 77748 b: refs/heads/master c: bcb28e4 h: refs/heads/master v: v3
- Loading branch information
Paul Mundt
committed
Jan 28, 2008
1 parent
7a61ae9
commit a69bc87
Showing
6 changed files
with
109 additions
and
327 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: e7e0a4b54a7f225f770d313f9e042f83ece57a35 | ||
refs/heads/master: bcb28e42be8c1cce6cc523c1b656980011464016 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
#include <linux/errno.h> | ||
#include <linux/sched.h> | ||
#include <linux/mm.h> | ||
#include <linux/smp.h> | ||
#include <linux/sem.h> | ||
#include <linux/msg.h> | ||
#include <linux/shm.h> | ||
#include <linux/stat.h> | ||
#include <linux/syscalls.h> | ||
#include <linux/mman.h> | ||
#include <linux/file.h> | ||
#include <linux/utsname.h> | ||
#include <linux/module.h> | ||
#include <linux/fs.h> | ||
#include <linux/ipc.h> | ||
#include <asm/cacheflush.h> | ||
#include <asm/uaccess.h> | ||
#include <asm/unistd.h> | ||
|
||
/* | ||
* sys_pipe() is the normal C calling standard for creating | ||
* a pipe. It's not the way Unix traditionally does this, though. | ||
*/ | ||
asmlinkage int sys_pipe(unsigned long r4, unsigned long r5, | ||
unsigned long r6, unsigned long r7, | ||
struct pt_regs __regs) | ||
{ | ||
struct pt_regs *regs = RELOC_HIDE(&__regs, 0); | ||
int fd[2]; | ||
int error; | ||
|
||
error = do_pipe(fd); | ||
if (!error) { | ||
regs->regs[1] = fd[1]; | ||
return fd[0]; | ||
} | ||
return error; | ||
} | ||
|
||
asmlinkage ssize_t sys_pread_wrapper(unsigned int fd, char * buf, | ||
size_t count, long dummy, loff_t pos) | ||
{ | ||
return sys_pread64(fd, buf, count, pos); | ||
} | ||
|
||
asmlinkage ssize_t sys_pwrite_wrapper(unsigned int fd, const char * buf, | ||
size_t count, long dummy, loff_t pos) | ||
{ | ||
return sys_pwrite64(fd, buf, count, pos); | ||
} | ||
|
||
asmlinkage int sys_fadvise64_64_wrapper(int fd, u32 offset0, u32 offset1, | ||
u32 len0, u32 len1, int advice) | ||
{ | ||
#ifdef __LITTLE_ENDIAN__ | ||
return sys_fadvise64_64(fd, (u64)offset1 << 32 | offset0, | ||
(u64)len1 << 32 | len0, advice); | ||
#else | ||
return sys_fadvise64_64(fd, (u64)offset0 << 32 | offset1, | ||
(u64)len0 << 32 | len1, advice); | ||
#endif | ||
} | ||
|
||
#if defined(CONFIG_CPU_SH2) || defined(CONFIG_CPU_SH2A) | ||
#define SYSCALL_ARG3 "trapa #0x23" | ||
#else | ||
#define SYSCALL_ARG3 "trapa #0x13" | ||
#endif | ||
|
||
/* | ||
* Do a system call from kernel instead of calling sys_execve so we | ||
* end up with proper pt_regs. | ||
*/ | ||
int kernel_execve(const char *filename, char *const argv[], char *const envp[]) | ||
{ | ||
register long __sc0 __asm__ ("r3") = __NR_execve; | ||
register long __sc4 __asm__ ("r4") = (long) filename; | ||
register long __sc5 __asm__ ("r5") = (long) argv; | ||
register long __sc6 __asm__ ("r6") = (long) envp; | ||
__asm__ __volatile__ (SYSCALL_ARG3 : "=z" (__sc0) | ||
: "0" (__sc0), "r" (__sc4), "r" (__sc5), "r" (__sc6) | ||
: "memory"); | ||
return __sc0; | ||
} |
Oops, something went wrong.