[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[glibc] 01/03: patches/hppa/submitted-sysdeps-cancel.diff: new patch to fix syscall cancellation issues. Closes: #837518.



This is an automated email from the git hooks/post-receive script.

aurel32 pushed a commit to branch sid
in repository glibc.

commit 49dd6b6c92a0ed126cc0cc797a5cfaa256d6313d
Author: Aurelien Jarno <aurelien@aurel32.net>
Date:   Tue Sep 13 23:14:44 2016 +0200

    patches/hppa/submitted-sysdeps-cancel.diff: new patch to fix syscall cancellation issues.  Closes: #837518.
---
 debian/changelog                                  |   4 +
 debian/patches/hppa/submitted-sysdeps-cancel.diff | 143 ++++++++++++++++++++++
 debian/patches/series                             |   1 +
 3 files changed, 148 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index 4218f32..62760b3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -10,6 +10,10 @@ glibc (2.24-3) UNRELEASED; urgency=medium
   * hurd-i386/cvs-libpthread.diff: Update from upstream. Fixes spurious
     dependencies of libp11, libgnutls30, libbsd0.
 
+  [ John David Anglin ]
+  * patches/hppa/submitted-sysdeps-cancel.diff: new patch to fix syscall
+    cancellation issues.  Closes: #837518.
+
  -- Aurelien Jarno <aurel32@debian.org>  Mon, 05 Sep 2016 23:34:08 +0200
 
 glibc (2.24-2) unstable; urgency=medium
diff --git a/debian/patches/hppa/submitted-sysdeps-cancel.diff b/debian/patches/hppa/submitted-sysdeps-cancel.diff
new file mode 100644
index 0000000..015711e
--- /dev/null
+++ b/debian/patches/hppa/submitted-sysdeps-cancel.diff
@@ -0,0 +1,143 @@
+diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
+index cafc752..f239408 100644
+--- a/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
++++ b/sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h
+@@ -62,12 +62,11 @@
+ 	ENTRY (__##syscall_name##_nocancel)				\
+ 	DOARGS_##args					ASM_LINE_SEP	\
+ 	stwm TREG, 64(%sp)				ASM_LINE_SEP	\
++	.cfi_def_cfa_offset -64				ASM_LINE_SEP	\
+ 	.cfi_offset TREG, 0				ASM_LINE_SEP	\
+-	.cfi_adjust_cfa_offset 64			ASM_LINE_SEP	\
+ 	stw %sp, -4(%sp)				ASM_LINE_SEP	\
+-	.cfi_offset 30, -4				ASM_LINE_SEP	\
+ 	stw %r19, -32(%sp)				ASM_LINE_SEP	\
+-	.cfi_offset 19, -32				ASM_LINE_SEP	\
++	.cfi_offset 19, 32				ASM_LINE_SEP	\
+ 	/* Save r19 */					ASM_LINE_SEP	\
+ 	SAVE_PIC(TREG)					ASM_LINE_SEP	\
+ 	/* Do syscall, delay loads # */			ASM_LINE_SEP	\
+@@ -91,21 +90,19 @@ L(pre_nc_end):						ASM_LINE_SEP	\
+ 	/* No need to LOAD_PIC */			ASM_LINE_SEP	\
+ 	/* Undo frame */				ASM_LINE_SEP	\
+ 	ldwm -64(%sp),TREG				ASM_LINE_SEP	\
+-	.cfi_adjust_cfa_offset -64			ASM_LINE_SEP	\
+ 	/* Restore rp before exit */			ASM_LINE_SEP	\
+ 	ldw -20(%sp), %rp				ASM_LINE_SEP	\
+-	.cfi_restore 2					ASM_LINE_SEP	\
+ 	ret						ASM_LINE_SEP	\
+ 	END(__##syscall_name##_nocancel)		ASM_LINE_SEP	\
+ 	/**********************************************/ASM_LINE_SEP	\
+ 	ENTRY (name)							\
+ 	DOARGS_##args					ASM_LINE_SEP	\
+ 	stwm TREG, 64(%sp)				ASM_LINE_SEP	\
+-	.cfi_adjust_cfa_offset 64			ASM_LINE_SEP	\
++	.cfi_def_cfa_offset -64				ASM_LINE_SEP	\
++	.cfi_offset TREG, 0				ASM_LINE_SEP	\
+ 	stw %sp, -4(%sp)				ASM_LINE_SEP	\
+-	.cfi_offset 30, -4				ASM_LINE_SEP	\
+ 	stw %r19, -32(%sp)				ASM_LINE_SEP	\
+-	.cfi_offset 19, -32				ASM_LINE_SEP	\
++	.cfi_offset 19, 32				ASM_LINE_SEP	\
+ 	/* Done setting up frame, continue... */	ASM_LINE_SEP	\
+ 	SINGLE_THREAD_P					ASM_LINE_SEP	\
+ 	cmpib,<>,n 0,%ret0,L(pseudo_cancel)		ASM_LINE_SEP	\
+@@ -168,40 +165,32 @@ L(pre_end):						ASM_LINE_SEP	\
+ 	/* No need to LOAD_PIC */			ASM_LINE_SEP	\
+ 	/* Undo frame */				ASM_LINE_SEP	\
+ 	ldwm -64(%sp),TREG				ASM_LINE_SEP	\
+-	.cfi_adjust_cfa_offset -64			ASM_LINE_SEP	\
+ 	/* Restore rp before exit */			ASM_LINE_SEP	\
+-	ldw -20(%sp), %rp				ASM_LINE_SEP	\
+-	.cfi_restore 2					ASM_LINE_SEP
++	ldw -20(%sp), %rp				ASM_LINE_SEP
+ 
+ /* Save arguments into our frame */
+ # define PUSHARGS_0	/* nothing to do */
+ # define PUSHARGS_1	PUSHARGS_0 stw %r26, -36(%sr0,%sp)	ASM_LINE_SEP	\
+-			.cfi_offset 26, -36			ASM_LINE_SEP
++			.cfi_offset 26, 28			ASM_LINE_SEP
+ # define PUSHARGS_2	PUSHARGS_1 stw %r25, -40(%sr0,%sp)	ASM_LINE_SEP	\
+-			.cfi_offset 25, -40			ASM_LINE_SEP
++			.cfi_offset 25, 24			ASM_LINE_SEP
+ # define PUSHARGS_3	PUSHARGS_2 stw %r24, -44(%sr0,%sp)	ASM_LINE_SEP	\
+-			.cfi_offset 24, -44			ASM_LINE_SEP
++			.cfi_offset 24, 20			ASM_LINE_SEP
+ # define PUSHARGS_4	PUSHARGS_3 stw %r23, -48(%sr0,%sp)	ASM_LINE_SEP	\
+-			.cfi_offset 23, -48			ASM_LINE_SEP
++			.cfi_offset 23, 16			ASM_LINE_SEP
+ # define PUSHARGS_5	PUSHARGS_4 stw %r22, -52(%sr0,%sp)	ASM_LINE_SEP	\
+-			.cfi_offset 22, -52			ASM_LINE_SEP
++			.cfi_offset 22, 12			ASM_LINE_SEP
+ # define PUSHARGS_6	PUSHARGS_5 stw %r21, -56(%sr0,%sp)	ASM_LINE_SEP	\
+-			.cfi_offset 21, -56			ASM_LINE_SEP
++			.cfi_offset 21, 8			ASM_LINE_SEP
+ 
+ /* Bring them back from the stack */
+ # define POPARGS_0	/* nothing to do */
+-# define POPARGS_1	POPARGS_0 ldw -36(%sr0,%sp), %r26	ASM_LINE_SEP	\
+-			.cfi_restore 26				ASM_LINE_SEP
+-# define POPARGS_2	POPARGS_1 ldw -40(%sr0,%sp), %r25	ASM_LINE_SEP	\
+-			.cfi_restore 25				ASM_LINE_SEP
+-# define POPARGS_3	POPARGS_2 ldw -44(%sr0,%sp), %r24	ASM_LINE_SEP	\
+-			.cfi_restore 24				ASM_LINE_SEP
+-# define POPARGS_4	POPARGS_3 ldw -48(%sr0,%sp), %r23	ASM_LINE_SEP	\
+-			.cfi_restore 23				ASM_LINE_SEP
+-# define POPARGS_5	POPARGS_4 ldw -52(%sr0,%sp), %r22	ASM_LINE_SEP	\
+-			.cfi_restore 22				ASM_LINE_SEP
+-# define POPARGS_6	POPARGS_5 ldw -56(%sr0,%sp), %r21	ASM_LINE_SEP	\
+-			.cfi_restore 21				ASM_LINE_SEP
++# define POPARGS_1	POPARGS_0 ldw -36(%sr0,%sp), %r26	ASM_LINE_SEP
++# define POPARGS_2	POPARGS_1 ldw -40(%sr0,%sp), %r25	ASM_LINE_SEP
++# define POPARGS_3	POPARGS_2 ldw -44(%sr0,%sp), %r24	ASM_LINE_SEP
++# define POPARGS_4	POPARGS_3 ldw -48(%sr0,%sp), %r23	ASM_LINE_SEP
++# define POPARGS_5	POPARGS_4 ldw -52(%sr0,%sp), %r22	ASM_LINE_SEP
++# define POPARGS_6	POPARGS_5 ldw -56(%sr0,%sp), %r21	ASM_LINE_SEP
+ 
+ # if IS_IN (libpthread)
+ #  ifdef PIC
+diff --git a/sysdeps/unix/sysv/linux/hppa/sysdep.h b/sysdeps/unix/sysv/linux/hppa/sysdep.h
+index b459f0a..00cb366 100644
+--- a/sysdeps/unix/sysv/linux/hppa/sysdep.h
++++ b/sysdeps/unix/sysv/linux/hppa/sysdep.h
+@@ -49,11 +49,9 @@
+    to another function */
+ #define TREG 4
+ #define SAVE_PIC(SREG) \
+-	copy %r19, SREG ASM_LINE_SEP	\
+-	.cfi_register 19, SREG
++	copy %r19, SREG
+ #define LOAD_PIC(LREG) \
+-	copy LREG , %r19 ASM_LINE_SEP	\
+-	.cfi_restore 19
++	copy LREG , %r19
+ /* Inline assembly defines */
+ #define TREG_ASM "%r4" /* Cant clobber r3, it holds framemarker */
+ #define SAVE_ASM_PIC	"       copy %%r19, %" TREG_ASM "\n"
+@@ -292,12 +290,11 @@
+ #define DO_CALL(syscall_name, args)				\
+ 	/* Create a frame */			ASM_LINE_SEP	\
+ 	stwm TREG, 64(%sp)			ASM_LINE_SEP	\
++	.cfi_def_cfa_offset -64			ASM_LINE_SEP	\
+ 	.cfi_offset TREG, 0			ASM_LINE_SEP	\
+-	.cfi_adjust_cfa_offset 64		ASM_LINE_SEP	\
+ 	stw %sp, -4(%sp)			ASM_LINE_SEP	\
+-	.cfi_offset 30, -4			ASM_LINE_SEP	\
+ 	stw %r19, -32(%sp)			ASM_LINE_SEP	\
+-	.cfi_offset 19, -32			ASM_LINE_SEP	\
++	.cfi_offset 19, 32			ASM_LINE_SEP	\
+ 	/* Save r19 */				ASM_LINE_SEP	\
+ 	SAVE_PIC(TREG)				ASM_LINE_SEP	\
+ 	/* Do syscall, delay loads # */		ASM_LINE_SEP	\
+@@ -320,10 +317,8 @@
+ L(pre_end):					ASM_LINE_SEP	\
+ 	/* Restore our frame, restoring TREG */	ASM_LINE_SEP	\
+ 	ldwm -64(%sp), TREG			ASM_LINE_SEP	\
+-	.cfi_adjust_cfa_offset -64		ASM_LINE_SEP	\
+ 	/* Restore return pointer */		ASM_LINE_SEP	\
+-	ldw -20(%sp),%rp			ASM_LINE_SEP	\
+-	.cfi_restore 2				ASM_LINE_SEP
++	ldw -20(%sp),%rp			ASM_LINE_SEP
+ 
+ /* We do nothing with the return, except hand it back to someone else */
+ #undef  DO_CALL_NOERRNO
diff --git a/debian/patches/series b/debian/patches/series
index a401253..dfeadce 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -56,6 +56,7 @@ hppa/submitted-gmon-start.diff
 hppa/submitted-dladdr.diff
 hppa/local-stack-grows-up.diff
 hppa/submitted-setcontext.diff
+hppa/submitted-sysdeps-cancel.diff
 
 hurd-i386/local-enable-ldconfig.diff
 hurd-i386/tg-context_functions.diff

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-glibc/glibc.git


Reply to: