compat.c (e9331ee9b164d58b4dd0abc882ba7e23d2f404b3) | compat.c (f454322efbf6faee695f517c6b52c4dc03cacd3e) |
---|---|
1/* 2 * linux/kernel/compat.c 3 * 4 * Kernel compatibililty routines for e.g. 32 bit syscall support 5 * on 64 bit kernels. 6 * 7 * Copyright (C) 2002-2003 Stephen Rothwell, IBM Corporation 8 * --- 483 unchanged lines hidden (view full) --- 492 case 4: set->sig[3] = compat->sig[6] | (((long)compat->sig[7]) << 32 ); 493 case 3: set->sig[2] = compat->sig[4] | (((long)compat->sig[5]) << 32 ); 494 case 2: set->sig[1] = compat->sig[2] | (((long)compat->sig[3]) << 32 ); 495 case 1: set->sig[0] = compat->sig[0] | (((long)compat->sig[1]) << 32 ); 496 } 497} 498EXPORT_SYMBOL_GPL(sigset_from_compat); 499 | 1/* 2 * linux/kernel/compat.c 3 * 4 * Kernel compatibililty routines for e.g. 32 bit syscall support 5 * on 64 bit kernels. 6 * 7 * Copyright (C) 2002-2003 Stephen Rothwell, IBM Corporation 8 * --- 483 unchanged lines hidden (view full) --- 492 case 4: set->sig[3] = compat->sig[6] | (((long)compat->sig[7]) << 32 ); 493 case 3: set->sig[2] = compat->sig[4] | (((long)compat->sig[5]) << 32 ); 494 case 2: set->sig[1] = compat->sig[2] | (((long)compat->sig[3]) << 32 ); 495 case 1: set->sig[0] = compat->sig[0] | (((long)compat->sig[1]) << 32 ); 496 } 497} 498EXPORT_SYMBOL_GPL(sigset_from_compat); 499 |
500void 501sigset_to_compat(compat_sigset_t *compat, const sigset_t *set) | 500int 501put_compat_sigset(compat_sigset_t __user *compat, const sigset_t *set, 502 unsigned int size) |
502{ | 503{ |
504 /* size <= sizeof(compat_sigset_t) <= sizeof(sigset_t) */ 505#ifdef __BIG_ENDIAN 506 compat_sigset_t v; |
|
503 switch (_NSIG_WORDS) { | 507 switch (_NSIG_WORDS) { |
504 case 4: compat->sig[7] = (set->sig[3] >> 32); compat->sig[6] = set->sig[3]; 505 case 3: compat->sig[5] = (set->sig[2] >> 32); compat->sig[4] = set->sig[2]; 506 case 2: compat->sig[3] = (set->sig[1] >> 32); compat->sig[2] = set->sig[1]; 507 case 1: compat->sig[1] = (set->sig[0] >> 32); compat->sig[0] = set->sig[0]; | 508 case 4: v.sig[7] = (set->sig[3] >> 32); v.sig[6] = set->sig[3]; 509 case 3: v.sig[5] = (set->sig[2] >> 32); v.sig[4] = set->sig[2]; 510 case 2: v.sig[3] = (set->sig[1] >> 32); v.sig[2] = set->sig[1]; 511 case 1: v.sig[1] = (set->sig[0] >> 32); v.sig[0] = set->sig[0]; |
508 } | 512 } |
513 return copy_to_user(compat, &v, size) ? -EFAULT : 0; 514#else 515 return copy_to_user(compat, set, size) ? -EFAULT : 0; 516#endif |
|
509} 510 511#ifdef CONFIG_NUMA 512COMPAT_SYSCALL_DEFINE6(move_pages, pid_t, pid, compat_ulong_t, nr_pages, 513 compat_uptr_t __user *, pages32, 514 const int __user *, nodes, 515 int __user *, status, 516 int, flags) --- 85 unchanged lines hidden --- | 517} 518 519#ifdef CONFIG_NUMA 520COMPAT_SYSCALL_DEFINE6(move_pages, pid_t, pid, compat_ulong_t, nr_pages, 521 compat_uptr_t __user *, pages32, 522 const int __user *, nodes, 523 int __user *, status, 524 int, flags) --- 85 unchanged lines hidden --- |