[glibc] 01/01: Replace debian/patches/mips/submitted-syscalls5-7-unbound-stack.diff by the final version git/submitted-syscalls5-7-unbound-stack.diff.
This is an automated email from the git hooks/post-receive script.
aurel32 pushed a commit to branch glibc-2.25
in repository glibc.
commit 267d61dde2d8450755188af7faabd7cdc79ad51e
Author: Aurelien Jarno <aurelien@aurel32.net>
Date: Tue Aug 29 22:04:50 2017 +0200
Replace debian/patches/mips/submitted-syscalls5-7-unbound-stack.diff by the final version git/submitted-syscalls5-7-unbound-stack.diff.
---
debian/changelog | 4 +
.../mips/git-syscalls5-7-unbound-stack.diff | 652 ++++++++++++++
.../mips/submitted-syscalls5-7-unbound-stack.diff | 936 ---------------------
debian/patches/series | 2 +-
4 files changed, 657 insertions(+), 937 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index f0ebd8e..a6d74d4 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -8,6 +8,10 @@ glibc (2.25-0experimental4) UNRELEASED; urgency=medium
rt/tst-aio64 sync ordering.
* sysdeps/hurd.mk: Enable stack-protector on the Hurd.
+ [ Aurelien Jarno ]
+ * Replace debian/patches/mips/submitted-syscalls5-7-unbound-stack.diff
+ by the final version git/submitted-syscalls5-7-unbound-stack.diff.
+
-- Aurelien Jarno <aurel32@debian.org> Sun, 27 Aug 2017 01:51:15 +0200
glibc (2.25-0experimental3) experimental; urgency=medium
diff --git a/debian/patches/mips/git-syscalls5-7-unbound-stack.diff b/debian/patches/mips/git-syscalls5-7-unbound-stack.diff
new file mode 100644
index 0000000..824acf9
--- /dev/null
+++ b/debian/patches/mips/git-syscalls5-7-unbound-stack.diff
@@ -0,0 +1,652 @@
+2017-08-29 Adhemerval Zanella <adhemerval.zanella@linaro.org>
+ Aurelien Jarno <aurelien@aurel32.net>
+ Maciej W. Rozycki <macro@imgtec.com>
+
+ [BZ #21956]
+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/Makefile
+ [subdir = misc] (sysdep_routines): Remove `mips16-syscall5',
+ `mips16-syscall6' and `mips16-syscall7'.
+ (CFLAGS-mips16-syscall5.c, CFLAGS-mips16-syscall6.c)
+ (CFLAGS-mips16-syscall7.c): Remove.
+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/Versions (libc):
+ Remove `__mips16_syscall5', `__mips16_syscall6' and
+ `__mips16_syscall7'.
+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall0.c
+ (__mips16_syscall0): Rename `__mips16_syscall_return' to
+ `__mips_syscall_return'.
+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall1.c
+ (__mips16_syscall1): Likewise.
+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall2.c
+ (__mips16_syscall2): Likewise.
+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall3.c
+ (__mips16_syscall3): Likewise.
+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall4.c
+ (__mips16_syscall4): Likewise.
+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall5.c:
+ Remove.
+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall6.c:
+ Remove.
+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall7.c:
+ Remove.
+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall.h
+ (__mips16_syscall5): Expand to `__mips_syscall5' rather than
+ `__mips16_syscall5'. Remove prototype.
+ (__mips16_syscall6): Expand to `__mips_syscall6' rather than
+ `__mips16_syscall6'. Remove prototype.
+ (__mips16_syscall7): Expand to `__mips_syscall7' rather than
+ `__mips16_syscall7'. Remove prototype.
+ (__nomips16, __mips16_syscall_return): Move to...
+ * sysdeps/unix/sysv/linux/mips/mips32/sysdep.h
+ (__nomips16, __mips_syscall_return): ... here.
+ [__mips16] (INTERNAL_SYSCALL_NCS): Rename
+ `__mips16_syscall_return' to `__mips_syscall_return'.
+ [__mips16] (INTERNAL_SYSCALL_MIPS16): Pass `number' to
+ `internal_syscall##nr'.
+ [!__mips16] (INTERNAL_SYSCALL): Pass `SYS_ify (name)' to
+ `internal_syscall##nr'.
+ (FORCE_FRAME_POINTER): Remove.
+ (__mips_syscall5): New prototype.
+ (internal_syscall5): Rewrite to call `__mips_syscall5'.
+ (__mips_syscall6): New prototype.
+ (internal_syscall6): Rewrite to call `__mips_syscall6'.
+ (__mips_syscall7): New prototype.
+ (internal_syscall7): Rewrite to call `__mips_syscall7'.
+ * sysdeps/unix/sysv/linux/mips/mips32/mips-syscall5.S: New file.
+ * sysdeps/unix/sysv/linux/mips/mips32/mips-syscall6.S: New file.
+ * sysdeps/unix/sysv/linux/mips/mips32/mips-syscall7.S: New file.
+ * sysdeps/unix/sysv/linux/mips/mips32/Makefile [subdir = misc]
+ (sysdep_routines): Add libc-do-syscall.
+ * sysdeps/unix/sysv/linux/mips/mips32/Versions (libc): Add
+ `__mips_syscall5', `__mips_syscall6' and `__mips_syscall7'.
+
+diff --git a/sysdeps/unix/sysv/linux/mips/mips32/Makefile b/sysdeps/unix/sysv/linux/mips/mips32/Makefile
+index 33b461500c..aa1aa8fe80 100644
+--- a/sysdeps/unix/sysv/linux/mips/mips32/Makefile
++++ b/sysdeps/unix/sysv/linux/mips/mips32/Makefile
+@@ -0,0 +1,3 @@ ifeq ($(subdir),conform)
++ifeq ($(subdir),misc)
++sysdep_routines += mips-syscall5 mips-syscall6 mips-syscall7
++endif
+diff --git a/sysdeps/unix/sysv/linux/mips/mips32/Versions b/sysdeps/unix/sysv/linux/mips/mips32/Versions
+index 9621fb5cae..9337f8fe3d 100644
+--- a/sysdeps/unix/sysv/linux/mips/mips32/Versions
++++ b/sysdeps/unix/sysv/linux/mips/mips32/Versions
+@@ -3,4 +3,7 @@ libc {
+ getrlimit64;
+ setrlimit64;
+ }
++ GLIBC_PRIVATE {
++ __mips_syscall5; __mips_syscall6; __mips_syscall7;
++ }
+ }
+diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall5.c b/sysdeps/unix/sysv/linux/mips/mips32/mips-syscall5.S
+similarity index 60%
+rename from sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall5.c
+rename to sysdeps/unix/sysv/linux/mips/mips32/mips-syscall5.S
+index ad265d88e2..9f331675df 100644
+--- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall5.c
++++ b/sysdeps/unix/sysv/linux/mips/mips32/mips-syscall5.S
+@@ -1,5 +1,5 @@
+-/* MIPS16 syscall wrappers.
+- Copyright (C) 2013-2017 Free Software Foundation, Inc.
++/* MIPS syscall wrappers.
++ Copyright (C) 2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -13,21 +13,23 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
++ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+-#include <mips16-syscall.h>
++#include <sys/asm.h>
+
+-#undef __mips16_syscall5
++ .text
++ .set nomips16
+
+-long long __nomips16
+-__mips16_syscall5 (long a0, long a1, long a2, long a3,
+- long a4,
+- long number)
+-{
+- union __mips16_syscall_return ret;
+- ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 5,
+- a0, a1, a2, a3, a4);
+- return ret.val;
+-}
++/* long long __mips_syscall5 (long arg1, long arg2, long arg3, long arg4,
++ long arg5,
++ long number) */
++
++ENTRY(__mips_syscall5)
++ lw v0, 20(sp)
++ syscall
++ move v1, a3
++ jr ra
++END(__mips_syscall5)
++libc_hidden_def (__mips_syscall5)
+diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall6.c b/sysdeps/unix/sysv/linux/mips/mips32/mips-syscall6.S
+similarity index 60%
+rename from sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall6.c
+rename to sysdeps/unix/sysv/linux/mips/mips32/mips-syscall6.S
+index bfbd395ed3..0836660ede 100644
+--- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall6.c
++++ b/sysdeps/unix/sysv/linux/mips/mips32/mips-syscall6.S
+@@ -1,5 +1,5 @@
+-/* MIPS16 syscall wrappers.
+- Copyright (C) 2013-2017 Free Software Foundation, Inc.
++/* MIPS syscall wrappers.
++ Copyright (C) 2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -13,21 +13,23 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
++ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+-#include <mips16-syscall.h>
++#include <sys/asm.h>
+
+-#undef __mips16_syscall6
++ .text
++ .set nomips16
+
+-long long __nomips16
+-__mips16_syscall6 (long a0, long a1, long a2, long a3,
+- long a4, long a5,
+- long number)
+-{
+- union __mips16_syscall_return ret;
+- ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 6,
+- a0, a1, a2, a3, a4, a5);
+- return ret.val;
+-}
++/* long long __mips_syscall6 (long arg1, long arg2, long arg3, long arg4,
++ long arg5, long arg6,
++ long number) */
++
++ENTRY(__mips_syscall6)
++ lw v0, 24(sp)
++ syscall
++ move v1, a3
++ jr ra
++END(__mips_syscall6)
++libc_hidden_def (__mips_syscall6)
+diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall7.c b/sysdeps/unix/sysv/linux/mips/mips32/mips-syscall7.S
+similarity index 59%
+rename from sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall7.c
+rename to sysdeps/unix/sysv/linux/mips/mips32/mips-syscall7.S
+index e1267616dc..f7e742cc4d 100644
+--- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall7.c
++++ b/sysdeps/unix/sysv/linux/mips/mips32/mips-syscall7.S
+@@ -1,5 +1,5 @@
+-/* MIPS16 syscall wrappers.
+- Copyright (C) 2013-2017 Free Software Foundation, Inc.
++/* MIPS syscall wrappers.
++ Copyright (C) 2017 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+@@ -13,21 +13,23 @@
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+- License along with the GNU C Library; if not, see
++ License along with the GNU C Library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+-#include <mips16-syscall.h>
++#include <sys/asm.h>
+
+-#undef __mips16_syscall7
++ .text
++ .set nomips16
+
+-long long __nomips16
+-__mips16_syscall7 (long a0, long a1, long a2, long a3,
+- long a4, long a5, long a6,
+- long number)
+-{
+- union __mips16_syscall_return ret;
+- ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 7,
+- a0, a1, a2, a3, a4, a5, a6);
+- return ret.val;
+-}
++/* long long __mips_syscall7 (long arg1, long arg2, long arg3, long arg4,
++ long arg5, long arg6, long arg7,
++ long number) */
++
++ENTRY(__mips_syscall7)
++ lw v0, 28(sp)
++ syscall
++ move v1, a3
++ jr ra
++END(__mips_syscall7)
++libc_hidden_def (__mips_syscall7)
+diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/Makefile b/sysdeps/unix/sysv/linux/mips/mips32/mips16/Makefile
+index fa9fcb7e6f..6869bf4f7c 100644
+--- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/Makefile
++++ b/sysdeps/unix/sysv/linux/mips/mips32/mips16/Makefile
+@@ -1,13 +1,9 @@
+ ifeq ($(subdir),misc)
+ sysdep_routines += mips16-syscall0 mips16-syscall1 mips16-syscall2
+-sysdep_routines += mips16-syscall3 mips16-syscall4 mips16-syscall5
+-sysdep_routines += mips16-syscall6 mips16-syscall7
++sysdep_routines += mips16-syscall3 mips16-syscall4
+ CFLAGS-mips16-syscall0.c += -fexceptions
+ CFLAGS-mips16-syscall1.c += -fexceptions
+ CFLAGS-mips16-syscall2.c += -fexceptions
+ CFLAGS-mips16-syscall3.c += -fexceptions
+ CFLAGS-mips16-syscall4.c += -fexceptions
+-CFLAGS-mips16-syscall5.c += -fexceptions
+-CFLAGS-mips16-syscall6.c += -fexceptions
+-CFLAGS-mips16-syscall7.c += -fexceptions
+ endif
+diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/Versions b/sysdeps/unix/sysv/linux/mips/mips32/mips16/Versions
+index 73bcfb566c..bb21747f44 100644
+--- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/Versions
++++ b/sysdeps/unix/sysv/linux/mips/mips32/mips16/Versions
+@@ -1,6 +1,6 @@
+ libc {
+ GLIBC_PRIVATE {
+ __mips16_syscall0; __mips16_syscall1; __mips16_syscall2; __mips16_syscall3;
+- __mips16_syscall4; __mips16_syscall5; __mips16_syscall6; __mips16_syscall7;
++ __mips16_syscall4;
+ }
+ }
+diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall.h b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall.h
+index 880e9908e8..2ade219c6e 100644
+--- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall.h
++++ b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall.h
+@@ -19,19 +19,6 @@
+ #ifndef MIPS16_SYSCALL_H
+ #define MIPS16_SYSCALL_H 1
+
+-#define __nomips16 __attribute__ ((nomips16))
+-
+-union __mips16_syscall_return
+- {
+- long long val;
+- struct
+- {
+- long v0;
+- long v1;
+- }
+- reg;
+- };
+-
+ long long __nomips16 __mips16_syscall0 (long number);
+ #define __mips16_syscall0(dummy, number) \
+ __mips16_syscall0 ((long) (number))
+@@ -61,29 +48,22 @@ long long __nomips16 __mips16_syscall4 (long a0, long a1, long a2, long a3,
+ (long) (a3), \
+ (long) (number))
+
+-long long __nomips16 __mips16_syscall5 (long a0, long a1, long a2, long a3,
+- long a4,
+- long number);
++/* The remaining ones use regular MIPS wrappers. */
++
+ #define __mips16_syscall5(a0, a1, a2, a3, a4, number) \
+- __mips16_syscall5 ((long) (a0), (long) (a1), (long) (a2), \
+- (long) (a3), (long) (a4), \
+- (long) (number))
++ __mips_syscall5 ((long) (a0), (long) (a1), (long) (a2), \
++ (long) (a3), (long) (a4), \
++ (long) (number))
+
+-long long __nomips16 __mips16_syscall6 (long a0, long a1, long a2, long a3,
+- long a4, long a5,
+- long number);
+ #define __mips16_syscall6(a0, a1, a2, a3, a4, a5, number) \
+- __mips16_syscall6 ((long) (a0), (long) (a1), (long) (a2), \
+- (long) (a3), (long) (a4), (long) (a5), \
+- (long) (number))
++ __mips_syscall6 ((long) (a0), (long) (a1), (long) (a2), \
++ (long) (a3), (long) (a4), (long) (a5), \
++ (long) (number))
+
+-long long __nomips16 __mips16_syscall7 (long a0, long a1, long a2, long a3,
+- long a4, long a5, long a6,
+- long number);
+ #define __mips16_syscall7(a0, a1, a2, a3, a4, a5, a6, number) \
+- __mips16_syscall7 ((long) (a0), (long) (a1), (long) (a2), \
+- (long) (a3), (long) (a4), (long) (a5), \
+- (long) (a6), \
+- (long) (number))
++ __mips_syscall7 ((long) (a0), (long) (a1), (long) (a2), \
++ (long) (a3), (long) (a4), (long) (a5), \
++ (long) (a6), \
++ (long) (number))
+
+ #endif
+diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall0.c b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall0.c
+index 490245b34e..51d9469282 100644
+--- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall0.c
++++ b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall0.c
+@@ -17,14 +17,13 @@
+ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+-#include <mips16-syscall.h>
+
+ #undef __mips16_syscall0
+
+ long long __nomips16
+ __mips16_syscall0 (long number)
+ {
+- union __mips16_syscall_return ret;
++ union __mips_syscall_return ret;
+ ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 0);
+ return ret.val;
+ }
+diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall1.c b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall1.c
+index 3061e8accb..13d57a78aa 100644
+--- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall1.c
++++ b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall1.c
+@@ -17,7 +17,6 @@
+ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+-#include <mips16-syscall.h>
+
+ #undef __mips16_syscall1
+
+@@ -25,7 +24,7 @@ long long __nomips16
+ __mips16_syscall1 (long a0,
+ long number)
+ {
+- union __mips16_syscall_return ret;
++ union __mips_syscall_return ret;
+ ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 1,
+ a0);
+ return ret.val;
+diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall2.c b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall2.c
+index 440a4ed285..6e0e8d5bb5 100644
+--- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall2.c
++++ b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall2.c
+@@ -17,7 +17,6 @@
+ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+-#include <mips16-syscall.h>
+
+ #undef __mips16_syscall2
+
+@@ -25,7 +24,7 @@ long long __nomips16
+ __mips16_syscall2 (long a0, long a1,
+ long number)
+ {
+- union __mips16_syscall_return ret;
++ union __mips_syscall_return ret;
+ ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 2,
+ a0, a1);
+ return ret.val;
+diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall3.c b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall3.c
+index c3f83fc1f6..6bd6b8222b 100644
+--- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall3.c
++++ b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall3.c
+@@ -17,7 +17,6 @@
+ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+-#include <mips16-syscall.h>
+
+ #undef __mips16_syscall3
+
+@@ -25,7 +24,7 @@ long long __nomips16
+ __mips16_syscall3 (long a0, long a1, long a2,
+ long number)
+ {
+- union __mips16_syscall_return ret;
++ union __mips_syscall_return ret;
+ ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 3,
+ a0, a1, a2);
+ return ret.val;
+diff --git a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall4.c b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall4.c
+index 496297d296..3847e4bc25 100644
+--- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall4.c
++++ b/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall4.c
+@@ -17,7 +17,6 @@
+ <http://www.gnu.org/licenses/>. */
+
+ #include <sysdep.h>
+-#include <mips16-syscall.h>
+
+ #undef __mips16_syscall4
+
+@@ -25,7 +24,7 @@ long long __nomips16
+ __mips16_syscall4 (long a0, long a1, long a2, long a3,
+ long number)
+ {
+- union __mips16_syscall_return ret;
++ union __mips_syscall_return ret;
+ ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 4,
+ a0, a1, a2, a3);
+ return ret.val;
+diff --git a/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h b/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h
+index e9e3ee7e82..dadfa18de8 100644
+--- a/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h
++++ b/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h
+@@ -98,6 +98,19 @@
+ #undef INTERNAL_SYSCALL
+ #undef INTERNAL_SYSCALL_NCS
+
++#define __nomips16 __attribute__ ((nomips16))
++
++union __mips_syscall_return
++ {
++ long long val;
++ struct
++ {
++ long v0;
++ long v1;
++ }
++ reg;
++ };
++
+ #ifdef __mips16
+ /* There's no MIPS16 syscall instruction, so we go through out-of-line
+ standard MIPS wrappers. These do use inline snippets below though,
+@@ -112,7 +125,7 @@
+
+ # define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \
+ ({ \
+- union __mips16_syscall_return _sc_ret; \
++ union __mips_syscall_return _sc_ret; \
+ _sc_ret.val = __mips16_syscall##nr (args, number); \
+ err = _sc_ret.reg.v1; \
+ _sc_ret.reg.v0; \
+@@ -121,13 +134,13 @@
+ # define INTERNAL_SYSCALL_MIPS16(number, err, nr, args...) \
+ internal_syscall##nr ("lw\t%0, %2\n\t", \
+ "R" (number), \
+- 0, err, args)
++ number, err, args)
+
+ #else /* !__mips16 */
+ # define INTERNAL_SYSCALL(name, err, nr, args...) \
+ internal_syscall##nr ("li\t%0, %2\t\t\t# " #name "\n\t", \
+ "IK" (SYS_ify (name)), \
+- 0, err, args)
++ SYS_ify (name), err, args)
+
+ # define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \
+ internal_syscall##nr (MOVE32 "\t%0, %2\n\t", \
+@@ -262,110 +275,74 @@
+ _sys_result; \
+ })
+
+-/* We need to use a frame pointer for the functions in which we
+- adjust $sp around the syscall, or debug information and unwind
+- information will be $sp relative and thus wrong during the syscall. As
+- of GCC 4.7, this is sufficient. */
+-#define FORCE_FRAME_POINTER \
+- void *volatile __fp_force __attribute__ ((unused)) = alloca (4)
++/* Standalone MIPS wrappers used for 5, 6, and 7 argument syscalls,
++ which require stack arguments. We rely on the compiler arranging
++ wrapper's arguments according to the MIPS o32 function calling
++ convention, which is reused by syscalls, except for the syscall
++ number passed and the error flag returned (taken care of in the
++ wrapper called). This relieves us from relying on non-guaranteed
++ compiler specifics required for the stack arguments to be pushed,
++ which would be the case if these syscalls were inlined. */
++
++long long __nomips16 __mips_syscall5 (long arg1, long arg2, long arg3,
++ long arg4, long arg5,
++ long number);
++libc_hidden_proto (__mips_syscall5, nomips16)
+
+ #define internal_syscall5(v0_init, input, number, err, \
+ arg1, arg2, arg3, arg4, arg5) \
+ ({ \
+- long _sys_result; \
+- \
+- FORCE_FRAME_POINTER; \
+- { \
+- register long __s0 asm ("$16") __attribute__ ((unused)) \
+- = (number); \
+- register long __v0 asm ("$2"); \
+- register long __a0 asm ("$4") = (long) (arg1); \
+- register long __a1 asm ("$5") = (long) (arg2); \
+- register long __a2 asm ("$6") = (long) (arg3); \
+- register long __a3 asm ("$7") = (long) (arg4); \
+- __asm__ volatile ( \
+- ".set\tnoreorder\n\t" \
+- "subu\t$29, 32\n\t" \
+- "sw\t%6, 16($29)\n\t" \
+- v0_init \
+- "syscall\n\t" \
+- "addiu\t$29, 32\n\t" \
+- ".set\treorder" \
+- : "=r" (__v0), "+r" (__a3) \
+- : input, "r" (__a0), "r" (__a1), "r" (__a2), \
+- "r" ((long) (arg5)) \
+- : __SYSCALL_CLOBBERS); \
+- err = __a3; \
+- _sys_result = __v0; \
+- } \
+- _sys_result; \
++ union __mips_syscall_return _sc_ret; \
++ _sc_ret.val = __mips_syscall5 ((long) (arg1), \
++ (long) (arg2), \
++ (long) (arg3), \
++ (long) (arg4), \
++ (long) (arg5), \
++ (long) (number)); \
++ err = _sc_ret.reg.v1; \
++ _sc_ret.reg.v0; \
+ })
+
++long long __nomips16 __mips_syscall6 (long arg1, long arg2, long arg3,
++ long arg4, long arg5, long arg6,
++ long number);
++libc_hidden_proto (__mips_syscall6, nomips16)
++
+ #define internal_syscall6(v0_init, input, number, err, \
+ arg1, arg2, arg3, arg4, arg5, arg6) \
+ ({ \
+- long _sys_result; \
+- \
+- FORCE_FRAME_POINTER; \
+- { \
+- register long __s0 asm ("$16") __attribute__ ((unused)) \
+- = (number); \
+- register long __v0 asm ("$2"); \
+- register long __a0 asm ("$4") = (long) (arg1); \
+- register long __a1 asm ("$5") = (long) (arg2); \
+- register long __a2 asm ("$6") = (long) (arg3); \
+- register long __a3 asm ("$7") = (long) (arg4); \
+- __asm__ volatile ( \
+- ".set\tnoreorder\n\t" \
+- "subu\t$29, 32\n\t" \
+- "sw\t%6, 16($29)\n\t" \
+- "sw\t%7, 20($29)\n\t" \
+- v0_init \
+- "syscall\n\t" \
+- "addiu\t$29, 32\n\t" \
+- ".set\treorder" \
+- : "=r" (__v0), "+r" (__a3) \
+- : input, "r" (__a0), "r" (__a1), "r" (__a2), \
+- "r" ((long) (arg5)), "r" ((long) (arg6)) \
+- : __SYSCALL_CLOBBERS); \
+- err = __a3; \
+- _sys_result = __v0; \
+- } \
+- _sys_result; \
++ union __mips_syscall_return _sc_ret; \
++ _sc_ret.val = __mips_syscall6 ((long) (arg1), \
++ (long) (arg2), \
++ (long) (arg3), \
++ (long) (arg4), \
++ (long) (arg5), \
++ (long) (arg6), \
++ (long) (number)); \
++ err = _sc_ret.reg.v1; \
++ _sc_ret.reg.v0; \
+ })
+
++long long __nomips16 __mips_syscall7 (long arg1, long arg2, long arg3,
++ long arg4, long arg5, long arg6,
++ long arg7,
++ long number);
++libc_hidden_proto (__mips_syscall7, nomips16)
++
+ #define internal_syscall7(v0_init, input, number, err, \
+ arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
+ ({ \
+- long _sys_result; \
+- \
+- FORCE_FRAME_POINTER; \
+- { \
+- register long __s0 asm ("$16") __attribute__ ((unused)) \
+- = (number); \
+- register long __v0 asm ("$2"); \
+- register long __a0 asm ("$4") = (long) (arg1); \
+- register long __a1 asm ("$5") = (long) (arg2); \
+- register long __a2 asm ("$6") = (long) (arg3); \
+- register long __a3 asm ("$7") = (long) (arg4); \
+- __asm__ volatile ( \
+- ".set\tnoreorder\n\t" \
+- "subu\t$29, 32\n\t" \
+- "sw\t%6, 16($29)\n\t" \
+- "sw\t%7, 20($29)\n\t" \
+- "sw\t%8, 24($29)\n\t" \
+- v0_init \
+- "syscall\n\t" \
+- "addiu\t$29, 32\n\t" \
+- ".set\treorder" \
+- : "=r" (__v0), "+r" (__a3) \
+- : input, "r" (__a0), "r" (__a1), "r" (__a2), \
+- "r" ((long) (arg5)), "r" ((long) (arg6)), "r" ((long) (arg7)) \
+- : __SYSCALL_CLOBBERS); \
+- err = __a3; \
+- _sys_result = __v0; \
+- } \
+- _sys_result; \
++ union __mips_syscall_return _sc_ret; \
++ _sc_ret.val = __mips_syscall7 ((long) (arg1), \
++ (long) (arg2), \
++ (long) (arg3), \
++ (long) (arg4), \
++ (long) (arg5), \
++ (long) (arg6), \
++ (long) (arg7), \
++ (long) (number)); \
++ err = _sc_ret.reg.v1; \
++ _sc_ret.reg.v0; \
+ })
+
+ #define __SYSCALL_CLOBBERS "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", \
diff --git a/debian/patches/mips/submitted-syscalls5-7-unbound-stack.diff b/debian/patches/mips/submitted-syscalls5-7-unbound-stack.diff
deleted file mode 100644
index 379fdef..0000000
--- a/debian/patches/mips/submitted-syscalls5-7-unbound-stack.diff
+++ /dev/null
@@ -1,936 +0,0 @@
-+2017-08-18 Adhemerval Zanella <adhemerval.zanella@linaro.org>
-+ Aurelien Jarno <aurelien@aurel32.net>
-+
-+ [BZ #21956]
-+ * sysdeps/unix/sysv/linux/mips/mips32/Makefile [subdir = crypt]
-+ (libcrypt-sysdep_routines): Add libc-do-syscall.
-+ [subdir = elf] (sysdep-dl-routines): Likewise.
-+ [subdir = io] (sysdep_routines): Likewise.
-+ [subdir = nptl] (libpthread-sysdep_routines): Likewise.
-+ [subdir = nptl] (libpthread-shared-only-routines): Likewise.
-+ [subdir = nscd] (nscd-modules): Likewise.
-+ [subdir = nss] (libnss_db-sysdep_routines): Likewise.
-+ [subdir = nss] (libnss_db-shared-only-routines): Likewise.
-+ [subdir = resolv] (libanl-sysdep_routines): Likewise.
-+ [subdir = resolv] (libanl-shared-only-routines): Likewise.
-+ [subdir = rt] (librt-sysdep_routines): Likewise.
-+ [subdir = rt] (librt-shared-only-routines): Likewise.
-+ * sysdeps/unix/sysv/linux/mips/mips32/libc-do-syscall.S: New file.
-+ * sysdeps/unix/sysv/linux/mips/mips32/sysdep.h: [!__mips16]
-+ (INTERNAL_SYSCALL): Make code unconditional.
-+ [!__mips16] (INTERNAL_SYSCALL_NCS): Likewise.
-+ [__mips16] (INTERNAL_SYSCALL): Remove.
-+ [__mips16] (INTERNAL_SYSCALL_NCS): Likewise.
-+ (__nomips16): Define.
-+ (__libc_do_syscall_return): Likewise.
-+ [__mips16] (__libc_do_syscall0): Declare.
-+ [__mips16] (internal_syscall0): Define.
-+ [__mips16] (__libc_do_syscall1): Declare.
-+ [__mips16] (internal_syscall1): Define.
-+ [__mips16] (__libc_do_syscall2): Declare.
-+ [__mips16] (internal_syscall2): Define.
-+ [__mips16] (__libc_do_syscall3): Declare.
-+ [__mips16] (internal_syscall3): Define.
-+ [__mips16] (__libc_do_syscall4): Declare.
-+ [__mips16] (internal_syscall4): Define.
-+ (internal_syscall0): Guard with !__mips16.
-+ (internal_syscall1): Guard with !__mips16.
-+ (internal_syscall2): Guard with !__mips16.
-+ (internal_syscall3): Guard with !__mips16.
-+ (internal_syscall4): Guard with !__mips16.
-+ (FORCE_FRAME_POINTER): Remove.
-+ (internal_syscall5): Rewrite to call __libc_do_syscall5.
-+ (internal_syscall6): Rewrite to call __libc_do_syscall6.
-+ (internal_syscall7): Rewrite to call __libc_do_syscall7.
-+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/Makefile: Remove file.
-+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/Versions: Likewise.
-+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall.h:
-+ Likewise.
-+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall0.c:
-+ Likewise.
-+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall1.c:
-+ Likewise.
-+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall2.c:
-+ Likewise.
-+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall3.c:
-+ Likewise.
-+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall4.c:
-+ Likewise
-+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall5.c:
-+ Likewise.
-+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall6.c:
-+ Likewise.
-+ * sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall7.c:
-+ Likewise.
-+
---- a/sysdeps/unix/sysv/linux/mips/mips32/Makefile
-+++ b/sysdeps/unix/sysv/linux/mips/mips32/Makefile
-@@ -0,0 +1,35 @@
-+ifeq ($(subdir),crypt)
-+libcrypt-sysdep_routines += libc-do-syscall
-+endif
-+
-+ifeq ($(subdir),elf)
-+sysdep-dl-routines += libc-do-syscall
-+endif
-+
-+ifeq ($(subdir),io)
-+sysdep_routines += libc-do-syscall
-+endif
-+
-+ifeq ($(subdir),nptl)
-+libpthread-sysdep_routines += libc-do-syscall
-+libpthread-shared-only-routines += libc-do-syscall
-+endif
-+
-+ifeq ($(subdir),nscd)
-+nscd-modules += libc-do-syscall
-+endif
-+
-+ifeq ($(subdir),nss)
-+libnss_db-sysdep_routines += libc-do-syscall
-+libnss_db-shared-only-routines += libc-do-syscall
-+endif
-+
-+ifeq ($(subdir),resolv)
-+libanl-sysdep_routines += libc-do-syscall
-+libanl-shared-only-routines += libc-do-syscall
-+endif
-+
-+ifeq ($(subdir),rt)
-+librt-sysdep_routines += libc-do-syscall
-+librt-shared-only-routines += libc-do-syscall
-+endif
---- /dev/null
-+++ b/sysdeps/unix/sysv/linux/mips/mips32/libc-do-syscall.S
-@@ -0,0 +1,105 @@
-+/* Copyright (C) 2017 Free Software Foundation, Inc.
-+ This file is part of the GNU C Library.
-+
-+ The GNU C Library is free software; you can redistribute it and/or
-+ modify it under the terms of the GNU Lesser General Public
-+ License as published by the Free Software Foundation; either
-+ version 2.1 of the License, or (at your option) any later version.
-+
-+ The GNU C Library is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ Lesser General Public License for more details.
-+
-+ You should have received a copy of the GNU Lesser General Public
-+ License along with the GNU C Library. If not, see
-+ <http://www.gnu.org/licenses/>. */
-+
-+#include <sysdep.h>
-+#include <sys/asm.h>
-+
-+ .text
-+ .set nomips16
-+
-+#ifdef __mips16
-+
-+/* long long __libc_do_syscall0 (long arg1, long number) */
-+ .hidden __libc_do_syscall0
-+ENTRY(__libc_do_syscall0)
-+ move v0, a0
-+ syscall
-+ move v1, a3
-+ jr ra
-+END(__libc_do_syscall0)
-+
-+
-+/* long long __libc_do_syscall1 (long arg1, long number) */
-+ .hidden __libc_do_syscall1
-+ENTRY(__libc_do_syscall1)
-+ move v0, a1
-+ syscall
-+ move v1, a3
-+ jr ra
-+END(__libc_do_syscall1)
-+
-+/* long long __libc_do_syscall2 (long arg1, long arg2, long number) */
-+ .hidden __libc_do_syscall2
-+ENTRY(__libc_do_syscall2)
-+ move v0, a2
-+ syscall
-+ move v1, a3
-+ jr ra
-+END(__libc_do_syscall2)
-+
-+/* long long __libc_do_syscall3 (long arg1, long arg2, long arg3,
-+ long number) */
-+ .hidden __libc_do_syscall3
-+ENTRY(__libc_do_syscall3)
-+ move v0, a3
-+ syscall
-+ move v1, a3
-+ jr ra
-+END(__libc_do_syscall3)
-+
-+/* long long __libc_do_syscall4 (long arg1, long arg2, long arg3, long arg4,
-+ long number) */
-+ .hidden __libc_do_syscall4
-+ENTRY(__libc_do_syscall4)
-+ lw v0, 16(sp)
-+ syscall
-+ move v1, a3
-+ jr ra
-+END(__libc_do_syscall4)
-+
-+#endif /* !__mips16 */
-+
-+/* long long __libc_do_syscall5 (long arg1, long arg2, long arg3, long arg4,
-+ long arg5, long number) */
-+ .hidden __libc_do_syscall5
-+ENTRY(__libc_do_syscall5)
-+ lw v0, 20(sp)
-+ syscall
-+ move v1, a3
-+ jr ra
-+END(__libc_do_syscall5)
-+
-+/* long long __libc_do_syscall6 (long arg1, long arg2, long arg3, long arg4,
-+ long arg5, long arg6, long number) */
-+ .hidden __libc_do_syscall6
-+ENTRY(__libc_do_syscall6)
-+ lw v0, 24(sp)
-+ syscall
-+ move v1, a3
-+ jr ra
-+END(__libc_do_syscall6)
-+
-+/* long long __libc_do_syscall7 (long arg1, long arg2, long arg3, long arg4,
-+ long arg5, long arg6, long arg7,
-+ long number) */
-+ .hidden __libc_do_syscall7
-+ENTRY(__libc_do_syscall7)
-+ lw v0, 28(sp)
-+ syscall
-+ move v1, a3
-+ jr ra
-+END(__libc_do_syscall7)
---- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/Makefile
-+++ /dev/null
-@@ -1,13 +0,0 @@
--ifeq ($(subdir),misc)
--sysdep_routines += mips16-syscall0 mips16-syscall1 mips16-syscall2
--sysdep_routines += mips16-syscall3 mips16-syscall4 mips16-syscall5
--sysdep_routines += mips16-syscall6 mips16-syscall7
--CFLAGS-mips16-syscall0.c += -fexceptions
--CFLAGS-mips16-syscall1.c += -fexceptions
--CFLAGS-mips16-syscall2.c += -fexceptions
--CFLAGS-mips16-syscall3.c += -fexceptions
--CFLAGS-mips16-syscall4.c += -fexceptions
--CFLAGS-mips16-syscall5.c += -fexceptions
--CFLAGS-mips16-syscall6.c += -fexceptions
--CFLAGS-mips16-syscall7.c += -fexceptions
--endif
---- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/Versions
-+++ /dev/null
-@@ -1,6 +0,0 @@
--libc {
-- GLIBC_PRIVATE {
-- __mips16_syscall0; __mips16_syscall1; __mips16_syscall2; __mips16_syscall3;
-- __mips16_syscall4; __mips16_syscall5; __mips16_syscall6; __mips16_syscall7;
-- }
--}
---- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall.h
-+++ /dev/null
-@@ -1,89 +0,0 @@
--/* MIPS16 syscall wrappers.
-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
-- This file is part of the GNU C Library.
--
-- The GNU C Library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2.1 of the License, or (at your option) any later version.
--
-- The GNU C Library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- You should have received a copy of the GNU Lesser General Public
-- License along with the GNU C Library; if not, see
-- <http://www.gnu.org/licenses/>. */
--
--#ifndef MIPS16_SYSCALL_H
--#define MIPS16_SYSCALL_H 1
--
--#define __nomips16 __attribute__ ((nomips16))
--
--union __mips16_syscall_return
-- {
-- long long val;
-- struct
-- {
-- long v0;
-- long v1;
-- }
-- reg;
-- };
--
--long long __nomips16 __mips16_syscall0 (long number);
--#define __mips16_syscall0(dummy, number) \
-- __mips16_syscall0 ((long) (number))
--
--long long __nomips16 __mips16_syscall1 (long a0,
-- long number);
--#define __mips16_syscall1(a0, number) \
-- __mips16_syscall1 ((long) (a0), \
-- (long) (number))
--
--long long __nomips16 __mips16_syscall2 (long a0, long a1,
-- long number);
--#define __mips16_syscall2(a0, a1, number) \
-- __mips16_syscall2 ((long) (a0), (long) (a1), \
-- (long) (number))
--
--long long __nomips16 __mips16_syscall3 (long a0, long a1, long a2,
-- long number);
--#define __mips16_syscall3(a0, a1, a2, number) \
-- __mips16_syscall3 ((long) (a0), (long) (a1), (long) (a2), \
-- (long) (number))
--
--long long __nomips16 __mips16_syscall4 (long a0, long a1, long a2, long a3,
-- long number);
--#define __mips16_syscall4(a0, a1, a2, a3, number) \
-- __mips16_syscall4 ((long) (a0), (long) (a1), (long) (a2), \
-- (long) (a3), \
-- (long) (number))
--
--long long __nomips16 __mips16_syscall5 (long a0, long a1, long a2, long a3,
-- long a4,
-- long number);
--#define __mips16_syscall5(a0, a1, a2, a3, a4, number) \
-- __mips16_syscall5 ((long) (a0), (long) (a1), (long) (a2), \
-- (long) (a3), (long) (a4), \
-- (long) (number))
--
--long long __nomips16 __mips16_syscall6 (long a0, long a1, long a2, long a3,
-- long a4, long a5,
-- long number);
--#define __mips16_syscall6(a0, a1, a2, a3, a4, a5, number) \
-- __mips16_syscall6 ((long) (a0), (long) (a1), (long) (a2), \
-- (long) (a3), (long) (a4), (long) (a5), \
-- (long) (number))
--
--long long __nomips16 __mips16_syscall7 (long a0, long a1, long a2, long a3,
-- long a4, long a5, long a6,
-- long number);
--#define __mips16_syscall7(a0, a1, a2, a3, a4, a5, a6, number) \
-- __mips16_syscall7 ((long) (a0), (long) (a1), (long) (a2), \
-- (long) (a3), (long) (a4), (long) (a5), \
-- (long) (a6), \
-- (long) (number))
--
--#endif
---- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall0.c
-+++ /dev/null
-@@ -1,30 +0,0 @@
--/* MIPS16 syscall wrappers.
-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
-- This file is part of the GNU C Library.
--
-- The GNU C Library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2.1 of the License, or (at your option) any later version.
--
-- The GNU C Library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- You should have received a copy of the GNU Lesser General Public
-- License along with the GNU C Library; if not, see
-- <http://www.gnu.org/licenses/>. */
--
--#include <sysdep.h>
--#include <mips16-syscall.h>
--
--#undef __mips16_syscall0
--
--long long __nomips16
--__mips16_syscall0 (long number)
--{
-- union __mips16_syscall_return ret;
-- ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 0);
-- return ret.val;
--}
---- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall1.c
-+++ /dev/null
-@@ -1,32 +0,0 @@
--/* MIPS16 syscall wrappers.
-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
-- This file is part of the GNU C Library.
--
-- The GNU C Library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2.1 of the License, or (at your option) any later version.
--
-- The GNU C Library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- You should have received a copy of the GNU Lesser General Public
-- License along with the GNU C Library; if not, see
-- <http://www.gnu.org/licenses/>. */
--
--#include <sysdep.h>
--#include <mips16-syscall.h>
--
--#undef __mips16_syscall1
--
--long long __nomips16
--__mips16_syscall1 (long a0,
-- long number)
--{
-- union __mips16_syscall_return ret;
-- ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 1,
-- a0);
-- return ret.val;
--}
---- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall2.c
-+++ /dev/null
-@@ -1,32 +0,0 @@
--/* MIPS16 syscall wrappers.
-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
-- This file is part of the GNU C Library.
--
-- The GNU C Library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2.1 of the License, or (at your option) any later version.
--
-- The GNU C Library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- You should have received a copy of the GNU Lesser General Public
-- License along with the GNU C Library; if not, see
-- <http://www.gnu.org/licenses/>. */
--
--#include <sysdep.h>
--#include <mips16-syscall.h>
--
--#undef __mips16_syscall2
--
--long long __nomips16
--__mips16_syscall2 (long a0, long a1,
-- long number)
--{
-- union __mips16_syscall_return ret;
-- ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 2,
-- a0, a1);
-- return ret.val;
--}
---- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall3.c
-+++ /dev/null
-@@ -1,32 +0,0 @@
--/* MIPS16 syscall wrappers.
-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
-- This file is part of the GNU C Library.
--
-- The GNU C Library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2.1 of the License, or (at your option) any later version.
--
-- The GNU C Library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- You should have received a copy of the GNU Lesser General Public
-- License along with the GNU C Library; if not, see
-- <http://www.gnu.org/licenses/>. */
--
--#include <sysdep.h>
--#include <mips16-syscall.h>
--
--#undef __mips16_syscall3
--
--long long __nomips16
--__mips16_syscall3 (long a0, long a1, long a2,
-- long number)
--{
-- union __mips16_syscall_return ret;
-- ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 3,
-- a0, a1, a2);
-- return ret.val;
--}
---- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall4.c
-+++ /dev/null
-@@ -1,32 +0,0 @@
--/* MIPS16 syscall wrappers.
-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
-- This file is part of the GNU C Library.
--
-- The GNU C Library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2.1 of the License, or (at your option) any later version.
--
-- The GNU C Library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- You should have received a copy of the GNU Lesser General Public
-- License along with the GNU C Library; if not, see
-- <http://www.gnu.org/licenses/>. */
--
--#include <sysdep.h>
--#include <mips16-syscall.h>
--
--#undef __mips16_syscall4
--
--long long __nomips16
--__mips16_syscall4 (long a0, long a1, long a2, long a3,
-- long number)
--{
-- union __mips16_syscall_return ret;
-- ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 4,
-- a0, a1, a2, a3);
-- return ret.val;
--}
---- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall5.c
-+++ /dev/null
-@@ -1,33 +0,0 @@
--/* MIPS16 syscall wrappers.
-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
-- This file is part of the GNU C Library.
--
-- The GNU C Library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2.1 of the License, or (at your option) any later version.
--
-- The GNU C Library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- You should have received a copy of the GNU Lesser General Public
-- License along with the GNU C Library; if not, see
-- <http://www.gnu.org/licenses/>. */
--
--#include <sysdep.h>
--#include <mips16-syscall.h>
--
--#undef __mips16_syscall5
--
--long long __nomips16
--__mips16_syscall5 (long a0, long a1, long a2, long a3,
-- long a4,
-- long number)
--{
-- union __mips16_syscall_return ret;
-- ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 5,
-- a0, a1, a2, a3, a4);
-- return ret.val;
--}
---- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall6.c
-+++ /dev/null
-@@ -1,33 +0,0 @@
--/* MIPS16 syscall wrappers.
-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
-- This file is part of the GNU C Library.
--
-- The GNU C Library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2.1 of the License, or (at your option) any later version.
--
-- The GNU C Library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- You should have received a copy of the GNU Lesser General Public
-- License along with the GNU C Library; if not, see
-- <http://www.gnu.org/licenses/>. */
--
--#include <sysdep.h>
--#include <mips16-syscall.h>
--
--#undef __mips16_syscall6
--
--long long __nomips16
--__mips16_syscall6 (long a0, long a1, long a2, long a3,
-- long a4, long a5,
-- long number)
--{
-- union __mips16_syscall_return ret;
-- ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 6,
-- a0, a1, a2, a3, a4, a5);
-- return ret.val;
--}
---- a/sysdeps/unix/sysv/linux/mips/mips32/mips16/mips16-syscall7.c
-+++ /dev/null
-@@ -1,33 +0,0 @@
--/* MIPS16 syscall wrappers.
-- Copyright (C) 2013-2017 Free Software Foundation, Inc.
-- This file is part of the GNU C Library.
--
-- The GNU C Library is free software; you can redistribute it and/or
-- modify it under the terms of the GNU Lesser General Public
-- License as published by the Free Software Foundation; either
-- version 2.1 of the License, or (at your option) any later version.
--
-- The GNU C Library is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-- Lesser General Public License for more details.
--
-- You should have received a copy of the GNU Lesser General Public
-- License along with the GNU C Library; if not, see
-- <http://www.gnu.org/licenses/>. */
--
--#include <sysdep.h>
--#include <mips16-syscall.h>
--
--#undef __mips16_syscall7
--
--long long __nomips16
--__mips16_syscall7 (long a0, long a1, long a2, long a3,
-- long a4, long a5, long a6,
-- long number)
--{
-- union __mips16_syscall_return ret;
-- ret.reg.v0 = INTERNAL_SYSCALL_MIPS16 (number, ret.reg.v1, 7,
-- a0, a1, a2, a3, a4, a5, a6);
-- return ret.val;
--}
---- a/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h
-+++ b/sysdeps/unix/sysv/linux/mips/mips32/sysdep.h
-@@ -98,45 +98,100 @@
- #undef INTERNAL_SYSCALL
- #undef INTERNAL_SYSCALL_NCS
-
-+#define INTERNAL_SYSCALL(name, err, nr, args...) \
-+ internal_syscall##nr ("li\t%0, %2\t\t\t# " #name "\n\t", \
-+ "IK" (SYS_ify (name)), \
-+ SYS_ify(name), err, args)
-+
-+#define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \
-+ internal_syscall##nr (MOVE32 "\t%0, %2\n\t", \
-+ "r" (__s0), \
-+ number, err, args)
-+
-+#define __nomips16 __attribute__ ((nomips16))
-+
-+union __libc_do_syscall_return
-+ {
-+ long long val;
-+ struct
-+ {
-+ long v0;
-+ long v1;
-+ }
-+ reg;
-+ };
-+
- #ifdef __mips16
--/* There's no MIPS16 syscall instruction, so we go through out-of-line
-- standard MIPS wrappers. These do use inline snippets below though,
-- through INTERNAL_SYSCALL_MIPS16. Spilling the syscall number to
-- memory gives the best code in that case, avoiding the need to save
-- and restore a static register. */
-+/* There's no MIPS16 syscall instruction, so we always need to go through
-+ out-of-line standard MIPS wrappers. */
-+
-+long long __nomips16 __libc_do_syscall0 (long number);
-
--# include <mips16-syscall.h>
-+# define internal_syscall0(v0_init, input, number, err, dummy) \
-+({ \
-+ union __libc_do_syscall_return _sys_result; \
-+ _sys_result.val = __libc_do_syscall0 (number); \
-+ err = _sys_result.reg.v1; \
-+ _sys_result.reg.v0; \
-+})
-
--# define INTERNAL_SYSCALL(name, err, nr, args...) \
-- INTERNAL_SYSCALL_NCS (SYS_ify (name), err, nr, args)
-+long long __nomips16 __libc_do_syscall1 (long arg1, long number);
-
--# define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \
-+# define internal_syscall1(v0_init, input, number, err, arg1) \
- ({ \
-- union __mips16_syscall_return _sc_ret; \
-- _sc_ret.val = __mips16_syscall##nr (args, number); \
-- err = _sc_ret.reg.v1; \
-- _sc_ret.reg.v0; \
-+ union __libc_do_syscall_return _sys_result; \
-+ _sys_result.val = __libc_do_syscall1 ((long) (arg1), \
-+ number); \
-+ err = _sys_result.reg.v1; \
-+ _sys_result.reg.v0; \
- })
-
--# define INTERNAL_SYSCALL_MIPS16(number, err, nr, args...) \
-- internal_syscall##nr ("lw\t%0, %2\n\t", \
-- "R" (number), \
-- 0, err, args)
-+long long __nomips16 __libc_do_syscall2 (long arg1, long arg2, long number);
-
--#else /* !__mips16 */
--# define INTERNAL_SYSCALL(name, err, nr, args...) \
-- internal_syscall##nr ("li\t%0, %2\t\t\t# " #name "\n\t", \
-- "IK" (SYS_ify (name)), \
-- 0, err, args)
-+# define internal_syscall2(v0_init, input, number, err, arg1, arg2) \
-+({ \
-+ union __libc_do_syscall_return _sys_result; \
-+ _sys_result.val = __libc_do_syscall2 ((long) (arg1), \
-+ (long) (arg2), \
-+ number); \
-+ err = _sys_result.reg.v1; \
-+ _sys_result.reg.v0; \
-+})
-
--# define INTERNAL_SYSCALL_NCS(number, err, nr, args...) \
-- internal_syscall##nr (MOVE32 "\t%0, %2\n\t", \
-- "r" (__s0), \
-- number, err, args)
-+long long __nomips16 __libc_do_syscall3 (long arg1, long arg2, long arg3,
-+ long number);
-
--#endif /* !__mips16 */
-+# define internal_syscall3(v0_init, input, number, err, \
-+ arg1, arg2, arg3) \
-+({ \
-+ union __libc_do_syscall_return _sys_result; \
-+ _sys_result.val = __libc_do_syscall3 ((long) (arg1), \
-+ (long) (arg2), \
-+ (long) (arg3), \
-+ number); \
-+ err = _sys_result.reg.v1; \
-+ _sys_result.reg.v0; \
-+})
-+
-+long long __nomips16 __libc_do_syscall4 (long arg1, long arg2, long arg3,
-+ long arg4, long number);
-
--#define internal_syscall0(v0_init, input, number, err, dummy...) \
-+# define internal_syscall4(v0_init, input, number, err, \
-+ arg1, arg2, arg3, arg4) \
-+({ \
-+ union __libc_do_syscall_return _sys_result; \
-+ _sys_result.val = __libc_do_syscall4 ((long) (arg1), \
-+ (long) (arg2), \
-+ (long) (arg3), \
-+ (long) (arg4), \
-+ number); \
-+ err = _sys_result.reg.v1; \
-+ _sys_result.reg.v0; \
-+})
-+
-+#else /* !__mips16 */
-+
-+# define internal_syscall0(v0_init, input, number, err, dummy...) \
- ({ \
- long _sys_result; \
- \
-@@ -159,7 +214,7 @@
- _sys_result; \
- })
-
--#define internal_syscall1(v0_init, input, number, err, arg1) \
-+# define internal_syscall1(v0_init, input, number, err, arg1) \
- ({ \
- long _sys_result; \
- \
-@@ -183,7 +238,7 @@
- _sys_result; \
- })
-
--#define internal_syscall2(v0_init, input, number, err, arg1, arg2) \
-+# define internal_syscall2(v0_init, input, number, err, arg1, arg2) \
- ({ \
- long _sys_result; \
- \
-@@ -208,8 +263,8 @@
- _sys_result; \
- })
-
--#define internal_syscall3(v0_init, input, number, err, \
-- arg1, arg2, arg3) \
-+# define internal_syscall3(v0_init, input, number, err, \
-+ arg1, arg2, arg3) \
- ({ \
- long _sys_result; \
- \
-@@ -235,8 +290,8 @@
- _sys_result; \
- })
-
--#define internal_syscall4(v0_init, input, number, err, \
-- arg1, arg2, arg3, arg4) \
-+# define internal_syscall4(v0_init, input, number, err, \
-+ arg1, arg2, arg3, arg4) \
- ({ \
- long _sys_result; \
- \
-@@ -262,110 +317,65 @@
- _sys_result; \
- })
-
--/* We need to use a frame pointer for the functions in which we
-- adjust $sp around the syscall, or debug information and unwind
-- information will be $sp relative and thus wrong during the syscall. As
-- of GCC 4.7, this is sufficient. */
--#define FORCE_FRAME_POINTER \
-- void *volatile __fp_force __attribute__ ((unused)) = alloca (4)
-+#endif /* !__mips16 */
-+
-+/* Out-of-line standard MIPS wrappers used for 5, 6, and 7 argument syscall
-+ which requires arguments in stack. */
-+
-+long long __nomips16 __libc_do_syscall5 (long arg1, long arg2, long arg3,
-+ long arg4, long arg5, long number);
-
- #define internal_syscall5(v0_init, input, number, err, \
- arg1, arg2, arg3, arg4, arg5) \
- ({ \
-- long _sys_result; \
-- \
-- FORCE_FRAME_POINTER; \
-- { \
-- register long __s0 asm ("$16") __attribute__ ((unused)) \
-- = (number); \
-- register long __v0 asm ("$2"); \
-- register long __a0 asm ("$4") = (long) (arg1); \
-- register long __a1 asm ("$5") = (long) (arg2); \
-- register long __a2 asm ("$6") = (long) (arg3); \
-- register long __a3 asm ("$7") = (long) (arg4); \
-- __asm__ volatile ( \
-- ".set\tnoreorder\n\t" \
-- "subu\t$29, 32\n\t" \
-- "sw\t%6, 16($29)\n\t" \
-- v0_init \
-- "syscall\n\t" \
-- "addiu\t$29, 32\n\t" \
-- ".set\treorder" \
-- : "=r" (__v0), "+r" (__a3) \
-- : input, "r" (__a0), "r" (__a1), "r" (__a2), \
-- "r" ((long) (arg5)) \
-- : __SYSCALL_CLOBBERS); \
-- err = __a3; \
-- _sys_result = __v0; \
-- } \
-- _sys_result; \
-+ union __libc_do_syscall_return _sys_result; \
-+ _sys_result.val = __libc_do_syscall5 ((long) (arg1), \
-+ (long) (arg2), \
-+ (long) (arg3), \
-+ (long) (arg4), \
-+ (long) (arg5), \
-+ number); \
-+ err = _sys_result.reg.v1; \
-+ _sys_result.reg.v0; \
- })
-
-+long long __nomips16 __libc_do_syscall6 (long arg1, long arg2, long arg3,
-+ long arg4, long arg5, long arg6,
-+ long number);
-+
- #define internal_syscall6(v0_init, input, number, err, \
- arg1, arg2, arg3, arg4, arg5, arg6) \
- ({ \
-- long _sys_result; \
-- \
-- FORCE_FRAME_POINTER; \
-- { \
-- register long __s0 asm ("$16") __attribute__ ((unused)) \
-- = (number); \
-- register long __v0 asm ("$2"); \
-- register long __a0 asm ("$4") = (long) (arg1); \
-- register long __a1 asm ("$5") = (long) (arg2); \
-- register long __a2 asm ("$6") = (long) (arg3); \
-- register long __a3 asm ("$7") = (long) (arg4); \
-- __asm__ volatile ( \
-- ".set\tnoreorder\n\t" \
-- "subu\t$29, 32\n\t" \
-- "sw\t%6, 16($29)\n\t" \
-- "sw\t%7, 20($29)\n\t" \
-- v0_init \
-- "syscall\n\t" \
-- "addiu\t$29, 32\n\t" \
-- ".set\treorder" \
-- : "=r" (__v0), "+r" (__a3) \
-- : input, "r" (__a0), "r" (__a1), "r" (__a2), \
-- "r" ((long) (arg5)), "r" ((long) (arg6)) \
-- : __SYSCALL_CLOBBERS); \
-- err = __a3; \
-- _sys_result = __v0; \
-- } \
-- _sys_result; \
-+ union __libc_do_syscall_return _sys_result; \
-+ _sys_result.val = __libc_do_syscall6 ((long) (arg1), \
-+ (long) (arg2), \
-+ (long) (arg3), \
-+ (long) (arg4), \
-+ (long) (arg5), \
-+ (long) (arg6), \
-+ number); \
-+ err = _sys_result.reg.v1; \
-+ _sys_result.reg.v0; \
- })
-
-+long long __nomips16 __libc_do_syscall7 (long arg1, long arg2, long arg3,
-+ long arg4, long arg5, long arg6,
-+ long arg7, long number);
-+
- #define internal_syscall7(v0_init, input, number, err, \
- arg1, arg2, arg3, arg4, arg5, arg6, arg7) \
- ({ \
-- long _sys_result; \
-- \
-- FORCE_FRAME_POINTER; \
-- { \
-- register long __s0 asm ("$16") __attribute__ ((unused)) \
-- = (number); \
-- register long __v0 asm ("$2"); \
-- register long __a0 asm ("$4") = (long) (arg1); \
-- register long __a1 asm ("$5") = (long) (arg2); \
-- register long __a2 asm ("$6") = (long) (arg3); \
-- register long __a3 asm ("$7") = (long) (arg4); \
-- __asm__ volatile ( \
-- ".set\tnoreorder\n\t" \
-- "subu\t$29, 32\n\t" \
-- "sw\t%6, 16($29)\n\t" \
-- "sw\t%7, 20($29)\n\t" \
-- "sw\t%8, 24($29)\n\t" \
-- v0_init \
-- "syscall\n\t" \
-- "addiu\t$29, 32\n\t" \
-- ".set\treorder" \
-- : "=r" (__v0), "+r" (__a3) \
-- : input, "r" (__a0), "r" (__a1), "r" (__a2), \
-- "r" ((long) (arg5)), "r" ((long) (arg6)), "r" ((long) (arg7)) \
-- : __SYSCALL_CLOBBERS); \
-- err = __a3; \
-- _sys_result = __v0; \
-- } \
-- _sys_result; \
-+ union __libc_do_syscall_return _sys_result; \
-+ _sys_result.val = __libc_do_syscall7 ((long) (arg1), \
-+ (long) (arg2), \
-+ (long) (arg3), \
-+ (long) (arg4), \
-+ (long) (arg5), \
-+ (long) (arg6), \
-+ (long) (arg7), \
-+ number); \
-+ err = _sys_result.reg.v1; \
-+ _sys_result.reg.v0; \
- })
-
- #define __SYSCALL_CLOBBERS "$1", "$3", "$8", "$9", "$10", "$11", "$12", "$13", \
diff --git a/debian/patches/series b/debian/patches/series
index 56a19b8..8529236 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -156,7 +156,7 @@ m68k/local-reloc.diff
m68k/submitted-gcc34-seccomment.diff
mips/submitted-rld_map.diff
-mips/submitted-syscalls5-7-unbound-stack.diff
+mips/git-syscalls5-7-unbound-stack.diff
powerpc/local-powerpc8xx-dcbz.diff
powerpc/submitted-tst-tlsopt-powerpc.diff
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-glibc/glibc.git
Reply to: