Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 31135
b: refs/heads/master
c: 3fd3a74
h: refs/heads/master
i:
  31133: 75e966b
  31131: 7b5eec9
  31127: 0ba6814
  31119: da67be3
  31103: 6dc0bab
v: v3
  • Loading branch information
Carlos O'Donell authored and Kyle McMartin committed Jun 27, 2006
1 parent 899d2ea commit 26d7fb0
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 11 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c8224e0074f1dce12e95e53ca469f6fe49cc9101
refs/heads/master: 3fd3a74f45c935f7d6d5c2fb48f06324b18826b7
18 changes: 10 additions & 8 deletions trunk/arch/parisc/kernel/unaligned.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@
"\tldil L%%" #lbl ", %%r1\n" \
"\tldo R%%" #lbl "(%%r1), %%r1\n" \
"\tbv,n %%r0(%%r1)\n"
/* If you use FIXUP_BRANCH, then you must list this clobber */
#define FIXUP_BRANCH_CLOBBER "r1"

/* 1111 1100 0000 0000 0001 0011 1100 0000 */
#define OPCODE1(a,b,c) ((a)<<26|(b)<<12|(c)<<6)
Expand Down Expand Up @@ -157,7 +159,7 @@ static int emulate_ldh(struct pt_regs *regs, int toreg)
" .previous\n"
: "=r" (val), "=r" (ret)
: "0" (val), "r" (saddr), "r" (regs->isr)
: "r20" );
: "r20", FIXUP_BRANCH_CLOBBER );

DPRINTF("val = 0x" RFMT "\n", val);

Expand Down Expand Up @@ -202,7 +204,7 @@ static int emulate_ldw(struct pt_regs *regs, int toreg, int flop)
" .previous\n"
: "=r" (val), "=r" (ret)
: "0" (val), "r" (saddr), "r" (regs->isr)
: "r19", "r20" );
: "r19", "r20", FIXUP_BRANCH_CLOBBER );

DPRINTF("val = 0x" RFMT "\n", val);

Expand Down Expand Up @@ -253,7 +255,7 @@ static int emulate_ldd(struct pt_regs *regs, int toreg, int flop)
" .previous\n"
: "=r" (val), "=r" (ret)
: "0" (val), "r" (saddr), "r" (regs->isr)
: "r19", "r20" );
: "r19", "r20", FIXUP_BRANCH_CLOBBER );
#else
{
unsigned long valh=0,vall=0;
Expand Down Expand Up @@ -287,7 +289,7 @@ static int emulate_ldd(struct pt_regs *regs, int toreg, int flop)
" .previous\n"
: "=r" (valh), "=r" (vall), "=r" (ret)
: "0" (valh), "1" (vall), "r" (saddr), "r" (regs->isr)
: "r19", "r20" );
: "r19", "r20", FIXUP_BRANCH_CLOBBER );
val=((__u64)valh<<32)|(__u64)vall;
}
#endif
Expand Down Expand Up @@ -335,7 +337,7 @@ static int emulate_sth(struct pt_regs *regs, int frreg)
" .previous\n"
: "=r" (ret)
: "r" (val), "r" (regs->ior), "r" (regs->isr)
: "r19" );
: "r19", FIXUP_BRANCH_CLOBBER );

return ret;
}
Expand Down Expand Up @@ -389,7 +391,7 @@ static int emulate_stw(struct pt_regs *regs, int frreg, int flop)
" .previous\n"
: "=r" (ret)
: "r" (val), "r" (regs->ior), "r" (regs->isr)
: "r19", "r20", "r21", "r22", "r1" );
: "r19", "r20", "r21", "r22", "r1", FIXUP_BRANCH_CLOBBER );

return 0;
}
Expand Down Expand Up @@ -450,7 +452,7 @@ static int emulate_std(struct pt_regs *regs, int frreg, int flop)
" .previous\n"
: "=r" (ret)
: "r" (val), "r" (regs->ior), "r" (regs->isr)
: "r19", "r20", "r21", "r22", "r1" );
: "r19", "r20", "r21", "r22", "r1", FIXUP_BRANCH_CLOBBER );
#else
{
unsigned long valh=(val>>32),vall=(val&0xffffffffl);
Expand Down Expand Up @@ -495,7 +497,7 @@ static int emulate_std(struct pt_regs *regs, int frreg, int flop)
" .previous\n"
: "=r" (ret)
: "r" (valh), "r" (vall), "r" (regs->ior), "r" (regs->isr)
: "r19", "r20", "r21", "r1" );
: "r19", "r20", "r21", "r1", FIXUP_BRANCH_CLOBBER );
}
#endif

Expand Down
9 changes: 7 additions & 2 deletions trunk/include/asm-parisc/uaccess.h
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,11 @@ struct exception_data {
/*
* The "__put_user/kernel_asm()" macros tell gcc they read from memory
* instead of writing. This is because they do not write to any memory
* gcc knows about, so there are no aliasing issues.
* gcc knows about, so there are no aliasing issues. These macros must
* also be aware that "fixup_put_user_skip_[12]" are executed in the
* context of the fault, and any registers used there must be listed
* as clobbers. In this case only "r1" is used by the current routines.
* r8/r9 are already listed as err/val.
*/

#ifdef __LP64__
Expand All @@ -183,7 +187,8 @@ struct exception_data {
"\t.dword\t1b,fixup_put_user_skip_1\n" \
"\t.previous" \
: "=r"(__pu_err) \
: "r"(ptr), "r"(x), "0"(__pu_err))
: "r"(ptr), "r"(x), "0"(__pu_err) \
: "r1")

#define __put_user_asm(stx,x,ptr) \
__asm__ __volatile__ ( \
Expand Down

0 comments on commit 26d7fb0

Please sign in to comment.