From 04ab82f7805e2cf487fa8f19f18d3ff846d54ca2 Mon Sep 17 00:00:00 2001 From: Shaohua Li Date: Fri, 17 Aug 2007 13:43:50 -0700 Subject: [PATCH] --- yaml --- r: 64120 b: refs/heads/master c: b09e789c438c406bd9bcaac6f1c940a75007e59f h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/ia64/kernel/ptrace.c | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 852af7245600..4c14236f9d28 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e8c59c0cf9c91dccfb6367c306d753500d5a0150 +refs/heads/master: b09e789c438c406bd9bcaac6f1c940a75007e59f diff --git a/trunk/arch/ia64/kernel/ptrace.c b/trunk/arch/ia64/kernel/ptrace.c index 00f803246948..122444a97897 100644 --- a/trunk/arch/ia64/kernel/ptrace.c +++ b/trunk/arch/ia64/kernel/ptrace.c @@ -951,10 +951,14 @@ access_uarea (struct task_struct *child, unsigned long addr, return 0; case PT_CR_IPSR: - if (write_access) - pt->cr_ipsr = ((*data & IPSR_MASK) + if (write_access) { + unsigned long tmp = *data; + /* psr.ri==3 is a reserved value: SDM 2:25 */ + if ((tmp & IA64_PSR_RI) == IA64_PSR_RI) + tmp &= ~IA64_PSR_RI; + pt->cr_ipsr = ((tmp & IPSR_MASK) | (pt->cr_ipsr & ~IPSR_MASK)); - else + } else *data = (pt->cr_ipsr & IPSR_MASK); return 0;