All of lore.kernel.org
 help / color / mirror / Atom feed
From: rabin@rab.in (Rabin Vincent)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv2 5/6] jump label: detect %c support for ARM
Date: Wed, 22 Feb 2012 19:02:40 +0530	[thread overview]
Message-ID: <20120222133240.GA9031@debian> (raw)
In-Reply-To: <20120220172158.GI26840@n2100.arm.linux.org.uk>

On Mon, Feb 20, 2012 at 05:21:58PM +0000, Russell King - ARM Linux wrote:
> On Sat, Jan 28, 2012 at 07:05:24PM +0530, Rabin Vincent wrote:
> > Some versions of ARM GCC which do support asm goto, have problems
> > handling the the %c specifier.  Since we need the %c to support jump
> > labels on ARM, detect that too in the asm goto detection script to avoid
> > build errors with these versions.
> 
> I'm not sure how this detects properly working %c support.  %c support
> has been rather flakey on ARM for some time, I'm not sure which version
> of gcc was fixed for it.

Right, it only detects that %c on a sym+offset doesn't ICE, which was
what it had been doing since atleast version 4.3.

The assumption was that since asm goto was only added in ~4.5, all older
compilers (regardless of their state of %c support) would choke (as we
want them to) on the existing second half of this script.

I have added the change you suggested below.

> 
> > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48637
> > 
> > Cc: Jason Baron <jbaron@redhat.com>
> > Cc: linux-kernel at vger.kernel.org
> > Signed-off-by: Rabin Vincent <rabin@rab.in>
> > ---
> >  scripts/gcc-goto.sh |   18 +++++++++++++++++-
> >  1 files changed, 17 insertions(+), 1 deletions(-)
> > 
> > diff --git a/scripts/gcc-goto.sh b/scripts/gcc-goto.sh
> > index 98cffcb..9b744de 100644
> > --- a/scripts/gcc-goto.sh
> > +++ b/scripts/gcc-goto.sh
> > @@ -2,4 +2,20 @@
> >  # Test for gcc 'asm goto' support
> >  # Copyright (C) 2010, Jason Baron <jbaron@redhat.com>
> >  
> > -echo "int main(void) { entry: asm goto (\"\"::::entry); return 0; }" | $@ -x c - -c -o /dev/null >/dev/null 2>&1 && echo "y"
> > +cat << "END" | $@ -x c - -c -o /dev/null >/dev/null 2>&1 && echo "y"
> > +int main(void)
> > +{
> > +#ifdef __arm__
> > +	/*
> > +	 * Not related to asm goto, but used by jump label
> > +	 * and broken on some ARM GCC versions (see GCC Bug 48637).
> > +	 */
> > +	static struct { int dummy; int state; } tp;
> > +	asm ("@ %c0" :: "i" (&tp.state));
> 
> While this detects the presence of the ICE, previous compilers included
> the '#' before the constant, which leads to problems.  I think a better
> check would be:
> 	asm(".long %c0" :: "i" (&tp.state));
> 
> to make sure that it spits out something purely numeric, rather than
> something prefixed with a '#'.

OK, done:

8<----------------
>From f3a3bd64f72720def5cfbaedf6ff83ca54f1644b Mon Sep 17 00:00:00 2001
From: Rabin Vincent <rabin@rab.in>
Date: Wed, 23 Nov 2011 20:05:09 +0530
Subject: [PATCH] jump label: detect %c support for ARM

Some versions of ARM GCC which do support asm goto, do not support
the %c specifier.  Since we need the %c to support jump labels
on ARM, detect that too in the asm goto detection script to avoid
build errors with these versions.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48637

Acked-by: Jason Baron <jbaron@redhat.com>
Signed-off-by: Rabin Vincent <rabin@rab.in>
---
 scripts/gcc-goto.sh |   18 +++++++++++++++++-
 1 files changed, 17 insertions(+), 1 deletions(-)

diff --git a/scripts/gcc-goto.sh b/scripts/gcc-goto.sh
index 98cffcb..a2af2e8 100644
--- a/scripts/gcc-goto.sh
+++ b/scripts/gcc-goto.sh
@@ -2,4 +2,20 @@
 # Test for gcc 'asm goto' support
 # Copyright (C) 2010, Jason Baron <jbaron@redhat.com>
 
-echo "int main(void) { entry: asm goto (\"\"::::entry); return 0; }" | $@ -x c - -c -o /dev/null >/dev/null 2>&1 && echo "y"
+cat << "END" | $@ -x c - -c -o /dev/null >/dev/null 2>&1 && echo "y"
+int main(void)
+{
+#ifdef __arm__
+	/*
+	 * Not related to asm goto, but used by jump label
+	 * and broken on some ARM GCC versions (see GCC Bug 48637).
+	 */
+	static struct { int dummy; int state; } tp;
+	asm (".long %c0" :: "i" (&tp.state));
+#endif
+
+entry:
+	asm goto ("" :::: entry);
+	return 0;
+}
+END
-- 
1.7.9

WARNING: multiple messages have this Message-ID (diff)
From: Rabin Vincent <rabin@rab.in>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: linux-arm-kernel@lists.infradead.org,
	Jason Baron <jbaron@redhat.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCHv2 5/6] jump label: detect %c support for ARM
Date: Wed, 22 Feb 2012 19:02:40 +0530	[thread overview]
Message-ID: <20120222133240.GA9031@debian> (raw)
In-Reply-To: <20120220172158.GI26840@n2100.arm.linux.org.uk>

On Mon, Feb 20, 2012 at 05:21:58PM +0000, Russell King - ARM Linux wrote:
> On Sat, Jan 28, 2012 at 07:05:24PM +0530, Rabin Vincent wrote:
> > Some versions of ARM GCC which do support asm goto, have problems
> > handling the the %c specifier.  Since we need the %c to support jump
> > labels on ARM, detect that too in the asm goto detection script to avoid
> > build errors with these versions.
> 
> I'm not sure how this detects properly working %c support.  %c support
> has been rather flakey on ARM for some time, I'm not sure which version
> of gcc was fixed for it.

Right, it only detects that %c on a sym+offset doesn't ICE, which was
what it had been doing since atleast version 4.3.

The assumption was that since asm goto was only added in ~4.5, all older
compilers (regardless of their state of %c support) would choke (as we
want them to) on the existing second half of this script.

I have added the change you suggested below.

> 
> > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48637
> > 
> > Cc: Jason Baron <jbaron@redhat.com>
> > Cc: linux-kernel@vger.kernel.org
> > Signed-off-by: Rabin Vincent <rabin@rab.in>
> > ---
> >  scripts/gcc-goto.sh |   18 +++++++++++++++++-
> >  1 files changed, 17 insertions(+), 1 deletions(-)
> > 
> > diff --git a/scripts/gcc-goto.sh b/scripts/gcc-goto.sh
> > index 98cffcb..9b744de 100644
> > --- a/scripts/gcc-goto.sh
> > +++ b/scripts/gcc-goto.sh
> > @@ -2,4 +2,20 @@
> >  # Test for gcc 'asm goto' support
> >  # Copyright (C) 2010, Jason Baron <jbaron@redhat.com>
> >  
> > -echo "int main(void) { entry: asm goto (\"\"::::entry); return 0; }" | $@ -x c - -c -o /dev/null >/dev/null 2>&1 && echo "y"
> > +cat << "END" | $@ -x c - -c -o /dev/null >/dev/null 2>&1 && echo "y"
> > +int main(void)
> > +{
> > +#ifdef __arm__
> > +	/*
> > +	 * Not related to asm goto, but used by jump label
> > +	 * and broken on some ARM GCC versions (see GCC Bug 48637).
> > +	 */
> > +	static struct { int dummy; int state; } tp;
> > +	asm ("@ %c0" :: "i" (&tp.state));
> 
> While this detects the presence of the ICE, previous compilers included
> the '#' before the constant, which leads to problems.  I think a better
> check would be:
> 	asm(".long %c0" :: "i" (&tp.state));
> 
> to make sure that it spits out something purely numeric, rather than
> something prefixed with a '#'.

OK, done:

8<----------------
>From f3a3bd64f72720def5cfbaedf6ff83ca54f1644b Mon Sep 17 00:00:00 2001
From: Rabin Vincent <rabin@rab.in>
Date: Wed, 23 Nov 2011 20:05:09 +0530
Subject: [PATCH] jump label: detect %c support for ARM

Some versions of ARM GCC which do support asm goto, do not support
the %c specifier.  Since we need the %c to support jump labels
on ARM, detect that too in the asm goto detection script to avoid
build errors with these versions.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48637

Acked-by: Jason Baron <jbaron@redhat.com>
Signed-off-by: Rabin Vincent <rabin@rab.in>
---
 scripts/gcc-goto.sh |   18 +++++++++++++++++-
 1 files changed, 17 insertions(+), 1 deletions(-)

diff --git a/scripts/gcc-goto.sh b/scripts/gcc-goto.sh
index 98cffcb..a2af2e8 100644
--- a/scripts/gcc-goto.sh
+++ b/scripts/gcc-goto.sh
@@ -2,4 +2,20 @@
 # Test for gcc 'asm goto' support
 # Copyright (C) 2010, Jason Baron <jbaron@redhat.com>
 
-echo "int main(void) { entry: asm goto (\"\"::::entry); return 0; }" | $@ -x c - -c -o /dev/null >/dev/null 2>&1 && echo "y"
+cat << "END" | $@ -x c - -c -o /dev/null >/dev/null 2>&1 && echo "y"
+int main(void)
+{
+#ifdef __arm__
+	/*
+	 * Not related to asm goto, but used by jump label
+	 * and broken on some ARM GCC versions (see GCC Bug 48637).
+	 */
+	static struct { int dummy; int state; } tp;
+	asm (".long %c0" :: "i" (&tp.state));
+#endif
+
+entry:
+	asm goto ("" :::: entry);
+	return 0;
+}
+END
-- 
1.7.9



  reply	other threads:[~2012-02-22 13:32 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-28 13:35 [PATCHv2 0/6] ARM: jump label support Rabin Vincent
2012-01-28 13:35 ` [PATCHv2 1/6] ARM: ftrace: remove useless memory checks Rabin Vincent
2012-02-20 16:16   ` Russell King - ARM Linux
2012-02-22 14:13     ` Rabin Vincent
2012-02-22 21:28       ` Russell King - ARM Linux
2012-02-24 16:48         ` Rabin Vincent
2012-02-27 11:21           ` Russell King - ARM Linux
2012-01-28 13:35 ` [PATCHv2 2/6] ARM: ftrace: use canonical Thumb-2 wide instruction format Rabin Vincent
2012-01-30 16:54   ` Dave Martin
2012-01-28 13:35 ` [PATCHv2 3/6] ARM: extract out insn generation code from ftrace Rabin Vincent
2012-01-28 13:35 ` [PATCHv2 4/6] ARM: extract out code patch function from kprobes Rabin Vincent
2012-01-30 17:00   ` Dave Martin
2012-02-07 16:07     ` [PATCHv3] " Rabin Vincent
2012-01-31 18:32   ` [PATCHv2 4/6] " Tixy
2012-01-28 13:35 ` [PATCHv2 5/6] jump label: detect %c support for ARM Rabin Vincent
2012-01-28 13:35   ` Rabin Vincent
2012-02-07 16:18   ` Rabin Vincent
2012-02-07 16:18     ` Rabin Vincent
2012-02-07 18:04     ` Jason Baron
2012-02-07 18:04       ` Jason Baron
2012-02-20 17:21   ` Russell King - ARM Linux
2012-02-20 17:21     ` Russell King - ARM Linux
2012-02-22 13:32     ` Rabin Vincent [this message]
2012-02-22 13:32       ` Rabin Vincent
2012-01-28 13:35 ` [PATCHv2 6/6] ARM: add jump label support Rabin Vincent
2012-02-15 17:00   ` [PATCHv3] " Rabin Vincent
2012-02-29 15:24     ` Rabin Vincent
2012-02-29 15:47       ` Jason Baron
2012-01-31  8:23 ` [PATCHv2 0/6] ARM: " Jon Medhurst (Tixy)
2012-01-31 11:11   ` Dave Martin

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=20120222133240.GA9031@debian \
    --to=rabin@rab.in \
    --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.