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

[commits] r8778 - in /fsf/trunk/ports: ./ sysdeps/arm/ sysdeps/arm/eabi/ sysdeps/unix/sysv/linux/arm/ sysdeps/unix/sysv/linux/arm/eabi/



Author: eglibc
Date: Fri Aug  7 00:05:22 2009
New Revision: 8778

Log:
Import glibc-ports-mainline for 2009-08-07

Added:
    fsf/trunk/ports/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S
    fsf/trunk/ports/sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S
Removed:
    fsf/trunk/ports/sysdeps/arm/____longjmp_chk.S
Modified:
    fsf/trunk/ports/ChangeLog.arm
    fsf/trunk/ports/sysdeps/arm/__longjmp.S
    fsf/trunk/ports/sysdeps/arm/eabi/__longjmp.S

Modified: fsf/trunk/ports/ChangeLog.arm
==============================================================================
--- fsf/trunk/ports/ChangeLog.arm (original)
+++ fsf/trunk/ports/ChangeLog.arm Fri Aug  7 00:05:22 2009
@@ -1,3 +1,12 @@
+2009-08-06  Joseph Myers  <joseph@xxxxxxxxxxxxxxxx>
+
+	* sysdeps/arm/____longjmp_chk.S: Remove.  Replaced by....
+	* sysdeps/unix/sysv/linux/arm/____longjmp_chk.S,
+	sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S: This.  New
+	files.
+	* sysdeps/arm/__longjmp.S, sysdeps/arm/eabi/__longjmp.S: Use r4
+	for saved sp.
+
 2009-07-29  Aurelien Jarno  <aurelien@xxxxxxxxxxx>
 
 	* sysdeps/unix/sysv/linux/arm/kernel-features.h: Define

Modified: fsf/trunk/ports/sysdeps/arm/__longjmp.S
==============================================================================
--- fsf/trunk/ports/sysdeps/arm/__longjmp.S (original)
+++ fsf/trunk/ports/sysdeps/arm/__longjmp.S Fri Aug  7 00:05:22 2009
@@ -30,8 +30,8 @@
 	moveq	r0, #1		/* can't let setjmp() return zero! */
 
 #ifdef CHECK_SP
-	ldr	r1, [ip, #32]
-	CHECK_SP (r1)
+	ldr	r4, [ip, #32]
+	CHECK_SP (r4)
 #endif
 	LOADREGS(ia, ip, {v1-v6, sl, fp, sp, pc})
 END (__longjmp)

Modified: fsf/trunk/ports/sysdeps/arm/eabi/__longjmp.S
==============================================================================
--- fsf/trunk/ports/sysdeps/arm/eabi/__longjmp.S (original)
+++ fsf/trunk/ports/sysdeps/arm/eabi/__longjmp.S Fri Aug  7 00:05:22 2009
@@ -31,8 +31,8 @@
 	moveq	r0, #1		/* can't let setjmp() return zero! */
 
 #ifdef CHECK_SP
-	ldr	r1, [ip, #32]
-	CHECK_SP (r1)
+	ldr	r4, [ip, #32]
+	CHECK_SP (r4)
 #endif
 	LOADREGS(ia, ip!, {v1-v6, sl, fp, sp, lr})
 

Added: fsf/trunk/ports/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S
==============================================================================
--- fsf/trunk/ports/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S (added)
+++ fsf/trunk/ports/sysdeps/unix/sysv/linux/arm/____longjmp_chk.S Fri Aug  7 00:05:22 2009
@@ -1,0 +1,75 @@
+/* Copyright (C) 2009 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 General Public License
+   along with GCC; see the file COPYING.  If not, write to the Free
+   Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.  */
+
+#include <sysdep.h>
+
+	.section .rodata.str1.1,"aMS",%progbits,1
+	.type	longjmp_msg,%object
+longjmp_msg:
+	.string "longjmp causes uninitialized stack frame"
+	.size	longjmp_msg, .-longjmp_msg
+	.text
+
+#define __longjmp ____longjmp_chk
+
+#ifdef PIC
+# define CALL_FAIL						\
+	ldr	sl, .L_GOT;					\
+.L_GOT_OFF:							\
+	add	sl, pc, sl;					\
+	ldr	r0, .Lstr;					\
+	add	r0, sl, r0;					\
+	B	PLTJMP(HIDDEN_JUMPTARGET(__fortify_fail));	\
+.L_GOT:								\
+	.word	_GLOBAL_OFFSET_TABLE_-(.L_GOT_OFF+8);		\
+.Lstr:								\
+	.word	longjmp_msg(GOTOFF);
+#else
+# define CALL_FAIL					\
+	ldr	r0, .Lstr;				\
+	B	HIDDEN_JUMPTARGET(__fortify_fail);	\
+.Lstr:							\
+	.word	longjmp_msg;
+#endif
+
+#define CHECK_SP(reg)				\
+	cmp	sp, reg;			\
+	bls	.Lok;				\
+	mov	r5, r0;				\
+	mov	r0, #0;				\
+	sub	sp, sp, #16;			\
+	mov	r1, sp;				\
+	swi	#SYS_ify(sigaltstack);		\
+	cmp	r0, #0;				\
+	bne	.Lok2;				\
+	ldr	r1, [sp, #4];			\
+	tst	r1, #1;				\
+	beq	.Lfail;				\
+	ldr	r2, [sp, #0];			\
+	ldr	r3, [sp, #8];			\
+	add	r2, r2, r3;			\
+	sub	r2, r2, reg;			\
+	cmp	r2, r3;				\
+	bhi	.Lok2;				\
+.Lfail:						\
+	CALL_FAIL				\
+.Lok2:						\
+	mov	r0, r5;				\
+.Lok:
+
+#include <__longjmp.S>

Added: fsf/trunk/ports/sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S
==============================================================================
--- fsf/trunk/ports/sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S (added)
+++ fsf/trunk/ports/sysdeps/unix/sysv/linux/arm/eabi/____longjmp_chk.S Fri Aug  7 00:05:22 2009
@@ -1,0 +1,76 @@
+/* Copyright (C) 2009 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 General Public License
+   along with GCC; see the file COPYING.  If not, write to the Free
+   Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
+   02110-1301, USA.  */
+
+#include <sysdep.h>
+
+	.section .rodata.str1.1,"aMS",%progbits,1
+	.type	longjmp_msg,%object
+longjmp_msg:
+	.string "longjmp causes uninitialized stack frame"
+	.size	longjmp_msg, .-longjmp_msg
+	.text
+
+#define __longjmp ____longjmp_chk
+
+#ifdef PIC
+# define CALL_FAIL						\
+	ldr	sl, .L_GOT;					\
+.L_GOT_OFF:							\
+	add	sl, pc, sl;					\
+	ldr	r0, .Lstr;					\
+	add	r0, sl, r0;					\
+	B	PLTJMP(HIDDEN_JUMPTARGET(__fortify_fail));	\
+.L_GOT:								\
+	.word	_GLOBAL_OFFSET_TABLE_-(.L_GOT_OFF+8);		\
+.Lstr:								\
+	.word	longjmp_msg(GOTOFF);
+#else
+# define CALL_FAIL					\
+	ldr	r0, .Lstr;				\
+	B	HIDDEN_JUMPTARGET(__fortify_fail);	\
+.Lstr:							\
+	.word	longjmp_msg;
+#endif
+
+#define CHECK_SP(reg)				\
+	cmp	sp, reg;			\
+	bls	.Lok;				\
+	mov	r5, r0;				\
+	mov	r7, #SYS_ify(sigaltstack);	\
+	mov	r0, #0;				\
+	sub	sp, sp, #16;			\
+	mov	r1, sp;				\
+	swi	#0;				\
+	cmp	r0, #0;				\
+	bne	.Lok2;				\
+	ldr	r1, [sp, #4];			\
+	tst	r1, #1;				\
+	beq	.Lfail;				\
+	ldr	r2, [sp, #0];			\
+	ldr	r3, [sp, #8];			\
+	add	r2, r2, r3;			\
+	sub	r2, r2, reg;			\
+	cmp	r2, r3;				\
+	bhi	.Lok2;				\
+.Lfail:						\
+	CALL_FAIL				\
+.Lok2:						\
+	mov	r0, r5;				\
+.Lok:
+
+#include <__longjmp.S>