m68k: fix cancellable syscall with 5 or 6 arguments
authorAndreas Schwab <schwab@linux-m68k.org>
Sun, 18 Nov 2012 00:07:22 +0000 (01:07 +0100)
committerAndreas Schwab <schwab@linux-m68k.org>
Sun, 18 Nov 2012 00:22:38 +0000 (01:22 +0100)
ports/ChangeLog.m68k
ports/sysdeps/unix/sysv/linux/m68k/nptl/sysdep-cancel.h

index de759b8599609fc2d49163bbca38125eb4747d8a..d609e2704094a8c4595dfcdfe66596ecadc79bb3 100644 (file)
@@ -1,3 +1,8 @@
+2012-11-18  Andreas Schwab  <schwab@linux-m68k.org>
+
+       * sysdeps/unix/sysv/linux/m68k/nptl/sysdep-cancel.h (_DOCARGS_5)
+       (UNDOCARGS_5): Save %d5 on stack instead of in %a1.
+
 2012-11-15  Andreas Schwab  <schwab@linux-m68k.org>
 
        * sysdeps/m68k/dl-machine.h (ELF_MACHINE_RUNTIME_FIXUP_PARAMS):
index 249e0e29f7063e69e3e490f4b11eee43e7e854f7..e295898097e149d4992fd45f870918af548fcdcc 100644 (file)
@@ -69,8 +69,6 @@
 # define _DOCARGS_2(n) DOCARGS_0 move.l n+4(%sp), %d2; _DOCARGS_1 (n)
 # define UNDOCARGS_2   UNDOCARGS_0
 
-/* TODO: We can optimize DOCARGS_{3, 4} by saving registers to a0 and a1
-   instead of pushing them on stack.  */
 # define DOCARGS_3     _DOCARGS_3 (12)
 # define _DOCARGS_3(n) move.l %d3, -(%sp);                             \
   cfi_adjust_cfa_offset (4); cfi_rel_offset (%d3, 0);                  \
   cfi_adjust_cfa_offset (-4); cfi_restore (%d4);
 
 # define DOCARGS_5     _DOCARGS_5 (20)
-# define _DOCARGS_5(n) move.l %d5, %a1; cfi_register (%d5, a1); \
-  move.l n(%sp), %d5; _DOCARGS_4 (n-4)
-# define UNDOCARGS_5   UNDOCARGS_4 move.l %a1, %d5; cfi_restore (%d5);
+# define _DOCARGS_5(n) move.l %d5, -(%sp);                     \
+  cfi_adjust_cfa_offset (4); cfi_rel_offset (%d5, 0);          \
+  move.l n+4(%sp), %d5; _DOCARGS_4 (n)
+# define UNDOCARGS_5   UNDOCARGS_4 move.l (%sp)+, %d5; \
+  cfi_adjust_cfa_offset (-4); cfi_restore (%d5);
 
 # define DOCARGS_6     _DOCARGS_6 (24)
 # define _DOCARGS_6(n) move.l n(%sp), %a0; _DOCARGS_5 (n-4)