/* * Copyright (C) 2003 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) * Copyright 2003 PathScale, Inc. * * Licensed under the GPL
*/
#include <linux/sched.h> #include <linux/sched/mm.h> #include <linux/syscalls.h> #include <linux/uaccess.h> #include <asm/prctl.h> /* XXX This should get the constants from libc */ #include <registers.h> #include <os.h>
long arch_prctl(struct task_struct *task, int option, unsignedlong __user *arg2)
{ long ret = -EINVAL;
switch (option) { case ARCH_SET_FS:
current->thread.regs.regs.gp[FS_BASE / sizeof(unsignedlong)] =
(unsignedlong) arg2;
ret = 0; break; case ARCH_SET_GS:
current->thread.regs.regs.gp[GS_BASE / sizeof(unsignedlong)] =
(unsignedlong) arg2;
ret = 0; break; case ARCH_GET_FS:
ret = put_user(current->thread.regs.regs.gp[FS_BASE / sizeof(unsignedlong)], arg2); break; case ARCH_GET_GS:
ret = put_user(current->thread.regs.regs.gp[GS_BASE / sizeof(unsignedlong)], arg2); break;
}
void arch_switch_to(struct task_struct *to)
{ /* * Nothing needs to be done on x86_64. * The FS_BASE/GS_BASE registers are saved in the ptrace register set.
*/
}
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.