summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/traps.c
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2006-06-07 08:15:39 +0200
committerPaul Mackerras <paulus@samba.org>2006-06-09 13:24:16 +0200
commite9370ae15dc2f8ba1e1889ce26f13cda565b6ecb (patch)
tree338ed732f7a6607bc168795008e244f180876cda /arch/powerpc/kernel/traps.c
parent[PATCH] powerpc: Implement support for setting little-endian mode via prctl (diff)
downloadlinux-e9370ae15dc2f8ba1e1889ce26f13cda565b6ecb.tar.xz
linux-e9370ae15dc2f8ba1e1889ce26f13cda565b6ecb.zip
[PATCH] powerpc: Implement PR_[GS]ET_UNALIGN prctls for powerpc
This gives the ability to control whether alignment exceptions get fixed up or reported to the process as a SIGBUS, using the existing PR_SET_UNALIGN and PR_GET_UNALIGN prctls. We do not implement the option of logging a message on alignment exceptions. Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel/traps.c')
-rw-r--r--arch/powerpc/kernel/traps.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
index 03def5715494..91a6e04d9741 100644
--- a/arch/powerpc/kernel/traps.c
+++ b/arch/powerpc/kernel/traps.c
@@ -805,9 +805,11 @@ void __kprobes program_check_exception(struct pt_regs *regs)
void alignment_exception(struct pt_regs *regs)
{
- int fixed;
+ int fixed = 0;
- fixed = fix_alignment(regs);
+ /* we don't implement logging of alignment exceptions */
+ if (!(current->thread.align_ctl & PR_UNALIGN_SIGBUS))
+ fixed = fix_alignment(regs);
if (fixed == 1) {
regs->nip += 4; /* skip over emulated instruction */