summary refs log tree commit diff
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2012-06-23 12:07:04 +0200
committerThomas Schwinge <thomas@codesourcery.com>2012-06-23 12:07:04 +0200
commit1518f58b6120289e69aeba9426eca9234cd9a200 (patch)
tree06b5785499b2deea1abe73832f7f4d1401ec9969
parentdb9b505976a9448911e728c01885e71ad6e9461f (diff)
downloadglibc-1518f58b6120289e69aeba9426eca9234cd9a200.tar.gz
glibc-1518f58b6120289e69aeba9426eca9234cd9a200.tar.xz
glibc-1518f58b6120289e69aeba9426eca9234cd9a200.zip
SH: Optimize assembler code in context of call to __fortify_fail.
__fortify_fail has »__attribute__ ((__noreturn__))«.
-rw-r--r--ChangeLog4
-rw-r--r--sysdeps/sh/____longjmp_chk.S14
-rw-r--r--sysdeps/unix/sysv/linux/sh/____longjmp_chk.S12
3 files changed, 13 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index 0653538cc1..649b656da1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2012-06-23  Thomas Schwinge  <thomas@codesourcery.com>
 
+	* sysdeps/sh/____longjmp_chk.S (CALL_FAIL): Don't plan for the call to
+	__fortify_fail returning.
+	* sysdeps/unix/sysv/linux/sh/____longjmp_chk.S (CALL_FAIL): Likewise.
+
 	* sysdeps/unix/sysv/linux/sh/____longjmp_chk.S: New file, based on
 	sysdeps/sh/____longjmp_chk.S.
 	* sysdeps/unix/sysv/linux/sh/sigaltstack-offsets.sym: New file, based
diff --git a/sysdeps/sh/____longjmp_chk.S b/sysdeps/sh/____longjmp_chk.S
index 5d17f3ae7a..e8d5f687e1 100644
--- a/sysdeps/sh/____longjmp_chk.S
+++ b/sysdeps/sh/____longjmp_chk.S
@@ -1,4 +1,4 @@
-/* Copyright (C) 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2009-2012 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
@@ -33,31 +33,27 @@ longjmp_msg:
 	add	r0, r12;				\
 	bsrf	r1;					\
 	 add	r12, r4;				\
+	/* Unreachable.	 */				\
 .Lfail0:						\
-	bra	0f;					\
-	 nop;						\
 	.align	2;					\
 .Lgot:							\
 	.long	_GLOBAL_OFFSET_TABLE_;			\
 .Lstr:							\
 	.long	longjmp_msg@GOTOFF;			\
 .Lfail:							\
-	.long	__GI___fortify_fail@PLT-(.Lfail0-.);	\
-0:
+	.long	__GI___fortify_fail@PLT-(.Lfail0-.);
 #else
 # define CALL_FAIL \
 	mov.l	.Lfail, r1;				\
 	mov.l	.Lstr, r4;				\
 	jsr	@r1;					\
 	 nop;						\
-	bra	0f;					\
-	 nop;						\
+	/* Unreachable.	 */				\
 	.align	2;					\
 .Lstr:							\
 	.long	longjmp_msg;				\
 .Lfail:							\
-	.long	__fortify_fail;				\
-0:
+	.long	__fortify_fail;
 #endif
 
 #define CHECK_SP(reg) \
diff --git a/sysdeps/unix/sysv/linux/sh/____longjmp_chk.S b/sysdeps/unix/sysv/linux/sh/____longjmp_chk.S
index d034afcf24..bcf828bc03 100644
--- a/sysdeps/unix/sysv/linux/sh/____longjmp_chk.S
+++ b/sysdeps/unix/sysv/linux/sh/____longjmp_chk.S
@@ -38,30 +38,26 @@ longjmp_msg:
 	bsrf	r1;					\
 	 add	r12, r4;				\
 .Lfail0:						\
-	bra	0f;					\
-	 nop;						\
+	/* Unreachable.	 */				\
 	.align	2;					\
 .Lgot:							\
 	.long	_GLOBAL_OFFSET_TABLE_;			\
 .Lstr:							\
 	.long	longjmp_msg@GOTOFF;			\
 .Lfail:							\
-	.long	__GI___fortify_fail@PLT-(.Lfail0-.);	\
-0:
+	.long	__GI___fortify_fail@PLT-(.Lfail0-.);
 #else
 # define CALL_FAIL \
 	mov.l	.Lfail, r1;				\
 	mov.l	.Lstr, r4;				\
 	jsr	@r1;					\
 	 nop;						\
-	bra	0f;					\
-	 nop;						\
+	/* Unreachable.	 */				\
 	.align	2;					\
 .Lstr:							\
 	.long	longjmp_msg;				\
 .Lfail:							\
-	.long	__fortify_fail;				\
-0:
+	.long	__fortify_fail;
 #endif
 
 #define CHECK_SP(reg) \