On Thu, 25 Apr 2024, Michael Schmitz wrote:
--- a/arch/m68k/lib/uaccess.c +++ b/arch/m68k/lib/uaccess.c @@ -68,23 +68,25 @@ unsigned long __generic_copy_to_user(void __user *to, const void *from, "3: subq.l #1,%0\n" "4: jne 1b\n" "5: btst #1,%5\n" - " jeq 7f\n" - " move.w (%1)+,%3\n" - "6: "MOVES".w %3,(%2)+\n" - "7: btst #0,%5\n" - "8: jeq 10f\n" - " move.b (%1)+,%3\n" - "9: "MOVES".b %3,(%2)+\n" - "10:\n" + " jeq 8f\n" + "6: move.w (%1)+,%3\n" + "7: "MOVES".w %3,(%2)+\n" + "8: btst #0,%5\n"
I understand why you put the MOVE.W and MOVE.B into the exception table.
+ "9: jeq 13f\n" + "10: move.b (%1)+,%3\n" + "11: "MOVES".b %3,(%2)+\n" + "12: nop\n" + "13:\n" " .section .fixup,\"ax\"\n" " .even\n" "20: lsl.l #2,%0\n" "50: add.l %5,%0\n" - " jra 10b\n" + " jra 13b\n" " .previous\n" "\n" " .section __ex_table,\"a\"\n" " .align 4\n" + " .long 1b,20b\n"
... but I don't see why you need the MOVE.L in there (?) Also, it is odd to see the third JEQ added to the table but not the second. Perhaps we don't need either one in there (?)
" .long 2b,20b\n" " .long 3b,20b\n" " .long 4b,20b\n" @@ -93,6 +95,8 @@ unsigned long __generic_copy_to_user(void __user *to, const void *from, " .long 8b,50b\n" " .long 9b,50b\n" " .long 10b,50b\n" + " .long 11b,50b\n" + " .long 12b,50b\n" " .previous" : "=d" (res), "+a" (from), "+a" (to), "=&d" (tmp) : "0" (n / 4), "d" (n & 3));