Linux-2.6.12-rc2
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / arch / um / sys-x86_64 / ptrace.c
blob8c146b2a1e00aea210e9b5166b3b6b4753fc8406
1 /*
2 * Copyright 2003 PathScale, Inc.
4 * Licensed under the GPL
5 */
7 #define __FRAME_OFFSETS
8 #include "asm/ptrace.h"
9 #include "linux/sched.h"
10 #include "linux/errno.h"
11 #include "asm/elf.h"
13 /* XXX x86_64 */
14 unsigned long not_ss;
15 unsigned long not_ds;
16 unsigned long not_es;
18 #define SC_SS(r) (not_ss)
19 #define SC_DS(r) (not_ds)
20 #define SC_ES(r) (not_es)
22 /* determines which flags the user has access to. */
23 /* 1 = access 0 = no access */
24 #define FLAG_MASK 0x44dd5UL
26 int putreg(struct task_struct *child, int regno, unsigned long value)
28 unsigned long tmp;
30 #ifdef TIF_IA32
31 /* Some code in the 64bit emulation may not be 64bit clean.
32 Don't take any chances. */
33 if (test_tsk_thread_flag(child, TIF_IA32))
34 value &= 0xffffffff;
35 #endif
36 switch (regno){
37 case FS:
38 case GS:
39 case DS:
40 case ES:
41 case SS:
42 case CS:
43 if (value && (value & 3) != 3)
44 return -EIO;
45 value &= 0xffff;
46 break;
48 case FS_BASE:
49 case GS_BASE:
50 if (!((value >> 48) == 0 || (value >> 48) == 0xffff))
51 return -EIO;
52 break;
54 case EFLAGS:
55 value &= FLAG_MASK;
56 tmp = PT_REGS_EFLAGS(&child->thread.regs) & ~FLAG_MASK;
57 value |= tmp;
58 break;
61 PT_REGS_SET(&child->thread.regs, regno, value);
62 return 0;
65 unsigned long getreg(struct task_struct *child, int regno)
67 unsigned long retval = ~0UL;
68 switch (regno) {
69 case FS:
70 case GS:
71 case DS:
72 case ES:
73 case SS:
74 case CS:
75 retval = 0xffff;
76 /* fall through */
77 default:
78 retval &= PT_REG(&child->thread.regs, regno);
79 #ifdef TIF_IA32
80 if (test_tsk_thread_flag(child, TIF_IA32))
81 retval &= 0xffffffff;
82 #endif
84 return retval;
87 void arch_switch(void)
89 /* XXX
90 printk("arch_switch\n");
94 int is_syscall(unsigned long addr)
96 panic("is_syscall");
99 int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu )
101 panic("dump_fpu");
102 return(1);
105 int get_fpregs(unsigned long buf, struct task_struct *child)
107 panic("get_fpregs");
108 return(0);
111 int set_fpregs(unsigned long buf, struct task_struct *child)
113 panic("set_fpregs");
114 return(0);
117 int get_fpxregs(unsigned long buf, struct task_struct *tsk)
119 panic("get_fpxregs");
120 return(0);
123 int set_fpxregs(unsigned long buf, struct task_struct *tsk)
125 panic("set_fxpregs");
126 return(0);
130 * Overrides for Emacs so that we follow Linus's tabbing style.
131 * Emacs will notice this stuff at the end of the file and automatically
132 * adjust the settings for this buffer only. This must remain at the end
133 * of the file.
134 * ---------------------------------------------------------------------------
135 * Local variables:
136 * c-file-style: "linux"
137 * End: