staticinlinevoid syscall_set_return_value(struct task_struct *task, struct pt_regs *regs, int error, long val)
{ if (error)
val = error;
if (is_compat_thread(task_thread_info(task)))
val = lower_32_bits(val);
regs->regs[0] = val;
}
staticinlinevoid syscall_set_nr(struct task_struct *task, struct pt_regs *regs, int nr)
{
regs->syscallno = nr; if (nr == -1) { /* * When the syscall number is set to -1, the syscall will be * skipped. In this case the syscall return value has to be * set explicitly, otherwise the first syscall argument is * returned as the syscall return value.
*/
syscall_set_return_value(task, regs, -ENOSYS, 0);
}
}
staticinlinevoid syscall_set_arguments(struct task_struct *task, struct pt_regs *regs, constunsignedlong *args)
{
memcpy(®s->regs[0], args, 6 * sizeof(args[0])); /* * Also copy the first argument into orig_x0 * so that syscall_get_arguments() would return it * instead of the previous value.
*/
regs->orig_x0 = regs->regs[0];
}
/* * We don't care about endianness (__AUDIT_ARCH_LE bit) here because * AArch64 has the same system calls both on little- and big- endian.
*/ staticinlineint syscall_get_arch(struct task_struct *task)
{ if (is_compat_thread(task_thread_info(task))) return AUDIT_ARCH_ARM;
return AUDIT_ARCH_AARCH64;
}
int syscall_trace_enter(struct pt_regs *regs); void syscall_trace_exit(struct pt_regs *regs);
#endif/* __ASM_SYSCALL_H */
Messung V0.5
¤ Dauer der Verarbeitung: 0.21 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.