patch-2.2.18 linux/arch/m68k/kernel/ptrace.c
Next file: linux/arch/m68k/kernel/setup.c
Previous file: linux/arch/m68k/kernel/process.c
Back to the patch index
Back to the overall index
- Lines: 46
- Date:
Fri Oct 13 23:30:47 2000
- Orig file:
v2.2.17/arch/m68k/kernel/ptrace.c
- Orig date:
Fri Apr 21 12:45:46 2000
diff -u --new-file --recursive --exclude-from /usr/src/exclude v2.2.17/arch/m68k/kernel/ptrace.c linux/arch/m68k/kernel/ptrace.c
@@ -18,6 +18,7 @@
#include <linux/errno.h>
#include <linux/ptrace.h>
#include <linux/user.h>
+#include <linux/config.h>
#include <asm/uaccess.h>
#include <asm/page.h>
@@ -403,10 +404,17 @@
tmp = get_reg(child, addr);
if (addr == PT_SR)
tmp >>= 16;
- }
- else if (addr >= 21 && addr < 49)
+ } else if (addr >= 21 && addr < 49) {
tmp = child->tss.fp[addr - 21];
- else
+#ifdef CONFIG_FPU_EMU
+ /* Convert internal fpu reg representation
+ * into long double format
+ */
+ if (FPU_IS_EMU && (addr < 45) && !(addr % 3))
+ tmp = ((tmp & 0xffff0000) << 15) |
+ ((tmp & 0x0000ffff) << 16);
+#endif
+ } else
goto out;
ret = put_user(tmp,(unsigned long *) data);
goto out;
@@ -442,6 +450,16 @@
}
if (addr >= 21 && addr < 48)
{
+#ifdef CONFIG_FPU_EMU
+ /* Convert long double format
+ * into internal fpu reg representation
+ */
+ if (FPU_IS_EMU && (addr < 45) && !(addr % 3)) {
+ data = (unsigned long)data << 15;
+ data = (data & 0xffff0000) |
+ ((data & 0x0000ffff) >> 1);
+ }
+#endif
child->tss.fp[addr - 21] = data;
ret = 0;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)