2 * sys_parisc32.c: Conversion between 32bit and 64bit native syscalls.
4 * Copyright (C) 2000-2001 Hewlett Packard Company
5 * Copyright (C) 2000 John Marvin
6 * Copyright (C) 2001 Matthew Wilcox
8 * These routines maintain argument size conversion between 32bit and 64bit
9 * environment. Based heavily on sys_ia32.c and sys_sparc32.c.
12 #include <linux/compat.h>
13 #include <linux/kernel.h>
14 #include <linux/sched.h>
17 #include <linux/file.h>
18 #include <linux/signal.h>
19 #include <linux/resource.h>
20 #include <linux/times.h>
21 #include <linux/time.h>
22 #include <linux/smp.h>
23 #include <linux/sem.h>
24 #include <linux/shm.h>
25 #include <linux/slab.h>
26 #include <linux/uio.h>
27 #include <linux/ncp_fs.h>
28 #include <linux/poll.h>
29 #include <linux/personality.h>
30 #include <linux/stat.h>
31 #include <linux/highmem.h>
32 #include <linux/highuid.h>
33 #include <linux/mman.h>
34 #include <linux/binfmts.h>
35 #include <linux/namei.h>
36 #include <linux/vfs.h>
37 #include <linux/ptrace.h>
38 #include <linux/swap.h>
39 #include <linux/syscalls.h>
41 #include <asm/types.h>
42 #include <asm/uaccess.h>
43 #include <asm/mmu_context.h>
50 #define DBG(x) printk x
55 asmlinkage
long sys32_unimplemented(int r26
, int r25
, int r24
, int r23
,
56 int r22
, int r21
, int r20
)
58 printk(KERN_ERR
"%s(%d): Unimplemented 32 on 64 syscall #%d!\n",
59 current
->comm
, current
->pid
, r20
);
63 /* Note: it is necessary to treat out_fd and in_fd as unsigned ints, with the
64 * corresponding cast to a signed int to insure that the proper conversion
65 * (sign extension) between the register representation of a signed int (msr in
66 * 32-bit mode) and the register representation of a signed int (msr in 64-bit
69 asmlinkage
long sys32_sendfile(u32 out_fd
, u32 in_fd
,
70 compat_off_t __user
*offset
, compat_size_t count
)
72 return compat_sys_sendfile((int)out_fd
, (int)in_fd
, offset
, count
);
75 asmlinkage
long sys32_sendfile64(u32 out_fd
, u32 in_fd
,
76 compat_loff_t __user
*offset
, compat_size_t count
)
78 return sys_sendfile64((int)out_fd
, (int)in_fd
,
79 (loff_t __user
*)offset
, count
);
82 asmlinkage
long sys32_semctl(int semid
, int semnum
, int cmd
, union semun arg
)
87 /* Ugh. arg is a union of int,ptr,ptr,ptr, so is 8 bytes.
88 * The int should be in the first 4, but our argument
89 * frobbing has left it in the last 4.
91 u
.val
= *((int *)&arg
+ 1);
92 return sys_semctl (semid
, semnum
, cmd
, u
);
94 return sys_semctl (semid
, semnum
, cmd
, arg
);
97 long sys32_lookup_dcookie(u32 cookie_high
, u32 cookie_low
, char __user
*buf
,
100 return sys_lookup_dcookie((u64
)cookie_high
<< 32 | cookie_low
,
104 asmlinkage
long compat_sys_fanotify_mark(int fan_fd
, int flags
, u32 mask_hi
,
106 const char __user
*pathname
)
108 return sys_fanotify_mark(fan_fd
, flags
, ((u64
)mask_hi
<< 32) | mask_lo
,