All of lore.kernel.org
 help / color / mirror / Atom feed
From: max@stro.at (maximilian attems)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] [klibc] arm: use bx on thumb2 v3
Date: Tue, 17 May 2011 18:17:10 +0200	[thread overview]
Message-ID: <1305649031-15622-1-git-send-email-max@stro.at> (raw)

Use klibc way to define a system dependent preprocessor
definition: disabled by default and enabled for newer arm.

Based on a patch by vorlon that got tested on his beagleboard,
should be functional equivalent.
Fixes: https://bugs.launchpad.net/ubuntu/+source/klibc/+bug/527720

Cc: Steve Langasek <steve.langasek@canonical.com>
Cc: Kirill A. Shutemov <kirill@shutemov.name>
Cc: Michael Tokarev <mjt@tls.msk.ru>
Signed-off-by: maximilian attems <max@stro.at>
---
 usr/include/arch/arm/klibc/archconfig.h |    6 +++++-
 usr/include/arch/arm/klibc/asmmacros.h  |    6 ++++++
 usr/include/klibc/sysconfig.h           |    9 +++++++++
 usr/klibc/arch/arm/setjmp.S             |   10 ++++++----
 usr/klibc/arch/arm/vfork.S              |    5 +++--
 5 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/usr/include/arch/arm/klibc/archconfig.h b/usr/include/arch/arm/klibc/archconfig.h
index e34bdb7..36e9ab5 100644
--- a/usr/include/arch/arm/klibc/archconfig.h
+++ b/usr/include/arch/arm/klibc/archconfig.h
@@ -9,6 +9,10 @@
 #ifndef _KLIBC_ARCHCONFIG_H
 #define _KLIBC_ARCHCONFIG_H
 
-/* All defaults */
+/* newer arm arch support bx instruction */
+#if (!defined(__ARM_ARCH_2__) && !defined(__ARM_ARCH_3__) \
+	&& !defined(__ARM_ARCH_3M__) && !defined(__ARM_ARCH_4__))
+# define _KLIBC_ARM_USE_BX 1
+#endif
 
 #endif				/* _KLIBC_ARCHCONFIG_H */
diff --git a/usr/include/arch/arm/klibc/asmmacros.h b/usr/include/arch/arm/klibc/asmmacros.h
index 8a21c94..45bea0e 100644
--- a/usr/include/arch/arm/klibc/asmmacros.h
+++ b/usr/include/arch/arm/klibc/asmmacros.h
@@ -27,4 +27,10 @@
 	 (((x) & ~0xf000000f) == 0) || \
 	 (((x) & ~0xc000003f) == 0))
 
+#if _KLIBC_ARM_USE_BX
+# define BX(x) bx	##x
+#else
+# define BX(x) mov	pc, ##x
+#endif
+
 #endif /* _KLIBC_ASMMACROS_H */
diff --git a/usr/include/klibc/sysconfig.h b/usr/include/klibc/sysconfig.h
index bf1daf5..a1c37fd 100644
--- a/usr/include/klibc/sysconfig.h
+++ b/usr/include/klibc/sysconfig.h
@@ -196,4 +196,13 @@
 # define _KLIBC_SYS_SOCKETCALL 0
 #endif
 
+/*
+ * _KLIBC_ARM_USE_BX
+ *
+ *	This arm architecture supports bx instruction.
+ */
+#ifndef _KLIBC_ARM_USE_BX
+# define _KLIBC_ARM_USE_BX 0
+#endif
+
 #endif /* _KLIBC_SYSCONFIG_H */
diff --git a/usr/klibc/arch/arm/setjmp.S b/usr/klibc/arch/arm/setjmp.S
index 2232458..6018bda 100644
--- a/usr/klibc/arch/arm/setjmp.S
+++ b/usr/klibc/arch/arm/setjmp.S
@@ -4,6 +4,8 @@
 # setjmp/longjmp for the ARM architecture
 #
 
+#include <klibc/asmmacros.h>
+
 #ifndef	__thumb__
 
 #
@@ -29,7 +31,7 @@
 setjmp:
 	stmia	r0, {r4, r5, r6, r7, r8, r9, r10, fp, sp, lr}
 	mov	r0, #0
-	mov	pc, lr
+	BX(lr)
 	.size setjmp,.-setjmp
 
 	.text
@@ -39,7 +41,7 @@ setjmp:
 longjmp:
 	ldmia	r0, {r4, r5, r6, r7, r8, r9, r10, fp, sp, lr}
 	mov	r0, r1
-	mov	pc, lr
+	BX(lr)
 	.size longjmp,.-longjmp
 
 #else /* __thumb__ */
@@ -75,7 +77,7 @@ setjmp:
 	mov	r7, sp
 	stmia	r0!, {r3, r4, r5, r6, r7}
 	mov	r0, #0
-	mov	pc, lr
+	BX(lr)
 	.size setjmp,.-setjmp
 
 	.text
@@ -96,7 +98,7 @@ longjmp:
 	mov	r0, r1
 	bne	1f
 	mov	r0, #1
-1:	mov	pc, r3
+1:	BX(r3)
 	.size longjmp,.-longjmp
 
 #endif /* __thumb__ */
diff --git a/usr/klibc/arch/arm/vfork.S b/usr/klibc/arch/arm/vfork.S
index 3b2d9f7..7130b65 100644
--- a/usr/klibc/arch/arm/vfork.S
+++ b/usr/klibc/arch/arm/vfork.S
@@ -4,6 +4,7 @@
  * vfork - nasty system call which must not use the stack.
  */
 
+#include <klibc/asmmacros.h>
 #include <asm/unistd.h>
 
 	.type	vfork,#function
@@ -25,7 +26,7 @@ vfork:
         ldrcs	r3, 1f
         mvncs	r0, #0
         strcs	r2, [r3]
-	mov	pc, lr
+	BX(lr)
 
 	.balign 4
 1:
@@ -49,7 +50,7 @@ vfork:
 	str	r2, [r1]
 	neg	r0, r0
 1:
-	mov	pc, lr
+	BX(lr)
 
 	.balign	4
 2:
-- 
1.7.2.5

             reply	other threads:[~2011-05-17 16:17 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-17 16:17 maximilian attems [this message]
2011-05-17 16:17 ` [PATCH] [klibc] arm: no usage of ARM_VALID_IMM() anymore maximilian attems
2011-05-17 18:10 ` [PATCH] [klibc] arm: use bx on thumb2 v3 Dave Martin
2011-05-17 20:44   ` maximilian attems

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1305649031-15622-1-git-send-email-max@stro.at \
    --to=max@stro.at \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.