Release 4.14 arch/powerpc/include/asm/syscall.h
/*
* Access to user system call parameters and results
*
* Copyright (C) 2008 Red Hat, Inc. All rights reserved.
*
* This copyrighted material is made available to anyone wishing to use,
* modify, copy, or redistribute it subject to the terms and conditions
* of the GNU General Public License v.2.
*
* See asm-generic/syscall.h for descriptions of what we must do here.
*/
#ifndef _ASM_SYSCALL_H
#define _ASM_SYSCALL_H 1
#include <uapi/linux/audit.h>
#include <linux/sched.h>
#include <linux/thread_info.h>
/* ftrace syscalls requires exporting the sys_call_table */
#ifdef CONFIG_FTRACE_SYSCALLS
extern const unsigned long sys_call_table[];
#endif /* CONFIG_FTRACE_SYSCALLS */
static inline int syscall_get_nr(struct task_struct *task, struct pt_regs *regs)
{
/*
* Note that we are returning an int here. That means 0xffffffff, ie.
* 32-bit negative 1, will be interpreted as -1 on a 64-bit kernel.
* This is important for seccomp so that compat tasks can set r0 = -1
* to reject the syscall.
*/
return TRAP(regs) == 0xc00 ? regs->gpr[0] : -1;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Roland McGrath | 33 | 91.67% | 1 | 50.00% |
Michael Ellerman | 3 | 8.33% | 1 | 50.00% |
Total | 36 | 100.00% | 2 | 100.00% |
static inline void syscall_rollback(struct task_struct *task,
struct pt_regs *regs)
{
regs->gpr[3] = regs->orig_gpr3;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Roland McGrath | 28 | 100.00% | 1 | 100.00% |
Total | 28 | 100.00% | 1 | 100.00% |
static inline long syscall_get_return_value(struct task_struct *task,
struct pt_regs *regs)
{
return regs->gpr[3];
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Roland McGrath | 25 | 100.00% | 1 | 100.00% |
Total | 25 | 100.00% | 1 | 100.00% |
static inline void syscall_set_return_value(struct task_struct *task,
struct pt_regs *regs,
int error, long val)
{
/*
* In the general case it's not obvious that we must deal with CCR
* here, as the syscall exit path will also do that for us. However
* there are some places, eg. the signal code, which check ccr to
* decide if the value in r3 is actually an error.
*/
if (error) {
regs->ccr |= 0x10000000L;
regs->gpr[3] = error;
} else {
regs->ccr &= ~0x10000000L;
regs->gpr[3] = val;
}
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Roland McGrath | 61 | 95.31% | 1 | 33.33% |
Nathan T. Lynch | 2 | 3.12% | 1 | 33.33% |
Michael Ellerman | 1 | 1.56% | 1 | 33.33% |
Total | 64 | 100.00% | 3 | 100.00% |
static inline void syscall_get_arguments(struct task_struct *task,
struct pt_regs *regs,
unsigned int i, unsigned int n,
unsigned long *args)
{
unsigned long val, mask = -1UL;
BUG_ON(i + n > 6);
#ifdef CONFIG_COMPAT
if (test_tsk_thread_flag(task, TIF_32BIT))
mask = 0xffffffff;
#endif
while (n--) {
if (n == 0 && i == 0)
val = regs->orig_gpr3;
else
val = regs->gpr[3 + i + n];
args[n] = val & mask;
}
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Roland McGrath | 69 | 61.61% | 1 | 33.33% |
Michael Ellerman | 43 | 38.39% | 2 | 66.67% |
Total | 112 | 100.00% | 3 | 100.00% |
static inline void syscall_set_arguments(struct task_struct *task,
struct pt_regs *regs,
unsigned int i, unsigned int n,
const unsigned long *args)
{
BUG_ON(i + n > 6);
memcpy(®s->gpr[3 + i], args, n * sizeof(args[0]));
/* Also copy the first argument into orig_gpr3 */
if (i == 0 && n > 0)
regs->orig_gpr3 = args[0];
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Roland McGrath | 65 | 76.47% | 1 | 50.00% |
Michael Ellerman | 20 | 23.53% | 1 | 50.00% |
Total | 85 | 100.00% | 2 | 100.00% |
static inline int syscall_get_arch(void)
{
int arch = is_32bit_task() ? AUDIT_ARCH_PPC : AUDIT_ARCH_PPC64;
#ifdef __LITTLE_ENDIAN__
arch |= __AUDIT_ARCH_LE;
#endif
return arch;
}
Contributors
Person | Tokens | Prop | Commits | CommitProp |
Eric Paris | 16 | 51.61% | 2 | 66.67% |
Richard Guy Briggs | 15 | 48.39% | 1 | 33.33% |
Total | 31 | 100.00% | 3 | 100.00% |
#endif /* _ASM_SYSCALL_H */
Overall Contributors
Person | Tokens | Prop | Commits | CommitProp |
Roland McGrath | 294 | 70.84% | 1 | 9.09% |
Michael Ellerman | 67 | 16.14% | 4 | 36.36% |
Eric Paris | 23 | 5.54% | 2 | 18.18% |
Richard Guy Briggs | 15 | 3.61% | 1 | 9.09% |
Ian Munsie | 13 | 3.13% | 1 | 9.09% |
Nathan T. Lynch | 2 | 0.48% | 1 | 9.09% |
Romeo Cane | 1 | 0.24% | 1 | 9.09% |
Total | 415 | 100.00% | 11 | 100.00% |
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.